Spaces:
Running
Zorgfilter v1 — pure recognizer implementation
Status: implemented and contract-validated; app registration remains gated
Workpackage: SCRUB-WP_CARE_PROFILE_RECOGNIZER_IMPLEMENTATION
Result
The pure module dutch_care_recognizers.py implements the frozen Zorgfilter v1 contract without changing the current application.
Public API:
get_dutch_care_entity_names()
get_dutch_care_recognizers(supported_language="en")
Implemented entity families:
- patient, client, medical-record and EPD/ECD identifiers;
- health-insurance, referral, treatment and laboratory references;
- care incident and care indication references;
- strong-context AGB codes;
- care-provider names after bounded professional roles;
- labeled care organizations and bounded care locations;
- room, bed and apartment references;
- labeled care-event dates distinct from date of birth.
Validation result
Dedicated entities: 16
Frozen positive contracts: 37/37 passed
Forbidden positive collisions: 0
Frozen negative/collision contracts: 16/16 passed
Dedicated expectations in eight-document corpus: 54/54 passed
Protected clinical phrase overlaps: 0
Full repository regression run #1854: 953 tests passed
App registration: false
Production readiness: false
Evidence:
output/validation/care_recognizer_implementation_validation.jsontests/test_dutch_care_recognizers.pytests/test_care_recognizer_validation.py
Design choices
Strong care labels for references
Patient-specific codes are recognized only after explicit labels such as patient number, client number, EPD/ECD number, referral number, sample number or incident number. The recognizer returns only the value span and preserves the label.
Provider roles remain readable
A provider name is recognized only after bounded roles such as nurse, GP, treating specialist, personal carer, prescriber or incident reporter. The role and titles such as dr. remain readable.
Conservative organization and location handling
Organization detection is restricted to labeled fields. Location detection is restricted to bounded phrases such as location, ward, team or residential location. The module does not infer every narrative organization as a care organization.
AGB collision protection
AGB requires explicit AGB context and exactly eight digits. The dedicated module does not infer AGB from arbitrary numbers and passes the frozen BSN/BIG negative cases. Cross-recognizer precedence with the existing BSN recognizer remains an explicit profile-integration responsibility.
Clinical meaning is preserved
The module does not match medication, dosage, administration times, vital signs, laboratory values, pain scores, DBC/ICD codes or role words without a person name. The eight-document corpus produced zero overlaps with protected clinical passages.
Integration boundary
The recognizers are intentionally not imported or registered by presidio_helpers.py or presidio_streamlit.py in this package. The next workpackage centralizes profile composition so Zorg can be added without further scattering profile-specific if statements across the UI.
No export, Scrub Key, reinsert, runtime, dependency or cloud-processing behavior changed.
Human review remains mandatory. Passing the synthetic contract does not establish production readiness.