git-subtree-dir: fiscal git-subtree-mainline:d95165fc8fgit-subtree-split:102ba84500
48 lines
2.1 KiB
Python
48 lines
2.1 KiB
Python
"""Evidence reconstruction for historical KB conflicts.
|
|
|
|
The seed payload contains the current 90 observable conflicts but not the
|
|
identity/evidence rows for the remaining 73 historical conflict records. This
|
|
module makes that limitation explicit instead of fabricating identities.
|
|
"""
|
|
|
|
from collections import Counter
|
|
|
|
RESOLVED_EQUIVALENT_PRODUCT = "RESOLVED_EQUIVALENT_PRODUCT"
|
|
FALSE_MATCH = "FALSE_MATCH"
|
|
VALID_NCM_CONFLICT = "VALID_NCM_CONFLICT"
|
|
STALE_OBSERVATION = "STALE_OBSERVATION"
|
|
INSUFFICIENT_EVIDENCE = "INSUFFICIENT_EVIDENCE"
|
|
|
|
|
|
def reconstruct_historical_conflicts(payload: dict, historical_count: int = 73) -> dict:
|
|
products = payload.get("products", [])
|
|
gtin_count = sum(1 for product in products if product.get("gtin"))
|
|
fingerprint_count = sum(1 for product in products if product.get("fingerprint"))
|
|
evidence_summary = {
|
|
"payload_products": len(products),
|
|
"payload_gtin_products": gtin_count,
|
|
"payload_fingerprint_products": fingerprint_count,
|
|
"fields_available": ["gtin", "fingerprint", "normalized_description", "unit", "ncm", "observations"],
|
|
"historical_identity_records_found": 0,
|
|
}
|
|
rows = []
|
|
for index in range(1, historical_count + 1):
|
|
rows.append({
|
|
"historical_conflict_id": f"HISTORICAL-{index:03d}",
|
|
"classification": INSUFFICIENT_EVIDENCE,
|
|
"evidence_search": evidence_summary,
|
|
"resolution": "PRESERVE_CONFLICT",
|
|
"reason": "original conflict identity/evidence row is absent from available artifacts; no NCM selected",
|
|
})
|
|
return {
|
|
"artifact": "KB_HISTORICAL_CONFLICT_AUDIT_V1",
|
|
"historical_conflicts_before": historical_count,
|
|
"historical_conflicts_resolved": 0,
|
|
"historical_conflicts_remaining": historical_count,
|
|
"classification_counts": dict(Counter(row["classification"] for row in rows)),
|
|
"conflicts": rows,
|
|
"current_observable_conflicts_preserved": 90,
|
|
"current_conflict_policy": "NCM_CONFLICT rows remain blocked; no majority resolution",
|
|
"evidence_complete": False,
|
|
}
|