Skip to main content
Petanque Life

Federation Reporting & Compliance

F16.06 9 features In progress

At a glance

Federation-grade reporting pipeline driving every upward and outward report a federation owes: configurable templates per federation level, automated KPI generation from live system data, deadline tracking with reminders and escalation, upward aggregation up the OrgNode chain, government and sponsor reports, audit-ready trails with revision tracking and a GDPR Article 33/34 data-breach notification workflow with 72-hour timeline tracking.

How it works

Reports are described as ReportTemplate documents with configurable sections, deadlines and frequency. Each template maps section types — membership, competitions, financial, umpires, sponsors, government — to data extractors that pull live KPIs out of the platform on generation. Output is a GeneratedReport with typed sections so the same data can be rendered as PDF, exported as Excel or fed into a downstream API, and every revision is tracked so an auditor can reconstruct exactly what was submitted on what date.

Deadline tracking runs as a scheduled job. ReportDeadline rows define the cadence (annual, quarterly, on-demand) and the recipient federation level; the reminder workflow nudges responsible users at configurable intervals before due, escalates to the parent OrgNode if the deadline slips, and logs every reminder in audit. The aggregation endpoint stitches child reports into parent reports — club totals roll into national, national into continental, continental into FIPJP — using the OrgNode hierarchy of the calling tenant, so a national federation does not need to handcraft its FIPJP submission from scratch.

Government reporting maps onto national-sport-council schemas (for example Riksidrottsförbundet's required fields in Sweden) through a GovernmentReportSection type that knows the destination format. Sponsor reporting consolidates participation data, exposure metrics — impressions, clicks, declared value — into a SponsorSection that can be exported to a sponsor portal or emailed as a branded PDF. Audit-ready data is enforced through an is_audit_ready flag on reports plus revision tracking on every supporting document; if the underlying data changes after submission the report regeneration shows the delta. The compliance checklist automatically scores each tournament against required criteria (jury seated, insurance valid, medical certificate present, anti-doping notification sent) with action items for anything missing.

The GDPR Article 33/34 data-breach workflow is a separate but related lifecycle: a DataBreachNotification record opens at incident detection with a 72-hour countdown, requires affected-records count, risk classification and remediation plan, and emits regulator-ready exports (Datainspektionen / CNIL / equivalent) plus affected-data-subject notifications when the risk threshold is met.

Key capabilities

  • Configurable ReportTemplate per federation level with sections, deadlines and frequency
  • Automated KPI generation across membership, competitions, financial, umpires and sponsors
  • Deadline tracking with reminder and escalation workflow
  • Upward aggregation up the OrgNode chain (club → nation → continent → FIPJP)
  • Government-report sections compatible with national sport-council schemas
  • Sponsor reporting with participation data, impressions, clicks and declared value
  • Audit-ready reports with is_audit_ready flag and revision tracking
  • Compliance checklist automation with auto-scoring and action items
  • GDPR Article 33/34 data-breach notification workflow with 72-hour timeline tracking

In practice

A national federation's general secretary opens the reporting console at fiscal year-end. The annual FIPJP report is auto-generated from live data — 12 437 active licenses, 1 248 sanctioned competitions, 84 active umpires, financial summary in EUR — with every figure traceable to a source query. He reviews, marks the membership section as audit-ready, and submits upward; the aggregation endpoint instantly rolls his nation's totals into FIPJP's continental view.

A week later a misconfigured backup exposes 412 email addresses. He opens a DataBreachNotification, the 72-hour clock starts, the system pre-fills the regulator export and queues notifications to the affected data subjects — submitted to Datainspektionen at hour 38, well inside the deadline.

Features in this subsystem

9
ID Status Features
F16.06.01 Shipped Mandatory report templates per federation level — förbundets EGET mallregister (report_template, tenant-skopad konfig-data, CAS på version): nivåparet from_level → to_target (D-2), frekvens, fristregel, påminnelsefönster, eskalering och sektioner; den källbelagda startkatalogen (FIPJP-baslinje + SE/FR/NO) importeras idempotent på code. Admin /forbundsrapportering sektionen *Mallar & deadlines* (tabellen, *Ny mall*, *Importera från katalogen*, detaljpanelen med *Redigera*/*Arkivera*/*Återställ*) ✅ ef7ef740.m-1 (t-1 API + seed, t-2 admin-ytan)
F16.06.02 Shipped Automated report generation from system data (revisionsfärdiga rapporter ur systemdata) — generated_report: mallbunden (ur en deadline-instans; mall, period, skyldig nod och sektioner härleds) eller egen sammanställning; talen räknas av D-DASH:s reportbuilder över EN bundle ur mallens sektioner med celler (konfig-data ur kapacitetsmatrisen, + den additiva dimensionen licences × members × license_type); D-5-grinden (fedreport:submit/manage OCH dashboard:exec); :lock fryser tal/fönster/skop och renderar CSV/XLSX/PDF byte-identiskt (två renderingar jämförda, blob-porten, mätt sha256 = exportens ETag); :submit sätter instansen met genom :mark-met-sömmen i EN transaktion (met_reference = report:<id> sha256:<pdf>). Seed: utkast, låst och inlämnad rapport i SWE. Admin-ankaret *Genererade rapporter* levereras i milstolpens t-2 ✅ ef7ef740.m-2 (t-1 API + seed + GDPR; t-2 admin-ytan #genererade)
F16.06.03 Shipped Report submission deadline tracking and reminders — deadline-instanser per skyldig nod och period (report_deadline, bara open|met lagras; staten upcoming|reminded|overdue|escalated|met HÄRLEDS av servern), :mark-met/:reopen med serverns allowed_actions, de två F1-7-svepen fedreport_deadline_reminder_tick/fedreport_deadline_escalation_tick (single-fire i DB, mottagare på mandat). Admin-ytans instanstabell med *Markera inlämnad*/*Återöppna* och djuplänken ?deadline=<id> ✅ ef7ef740.m-1 (t-1 API + svep, t-2 admin-ytan)
F16.06.04 Shipped Upward reporting (club > district > federation > CEP/FIPJP) — aggregation — kedjans tre första led plus leveransen: *ej tillämplig* (:waive, ett mänskligt beslut med skäl), mallens sammanslagningslänk och den SAMMANSLAGNA rapporten (kind='consolidated': summan av distriktens inlämnade, låsta rapporter med fryst täckning, :refresh, låset vägrar saknade bidrag utom med allow_incomplete), och LEVERANSEN till CEP/FIPJP i :submit:s egen transaktion — ett PII-fritt kuvert federation_report på en delad rad federation_report_submission i myndighetens tenant, F1-6-ärendet federation_report_acceptance (mandatet fedreport:review), partsgrindade läsrutter /v1/federation-reporting/submissions* med byte-identisk export, ersättning vid ny inlämning; saknas myndigheten som tenant ⇒ 409 fedreport_authority_tenant_missing med noll ändrade rader. INTE byggt: mottagarens egen sammanslagning kontinent → FIPJP och världsanalysen (scope-punkt 5), leverans utanför plattformen (m-4), M2M-intag/publik kontroll (D-PUBAPI). Admin-ytans fotnot och ankaret *Inlämningar* levereras i milstolpens t-3 ✅ ef7ef740.m-3 (t-1 aggregation + waived, t-2 leveransen + mottagarinkorgens API, t-3 admin-ytan)
F16.06.05 Shipped Government/sports council report generation (RF m.fl.) — myndighetsrapporten till Riksidrottsförbundet: den källbelagda fältkatalogen (SE ⇒ RF, layouten rf-arsrapport v1) importeras till förbundets fältregister; varje fält är klassat *system · attesterat · ej tillgängligt* — systemfälten (föreningar, medlemmar, medlemmar per kön och åldersgrupp, licenser, tävlingar, deltaganden, domare) räknas av rapportbyggarens kärna med spår per siffra, LOK-stödets fält, ledare och statligt stöd ATTESTERAS per period ur myndighetens portal eller lämnas tomma (*ej tillgängligt*, aldrig 0). Myndighetsblocket på den genererade rapporten fryses av låset (saknade attester vägras utom med allow_incomplete) och den officiella filen (format=authority) renderas byte-identiskt; leveransen till RF är MANUELL (ladda ner, lämna i portalen, markera inlämnad — kvittot namnger filen). Layout v1 ratificeras av ägaren mot RF:s aktuella mall; NO/FR/DK saknar katalog (⊘ ägarbeslut). Admin-ytans block och fältregister levereras i milstolpens t-2 ✅ ef7ef740.m-5 (t-1 API + seed + GDPR)
F16.06.06 Planned Sponsor reporting (participation data, exposure metrics) ⊘ D-SPONSOR — rättelse (ef7ef740.m-2, ägarflagga): m-1:s non-goal 8 och m-2:s spec lägger sponsorrapporten hos D-SPONSOR; formulärfältet *Sponsor* i admin-ytan renderas inaktivt med ägaren
F16.06.07 Shipped Audit-ready data with full trail — en låst rapport bär sitt spår per siffra (basis: källa, mått, dimension, filter, fönster, skop, input_rows, computed_at — aldrig person-id), det absoluta fönstret, skopet, källdigesten (sha256 över källdatan i skopets subträd) och renderer_version; efter låset räknas ingenting om, filerna är byte-identiska och raderas aldrig; audit fedreport.report.* på varje skrivning. En central revisionslogg med fritextsökning kräver fortfarande ett ägarbeslut (admin-ankaret *Revisionslogg* är ⊘) ✅ ef7ef740.m-2 (t-1)
F16.06.08 Shipped Compliance checklist automation (tournament had jury, insurance, etc.) — förbundets compliance-krav som konfig-data (compliance_requirement, startkatalog med källa per rad: sanktion, jury protokollförd, licensierad domare per nivå, resultat inom frist, försäkring), fem rena utvärderare ur en sluten katalog mot tävlingens egna rader i D-COMP/D-OFF (läsning, aldrig skrivning), utfallet per (tävling, krav, version) med evidens som id-referenser, säsongens HÄRLEDDA compliance-score (season-summary), timsvepet compliance_evaluation_sweep, EN åtgärd per faktaläge som F1-6-ärendet compliance_action (arrangören eller nivån ovanför) som löses av ett senare godkänt utfall, påminnelser genom D-COMM och :attest/:re-evaluate. *Försäkring bekräftad* är ett ATTESTERAT krav — automatiken är ⊘ D-INSURE. INTE byggt: disciplinära följder (D-DISCIPLINE), att dra tillbaka en attest, tenantdefinierad säsong (D-COMP). Seed-deltat och admin-sektionen *Compliance-checklistor* levereras i milstolpens t-2/t-3 ✅ ef7ef740.m-4 (t-1 motorn + API, t-2 seed, t-3 admin-ytan)
F16.06.09 Planned Data breach notification workflow (GDPR Article 33/34) ⊘ D-GDPR äger personuppgiftsincidenterna och DPO-konsolen (/gdpr); förbundsrapporteringen bygger dem inte