"""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, }