Закрыть phase96 reviewed-route складских резервов и ликвидности

This commit is contained in:
2026-05-13 00:11:01 +03:00
parent b99a3be083
commit 5220cb2e0e
24 changed files with 1189 additions and 139 deletions
@@ -710,10 +710,14 @@ describe("assistant MCP discovery answer adapter", () => {
const draft = buildAssistantMcpDiscoveryAnswerDraft(pilot);
expect(draft.headline).toContain(
"\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u0440\u0435\u0437\u0435\u0440\u0432"
"\u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b \u0441\u043a\u043b\u0430\u0434\u0441\u043a\u0438\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b"
);
expect(draft.headline).toContain(
"\u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439"
);
expect(draft.headline).toContain(
"\u043d\u0435 \u0440\u044b\u043d\u043e\u0447\u043d\u0430\u044f \u043b\u0438\u043a\u0432\u0438\u0434\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c"
);
expect(draft.headline).toContain("\u043d\u0435\u043b\u044c\u0437\u044f");
expect(draft.headline).toContain("staleness-risk proxy");
expect(draft.headline).not.toContain("бизнес-обзор");
expect(draft.must_not_claim).toContain("Do not present business overview inventory staleness risk proxy as confirmed obsolete stock, reserve, write-off, or liquidation value.");
});
@@ -475,7 +475,7 @@ describe("assistant MCP discovery runtime bridge", () => {
expect(userFacing).not.toContain("MCP discovery pilot");
});
it("marks exact business-overview proof gaps as route enablement instead of reviewed execution", async () => {
it("promotes inventory reserve boundary after reviewed quality-event route executes", async () => {
const deps = buildSequentialDeps([
{ rows: [{ Period: "2020-01-15T00:00:00", Amount: 120000, Counterparty: "Client A" }] },
{ rows: [{ Period: "2020-01-20T00:00:00", Amount: 50000, Counterparty: "Supplier A" }] },
@@ -548,20 +548,21 @@ describe("assistant MCP discovery runtime bridge", () => {
expect(result.bridge_status).toBe("answer_draft_ready");
expect(result.business_fact_answer_allowed).toBe(true);
expect(result.route_candidate).toMatchObject({
candidate_status: "needs_route_enablement",
candidate_status: "ready_for_reviewed_execution",
selected_chain_id: "business_overview",
business_fact_family: "business_overview",
action_family: "inventory_reserve_boundary",
executable_now: false
executable_now: true,
enablement_reason: null
});
expect(result.route_candidate.enablement_reason).toContain("inventory_reserve_liquidation_quality");
expect(result.route_candidate.enablement_reason).toContain(
"reviewed_inventory_quality_route_with_reserves_writeoffs_obsolescence_and_liquidation_value"
expect(result.pilot.derived_business_overview?.inventory_quality_events?.evidence_status).toBe(
"reviewed_no_quality_events_found"
);
expect(result.route_candidate.forbidden_overclaim_flags).toContain(
"confirmed_obsolete_stock_reserve_writeoff_or_liquidation_value"
expect(result.pilot.derived_business_overview?.missing_proof_families.map((item) => item.family)).not.toContain(
"inventory_reserve_liquidation_quality"
);
expect(result.reason_codes).toContain("runtime_bridge_route_candidate_needs_route_enablement");
expect(result.answer_draft.reason_codes).toContain("answer_contains_business_overview_inventory_quality_events");
expect(result.reason_codes).toContain("runtime_bridge_route_candidate_ready_for_reviewed_execution");
});
it("promotes profit-margin boundary when accounting 90/91/99 proof is available", async () => {