NODEDC_1C/llm_normalizer/backend/tests/addressCoverageEvidencePoli...

91 lines
3.4 KiB
TypeScript

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("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");
});
});