NODEDC_1C/llm_normalizer/backend/tests/addressCapabilityPolicy.tes...

156 lines
8.7 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
isCapabilityRouteBlocked,
resolveAddressCapabilityRouteDecision,
resolveShadowRouteIntent
} from "../src/services/addressCapabilityPolicy";
describe("address capability policy", () => {
it("maps confirmed payables intent to compute exact capability", () => {
const decision = resolveAddressCapabilityRouteDecision("payables_confirmed_as_of_date");
expect(decision.capability_id).toBe("confirmed_payables_as_of_date");
expect(decision.capability_layer).toBe("compute");
expect(decision.capability_route_mode).toBe("exact");
expect(decision.capability_route_enabled).toBe(true);
expect(isCapabilityRouteBlocked(decision)).toBe(false);
});
it("maps confirmed receivables intent to compute exact capability", () => {
const decision = resolveAddressCapabilityRouteDecision("receivables_confirmed_as_of_date");
expect(decision.capability_id).toBe("confirmed_receivables_as_of_date");
expect(decision.capability_layer).toBe("compute");
expect(decision.capability_route_mode).toBe("exact");
expect(decision.capability_route_enabled).toBe(true);
expect(isCapabilityRouteBlocked(decision)).toBe(false);
});
it("maps confirmed VAT payable intent to compute exact capability", () => {
const decision = resolveAddressCapabilityRouteDecision("vat_payable_confirmed_as_of_date");
expect(decision.capability_id).toBe("confirmed_vat_payable_as_of_date");
expect(decision.capability_layer).toBe("compute");
expect(decision.capability_route_mode).toBe("exact");
expect(decision.capability_route_enabled).toBe(true);
expect(isCapabilityRouteBlocked(decision)).toBe(false);
});
it("maps inventory-on-hand intent to compute exact capability", () => {
const decision = resolveAddressCapabilityRouteDecision("inventory_on_hand_as_of_date");
expect(decision.capability_id).toBe("confirmed_inventory_on_hand_as_of_date");
expect(decision.capability_layer).toBe("compute");
expect(decision.capability_route_mode).toBe("exact");
expect(decision.capability_route_enabled).toBe(true);
expect(isCapabilityRouteBlocked(decision)).toBe(false);
});
it("enables inventory provenance intent as compute exact capability", () => {
const decision = resolveAddressCapabilityRouteDecision("inventory_purchase_provenance_for_item");
expect(decision.capability_id).toBe("inventory_inventory_purchase_provenance_for_item");
expect(decision.capability_layer).toBe("compute");
expect(decision.capability_route_mode).toBe("exact");
expect(decision.capability_route_enabled).toBe(true);
expect(decision.capability_route_reason).toBe("inventory_trace_route_enabled");
expect(isCapabilityRouteBlocked(decision)).toBe(false);
});
it("enables inventory supplier overlap intent as compute exact capability", () => {
const decision = resolveAddressCapabilityRouteDecision("inventory_supplier_stock_overlap_as_of_date");
expect(decision.capability_id).toBe("inventory_inventory_supplier_stock_overlap_as_of_date");
expect(decision.capability_layer).toBe("compute");
expect(decision.capability_route_mode).toBe("exact");
expect(decision.capability_route_enabled).toBe(true);
expect(decision.capability_route_reason).toBe("inventory_supplier_stock_overlap_route_enabled");
expect(isCapabilityRouteBlocked(decision)).toBe(false);
});
it("enables purchase-document and sale-trace intents", () => {
const purchaseDocsDecision = resolveAddressCapabilityRouteDecision("inventory_purchase_documents_for_item");
expect(purchaseDocsDecision.capability_route_enabled).toBe(true);
expect(purchaseDocsDecision.capability_route_reason).toBe("inventory_trace_route_enabled");
const saleTraceDecision = resolveAddressCapabilityRouteDecision("inventory_sale_trace_for_item");
expect(saleTraceDecision.capability_route_enabled).toBe(true);
expect(saleTraceDecision.capability_route_reason).toBe("inventory_trace_route_enabled");
});
it("keeps inventory purchase documents and sale chain on exact compute routes", () => {
const purchaseDocsDecision = resolveAddressCapabilityRouteDecision("inventory_purchase_documents_for_item");
expect(purchaseDocsDecision.capability_id).toBe("inventory_inventory_purchase_documents_for_item");
expect(purchaseDocsDecision.capability_layer).toBe("compute");
expect(purchaseDocsDecision.capability_route_mode).toBe("exact");
const chainDecision = resolveAddressCapabilityRouteDecision("inventory_purchase_to_sale_chain");
expect(chainDecision.capability_id).toBe("inventory_inventory_purchase_to_sale_chain");
expect(chainDecision.capability_layer).toBe("compute");
expect(chainDecision.capability_route_mode).toBe("exact");
});
it("enables purchase-to-sale trace, item profitability, and aging by purchase date", () => {
const chainDecision = resolveAddressCapabilityRouteDecision("inventory_purchase_to_sale_chain");
expect(chainDecision.capability_id).toBe("inventory_inventory_purchase_to_sale_chain");
expect(chainDecision.capability_route_mode).toBe("exact");
expect(chainDecision.capability_route_enabled).toBe(true);
expect(chainDecision.capability_route_reason).toBe("inventory_purchase_to_sale_chain_route_enabled");
expect(isCapabilityRouteBlocked(chainDecision)).toBe(false);
const profitabilityDecision = resolveAddressCapabilityRouteDecision("inventory_profitability_for_item");
expect(profitabilityDecision.capability_id).toBe("inventory_inventory_profitability_for_item");
expect(profitabilityDecision.capability_layer).toBe("compute");
expect(profitabilityDecision.capability_route_mode).toBe("exact");
expect(profitabilityDecision.capability_route_enabled).toBe(true);
expect(profitabilityDecision.capability_route_reason).toBe("inventory_profitability_route_enabled");
expect(isCapabilityRouteBlocked(profitabilityDecision)).toBe(false);
const agingDecision = resolveAddressCapabilityRouteDecision("inventory_aging_by_purchase_date");
expect(agingDecision.capability_id).toBe("inventory_inventory_aging_by_purchase_date");
expect(agingDecision.capability_route_mode).toBe("exact");
expect(agingDecision.capability_route_enabled).toBe(true);
expect(agingDecision.capability_route_reason).toBe("inventory_aging_route_enabled");
expect(isCapabilityRouteBlocked(agingDecision)).toBe(false);
});
it("enables aging by purchase date as an exact inventory capability", () => {
const decision = resolveAddressCapabilityRouteDecision("inventory_aging_by_purchase_date");
expect(decision.capability_id).toBe("inventory_inventory_aging_by_purchase_date");
expect(decision.capability_layer).toBe("compute");
expect(decision.capability_route_mode).toBe("exact");
expect(decision.capability_route_enabled).toBe(true);
expect(decision.capability_route_reason).toBe("inventory_aging_route_enabled");
expect(isCapabilityRouteBlocked(decision)).toBe(false);
});
it("maps document drilldown intent to navigation capability", () => {
const decision = resolveAddressCapabilityRouteDecision("list_documents_by_contract");
expect(decision.capability_id).toBe("documents_drilldown");
expect(decision.capability_layer).toBe("navigation");
expect(decision.capability_route_mode).toBe("exact");
expect(decision.capability_route_enabled).toBe(true);
});
it("maps counterparty value-flow intents to exact compute capabilities", () => {
const revenue = resolveAddressCapabilityRouteDecision("customer_revenue_and_payments");
expect(revenue.capability_id).toBe("address_customer_revenue_and_payments");
expect(revenue.capability_layer).toBe("compute");
expect(revenue.capability_route_mode).toBe("exact");
expect(revenue.capability_route_enabled).toBe(true);
expect(revenue.capability_route_reason).toBe("counterparty_value_flow_route_enabled");
const payouts = resolveAddressCapabilityRouteDecision("supplier_payouts_profile");
expect(payouts.capability_id).toBe("address_supplier_payouts_profile");
expect(payouts.capability_layer).toBe("compute");
expect(payouts.capability_route_mode).toBe("exact");
});
it("maps heuristic list intents to heuristic compute route mode", () => {
const decision = resolveAddressCapabilityRouteDecision("list_receivables_counterparties");
expect(decision.capability_id).toBe("receivables_candidates_list");
expect(decision.capability_layer).toBe("compute");
expect(decision.capability_route_mode).toBe("heuristic");
});
it("keeps shadow route disabled by default", () => {
expect(resolveShadowRouteIntent("payables_confirmed_as_of_date", "confirmed_balance")).toBeNull();
expect(resolveShadowRouteIntent("list_payables_counterparties", "confirmed_balance")).toBeNull();
});
});