Open-World: добавить debt staleness risk proxy в бизнес-обзор
This commit is contained in:
@@ -404,21 +404,29 @@ describe("assistant MCP discovery answer adapter", () => {
|
||||
expect(draft.headline).toContain("долговой срез");
|
||||
expect(draft.headline).toContain("качество открытых расчетов");
|
||||
expect(draft.headline).toContain("возрастной сигнал открытых расчетов");
|
||||
expect(draft.headline).toContain("staleness risk proxy открытых расчетов");
|
||||
expect(draft.headline).toContain("договорные сроки оплаты/due-date просрочка");
|
||||
expect(draft.confirmed_lines.join("\n")).toContain("Долговой срез на 2020-12-31");
|
||||
expect(draft.confirmed_lines.join("\n")).toContain("Качество открытых расчетов на 2020-12-31");
|
||||
expect(draft.confirmed_lines.join("\n")).toContain("Возрастной сигнал открытых расчетов");
|
||||
expect(draft.confirmed_lines.join("\n")).toContain("не due-date анализ");
|
||||
expect(draft.confirmed_lines.join("\n")).toContain("Staleness risk proxy открытых расчетов");
|
||||
expect(draft.confirmed_lines.join("\n")).toContain("высокая зона внимания");
|
||||
expect(draft.confirmed_lines.join("\n")).toContain("не due-date aging");
|
||||
expect(draft.confirmed_lines.join("\n")).toContain("нетто");
|
||||
expect(draft.inference_lines.join("\n")).toContain("Риски и контуры внимания");
|
||||
expect(draft.inference_lines.join("\n")).toContain("самый старый договорный возрастной сигнал");
|
||||
expect(draft.inference_lines.join("\n")).toContain("staleness risk proxy открытых расчетов");
|
||||
expect(draft.inference_lines.join("\n")).toContain("Сводный LLM-аудит");
|
||||
expect(draft.unknown_lines.join("\n")).toContain("due-date");
|
||||
expect(draft.reason_codes).toContain("answer_contains_business_overview_debt_position");
|
||||
expect(draft.reason_codes).toContain("answer_contains_business_overview_open_settlement_quality");
|
||||
expect(draft.reason_codes).toContain("answer_contains_business_overview_debt_age_signal");
|
||||
expect(draft.reason_codes).toContain("answer_contains_business_overview_debt_staleness_risk_proxy");
|
||||
expect(draft.reason_codes).toContain("answer_contains_business_overview_analyst_synthesis");
|
||||
expect(draft.must_not_claim).toContain("Do not present a debt-position snapshot as debt aging, overdue debt, or credit-quality analysis.");
|
||||
expect(draft.must_not_claim).toContain("Do not present open-settlement concentration as contractual due-date aging or confirmed overdue debt.");
|
||||
expect(draft.must_not_claim).toContain("Do not present business overview debt staleness risk proxy as confirmed overdue debt, contractual delinquency, credit risk, or due-date aging.");
|
||||
});
|
||||
|
||||
it("surfaces checked inventory-position snapshot in business overview without treating it as warehouse liquidity", async () => {
|
||||
|
||||
@@ -468,6 +468,14 @@ describe("assistant MCP discovery pilot executor", () => {
|
||||
latest_start_date: "2020-03-15",
|
||||
max_age_days: 690
|
||||
});
|
||||
expect(result.derived_business_overview?.debt_staleness_risk_proxy).toMatchObject({
|
||||
as_of_date: "2020-12-31",
|
||||
oldest_contract_start_date: "2019-02-10",
|
||||
max_contract_age_days: 690,
|
||||
top_contract_amount: 90000,
|
||||
top_contract_share_pct: 75,
|
||||
risk_band: "high"
|
||||
});
|
||||
expect(result.derived_business_overview?.debt_open_settlement_quality?.age_signal?.top_aged_contracts[0]).toMatchObject({
|
||||
contract: "Договор А от 10.02.2019",
|
||||
start_date: "2019-02-10",
|
||||
@@ -480,6 +488,8 @@ describe("assistant MCP discovery pilot executor", () => {
|
||||
expect(result.evidence.confirmed_facts.join("\n")).toContain("Долговая позиция на 2020-12-31");
|
||||
expect(result.evidence.confirmed_facts.join("\n")).toContain("Качество открытых расчетов на 2020-12-31");
|
||||
expect(result.evidence.confirmed_facts.join("\n")).toContain("Возрастной сигнал открытых расчетов");
|
||||
expect(result.evidence.confirmed_facts.join("\n")).toContain("Staleness risk proxy открытых расчетов");
|
||||
expect(result.evidence.confirmed_facts.join("\n")).toContain("высокая зона внимания");
|
||||
expect(result.evidence.confirmed_facts.join("\n")).toContain("не due-date анализ");
|
||||
expect(result.evidence.unknown_facts.join("\n")).toContain("due-date");
|
||||
expect(result.reason_codes).toContain("pilot_business_overview_debt_query_mcp_executed");
|
||||
@@ -487,6 +497,7 @@ describe("assistant MCP discovery pilot executor", () => {
|
||||
expect(result.reason_codes).toContain("pilot_business_overview_open_contracts_query_mcp_executed");
|
||||
expect(result.reason_codes).toContain("pilot_derived_business_overview_open_settlement_quality_from_confirmed_rows");
|
||||
expect(result.reason_codes).toContain("pilot_derived_business_overview_debt_age_signal_from_contract_dates");
|
||||
expect(result.reason_codes).toContain("pilot_derived_business_overview_debt_staleness_risk_proxy_from_confirmed_rows");
|
||||
expect(deps.executeAddressMcpQuery).toHaveBeenCalledTimes(10);
|
||||
const receivablesCall = deps.executeAddressMcpQuery.mock.calls[3]?.[0];
|
||||
const payablesCall = deps.executeAddressMcpQuery.mock.calls[4]?.[0];
|
||||
|
||||
Reference in New Issue
Block a user