conflict-decisions: correctDob remaps a wrong-birthdate duplicate before dedup
god added a `correctDob` (DD.MM.YYYY) decisions field: the matched (name+dob) record is a DUPLICATE with a wrong birthdate → remap its DOB to correctDob so dedup MERGES it into the canonical same-named animal. apply_dob_remaps runs BEFORE dedup (it changes the dedup identity); tolerates a missing file; logged as "DOB-Remaps: N". First use: Chelsea *15.10.2021 → *02.04.2021 (merges into the canonical record). test_extract covers the remap + that both records then share one name+dob identity. Extractor-only. python + dotnet 121/121 green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -101,6 +101,30 @@ check("decision removes both entries from conflicts list", conflicts == [])
|
||||
check("apply_conflict_decisions returns resolved count", n == 2)
|
||||
check("missing decisions file tolerated (returns 0)",
|
||||
e.apply_conflict_decisions([], [], os.path.join(tempfile.gettempdir(), "does-not-exist.json")) == 0)
|
||||
|
||||
# --- correctDob: a wrong-birthdate duplicate is remapped BEFORE dedup so it merges ---
|
||||
dec2 = os.path.join(tempfile.gettempdir(), "decisions-dob.json")
|
||||
_json.dump({"resolutions": [
|
||||
{"name": "Chelsea von den Kleinen Chaoten", "dob": "15.10.2021",
|
||||
"decision": "duplicate wrong birthdate", "correctDob": "02.04.2021", "source": "test"},
|
||||
]}, open(dec2, "w", encoding="utf-8"))
|
||||
raw = [
|
||||
{"name": "Chelsea von den Kleinen Chaoten", "dob": "15.10.2021"}, # the wrong-dob duplicate
|
||||
{"name": "Chelsea von den Kleinen Chaoten", "dob": "02.04.2021"}, # canonical
|
||||
{"name": "Other Animal", "dob": "01.01.2020"},
|
||||
]
|
||||
rn = e.apply_dob_remaps(raw, dec2)
|
||||
check("correctDob remaps the wrong-dob record", raw[0]["dob"] == "02.04.2021")
|
||||
check("correctDob leaves the canonical record alone", raw[1]["dob"] == "02.04.2021")
|
||||
check("correctDob leaves unrelated records alone", raw[2]["dob"] == "01.01.2020")
|
||||
check("apply_dob_remaps returns remap count", rn == 1)
|
||||
check("after remap both Chelsea share one dedup identity (name+dob)",
|
||||
e.norm_dob(raw[0]["dob"]) == e.norm_dob(raw[1]["dob"]))
|
||||
check("missing decisions file tolerated for dob remaps (returns 0)",
|
||||
e.apply_dob_remaps([], os.path.join(tempfile.gettempdir(), "nope.json")) == 0)
|
||||
try: os.remove(dec2)
|
||||
except OSError: pass
|
||||
|
||||
try: os.remove(dec_path)
|
||||
except OSError: pass
|
||||
|
||||
|
||||
Reference in New Issue
Block a user