Anti-Doping Compliance
At a glance
End-to-end WADA-aligned anti-doping operations covering Registered Testing Pool whereabouts with ADAMS sync, in- and out-of-competition testing missions, sample chain-of-custody, TUE intake, and full Anti-Doping Rule Violation case management. Sanctions flow directly into the disciplinary engine and onto the licence record, blocking competition entry, with every event captured in an immutable audit trail.
How it works
Anti-Doping Compliance is built around the WADA Code lifecycle and synchronises with ADAMS for Registered Testing Pool (RTP) athletes. Each athlete added to the RTP receives a whereabouts profile with quarterly filing windows, daily 60-minute slots, overnight address, training venues, and competition schedule; missed filings and missed tests are scored against the three-strike rule and surfaced as compliance flags. Testing officers schedule both in-competition (IC) and out-of-competition (OOC) missions through the testing module, which generates randomised athlete selections, notifies DCOs, and issues unique sample collection IDs.
When a sample is collected, the chain-of-custody ledger records every transfer, seal number, courier handover, and laboratory acknowledgement; A- and B-sample records remain linked. Adverse Analytical Findings (AAF) trigger a Result Management workflow: notification to the athlete, B-sample request window, provisional suspension toggle, and case file assembly. TUE applications enter the same compliance graph so reviewers can verify whether a finding is covered by an active exemption.
Confirmed Anti-Doping Rule Violations (ADRV) are routed through case management with hearing scheduling, sanction proposal, athlete response, and final decision; sanctions automatically post to the disciplinary system and flip the licence status to suspended for the prescribed period, blocking entry into competitions and reservations. Education tracking records completion of WADA ADEL modules, federation seminars, and coach certifications, with required-module enforcement before national-team selection. The prohibited substance list is mirrored from WADA's annual publication with effective-from dates, monitoring-program substances, and athlete-search lookup.
Every record — whereabouts edit, sample movement, TUE decision, sanction change — is written to an append-only audit trail with actor, timestamp, IP, and reason code, satisfying WADA ISRM evidentiary requirements.
Key capabilities
- ADAMS-synchronised whereabouts filing with three-strike monitoring
- Randomised IC/OOC test mission planning with DCO assignment
- Sample chain-of-custody ledger with A/B sample linkage and seal tracking
- Result Management workflow from AAF notification through sanction issuance
- ADRV case management with hearing, decision, and CAS-appeal routing
- Automatic licence suspension and disciplinary system integration on sanction
- WADA Prohibited List mirror with effective-dating and athlete lookup
In practice
Sara is a national champion placed in the federation's RTP. Each quarter she opens her athlete app, files her whereabouts in ADAMS-compatible format, and sets her 06:00 daily slot at her home address. A DCO arrives unannounced at 06:12, scans her licence QR, and the platform opens a sample collection mission tied to her file.
The DCO records partial codes for the A- and B-bottles, photographs the seals, and logs courier handover to the WADA-accredited lab. Three weeks later the lab returns an AAF for a beta-2 agonist. The Result Management coordinator opens the case, sees Sara has an active TUE for inhaled salbutamol, validates dose limits, and closes the file as no-violation.
Sara is notified through her secure inbox, and the audit trail logs every step for WADA review.
Features in this subsystem
10| ID | Status | Features |
|---|---|---|
| F12.01.01 | Shipped | WADA code compliance tracking ✅ PL-F1201a ✅ PL-F1201a |
| F12.01.02 | Shipped | Whereabouts system for elite players (ADAMS integration) 🔁 REBUILT (backend) — D-MED 5241a541.m-6 t-1 (/v1/me/whereabouts + …/{id} + …:submit självguardade på identiteten; /v1/antidoping/whereabouts med ADRESS-PHI-snittet (slots_access sägs alltid, nycklarna strukturellt frånvarande utan privacy.medical.read, färsk auth + EN phi_read-rad för tredje part, listsvaret kan inte BÄRA en adress); /v1/antidoping/whereabouts-failures med …/notify (pipens MÄTTA utfall) + …/review; GET /v1/players/{id}/whereabouts/failure-count — räknaren är EN ren funktion (accepted is distinct from true, A-4) som också driver pliktkontexten, översikten, compliance-kortet och svepet; jobben whereabouts_threshold_sweep (flaggkällans ENDA skrivare, single-fire som partiellt unikt INDEX) och whereabouts_quarter_reminder (pipen är single-fire-vakten, 14 d/3 d). A-2: inget tredje statusord updated; A-3: ingen DELETE/soft-delete; Icke-mål 3: ADAMS-fälten har ingen skrivare. App-vyn och adminfliken levereras i samma milstolpes t-2. ✅ PL-F1201a |
| F12.01.03 | Shipped | Testing schedule management 🔁 REBUILT (backend) — D-MED 5241a541.m-4 t-1 (/v1/antidoping/testing-pools + …/summary, /v1/antidoping/testing-schedule med DCO-livscykelns tre handlingar, källstatus i själva skrivningen, overdue HÄRLETT och aldrig lagrat, DCO-XOR i DDL:en; A-7: ingen completed_test_id förrän m-5, A-8: ingen radering — removed/retired ÄR avslutet, A-9: ingen ny DCO-capability). Admin-/appytorna i m-4 t-2 ✅ PL-F1201a |
| F12.01.04 | Shipped | Test result recording (in/out of competition) 🔁 REBUILT (backend) — D-MED 5241a541.m-5 t-1 (/v1/antidoping/doping-tests med rättslig grund fail-closed (422 invalid_legal_basis), insamlarens XOR och bindningen mot m-4:s sample_reference i SAMMA transaktion; …/custody+…/custody-steps append-only med HÄRLETT seal_breach; …/result + …/result:amend bakom MANDATSNITTET (procedurellt antidoping:manage, kliniskt privacy.medical.read + färsk auth) med SERVERBERÄKNAD TUE-kontroll; /v1/antidoping/b-sample-analyses; /v1/antidoping/result-notifications genom husets notispipe med MÄTT dispatch_outcome. A-2: invalid som fjärde resultatkod, A-4: not_requested är frånvaron av en rad, A-7: kedjelåset är resultatets, A-10: kvittensen är organisationens bokföring, A-11: ingen /v1/me/-rutt). Adminfliken i m-5 t-2 ✅ PL-F1201a |
| F12.01.05 | Shipped | Therapeutic Use Exemption (TUE) management ✅ PL-F1201a ✅ PL-F1201a |
| F12.01.06 | Shipped | Anti-doping violation case management 🔁 DELVIS REBUILT (KROKEN, backend) — D-MED 5241a541.m-5 t-1 (/v1/antidoping/adrv-flags + …:link-case + …:close): flaggan reses av sömmen i SAMMA transaktion som beslutet (adverse_analytical, b_sample_confirmed) eller för hand (manual), och SINGLE-FIRE är ett partiellt unikt INDEX — en rättelse eller ett omtag kan aldrig resa en andra flagga för samma (prov, källa). Länkningen är ett UPPSLAG i samma förbund (422 discipline_case_not_found) — D-MED skriver ALDRIG i discipline_*; case-spinen (bevislager, förhandling, överklagan, sanktion, cross-tenant-suspension) ägs av D-DISCIPLINE. A-9: flaggan reses ÄVEN när en TUE täcker fyndet; A-5: whereabouts_threshold fick sin ENDA skrivare i 5241a541.m-6 (jobbet whereabouts_threshold_sweep), med en EGEN single-fire-invariant — ett partiellt unikt index (tenant_id, player_user_id) where source='whereabouts_threshold' and status <> 'closed' ✅ PL-F1201b |
| F12.01.07 | Shipped | Sanction integration with disciplinary system ✅ PL-F1201b ✅ PL-F1201b |
| F12.01.08 | Shipped | Anti-doping education tracking 🔁 REBUILT (grinden + spegeln, backend) — D-MED 5241a541.m-4 t-1 (clean_sport_education_status, …:attest/…:revoke, GET /v1/me/antidoping/clean-sport-education, GET /v1/players/{id}/eligibility/clean-sport; fail-closed RTP-grind ⇒ 409 clean_sport_education_incomplete). D-EDU äger modulen och intyget — D-MED konsumerar completion-eventet idempotent på (tenant_id, source_event_key) och författar aldrig en completion ✅ PL-F1201b |
| F12.01.09 | Shipped | Prohibited substance list reference ✅ PL-F1201b ✅ PL-F1201b |
| F12.01.10 | Shipped | Full audit trail on all doping records ✅ PL-F1201b ✅ PL-F1201b |
Stakeholders who need this subsystem
Surfaces in 4 stakeholder analyses