Skip to content

Document template · eu.compliance.whistleblowing_directive_report

Whistleblowing Annual Report

  • Render-verified
  • Official document
  • Version 1.0.0

Annual report on the operation of the internal reporting channel established under Directive (EU) 2019/1937 on the protection of persons who report breaches of Union law. Legal entities in the private sector with 50 or more workers (Art. 8(3)) and public-sector entities (Art. 8(1), Art. 8(9) — Member States may exempt municipalities below 10 000 inhabitants or entities below 50 workers) are required to establish internal reporting channels, follow up on reports, provide acknowledgement within 7 days (Art. 9(1)(b)) and feedback within 3 months (Art. 9(1)(f)), and keep records of every report (Art. 18(1)). This template produces the aggregate statistics and procedural review summary that controllers customarily publish annually to evidence compliance with Articles 8, 9, 17 and 18 of the Directive and the corresponding national transposition.

JSON Schema

Fields in this template

Data sent to the API is validated against the template’s JSON Schema before anything is rendered. This template defines 35 fields:

Field Required Type Description
entity Required object Legal entity that operates the internal reporting channel (Art. 8(1) Directive (EU) 2019/1937).
entity.name Required string
entity.legal_form Required string
entity.country_code Required string ISO 3166-1 alpha-2 code of the Member State in which the entity is established.
entity.employee_count Required integer Number of workers at the end of the reporting period. Art. 8(3) applies the internal-channel obligation from 50 workers upward; Member Stat…
entity.registered_address Optional string
period Required object Reporting period, typically the calendar year.
period.start_date Required date
period.end_date Required date
reporting_channels Required array Internal reporting channels made available to reporting persons (Art. 9(2) Directive (EU) 2019/1937). Channels must allow reporting in writ…
officer Required object Impartial person or department designated under Art. 8(5) Directive (EU) 2019/1937 to receive reports, maintain communication with the repo…
officer.name Required string
officer.title Required string
officer.contact_email Required string
statistics Required object Aggregate statistics on reports received and handled during the period. Records maintained per Art. 18(1) Directive (EU) 2019/1937.
statistics.reports_received Required integer
statistics.reports_by_channel Required array of object Breakdown of reports by channel type. Counts should sum to reports_received.
statistics.reports_by_category Required array of object Breakdown by material scope category (Art. 2(1) Directive (EU) 2019/1937).
statistics.reports_anonymous Required integer Reports submitted anonymously (Art. 6(2) Directive (EU) 2019/1937).
statistics.reports_external_authority_concurrent Required integer Reports for which the reporting person also used the external channel under Art. 10 Directive (EU) 2019/1937.
statistics.acknowledged_within_7_days Required integer Reports acknowledged within 7 days as required by Art. 9(1)(b) Directive (EU) 2019/1937.
statistics.feedback_within_3_months Required integer Reports for which feedback was provided within 3 months as required by Art. 9(1)(f) Directive (EU) 2019/1937.
statistics.investigations_opened Required integer
statistics.investigations_closed Required integer
statistics.investigations_pending_eoy Required integer
statistics.outcomes Required array of object Outcomes of investigations closed during the period.
retaliation_protection Required object Measures adopted to prohibit and address retaliation against reporting persons (Chapter VI, in particular Art. 19 Directive (EU) 2019/1937).
retaliation_protection.incidents_alleged Required integer
retaliation_protection.incidents_confirmed Required integer
retaliation_protection.measures_taken Required array of string

+5 more fields — the full JSON Schema is available in the dashboard and via the API.

POST /render

Generate it

One POST /render call: send your JSON, get the finished PDF back. Or skip the JSON entirely and describe the document in plain language on chut.app.

curl
curl -X POST https://api.papii.eu/render \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "template": "eu.compliance.whistleblowing_directive_report",
    "data": { ... },
    "options": {"language": "en"}
  }' -o whistleblowing-directive-report.pdf

Frequently asked questions

What is “Whistleblowing Annual Report”?

Annual report on the operation of the internal reporting channel established under Directive (EU) 2019/1937 on the protection of persons who report breaches of Union law. Legal entities in the private sector with 50 or more workers (Art. 8(3)) and public-sector entities (Art. 8(1), Art. 8(9) — Member States may exempt municipalities below 10 000 inhabitants or entities below 50 workers) are required to establish internal reporting channels, follow up on reports, provide acknowledgement within 7 days (Art. 9(1)(b)) and feedback within 3 months (Art. 9(1)(f)), and keep records of every report (Art. 18(1)). This template produces the aggregate statistics and procedural review summary that controllers customarily publish annually to evidence compliance with Articles 8, 9, 17 and 18 of the Directive and the corresponding national transposition. On papii this document is available as template eu.compliance.whistleblowing_directive_report: a JSON Schema plus a deterministic PDF renderer, so the same data always produces the same document.

Can I generate a Whistleblowing Annual Report with AI?

Yes. chut.app — the AI back office papii powers — fills this template from a plain-language description: you describe the document in one sentence, the AI structures the data, papii validates it against the schema and renders the PDF. Developers can also call the papii API directly with structured JSON.

Is the Whistleblowing Annual Report template legally compliant?

This template is render-verified: its schema, sample data and PDF output are automatically tested on every release. It is published with status “ready”, meaning it has not yet been through papii’s final legal review. Where it references specific legislation, that is stated in the template description — always have a professional check documents with legal effect before relying on them.