{"$schema":"https://json-schema.org/draft/2020-12/schema","title":"GDPR Consent Form (Art. 7)","description":"Freely given, specific, informed and unambiguous consent per Art. 4(11) and Art. 7 GDPR. Each purpose is opted in separately (granularity). The signed form is the controller's record that consent was given — keep it for as long as the consent remains active plus the limitation period.","type":"object","required":["controller","purposes","data_subject"],"additionalProperties":false,"properties":{"form_reference":{"type":"string"},"issued_on":{"type":"string","format":"date"},"controller":{"type":"object","required":["name","contact_email"],"additionalProperties":false,"properties":{"name":{"type":"string","minLength":1},"address":{"type":"string"},"contact_email":{"type":"string","format":"email"},"dpo_email":{"type":"string","format":"email"}}},"preamble":{"type":"string","description":"Optional intro paragraph in controller's voice."},"purposes":{"type":"array","minItems":1,"items":{"type":"object","required":["id","description"],"additionalProperties":false,"properties":{"id":{"type":"string"},"description":{"type":"string","minLength":1},"data_categories":{"type":"array","items":{"type":"string"}},"recipients":{"type":"array","items":{"type":"string"}},"retention":{"type":"string"},"international_transfers":{"type":"string"},"required":{"type":"boolean","default":false,"description":"Flag consents that are required for service delivery. Note: 'required consent' is usually the wrong legal basis — use contract instead. This field exists to catch authoring mistakes, not to justify coercion."}}}},"data_subject":{"type":"object","required":["name"],"additionalProperties":false,"properties":{"name":{"type":"string","minLength":1},"email":{"type":"string","format":"email"},"reference":{"type":"string","description":"Optional internal reference (customer ID, employee ID, ...)."}}},"withdrawal_channel":{"type":"string","description":"How to withdraw consent (URL, email). Defaults to the controller contact email."}}}