import { describe, expect, it } from "vitest"; import { resolveAddressCoverageEvidence } from "../src/services/addressCoverageEvidencePolicy"; describe("address coverage evidence policy", () => { it("marks matched inventory balance replies as full confirmed-balance evidence", () => { const contract = resolveAddressCoverageEvidence({ intent: "inventory_on_hand_as_of_date", selectedRecipe: "address_inventory_on_hand_as_of_date_v1", filters: { as_of_date: "2021-03-31", period_from: "2021-03-01", period_to: "2021-03-31" }, responseType: "FACTUAL_SUMMARY", rowsMatched: 3 }); expect(contract.requested_result_mode).toBe("confirmed_balance"); expect(contract.result_mode).toBe("confirmed_balance"); expect(contract.coverage_status).toBe("full"); expect(contract.evidence_strength).toBe("strong"); expect(contract.balance_confirmed).toBe(true); expect(contract.evidence_basis).toBe("matched_rows"); expect(contract.as_of_date_basis).toBe("explicit_as_of_date"); }); it("keeps relative current snapshot basis even when it materializes to today's ISO date", () => { const todayIso = new Date().toISOString().slice(0, 10); const contract = resolveAddressCoverageEvidence({ intent: "inventory_on_hand_as_of_date", selectedRecipe: "address_inventory_on_hand_as_of_date_v1", filters: { as_of_date: todayIso }, semanticFrame: { scope_kind: "implicit_self_scope", anchor_kind: "self_scope", anchor_value: null, date_scope_kind: "implicit_current", date_basis_hint: "implicit_current_snapshot", self_scope_detected: true, selected_object_scope_detected: false }, responseType: "FACTUAL_LIST", rowsMatched: 1 }); expect(contract.as_of_date_basis).toBe("implicit_current_snapshot"); expect(contract.reason_codes).toContain("as_of_date_basis_implicit_current_snapshot"); }); it("treats factual exact negatives as full confirmed-balance evidence instead of partial noise", () => { const contract = resolveAddressCoverageEvidence({ intent: "payables_confirmed_as_of_date", selectedRecipe: "address_payables_confirmed_as_of_date_v1", filters: { as_of_date: "2020-03-31", period_from: "2020-03-01", period_to: "2020-03-31" }, responseType: "FACTUAL_SUMMARY", rowsMatched: 0 }); expect(contract.result_mode).toBe("confirmed_balance"); expect(contract.coverage_status).toBe("full"); expect(contract.balance_confirmed).toBe(true); expect(contract.evidence_basis).toBe("exact_negative"); expect(contract.reason_codes).toContain("evidence_basis_exact_negative"); }); it("keeps heuristic candidate answers partial even when rows exist", () => { const contract = resolveAddressCoverageEvidence({ intent: "open_items_by_counterparty_or_contract", selectedRecipe: "address_open_items_by_party_or_contract_v1", filters: { account: "60", period_from: "2022-08-01", period_to: "2022-08-31" }, responseType: "FACTUAL_LIST", rowsMatched: 4 }); expect(contract.requested_result_mode).toBe("confirmed_balance"); expect(contract.result_mode).toBe("confirmed_balance"); expect(contract.coverage_status).toBe("partial"); expect(contract.evidence_strength).toBe("medium"); expect(contract.balance_confirmed).toBe(false); }); it("marks limited replies as blocked or partial according to the effective result mode", () => { const confirmed = resolveAddressCoverageEvidence({ intent: "inventory_on_hand_as_of_date", selectedRecipe: "address_inventory_on_hand_as_of_date_v1", filters: { as_of_date: "2021-03-31" }, responseType: "LIMITED_WITH_REASON", rowsMatched: 0 }); const heuristic = resolveAddressCoverageEvidence({ intent: "list_open_contracts", selectedRecipe: "address_list_open_contracts_v1", filters: {}, responseType: "LIMITED_WITH_REASON", rowsMatched: 0 }); expect(confirmed.coverage_status).toBe("blocked"); expect(confirmed.evidence_basis).toBe("limited_response"); expect(heuristic.coverage_status).toBe("partial"); expect(heuristic.result_mode).toBe("heuristic_candidates"); }); });