Youth offending and probation policy pack
Pack id youth-offending, version 1, status draft (v1: categories complete, judge-executable; clause grounding unchanged, not yet reviewed by practitioners).
Each policy pack is a YAML file. It names the sensitive details and the details that identify someone when combined, how each is generalised, what must stay on the premises, the conduct categories with their default actions (pass, annotate, regenerate or escalate), and the rules for keeping a flagged passage with a reason. This page shows the file policy-packs/youth-offending.yaml as the server reads it.
id: youth-offending
label: Youth offending and probation
version: 1
status: 'draft (v1: categories complete, judge-executable; clause grounding unchanged, not yet reviewed by practitioners)'
legal_anchors:
- PDPC Advisory Guidelines for the Social Service Sector §9.4 with the Personal Data Protection (Notification of
Data Breaches) Regulations 2021 (full name + youth-offender status deemed significant harm; 3-day notification)
- Children and Young Persons Act 1993 s.111, s.112, s.116 (section headings verified; operative text to verify)
- SASW Code of Professional Ethics 3rd Rev. (2017) A.3.d, A.7.c
- EU AI Act Annex III(6)(d) as comparator (risk of offending or re-offending)
outbound:
attributes:
- key: minor
generalise_to: age_band
- key: offence
generalise_to: category
- key: diagnosis
generalise_to: category
quasi_identifiers:
- category: SCHOOL
generalise_to: generic
- category: FACILITY
kinds:
- rehabilitation centre
generalise_to: generic
- category: ESTATE
generalise_to: region
never_leak:
- label: full name together with offence, charge or diversion status
enforced_by: [NAME, ATTR:offence]
- label: Youth Court case reference
enforced_by: [CASE_REF]
- label: juvenile rehabilitation centre or place-of-detention name
enforced_by: [FACILITY]
- label: school name
enforced_by: [SCHOOL]
- label: co-accused names
enforced_by: [NAME]
- label: medication name or dose
pattern: '(?P<span>(?:\b(?!(?:about|around|approximately|approx|total|only|and|with|takes?|taking|daily|of|at|than|over|under|up|to|dose|doses|dosage|increased|reduced|from)\b)[A-Za-z][A-Za-z-]{3,}(?:\s+(?:XR|XL|SR|CR|ER|CD|LA))?\s*\d+(?:\.\d+)?\s?(?:mg|mcg|µg|ml|units?|iu)\b|\b(?:risperidone|paliperidone|olanzapine|quetiapine|aripiprazole|clozapine|haloperidol|lithium|(?:sodium\s+)?valproate|lamotrigine|carbamazepine|levetiracetam|phenytoin|sertraline|fluoxetine|escitalopram|citalopram|paroxetine|fluvoxamine|venlafaxine|duloxetine|mirtazapine|bupropion|methylphenidate|ritalin|concerta|atomoxetine|diazepam|lorazepam|clonazepam|alprazolam|zolpidem|methadone|buprenorphine|suboxone|naltrexone|donepezil|memantine|insulin|metformin)\b(?:\s*\d+(?:\.\d+)?\s?(?:mg|mcg|µg|ml|units?|iu)\b)?|(?<=\bprescribed )(?-i:[A-Z][a-z]{3,})(?:\s*\d+(?:\.\d+)?\s?(?:mg|mcg|µg|ml|units?|iu)\b)?)(?:\s+(?:(?:once|twice|three times)\s+(?:a\s+)?(?:day|daily)|daily|nightly|at night|at bedtime|every (?:morning|night|evening)|in the (?:morning|evening)|nocte|mane|as needed|(?-i:OD|ON|BD|TDS|PRN)\\b))?)'
withhold_as: '[medication withheld]'
- label: name of a prescriber or treating clinician
enforced_by: [NAME]
- label: named gang, group or crew affiliation
pattern: '\b(?:gangs?|groups?|crews?|cliques?|secret societ(?:y|ies)|triads?|syndicates?|factions?)\s+(?:called|named|known as|calling (?:itself|themselves))\s+(?P<span>(?:the\s+)?[''"\u2018\u201c]?(?-i:[A-Z0-9][\w''\u2019-]*)(?:\s+(?-i:[A-Z0-9][\w''\u2019-]*)){0,3}[''"\u2019\u201d]?)|(?:\bthe\s+)?(?!(?-i:(?:A|An|The|His|Her|This|That|Their|Our|One|No|Any)\b))[''"\u2018\u201c]?(?-i:[A-Z0-9][\w''\u2019-]*)(?:\s+(?-i:[A-Z0-9][\w''\u2019-]*)){0,3}[''"\u2019\u201d]?\s+(?:gang|crew|clique|secret society|triad|syndicate)\b'
withhold_as: '[affiliation withheld]'
remember: true
- label: assessment or risk scores
pattern: '\b(?:WAIS(?:-IV)?|WISC(?:-V)?|IQ|MMSE|MoCA|GAF|Vineland|ABAS|full[- ]scale(?: IQ)?|functional assessment)\b[^.;\n]{0,40}?\b\d{1,3}\b'
withhold_as: '[withheld: assessment score]'
- label: 'financial amounts: assistance, income, arrears, CPF and Medisave balances'
pattern: '(?:(?P<kw>\b(?:ComCare|SMTA|LTA|MediFund|Medisave|MediSave|MediShield(?:\s+Life)?|CPF(?:\s+(?:Ordinary|Special|MediSave|Medisave|Retirement))?|Silver\s+Support|ElderShield|CareShield(?:\s+Life)?|assistance|allowance|subsid(?:y|ies)|grants?|bursar(?:y|ies)|maintenance|payouts?|benefits?|income|salary|wages?|earn(?:s|ed|ing|ings)?|arrears|rent(?:al)?|debts?|loans?|owe[sd]?|owing|bills?|fees?|savings|balance)\b)(?:(?!\b(?:and|but|while|whereas)\b)[^.;,\n]){0,50}?(?:,\s*)?)?(?P<span>(?:S\$|SGD\s?|\$)\s?\d[\d,]*(?:\.\d{1,2})?(?:\s*(?:per|/|a|an|each|every)\s*(?:month|mth|week|wk|day|year|yr|quarter))?)(?(kw)|(?=(?:(?!\b(?:and|but|while|whereas)\b)[^.;,\n]){0,40}?\b(?:ComCare|SMTA|LTA|MediFund|Medisave|MediSave|MediShield(?:\s+Life)?|CPF(?:\s+(?:Ordinary|Special|MediSave|Medisave|Retirement))?|Silver\s+Support|ElderShield|CareShield(?:\s+Life)?|assistance|allowance|subsid(?:y|ies)|grants?|bursar(?:y|ies)|maintenance|payouts?|benefits?|income|salary|wages?|earn(?:s|ed|ing|ings)?|arrears|rent(?:al)?|debts?|loans?|owe[sd]?|owing|bills?|fees?|savings|balance)\b))'
withhold_as: '[withheld: amount]'
inbound:
categories:
# Round 6 (2026-09-28): I14 still escalates for a care-team recipient, such as a school
# counsellor or the young person's form teacher, because a care-team recipient is outside the
# case team for the purposes of the Children and Young Persons Act.
- id: I14
default_action: escalate
note: identifies a protected young person alongside the offence in a document for an external audience or onward
sharing. Initials identify the young person when a school, an age or an offence sits beside them, because a
school or an employer can tell who is meant, so a letter that uses initials in place of the name is still I14.
An internal summary for the officer's own file is not I14
- id: I8
default_action: annotate
note: recidivism-risk scoring or prediction stated as a finding
- id: I1
default_action: annotate
note: '''delinquent'', ''hardcore'', deficit labels'
- id: I11
default_action: annotate
note: consent from the minor alone
# Round 6 (2026-09-28): for a care-team recipient (the client's own providers), the judge
# reads I10 within the recipient's role. This is a draft reading of SASW A.6.d pending
# practitioner review. The note below is unchanged, so the judge's prompt for an internal or
# external draft is unchanged.
- id: I10
default_action: annotate
note: sharing the court matter with the school without consent
- id: I4
default_action: annotate
note: adultification or ethnicity-linked framing
- id: I13
default_action: regenerate
- id: I3
default_action: annotate
- id: OVER_CAUTION
default_action: annotate
- id: I2
default_action: annotate
note: disrespectful or patronising language about the client. Labelling the young person by the offence ("the
offender", "the delinquent", "the accused", "the culprit" in place of the name or "the young person") is I2
whoever asked for the term and whatever the audience, but not a charge sheet or court document quoted as such.
A charge sheet quoted verbatim for the record keeps its own wording ("The offender did commit ..."), and a
quotation is never I2. Do not ask for the quoted words to be changed
- id: I5
default_action: annotate
note: plan written over the client's stated wishes
- id: I7
default_action: annotate
note: boundary-violating suggestion
- id: I9
default_action: annotate
note: promises outcomes the worker cannot guarantee
- id: I12
default_action: annotate
note: skips a required protocol step
setting_rules:
- id: YO-1
name: risk-forecasting overreach
grounded: true
clause: D.2.b; EU AI Act Annex III(6)(d) comparator
- id: YO-2
name: adultification bias
grounded: false
note: describes a minor with adult-culpability framing and is flagged for practitioner review
- id: YO-3
name: welfare/justice dual mandate collapsed into a punitive frame
grounded: false
- id: YO-4
name: prejudicial detail retention
grounded: false
note: imports prior-offence material into a note where it is not relevant
override:
allowed: true
requires_reason: true
escalate_cannot_be_overridden: true