Задать Phase108 сценарий расчетов и просрочки

This commit is contained in:
dctouch 2026-06-15 23:46:47 +03:00
parent e9f0ef6b41
commit ee98b04706
1 changed files with 189 additions and 215 deletions

View File

@ -1,10 +1,10 @@
{
"schema_version": "domain_scenario_pack_v1",
"pack_id": "active_phase107_mixed_planner_brain_dogfood_20260615",
"domain": "address_phase107_mixed_planner_brain_dogfood",
"runtime_domain": "planner_autonomy_mixed_boundary",
"title": "Mixed planner-brain dogfood replay",
"description": "Active slice for dogfooding the autonomous agent loop on a compact mixed planner path: living chat guard, counterparty alias grounding, follow-up money flow, net, documents, movement evidence, broad business evaluation, and off-domain recovery.",
"pack_id": "active_phase108_settlement_pivot_debt_boundary_20260615",
"domain": "address_phase108_settlement_pivot_debt_boundary",
"runtime_domain": "settlement_document_payment_contract_pivots",
"title": "Settlement pivot and debt boundary replay",
"description": "Active slice for dogfooding the autonomous agent loop on a settlement-heavy path: counterparty document root, repeated payments/contracts/documents pivots, year switch carryover, debt due-date boundary, and off-domain recovery.",
"status": "active",
"source_of_truth_policy": {
"purpose": "single mutable domain source for the current orchestration target",
@ -21,25 +21,27 @@
},
"analysis_context": {
"as_of_date": "2026-06-15",
"source": "phase107_after_phase106_profit_cashflow_margin_next_step",
"source": "phase108_after_phase107_mixed_planner_brain_dogfood",
"known_previous_anchors": [
"phase83_planner_brain_alignment_mix_20260603_live9",
"phase104_generic_role_tail_anchor_hygiene_20260615_p04_loop",
"phase106_profit_cashflow_margin_next_step_20260615_p03_loop"
"phase75_contracts_to_payments_year_switch",
"phase79_payments_to_contracts_to_documents_year_switch",
"phase81_payments_contracts_documents_back_to_payments_year_switch",
"phase94_debt_due_date_aging_reviewed_route",
"phase107_mixed_planner_brain_dogfood_20260615_p11_loop"
],
"why_now": "Phase83 passed in the legacy truth-harness format; this pack replays the highest-value mixed planner slice through the current autonomous pack-loop."
"why_now": "Phase107 hardened counterparty money-flow memory. Phase108 moves to settlement pivots: documents, payments, contracts, repeated pronoun reuse, year-switch carryover, and honest debt due-date boundaries."
},
"target_score": 88,
"bindings": {
"main_organization": "ООО Альтернатива Плюс",
"control_year": "2020",
"svk_counterparty": "Группа СВК"
"pivot_counterparty": "Жуковка 51",
"control_year": "2021",
"debt_boundary_year_end": "2020-12-31"
},
"issue_codes_under_test": [
"technical_garbage_in_answer",
"business_direct_answer_missing",
"business_next_step_missing",
"counterparty_value_flow_misrouted_to_company_profit",
"business_utility_gap"
],
"detectors_under_test": [
@ -48,62 +50,66 @@
"first_line_not_direct_answer",
"top_level_scaffold_before_answer",
"limited_answer_without_next_action",
"counterparty_value_flow_required_surface",
"counterparty_value_flow_profit_accounts_forbidden"
"business_answer_too_verbose_output"
],
"agent_audit_expectations": {
"semantic_answer_review_first": true,
"direct_answer_first": true,
"business_utility_required": true,
"selected_counterparty_memory_required": true,
"date_carryover_required": true,
"documents_and_movements_are_evidence_drilldowns": true,
"pivot_action_memory_required": true,
"year_switch_keeps_last_action_required": true,
"debt_due_date_boundary_must_be_honest": true,
"off_domain_living_chat_must_not_replay_business_context": true,
"technical_garbage_forbidden": true,
"do_not_accept_if": [
"a follow-up over 'нему' loses the selected counterparty",
"a payout or net follow-up loses the 2020 period",
"a counterparty received/paid/net question is answered as company profit",
"document or movement follow-up answers with a fresh clarification instead of reusing the selected counterparty",
"broad business evaluation leaks route ids, capability ids, runtime enums, or debug payload",
"a pronoun follow-up over 'по нему' loses Жуковка 51",
"the year switch asks again for a counterparty instead of reusing the active settlement object",
"a payment/contracts/documents pivot answers with a different object family without saying so",
"the debt due-date answer claims proven overdue debt without payment-term evidence",
"the final answer leaks route ids, capability ids, runtime enums, or debug payload",
"off-domain living chat is hijacked by stale 1C business context"
]
},
"scenarios": [
{
"scenario_id": "mixed_planner_counterparty_evidence_and_living_guard",
"title": "Counterparty memory, evidence drilldowns, business overview, and off-domain guard",
"description": "Validate a compact but cross-cutting planner path: chat sanity, loose counterparty alias grounding, follow-up money flow and net, documents/movements evidence, explicit broad company evaluation, and recovery into ordinary living chat.",
"scenario_id": "settlement_pivot_year_switch_and_debt_boundary",
"title": "Documents, payments, contracts, year switch, and debt boundary",
"description": "Validate repeated settlement pivots over the same counterparty and a debt due-date boundary canary in one session.",
"steps": [
{
"step_id": "step_01_human_smalltalk_sanity",
"title": "Living chat remains human and does not expose discovery internals",
"step_id": "step_01_documents_by_counterparty",
"title": "Open documents for the counterparty",
"node_role": "root",
"question": "привет, ты на связи?",
"question": "Покажи документы по Жуковке 51.",
"allowed_reply_types": [
"factual",
"factual_with_explanation",
"partial_coverage"
],
"semantic_tags": [
"human_answer",
"mcp_discovery_gate_sanity",
"meta_smalltalk"
"documents_by_counterparty",
"counterparty_root",
"pivot_seed",
"integrity_guard"
],
"required_answer_shape": "direct_answer_first",
"required_answer_patterns_any": [
"(?i)привет|на связи|готов|помочь"
"required_answer_patterns_all": [
"(?i)жуковк",
"(?i)документ|сч[её]т|акт|накладн|строк"
],
"forbidden_answer_patterns": [
"(?i)mcp|runtime_|query_documents|primitive|route_candidate|capability_id|snapshot_items|answer_object"
"(?i)route_candidate|primitive|planner_|catalog_|snapshot_items|answer_object|capability_id|mcp_discovery",
"(?i)уточните.*контрагент|какого контрагента"
],
"criticality": "info"
"criticality": "critical"
},
{
"step_id": "step_02_resolve_counterparty_alias",
"title": "Entity resolution grounds the checked 1C counterparty from a loose alias",
"question": "найди в 1С контрагента СВК",
"step_id": "step_02_payments_by_pronoun_followup",
"title": "Pivot from documents to payments",
"question": "А по нему платежи?",
"depends_on": [
"step_01_human_smalltalk_sanity"
"step_01_documents_by_counterparty"
],
"allowed_reply_types": [
"factual",
@ -111,139 +117,29 @@
"partial_coverage"
],
"semantic_tags": [
"entity_resolution",
"alias_grounding",
"followup_anchor",
"planner_catalog_alignment"
"payments_followup",
"counterparty_pronoun_resolution",
"document_to_payments_pivot",
"integrity_guard"
],
"required_answer_shape": "direct_answer_first",
"required_answer_patterns_all": [
"(?i)свк",
"(?i)контрагент"
],
"required_answer_patterns_any": [
"(?i)группа\\s+свк",
"(?i)каталог|найден|наиболее вероятн"
"(?i)жуковк|контрагент",
"(?i)плат[её]ж|операц|банк|поступлен|списан"
],
"forbidden_answer_patterns": [
"(?i)получили|заплатили|нетто|оборот|выручк|сумм(а|ы)",
"(?i)уточните.*контрагент|какого контрагента",
"(?i)документы по всем контрагентам",
"(?i)route_candidate|primitive|planner_|catalog_|snapshot_items|answer_object|capability_id|mcp_discovery"
],
"criticality": "critical"
},
{
"step_id": "step_03_incoming_by_resolved_entity",
"title": "Incoming value-flow follow-up reuses the resolved counterparty anchor",
"question": "сколько получили по нему за 2020 год",
"step_id": "step_03_contracts_after_payments_pivot",
"title": "Pivot from payments to contracts",
"question": "А по нему договоры?",
"depends_on": [
"step_02_resolve_counterparty_alias"
],
"allowed_reply_types": [
"factual_with_explanation",
"partial_coverage"
],
"semantic_tags": [
"entity_resolution",
"incoming_value_flow",
"followup_reuse",
"date_carryover",
"planner_catalog_alignment"
],
"required_answer_shape": "direct_answer_first",
"required_answer_patterns_all": [
"(?i)2020",
"(?i)получил|входящ|поступ",
"(?i)руб"
],
"required_answer_patterns_any": [
"(?i)группа\\s+свк",
"(?i)свк"
],
"forbidden_answer_patterns": [
"(?i)не найден контрагент|уточните, какого контрагента|по какому контрагенту",
"(?i)чист.*прибыл|90/91/99|финрезульт",
"(?i)route_candidate|primitive|planner_|catalog_|snapshot_items|answer_object|capability_id|mcp_discovery"
],
"criticality": "critical"
},
{
"step_id": "step_04_payout_switch_by_resolved_entity",
"title": "Outgoing payment follow-up keeps the same grounded counterparty and checked year",
"question": "а теперь сколько заплатили?",
"depends_on": [
"step_03_incoming_by_resolved_entity"
],
"allowed_reply_types": [
"factual_with_explanation",
"partial_coverage"
],
"semantic_tags": [
"entity_resolution",
"payout_switch",
"followup_reuse",
"date_carryover",
"planner_catalog_alignment"
],
"required_answer_shape": "direct_answer_first",
"required_answer_patterns_all": [
"(?i)2020",
"(?i)заплатил|исходящ|списан|платеж|платёж",
"(?i)руб"
],
"required_answer_patterns_any": [
"(?i)группа\\s+свк",
"(?i)свк"
],
"forbidden_answer_patterns": [
"(?i)не найден контрагент|уточните, какого контрагента|по какому контрагенту|за какой год",
"(?i)чист.*прибыл|90/91/99|финрезульт",
"(?i)route_candidate|primitive|planner_|catalog_|snapshot_items|answer_object|capability_id|mcp_discovery"
],
"criticality": "critical"
},
{
"step_id": "step_05_net_after_payout",
"title": "Net-flow follow-up reuses the same grounded counterparty and checked year after payout",
"question": "а какое нетто?",
"depends_on": [
"step_04_payout_switch_by_resolved_entity"
],
"allowed_reply_types": [
"factual_with_explanation",
"partial_coverage"
],
"semantic_tags": [
"entity_resolution",
"net_value_flow",
"followup_reuse",
"date_carryover",
"planner_catalog_alignment"
],
"required_answer_shape": "direct_answer_first",
"required_answer_patterns_all": [
"(?i)2020",
"(?i)нетто|сальдо|разниц",
"(?i)получ",
"(?i)заплат",
"(?i)руб"
],
"required_answer_patterns_any": [
"12[ .\\u00a0]?093[ .\\u00a0]?465|12093465",
"(?i)группа\\s+свк|свк"
],
"forbidden_answer_patterns": [
"(?i)не найден контрагент|уточните, какого контрагента|по какому контрагенту|за какой год",
"(?i)чист.*прибыл|90/91/99|финрезульт",
"(?i)route_candidate|primitive|planner_|catalog_|snapshot_items|answer_object|capability_id|mcp_discovery"
],
"criticality": "critical"
},
{
"step_id": "step_06_documents_after_net",
"title": "Document evidence follow-up keeps the grounded counterparty after the net answer",
"question": "а по документам?",
"depends_on": [
"step_05_net_after_payout"
"step_02_payments_by_pronoun_followup"
],
"allowed_reply_types": [
"factual",
@ -251,34 +147,28 @@
"partial_coverage"
],
"semantic_tags": [
"entity_resolution",
"document_evidence",
"value_flow_pivot",
"followup_reuse",
"planner_catalog_alignment"
"contracts_followup",
"second_pivot",
"counterparty_pronoun_resolution",
"integrity_guard"
],
"required_answer_shape": "direct_answer_first",
"required_answer_patterns_all": [
"(?i)документ|счет|счёт|накладн|акт"
],
"required_answer_patterns_any": [
"(?i)группа\\s+свк",
"(?i)свк",
"(?i)2020"
"(?i)жуковк|контрагент",
"(?i)договор|контракт|соглаш"
],
"forbidden_answer_patterns": [
"(?i)не найден контрагент|уточните, какого контрагента|по какому контрагенту",
"(?i)сколько получили|сколько заплатили|нетто",
"(?i)уточните.*контрагент|какого контрагента",
"(?i)route_candidate|primitive|planner_|catalog_|snapshot_items|answer_object|capability_id|mcp_discovery"
],
"criticality": "critical"
},
{
"step_id": "step_07_movements_after_documents",
"title": "Movement evidence follow-up keeps the grounded counterparty after the document answer",
"question": "а по движениям?",
"step_id": "step_04_documents_after_contracts_pivot",
"title": "Pivot back from contracts to documents",
"question": "А по нему документы?",
"depends_on": [
"step_06_documents_after_net"
"step_03_contracts_after_payments_pivot"
],
"allowed_reply_types": [
"factual",
@ -286,84 +176,168 @@
"partial_coverage"
],
"semantic_tags": [
"entity_resolution",
"movement_evidence",
"document_pivot",
"followup_reuse",
"planner_catalog_alignment"
"documents_followup",
"third_pivot",
"counterparty_pronoun_resolution",
"integrity_guard"
],
"required_answer_shape": "direct_answer_first",
"required_answer_patterns_all": [
"(?i)движени|операц|платеж|платёж|списан|поступ"
],
"required_answer_patterns_any": [
"(?i)группа\\s+свк",
"(?i)свк",
"(?i)2020"
"(?i)жуковк|контрагент",
"(?i)документ|сч[её]т|акт|накладн|строк"
],
"forbidden_answer_patterns": [
"(?i)не найден контрагент|уточните, какого контрагента|по какому контрагенту",
"(?i)сколько получили|сколько заплатили|нетто",
"(?i)уточните.*контрагент|какого контрагента",
"(?i)route_candidate|primitive|planner_|catalog_|snapshot_items|answer_object|capability_id|mcp_discovery"
],
"criticality": "critical"
},
{
"step_id": "step_08_broad_business_evaluation_explicit_org",
"title": "Broad business evaluation stays grounded and bounded after counterparty drilldowns",
"question": "Как ты оценишь деятельность компании {{bindings.main_organization}} по данным 1С?",
"step_id": "step_05_payments_after_documents_pivot",
"title": "Pivot back again to payments",
"question": "А по нему платежи?",
"depends_on": [
"step_07_movements_after_documents"
"step_04_documents_after_contracts_pivot"
],
"allowed_reply_types": [
"factual",
"factual_with_explanation",
"partial_coverage"
],
"semantic_tags": [
"broad_business_evaluation",
"grounded_summary",
"context_switch_from_counterparty_to_company"
"payments_followup",
"fourth_pivot",
"counterparty_pronoun_resolution",
"integrity_guard"
],
"required_answer_shape": "direct_answer_first",
"required_answer_patterns_all": [
"(?i)альтернатива",
"(?i)ограниченн|проверенн|не\\s+аудит|не\\s+аудитор",
"(?i)1с|подтвержд",
"(?i)денежн|долг|ндс|контрагент|операц"
"(?i)жуковк|контрагент",
"(?i)плат[её]ж|операц|банк|поступлен|списан"
],
"forbidden_answer_patterns": [
"(?i)^\\s*коротко:",
"(?i)чистая\\s+прибыль\\s+подтверждена|аудиторское\\s+заключение",
"(?i)уточните.*контрагент|какого контрагента",
"(?i)route_candidate|primitive|planner_|catalog_|snapshot_items|answer_object|capability_id|mcp_discovery"
],
"criticality": "critical"
},
{
"step_id": "step_06_year_switch_after_payments",
"title": "Year switch keeps counterparty and payment action",
"question": "А за 2021?",
"depends_on": [
"step_05_payments_after_documents_pivot"
],
"allowed_reply_types": [
"factual",
"factual_with_explanation",
"partial_coverage"
],
"semantic_tags": [
"year_switch_after_fourth_pivot",
"payments_followup",
"period_followup_reuse",
"integrity_guard"
],
"required_answer_shape": "direct_answer_first",
"required_answer_patterns_all": [
"(?i)2021",
"(?i)жуковк|контрагент",
"(?i)плат[её]ж|операц|банк|поступлен|списан"
],
"forbidden_answer_patterns": [
"(?i)уточните.*контрагент|какого контрагента|за какой год",
"(?i)метадан|схем|объект[а-я]* 1с",
"(?i)route_candidate|primitive|planner_|catalog_|snapshot_items|answer_object|capability_id|mcp_discovery"
],
"criticality": "critical"
},
{
"step_id": "step_07_debt_due_date_boundary",
"title": "Debt due-date ask stays honest about overdue evidence",
"question": "По ООО Альтернатива Плюс на конец 2020 можно точно понять, какая дебиторка просрочена?",
"allowed_reply_types": [
"factual",
"factual_with_explanation",
"partial_coverage"
],
"semantic_tags": [
"business_overview",
"debt_due_date_boundary",
"checked_negative",
"honest_boundary"
],
"required_answer_shape": "direct_answer_first",
"required_answer_patterns_all": [
"(?i)дебитор|долг|открыт.*расчет|остат",
"(?i)2020|2020-12-31|конец 2020",
"(?i)срок.*оплат|due[- ]?date|просроч",
"(?i)не установлен|не подтвержд|не доказ|нет подтвержденной просроч",
"(?i)1С|проверенн|найденн|подтвержд"
],
"forbidden_answer_patterns": [
"(?i)точно подтверждаю.*просроч",
"(?i)просроч.*подтвержден.*без.*срок",
"(?i)route_candidate|query_movements|primitive|planner_|catalog_|snapshot_items|answer_object|capability_id|mcp_discovery"
],
"criticality": "critical"
},
{
"step_id": "step_08_debt_boundary_short_followup",
"title": "Short follow-up keeps the debt due-date boundary",
"question": "То есть просрочку доказать нельзя, коротко почему?",
"depends_on": [
"step_07_debt_due_date_boundary"
],
"allowed_reply_types": [
"factual",
"factual_with_explanation",
"partial_coverage"
],
"semantic_tags": [
"context_carryover",
"debt_due_date_boundary",
"checked_negative",
"short_followup"
],
"required_answer_shape": "direct_answer_first",
"required_answer_patterns_all": [
"(?i)срок.*оплат|due[- ]?date|договор",
"(?i)не установлен|не хватает|не подтвержд|не доказ",
"(?i)просроч",
"(?i)2020|2020-12-31|конец 2020"
],
"forbidden_answer_patterns": [
"(?i)уточните организац|какую компанию",
"(?i)точно подтверждаю.*просроч",
"(?i)route_candidate|primitive|planner_|catalog_|snapshot_items|answer_object|capability_id|mcp_discovery"
],
"criticality": "critical"
},
{
"step_id": "step_09_off_domain_living_chat_not_hijacked",
"title": "Off-domain living chat is not hijacked by stale business context",
"question": "а чем капибара отличается от утки?",
"depends_on": [
"step_08_broad_business_evaluation_explicit_org"
],
"title": "Off-domain chat recovers after settlement and debt context",
"question": "Ок, а пингвины умеют летать?",
"allowed_reply_types": [
"factual",
"factual_with_explanation",
"partial_coverage"
],
"semantic_tags": [
"off_domain_living_chat",
"stale_replay_forbidden",
"context_boundary"
"context_boundary",
"human_answer"
],
"required_answer_shape": "direct_answer_first",
"required_answer_patterns_any": [
"(?i)капибар.*утк|утк.*капибар",
"(?i)млекопита|птиц|грызун"
"(?i)пингвин",
"(?i)не умеют летать|не летают|большинство.*не летает"
],
"forbidden_answer_patterns": [
"(?i)альтернатива|свк|контрагент|1с|поступлен|платеж|платёж|нетто",
"(?i)1С|контрагент|дебитор|договор|плат[её]ж|документ|Жуковк|Альтернатива",
"(?i)route_candidate|primitive|planner_|catalog_|snapshot_items|answer_object|capability_id|mcp_discovery"
],
"criticality": "warning"
"criticality": "info"
}
]
}