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 -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.