Compare two unit lines as adjudication evidence
Arguments
- a, b
Raw address line 2 values, the anchor's and the candidate's.
- street_a, street_b
Optional street lines, passed through to
pf_street_unit()so a box number is not read as a suite.
Value
A character vector, one per pair:
conflictBoth parse to a unit and they disagree. Two different doors at one street, so the two renderings are very likely different organizations and a triangulated label assigning them one EIN is probably wrong. This is the case worth a reviewer's attention.
agreeBoth parse and match. Do not read this as support for one organization. Measured on the triangulation run it is close to worthless:
SUITE 100,SUITE 300andSUITE 400are shared by unrelated tenants (MIDDLE EAST CHILDRENS ALLIANCEandIRISH REPERTORY THEATERboth at Suite 100;GLOBAL FUND FOR WOMENandTHAKKER CHARITABLE TRUSTboth at Suite 400), a fiscal sponsor's suite is shared by everything it sponsors, and some values are not units at all —15219is a Pittsburgh ZIP code sitting on line 2. It is recorded for completeness, not as evidence.one_sidedOne parses, the other does not. Carries nothing — filers omit the line constantly, so silence is not disagreement.
absentNeither parses.
Two units agree when their identifiers match and their designators fall
in the same class: the room-level designators are interchangeable
(.PF_UNIT_ROOM), everything else is not, so UNIT 1200 is STE 1200 but
FL 2 is not STE 2. This is where pfmatch departs from npmatch, which
compares street_unit_id alone and so reads a floor as a suite. Upstream
the cost is a missing 0.97 rung in a max() ladder; here it would be a
false agree, which no reviewer ever looks at.
Against npmatch's own pair annotations: conflict and agree are
geo_unit == 0 and geo_unit == 1 under the stricter designator rule above,
and one_sided and absent are the two halves of geo_unit == NA that
geo_unit cannot tell apart. The crowding half of the annotation —
addr_shared, addr_units, addr_unit_shared, addr_note — has no
counterpart here and should be taken from np_compare() rather than
reinvented; see dev/PLACES-SYNC.md §4.5.
conflict fires on 0.47% of candidate pairs in the triangulation run — 69
of 14,790, of which 19 sit on a MAYBE candidate and so reach the
adjudication queue. It is a rare, sharp signal, not a routine one, and it
concentrates: one address (a fellowship program writing a sequential
counter into line 2, one per individual grantee) produced 31 of the 69. A
conflict is a prompt for a reviewer, never an automatic verdict. See the
"Name and address variants" vignette for the full rates.