Этап 4 corrective pack 2 по family isolation после текущих routing fixes
This commit is contained in:
@@ -0,0 +1,251 @@
|
||||
# Stage 4 - Family Card v1 — FA amortization coverage (runtime-aligned)
|
||||
|
||||
**document_status:** `ACTIVE`
|
||||
**family_name:** `Амортизация ОС — полнота охвата / риск пропуска объекта`
|
||||
**family_id:** `FA_AMORTIZATION_COVERAGE_V1`
|
||||
**stage_scope:** `Stage 4 (P0-only)`
|
||||
**current_family_status:** `PROOF_PATH_RAISED_LIVE_ACCEPTANCE_PENDING`
|
||||
**primary_gap:** `live object-level relation clarity + production live acceptance`
|
||||
**latest_pack:** `2026-03-29_Stage_04_FA_Pack_Amortization_Proof_Closure`
|
||||
**next_pack_focus:** `live replay acceptance + relation/anchor consistency in production channel`
|
||||
**family_source_of_truth_questions:** `FA-Q1 (31 июля: 2 471,52 / 2 465,28 / 849,83 — полное ли начисление); FA-Q2 (expected vs actual set по объектам ОС за июль); FA-Q3 (есть ли missing object candidates в июльском начислении)`
|
||||
**family_latest_live_replay:** `X:\1C\NDC_1C\llm_normalizer\docs\runs\2026-03-29_Stage_04_FA_Pack_Amortization_Proof_Closure_live_attempt\fa_live_raw.json (текущий live attempt: http_status=400, невалидная приемка)`
|
||||
**family_latest_acceptance_run:** `X:\1C\NDC_1C\llm_normalizer\docs\runs\2026-03-29_Stage_04_FA_Pack_Amortization_Proof_Closure\run_summary.json`
|
||||
|
||||
## 1) Что фиксирует этот документ
|
||||
|
||||
Карточка разделяет два слоя:
|
||||
|
||||
1. `Runtime V1 (as-is)` — только то, что подтверждено текущим кодом и артефактами пакета.
|
||||
2. `Target V2 (planned)` — что нужно дожать, но пока не считается текущим acceptance gate.
|
||||
|
||||
Это защищает от ложного закрытия family по mock-результату без live-приемки.
|
||||
|
||||
## 2) Runtime V1 (фактический контракт на 2026-03-29)
|
||||
|
||||
### 2.1 Claim contract (as-is)
|
||||
|
||||
- **primary claim_type:** `prove_fixed_asset_amortization_coverage`
|
||||
- **additional claim_types:** пока не выделялись как отдельные first-class claim types
|
||||
- **границы claim:**
|
||||
- не расширяет домены за рамки Stage 4 P0;
|
||||
- не вводит новый proof engine;
|
||||
- не использует Stage 5 investigation как core path.
|
||||
|
||||
### 2.2 Required anchors (runtime-enforced, as-is)
|
||||
|
||||
Для `prove_fixed_asset_amortization_coverage` в рантайме обязательны:
|
||||
|
||||
- `period`
|
||||
- `fixed_asset_signal`
|
||||
- `amortization_signal`
|
||||
- `amount_or_document`
|
||||
- `account_scope_or_document_type`
|
||||
|
||||
Факт по latest acceptance run:
|
||||
|
||||
- `required_anchors_count = 5`
|
||||
- `missing_anchor_classes_count = 0`
|
||||
- `claim_anchor_coverage_ratio = 1`
|
||||
|
||||
### 2.3 Claim-bound live recipe (runtime-enforced, as-is)
|
||||
|
||||
Обязательные live вызовы:
|
||||
|
||||
1. `find_amortization_documents_in_period`
|
||||
2. `find_fixed_asset_movements_accounts_01_02`
|
||||
3. `find_fixed_asset_cards_expected_for_period`
|
||||
4. `match_expected_vs_actual_fa_coverage`
|
||||
|
||||
Ожидаемый результат recipe:
|
||||
|
||||
- документ(ы) начисления амортизации;
|
||||
- candidate/actual набор объектов ОС;
|
||||
- expected set для периода;
|
||||
- сравнение expected vs actual и кандидаты пропуска.
|
||||
|
||||
### 2.4 Route behavior (as-is)
|
||||
|
||||
Для FA-claim runtime:
|
||||
|
||||
- форсирует claim-bound live-capable route;
|
||||
- может переопределять `store_feature_risk` в live/hybrid path;
|
||||
- экспортирует `fa_live_route_audit` в debug payload.
|
||||
|
||||
Факт по latest acceptance run:
|
||||
|
||||
- `live_route_execution_rate = 1`
|
||||
- `required_live_calls = 4`
|
||||
- `missing_live_calls = 0`
|
||||
- `route_adjustments_applied = 1`
|
||||
|
||||
### 2.5 Evidence/admissibility behavior (as-is)
|
||||
|
||||
Факт по latest acceptance run:
|
||||
|
||||
- `admissible_evidence_count = 16`
|
||||
- `rejected_evidence_count = 32`
|
||||
- reject breakdown: `wrong_account_scope = 16`, `weak_source_mapping = 16`
|
||||
|
||||
Факт по targeted evidence:
|
||||
|
||||
- `targeted_evidence_hit_rate = 1`
|
||||
- `expected_fa_set_count = 2`
|
||||
- `actual_fa_set_count = 2`
|
||||
- `missing_fa_candidates_count = 0`
|
||||
- `uncertain_fa_candidates_count = 28`
|
||||
|
||||
### 2.6 Runtime acceptance snapshot (по latest pack)
|
||||
|
||||
- `FA_EXPECTED_SET_FIXED = FIXED`
|
||||
- `FA_RELATION_MAPPING_FIXED = FIXED`
|
||||
- `FA_CLAIM_ANCHOR_CLOSURE_FIXED = FIXED`
|
||||
- `FA_PROOF_CLOSURE_FIXED = FIXED`
|
||||
- общий статус: `FA_PACK_ACCEPTED`
|
||||
- важная оговорка: режим пакета `mock` (controlled replay)
|
||||
|
||||
### 2.7 known_runtime_limits (as-is)
|
||||
|
||||
- `live acceptance pending`: актуальный live attempt завершился `http_status=400`, не может быть источником приемки.
|
||||
- `relation clarity incomplete`: несмотря на coverage=1 в mock, в relation map много `coverage_status=uncertain` и слабых object-level link.
|
||||
- `admissibility noise remains`: значимый reject-шум (`wrong_account_scope`, `weak_source_mapping`) сохраняется и требует дожима для production live.
|
||||
|
||||
## 3) Target V2 (planned, не критерий текущей приемки)
|
||||
|
||||
### 3.1 Planned claim extension
|
||||
|
||||
- Развести подтипы FA-claim по режимам:
|
||||
- `prove_fixed_asset_amortization_completeness`
|
||||
- `prove_fixed_asset_missing_object_risk`
|
||||
- `prove_fixed_asset_expected_actual_consistency`
|
||||
|
||||
### 3.2 Planned anchor extension
|
||||
|
||||
- Явный `expected_fa_set` как first-class anchor.
|
||||
- Явный `actual_fa_set_from_amortization` как first-class anchor.
|
||||
- Явный `missing_fa_candidates` с object identity и link quality.
|
||||
|
||||
### 3.3 Planned family metrics
|
||||
|
||||
- `fa_expected_set_reconstruction_rate`
|
||||
- `fa_relation_mapping_coverage_rate`
|
||||
- `fa_claim_anchor_coverage_rate`
|
||||
- `fa_actual_vs_expected_comparison_rate`
|
||||
- `fa_proof_closure_rate`
|
||||
- `fa_false_grounded_answer_rate`
|
||||
- `fa_live_acceptance_pass_rate`
|
||||
|
||||
## 4) Required entities and relations (business contract)
|
||||
|
||||
### 4.1 Минимально необходимые сущности для proof closure
|
||||
|
||||
1. Документ(ы) начисления амортизации за июль.
|
||||
2. Объекты ОС, которые должны участвовать в начислении.
|
||||
3. Движения/проводки по контуру амортизации (в т.ч. счета 01/02).
|
||||
4. Expected set объектов ОС на период.
|
||||
5. Actual set объектов, реально попавших в начисление.
|
||||
6. Missing/uncertain candidates для object-level verdict.
|
||||
|
||||
### 4.2 Критические relation links
|
||||
|
||||
1. `fa_object -> amortization_document`
|
||||
2. `amortization_document -> movement/posting`
|
||||
3. `fa_object -> expected_period_coverage`
|
||||
4. `expected_set -> actual_set`
|
||||
5. `missing_or_uncertain_object -> coverage_risk_verdict`
|
||||
|
||||
## 5) Snapshot/Live coverage verdict (as-is)
|
||||
|
||||
- По FA family практический режим: `snapshot_plus_live_required`.
|
||||
- В controlled replay proof-path поднят до `grounded_positive`.
|
||||
- Production live приемка пока не закрыта.
|
||||
|
||||
## 6) Answer/proof modes contract
|
||||
|
||||
### `grounded_positive`
|
||||
|
||||
Допускается, если одновременно:
|
||||
|
||||
- `admissible_evidence_count > 0`
|
||||
- реконструированы `expected_fa_set` и `actual_fa_set`
|
||||
- сделано сравнение expected vs actual
|
||||
- вывод имеет object-level опору, не только сумму
|
||||
- `false_grounded_answer_rate = 0`
|
||||
|
||||
Короткий пример:
|
||||
|
||||
- `За июль подтверждены ожидаемый и фактический наборы ОС; пропусков по зафиксированным объектам не выявлено, риск неполноты начисления низкий.`
|
||||
|
||||
### `limited_or_insufficient_evidence`
|
||||
|
||||
Обязателен, если:
|
||||
|
||||
- не реконструирован expected set или actual set
|
||||
- object-level links недостаточны
|
||||
- есть только косвенная/шумная опора
|
||||
|
||||
Короткий пример:
|
||||
|
||||
- `Суммы начисления зафиксированы, но object-level соответствие expected vs actual не восстановлено; вывод ограничен и не подтверждает полноту начисления.`
|
||||
|
||||
### Запрещенные паттерны
|
||||
|
||||
- вывод о полноте начисления только по суммам без object-level связи
|
||||
- уверенный verdict при `admissible = 0`
|
||||
- общий lifecycle-текст без указания missing object/link
|
||||
|
||||
Короткий антипример:
|
||||
|
||||
- `Амортизация начислена корректно, пропусков нет` (нельзя без expected/actual object-level proof).
|
||||
|
||||
## 7) Gap register (FA family)
|
||||
|
||||
| gap_id | category | severity | current_state | note |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| FA-G1 | `live_acceptance_not_confirmed` | blocker | open | текущий live attempt дал `http_status=400`, приемка фактически mock-only |
|
||||
| FA-G2 | `wrong_entity_mapping` / `relation_clarity` | high | open | в relation map много `coverage_status=uncertain` и слабых direct links |
|
||||
| FA-G3 | `admissibility_reject_not_due_to_data` | medium | open | reject-шум по `wrong_account_scope` и `weak_source_mapping` |
|
||||
| FA-G4 | `answer_layer_underuses_available_evidence` | medium | partial | в части трасс answer-mode может звучать ограничительно при сильной eligibility |
|
||||
|
||||
## 8) Code-path inventory (где живет контракт)
|
||||
|
||||
- `llm_normalizer/backend/src/services/assistantClaimBoundEvidence.ts`
|
||||
- FA claim resolution;
|
||||
- required anchors;
|
||||
- targeted checks;
|
||||
- expected/actual/missing/uncertain FA coverage structures.
|
||||
|
||||
- `llm_normalizer/backend/src/services/assistantDataLayer.ts`
|
||||
- claim-bound FA live plan;
|
||||
- live call profile `claim_bound_fa_live_path`;
|
||||
- relation markers (`asset_card_to_depreciation`, `document_to_posting`).
|
||||
|
||||
- `llm_normalizer/backend/src/services/assistantService.ts`
|
||||
- FA live route enforcement;
|
||||
- route override audit (`fa_live_route_audit`);
|
||||
- handoff в eligibility/answer layer.
|
||||
|
||||
- run artifacts:
|
||||
- `X:\1C\NDC_1C\llm_normalizer\docs\runs\2026-03-29_Stage_04_FA_Pack_Amortization_Proof_Closure`
|
||||
- `X:\1C\NDC_1C\llm_normalizer\docs\runs\2026-03-29_Stage_04_FA_Pack_Amortization_Proof_Closure_live_attempt`
|
||||
- `X:\1C\NDC_1C\llm_normalizer\docs\runs\2026-03-29_Stage_04_FA_Pack_Amortization_Proof_Closure_mock_replay`
|
||||
|
||||
## 9) Regression set and acceptance policy
|
||||
|
||||
Обязательный минимум для FA family:
|
||||
|
||||
1. Базовый вопрос по трем суммам `2 471,52 / 2 465,28 / 849,83`.
|
||||
2. Вариация без сумм, но с запросом полноты expected vs actual.
|
||||
3. Вариация на missing-object risk.
|
||||
4. Follow-up по конкретному объекту ОС (если объект выделен).
|
||||
|
||||
Политика:
|
||||
|
||||
- после каждого FA pack обязателен новый run folder в `llm_normalizer/docs/runs`;
|
||||
- acceptance фиксируется на уровне family;
|
||||
- mock acceptance не заменяет live acceptance;
|
||||
- `false_grounded` должен оставаться нулевым.
|
||||
|
||||
## 10) Project decision line for this family
|
||||
|
||||
FA family поднята до proof-ready уровня в controlled replay, но остается в статусе `live acceptance pending` до подтверждения object-level closure на реальном live канале.
|
||||
@@ -0,0 +1,240 @@
|
||||
# Stage 4 - Family Card v1 — RBP tail / write-off overstay (runtime-aligned)
|
||||
|
||||
**document_status:** `ACTIVE`
|
||||
**family_name:** `РБП — хвост / списание / overstay`
|
||||
**family_id:** `RBP_TAIL_WRITEOFF_OVERSTAY_V1`
|
||||
**stage_scope:** `Stage 4 (P0-only)`
|
||||
**current_family_status:** `ACCEPTED_WITH_LIMITATIONS`
|
||||
**primary_gap:** `source coverage`
|
||||
**latest_pack:** `2026-03-29_Stage_04_RBP_Pack_Live_Source_To_Proof_Fix`
|
||||
**next_pack_focus:** `source coverage recovery + route tightening for full claim closure`
|
||||
**family_source_of_truth_questions:** `RBP-Q1 (Списание РБП за Июль 2020, включая 5 000); RBP-Q2 (хвост РБП к концу июля без суммы); RBP-Q3 (полнота закрытия июльского списания)`
|
||||
**family_latest_live_replay:** `2026-03-29_Stage_04_RBP_Pack_Live_Source_To_Proof_Fix/1.txt (локальный replay; внешний live-канал требует отдельной приемки)`
|
||||
**family_latest_acceptance_run:** `2026-03-29_Stage_04_RBP_Pack_Live_Source_To_Proof_Fix/run_summary.json`
|
||||
|
||||
## 1) Что фиксирует этот документ
|
||||
|
||||
Карточка теперь разделяет два слоя:
|
||||
|
||||
1. `Runtime V1 (as-is)` — только то, что уже реально работает в коде и подтверждено артефактами.
|
||||
2. `Target V2 (planned)` — что хотим довести в следующих pack, но пока не считаем критерием текущей приемки.
|
||||
|
||||
Это нужно, чтобы не смешивать факт и план и не закрывать family “по красивому тексту”.
|
||||
|
||||
## 2) Runtime V1 (фактический контракт на 2026-03-29)
|
||||
|
||||
### 2.1 Claim contract (as-is)
|
||||
|
||||
- **primary claim_type:** `prove_rbp_tail_state`
|
||||
- **additional claim_types:** пока не first-class в runtime (учитываются как план V2)
|
||||
- **границы claim:**
|
||||
- не включает Stage 5 investigation как core path;
|
||||
- не расширяет домены за пределы Stage 4 P0;
|
||||
- не делает full redesign proof engine.
|
||||
|
||||
### 2.2 Required anchors (runtime-enforced, as-is)
|
||||
|
||||
Для `prove_rbp_tail_state` в рантайме обязательны:
|
||||
|
||||
- `period`
|
||||
- `rbp_signal`
|
||||
- `writeoff_signal`
|
||||
|
||||
Технические reason codes на этом шаге:
|
||||
|
||||
- `claim_missing_required_anchors`
|
||||
- `claim_anchor_resolution_low`
|
||||
|
||||
### 2.3 Claim-bound live recipe (runtime-enforced, as-is)
|
||||
|
||||
Обязательные live вызовы:
|
||||
|
||||
1. `find_rbp_writeoff_documents_in_period`
|
||||
2. `find_rbp_object_movements_account_97`
|
||||
3. `find_month_close_entries_linked_to_rbp`
|
||||
4. `compute_end_period_residual_by_rbp_object`
|
||||
|
||||
Ожидаемый результат recipe:
|
||||
|
||||
- подтверждение документа списания;
|
||||
- привязка к объекту(ам) РБП;
|
||||
- движение/связанные записи;
|
||||
- residual state на границе периода.
|
||||
|
||||
### 2.4 Route behavior (as-is)
|
||||
|
||||
Для `prove_rbp_tail_state` runtime:
|
||||
|
||||
- форсирует live-capable маршрут (`hybrid_store_plus_live` / `live_mcp_drilldown`);
|
||||
- поднимает `insufficient_specificity` в live path вместо `no_route`;
|
||||
- экспортирует `rbp_live_route_audit` в debug payload.
|
||||
|
||||
### 2.5 Evidence/admissibility behavior (as-is)
|
||||
|
||||
Подтверждено в текущем пакете:
|
||||
|
||||
- убрана инъекция raw live rows при `matched_rows = 0`;
|
||||
- добавлена стабилизированная live metadata для source mapping;
|
||||
- claim-bound targeted checks для RBP расширены до object/document/movement/residual.
|
||||
|
||||
Наблюдаемые baseline reject reasons (до фикса пакета):
|
||||
|
||||
- `zero_live_match`
|
||||
- `weak_source_mapping`
|
||||
- `wrong_account_scope`
|
||||
|
||||
### 2.6 Runtime acceptance snapshot (по артефактам latest pack)
|
||||
|
||||
- `RBP_SOURCE_COVERAGE_FIXED = NOT_FIXED`
|
||||
- `RBP_LIVE_ROUTE_FIXED = FIXED`
|
||||
- `RBP_EVIDENCE_MATERIALIZATION_FIXED = FIXED`
|
||||
- общий статус: `RBP_PACK_ACCEPTED_WITH_LIMITATIONS`
|
||||
|
||||
### 2.7 known_runtime_limits (as-is)
|
||||
|
||||
- `source coverage incomplete`: для части object-level proof звеньев данные в runtime source set еще неполные.
|
||||
- `business scope inconsistency possible`: в части live traces возможна несогласованность `generic_accounting` vs `company_specific_accounting`.
|
||||
- `anchor noise in edge cases`: в отдельных кейсах могут появляться нерелевантные account hints, влияющие на route profile.
|
||||
|
||||
## 3) Target V2 (planned, не критерий текущей приемки)
|
||||
|
||||
### 3.1 Planned claim extension
|
||||
|
||||
Дополнительные claim types (план):
|
||||
|
||||
- `prove_rbp_writeoff_completeness`
|
||||
- `prove_rbp_lifecycle_overstay`
|
||||
- `prove_rbp_period_end_residual_state`
|
||||
|
||||
### 3.2 Planned anchor extension
|
||||
|
||||
Расширенный target-набор anchors (план):
|
||||
|
||||
- период (primary + period-end)
|
||||
- суммы/диапазоны
|
||||
- объект РБП
|
||||
- документ/тип документа
|
||||
- движения/остаток на конец периода
|
||||
- lifecycle markers для overstay
|
||||
|
||||
### 3.3 Planned family metrics
|
||||
|
||||
Плановые family-метрики (в stable harness):
|
||||
|
||||
- `rbp_required_entity_coverage_rate`
|
||||
- `rbp_live_route_execution_rate`
|
||||
- `rbp_admissible_evidence_nonzero_rate`
|
||||
- `rbp_source_to_proof_completion_rate`
|
||||
- `rbp_partial_coverage_default_rate`
|
||||
- `rbp_false_grounded_answer_rate`
|
||||
|
||||
До формализации в harness эти метрики считаются target-моделью, а не текущим hard gate.
|
||||
|
||||
## 4) Required entities and relations (business contract)
|
||||
|
||||
### 4.1 Минимально необходимые сущности для proof closure
|
||||
|
||||
1. Документ `Списание РБП` за целевой период.
|
||||
2. Объект(ы) РБП.
|
||||
3. Движения/регистровые записи по списанию.
|
||||
4. Residual state на конец периода.
|
||||
5. Связь со стадией month-close при необходимости.
|
||||
|
||||
### 4.2 Критические relation links
|
||||
|
||||
1. `RBP object -> writeoff document`
|
||||
2. `writeoff document -> movement/register record`
|
||||
3. `movement/register record -> period-end residual`
|
||||
4. `expected lifecycle -> actual lifecycle result`
|
||||
5. `residual state -> overstay/no-overstay verdict`
|
||||
|
||||
## 5) Snapshot/Live coverage verdict (as-is)
|
||||
|
||||
- `snapshot-only` для RBP сейчас **недостаточен** для устойчивого object-level proof closure.
|
||||
- Family требует `snapshot_plus_live_required`.
|
||||
- Главный незакрытый узел — source coverage в production live данных.
|
||||
|
||||
## 6) Answer/proof modes contract
|
||||
|
||||
### `grounded_positive`
|
||||
|
||||
Допускается, если одновременно:
|
||||
|
||||
- `admissible_evidence_count > 0`
|
||||
- закрыта цепочка object/document/movement/residual
|
||||
- вывод опирается на конкретные source refs
|
||||
- `false_grounded_answer_rate = 0`
|
||||
|
||||
Короткий пример:
|
||||
|
||||
- `Подтвержден документ "Списание РБП" за июль 2020, найден связанный объект РБП и остаток на конец периода = 0; признаков overstay по этому объекту не выявлено.`
|
||||
|
||||
### `limited_or_insufficient_evidence`
|
||||
|
||||
Обязателен, если:
|
||||
|
||||
- не найден ключевой link (document/object/residual)
|
||||
- admissible evidence недостаточно
|
||||
- нет права имитировать доказанность
|
||||
|
||||
Короткий пример:
|
||||
|
||||
- `Документ списания найден, но связь с объектом РБП и подтвержденный остаток на конец периода не восстановлены; вывод ограничен до partial coverage без утверждения об overstay.`
|
||||
|
||||
### Запрещенные паттерны
|
||||
|
||||
- общий lifecycle narrative без указания missing link
|
||||
- уверенный вывод при `admissible = 0`
|
||||
- смешивание snapshot-гипотез с live-доказанностью без маркировки
|
||||
|
||||
Короткий антипример:
|
||||
|
||||
- `Есть признаки проблемы по РБП, вероятно хвост остался` (нельзя без document/object/residual подтверждения).
|
||||
|
||||
## 7) Gap register (RBP family)
|
||||
|
||||
| gap_id | category | severity | current_state | note |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| RBP-G1 | `missing_source_data` / `source_coverage` | blocker | open | ключевая причина `ACCEPTED_WITH_LIMITATIONS` |
|
||||
| RBP-G2 | `business_scope_resolution_consistency` | high | open | в отдельных live traces встречается несогласованность generic/company-specific слоев |
|
||||
| RBP-G3 | `anchor_quality` | medium | open | в отдельных кейсах попадают нерелевантные account hints, что ухудшает route profile |
|
||||
|
||||
## 8) Code-path inventory (где живет контракт)
|
||||
|
||||
- `llm_normalizer/backend/src/services/assistantClaimBoundEvidence.ts`
|
||||
- claim type resolution;
|
||||
- required anchors для `prove_rbp_tail_state`;
|
||||
- anchor resolution rate и claim reason codes.
|
||||
|
||||
- `llm_normalizer/backend/src/services/assistantDataLayer.ts`
|
||||
- claim-bound live plan для RBP;
|
||||
- обязательные live call ids и account scope overrides;
|
||||
- source profile `claim_bound_rbp_live_path`.
|
||||
|
||||
- `llm_normalizer/backend/src/services/assistantService.ts`
|
||||
- RBP live route enforcement;
|
||||
- no-route recovery;
|
||||
- `rbp_live_route_audit` export.
|
||||
|
||||
- run artifacts:
|
||||
- `llm_normalizer/docs/runs/2026-03-29_Stage_04_RBP_Pack_Live_Source_To_Proof_Fix`
|
||||
|
||||
## 9) Regression set and acceptance policy
|
||||
|
||||
Обязательный минимум для family replay:
|
||||
|
||||
1. Базовый RBP вопрос: `Списание РБП за Июль 2020`, включая сумму `5 000`.
|
||||
2. Вариация без суммы (проверка period + overstay signal).
|
||||
3. Вариация на полноту закрытия.
|
||||
4. Follow-up по тому же документу/объекту.
|
||||
5. Соседний month-close sanity case.
|
||||
|
||||
Политика:
|
||||
|
||||
- после каждого family pack обязателен новый run folder в `llm_normalizer/docs/runs`;
|
||||
- приемка фиксируется на уровне family, не одиночного вопроса;
|
||||
- `false_grounded` должен оставаться нулевым.
|
||||
|
||||
## 10) Project decision line for this family
|
||||
|
||||
RBP уже перешел в family-based execution контур Stage 4, но остается в статусе `accepted_with_limitations` до восстановления source coverage в живом канале.
|
||||
@@ -0,0 +1,230 @@
|
||||
# Stage 4 - Family Card v1 — VAT chain (runtime-aligned)
|
||||
|
||||
**document_status:** `ACTIVE`
|
||||
**family_name:** `НДС-цепочка — полнота прохождения от документа до налогового отражения`
|
||||
**family_id:** `VAT_CHAIN_COMPLETENESS_V1`
|
||||
**stage_scope:** `Stage 4 (P0-only)`
|
||||
**current_family_status:** `PARTIALLY_WORKING / NON-BLOCKER`
|
||||
**primary_gap:** `residual admissibility/materialization quality`
|
||||
**latest_pack:** `2026-03-29_Stage_04_Wave_19_2_Live_Runtime_Fix_Replay_1txt`
|
||||
**next_pack_focus:** `targeted live narrowing + reject cleanup for VAT proof-path`
|
||||
**family_source_of_truth_questions:** `VAT-Q1 (13 июля поступление, 15 июля реализация — полная ли НДС-цепочка); VAT-Q2 (есть ли выпадение между документом, проводкой, НДС-регистром и книгой); VAT-Q3 (по July 2020 VAT path grounded-positive или остаются weak-mapping шумы)`
|
||||
**family_latest_live_replay:** `X:\1C\NDC_1C\llm_normalizer\docs\runs\2026-03-29_Stage_04_Wave_19_2_Live_Runtime_Fix_Replay_1txt\1_live_replay.txt`
|
||||
**family_latest_acceptance_run:** `X:\1C\NDC_1C\llm_normalizer\docs\runs\2026-03-29_Stage_04_Wave_19_2_Live_Runtime_Fix_Replay_1txt\run_summary.json`
|
||||
|
||||
## 1) Что фиксирует этот документ
|
||||
|
||||
Карточка разделяет два слоя:
|
||||
|
||||
1. `Runtime V1 (as-is)` — только то, что подтверждено текущим кодом и run-артефактами.
|
||||
2. `Target V2 (planned)` — что нужно дожать следующими family-pack, но пока не является hard gate текущей приемки.
|
||||
|
||||
Это соответствует Stage 4 family-based execution в рамках `P0-only` без перехода в Stage 5 и без архитектурного redesign.
|
||||
|
||||
## 2) Runtime V1 (фактический контракт на 2026-03-29)
|
||||
|
||||
### 2.1 Claim contract (as-is)
|
||||
|
||||
- **primary claim_type:** `prove_vat_chain_completeness`
|
||||
- **additional claim_types:** пока не выделялись как first-class в runtime
|
||||
- **границы claim:**
|
||||
- не расширяет домены за рамки VAT family;
|
||||
- не включает общий налоговый аудит;
|
||||
- не включает Stage 5 investigation как core path.
|
||||
|
||||
### 2.2 Required anchors (runtime-enforced, as-is)
|
||||
|
||||
Для `prove_vat_chain_completeness` в текущем runtime обязательны:
|
||||
|
||||
- `period`
|
||||
- `document_types`
|
||||
- `vat_signal`
|
||||
- `chain_signal`
|
||||
|
||||
Факт: эти anchors соответствуют текущему `requiredByClaim` в runtime.
|
||||
|
||||
### 2.3 Claim checks and live recipe (runtime-enforced, as-is)
|
||||
|
||||
Для VAT claim runtime требует закрытия проверок:
|
||||
|
||||
1. `source_document_found`
|
||||
2. `invoice_found`
|
||||
3. `tax_register_entry_found`
|
||||
4. `book_entry_found`
|
||||
5. `chain_linkage_status`
|
||||
|
||||
Текущий live acquisition path для VAT в runtime:
|
||||
|
||||
- в отличие от RBP/FA, нет выделенного VAT-specific набора обязательных live call id;
|
||||
- используется `hybrid_store_plus_live` + generic live overlay probe;
|
||||
- positive VAT-case может быть закрыт за счет admissible evidence и targeted checks.
|
||||
|
||||
### 2.4 Route behavior (as-is)
|
||||
|
||||
Факт по latest run:
|
||||
|
||||
- VAT case (`L1`) отрабатывает в `factual_with_explanation`;
|
||||
- claim: `prove_vat_chain_completeness`;
|
||||
- mode: `grounded_positive`;
|
||||
- scope: `company_specific_accounting`;
|
||||
- temporal outcome: `passed`.
|
||||
|
||||
### 2.5 Evidence/admissibility behavior (as-is)
|
||||
|
||||
Факт по VAT case (`L1`) в latest run:
|
||||
|
||||
- `admissible_evidence_count = 12`
|
||||
- `grounding_mode = grounded_positive`
|
||||
- основные reject-хвосты: `wrong_account_scope`, `weak_source_mapping`
|
||||
|
||||
Факт по aggregate reject breakdown (run-level):
|
||||
|
||||
- `weak_source_mapping` и `wrong_account_scope` остаются ключевым residual шумом.
|
||||
|
||||
### 2.6 Runtime acceptance snapshot (по latest pack)
|
||||
|
||||
- family status: `PARTIALLY_WORKING / NON-BLOCKER`
|
||||
- по `L1` VAT-кейсу есть `grounded_positive`
|
||||
- общий статус run: `WAVE19_2_ACCEPTED`
|
||||
- важная оговорка: в run зафиксирован `normalizer_mode = useMock=true`
|
||||
|
||||
### 2.7 known_runtime_limits (as-is)
|
||||
|
||||
- `normalizer_mock_mode_in_latest_acceptance`: latest acceptance run выполнялся в режиме `useMock=true`.
|
||||
- `no_explicit_vat_live_call_contract`: для VAT пока нет отдельного жесткого live-call контракта как у RBP/FA.
|
||||
- `admissibility_noise_remains`: сохраняются residual rejects по `weak_source_mapping` и `wrong_account_scope`.
|
||||
|
||||
## 3) Target V2 (planned, не критерий текущей приемки)
|
||||
|
||||
### 3.1 Planned claim extension
|
||||
|
||||
- `prove_vat_register_book_consistency`
|
||||
- `prove_document_to_tax_reflection_closure`
|
||||
- `prove_missing_vat_link_risk`
|
||||
|
||||
### 3.2 Planned anchor extension
|
||||
|
||||
- `invoice_anchor`
|
||||
- `register_entry_anchor`
|
||||
- `book_entry_anchor`
|
||||
- `vat_amount_anchor`
|
||||
- `goods_or_item_linkage_anchor`
|
||||
|
||||
### 3.3 Planned family metrics
|
||||
|
||||
- `vat_grounded_positive_rate`
|
||||
- `vat_admissibility_noise_rate`
|
||||
- `vat_book_register_linkage_rate`
|
||||
- `vat_false_grounded_answer_rate`
|
||||
- `vat_live_targeting_precision_rate`
|
||||
|
||||
## 4) Required entities and relations (business contract)
|
||||
|
||||
### 4.1 Минимально необходимые сущности для proof closure
|
||||
|
||||
1. Документ поступления/реализации.
|
||||
2. Счет-фактура.
|
||||
3. Проводка/движение.
|
||||
4. Запись в НДС-регистре.
|
||||
5. Запись в книге покупок/продаж.
|
||||
6. Связь по товарной позиции/номенклатуре/документной цепочке.
|
||||
7. Контрагент/договорный контур при необходимости.
|
||||
|
||||
### 4.2 Критические relation links
|
||||
|
||||
1. `receipt_or_sale_document -> posting`
|
||||
2. `document -> invoice`
|
||||
3. `invoice -> vat_register_entry`
|
||||
4. `vat_register_entry -> purchase_or_sales_book_entry`
|
||||
5. `goods_or_item_context -> chain_completeness_verdict`
|
||||
|
||||
## 5) Snapshot/Live coverage verdict (as-is)
|
||||
|
||||
- practical mode для VAT family: `snapshot_plus_live_required`
|
||||
- positive path уже подтвержден на части кейсов
|
||||
- family не является текущим главным blocker
|
||||
- next focus: `live narrowing + reject cleanup`, без domain expansion
|
||||
|
||||
## 6) Answer/proof modes contract
|
||||
|
||||
### `grounded_positive`
|
||||
|
||||
Допускается, если одновременно:
|
||||
|
||||
- `admissible_evidence_count > 0`
|
||||
- подтверждены звенья `document -> invoice -> register -> book`
|
||||
- вывод не основан только на общем domain narrative
|
||||
- `false_grounded_answer_rate = 0`
|
||||
|
||||
Короткий пример:
|
||||
|
||||
- `По July 2020 цепочка документ -> проводка -> НДС-регистр -> книга подтверждена; явного выпадения по этой связке не найдено.`
|
||||
|
||||
### `limited_or_insufficient_evidence`
|
||||
|
||||
Обязателен, если:
|
||||
|
||||
- отсутствует одно из ключевых звеньев цепочки;
|
||||
- evidence есть, но mapping слабый;
|
||||
- `register/book` linkage не закрыт.
|
||||
|
||||
Короткий пример:
|
||||
|
||||
- `Документный и проводочный контур частично подтверждены, но связь до НДС-регистра или книги не восстановлена; вывод ограничен.`
|
||||
|
||||
### Запрещенные паттерны
|
||||
|
||||
- `НДС отражен корректно` без документно-регистровой связки;
|
||||
- уверенный verdict при `admissible = 0`;
|
||||
- подмена chain-proof общим domain narrative.
|
||||
|
||||
Короткий антипример:
|
||||
|
||||
- `НДС-цепочка в порядке` (нельзя без подтверждения register/book closure).
|
||||
|
||||
## 7) Gap register (VAT family)
|
||||
|
||||
| gap_id | category | severity | current_state | note |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| VAT-G1 | `admissibility_residual_noise` | medium | open | остаточный шум по `weak_source_mapping` / `wrong_account_scope` |
|
||||
| VAT-G2 | `live_targeting_breadth` | medium | open | live targeting для VAT еще можно сузить до более proof-specific слоя |
|
||||
| VAT-G3 | `materialization_cleanup` | medium | open | positive path есть, но часть proof-path требует дочистки |
|
||||
| VAT-G4 | `false_grounded_risk_control` | low | controlled | family должна удерживать `false_grounded = 0` |
|
||||
|
||||
## 8) Code-path inventory (где живет контракт)
|
||||
|
||||
- `llm_normalizer/backend/src/services/assistantClaimBoundEvidence.ts`
|
||||
- VAT claim type;
|
||||
- required anchors;
|
||||
- required checks для VAT chain.
|
||||
|
||||
- `llm_normalizer/backend/src/services/assistantDataLayer.ts`
|
||||
- route/live plan behavior (в т.ч. generic live overlay для non-FA/RBP);
|
||||
- VAT semantic profile and relation patterns.
|
||||
|
||||
- `llm_normalizer/backend/src/services/assistantService.ts`
|
||||
- routing and eligibility handoff;
|
||||
- answer-mode and debug export integration.
|
||||
|
||||
- run artifacts:
|
||||
- `X:\1C\NDC_1C\llm_normalizer\docs\runs\2026-03-29_Stage_04_Wave_19_2_Live_Runtime_Fix_Replay_1txt`
|
||||
|
||||
## 9) Regression set and acceptance policy
|
||||
|
||||
Обязательный минимум для VAT family:
|
||||
|
||||
1. базовый вопрос по поступлению 13 июля и реализации 15 июля;
|
||||
2. вариация на выпадение между документом, проводкой и налоговым отражением;
|
||||
3. вариация на книгу покупок/продаж;
|
||||
4. follow-up по той же цепочке;
|
||||
5. соседний VAT sanity-check.
|
||||
|
||||
Политика:
|
||||
|
||||
- после каждого VAT family pack обязателен новый run folder;
|
||||
- acceptance фиксируется на уровне family;
|
||||
- `false_grounded` должен оставаться нулевым.
|
||||
|
||||
## 10) Project decision line for this family
|
||||
|
||||
VAT family уже переведена в family-based execution контур Stage 4 и рассматривается как `non-blocker`, где нужен cleanup-дожим, а не отдельный большой redesign-пакет.
|
||||
Binary file not shown.
@@ -0,0 +1,34 @@
|
||||
20 вопросов по вашей компании и июльскому снапшоту
|
||||
1. Расчёты / банк / 60–62
|
||||
Почему 6 июля ушла оплата за мебель по договору № 01/19-ПТ от 09.01.2019 на 55 200, а к концу июля по этой покупке мог остаться долг или незакрытый хвост?Проверяет payment →settlement closure по поставщику.
|
||||
Оплата по счёту № 4 от 07.07.20 на 276 873,60 пришла 13 июля. Зачёлся ли этот аванс покупателя корректно в реализации от 15 июля, или на 62.02 что-то осталось висеть?Это прямой company-specific тест на зачёт аванса покупателя.
|
||||
По договору № 1-ПМ/2020 от 05.06.2020 в июле пришло ещё 40 860 27 июля и 20 000 30 июля. Это уже закрытие дебиторки после реализации или в конце июля там остался аванс/переплата?Хороший тест на 62.01/62.02 и partial settlement.
|
||||
Почему по одному и тому же мебельному контуру в июле есть и поступления денег от покупателя, и зачёт аванса, но 62.01/62.02 всё равно могут не сойтись?Это вопрос не про сумму, а про механизм.
|
||||
Если по договору № 1-ПМ/2020 в июле было несколько оплат и одна крупная реализация, где именно ассистент видит разрыв: в договоре, в объекте расчётов или в хронологии документов?Проверяет problem-first объяснение, а не dump.
|
||||
Есть ли в июльском срезе ситуация, где деньги уже пришли, но закрытие расчётов не подтверждено тем документом, которым должно было закрыться?Тест на document_conflict.
|
||||
Почему по поставщику мебель оплачена 6 июля, а ассистент может считать, что обязательство не закрыто: не тот договор, не тот объект расчётов или вообще нет подтверждённого closure?Это уже “человеческий” symptom-first вопрос.
|
||||
Если смотреть только июль, какие именно расчётные цепочки по мебели выглядят завершёнными, а какие — нет?Полезный тест на ranking и truthful limitations.
|
||||
2. НДС / книга покупок / книга продаж
|
||||
13 июля проведено поступление товаров, а 15 июля — реализация этих же мебельных позиций. НДС-цепочка по этим движениям у нас полная или где-то есть выпадение между документом, проводкой и налоговым отражением?Это хороший cross-branch вопрос по реальной цепочке июля.
|
||||
По оплате от 13 июля на 276 873,60 в тексте явно указан НДС 20% = 46 145,60. Ассистент может доказать, что НДС по этой продаже действительно отразился там, где должен, или он только “догадывается”?Тест на false confidence и mechanism specificity.
|
||||
31 июля есть услуги связи на 1 166,67 + НДС 233,33 и отдельно полученный счёт-фактура на 233,33. Почему по такому кейсу книга покупок могла бы остаться пустой?Это уже отличный реальный кейс под P0-домен НДС.
|
||||
Связан ли полученный 31 июля счёт-фактура с документом услуг связи так, чтобы НДС по нему можно было принять к вычету в июле, или цепочка “документ → счёт-фактура → налоговая запись” неполная?Проверяет expected edges.
|
||||
Полезно для поиска реальных дыр, а не только для заранее известных кейсов.
|
||||
Если ассистент говорит, что НДС по связи за июль в порядке, на чём это должно быть основано: на документе услуг, на счёте-фактуре, на проводке по 19, или на записи книги покупок?Тест именно на explainability.
|
||||
Почему по одной июльской покупке НДС может попасть в контур, а по другой — нет, даже если обе операции выглядят проведёнными?Это хороший semi-open case на company snapshot.
|
||||
Есть ли в июльских движениях ситуация, где НДС отражён частично: документ и счёт-фактура есть, но запись книги или tax entry не подтверждены?Тест на broken_chain_segment в домене НДС.
|
||||
3. Закрытие месяца / затраты / РБП / амортизация
|
||||
31 июля у нас прошло “Закрытие счетов косвенных расходов”, и там есть крупные суммы — 148 050, 27 954,50, 5 786,63, 5 000 и другие. Всё ли это реально закрылось в нужный контур, или после июля могли остаться зависшие косвенные расходы?Это company-specific вопрос на period close.
|
||||
31 июля прошло “Списание РБП за Июль 2020 г.”, в том числе на 5 000 и ещё несколько сумм. Есть ли в базе признаки, что часть РБП к концу июля всё ещё живёт дольше ожидаемого?Хороший тест на lifecycle anomaly без выхода в полный Stage 5.
|
||||
31 июля начислена амортизация тремя суммами — 2 471,52, 2 465,28 и 849,83. Это похоже на полное начисление по всем нужным объектам за июль или есть риск, что какой-то объект ОС в июле не попал в амортизацию?Даже если ОС не P0, этот кейс полезен как controlled adjacent check.
|
||||
После всех июльских регламентных операций — амортизация, списание РБП, закрытие косвенных расходов, определение финансовых результатов — что у нас больше похоже на реальную проблему: незакрытый затратный хвост, stale RBP или просто нормальный остаток, который ассистент не должен объявлять багом?Это уже зрелый product test на limitation honesty.
|
||||
Какие из этих 20 самые сильные для первого прогона
|
||||
Если сжать до “ядра”, я бы первым запускал вот эти 8:
|
||||
Оплата 55 200 по договору № 01/19-ПТ — почему долг мог остаться.
|
||||
Поступление денег 276 873,60 от 13 июля — корректно ли зачёлся аванс 15 июля.
|
||||
Платежи 40 860 и 20 000 по договору № 1-ПМ/2020 — аванс это или закрытие дебиторки.
|
||||
31 июля услуги связи + НДС 233,33 + полученный счёт-фактура — полная ли НДС-цепочка.
|
||||
Есть ли покупки июля, где товар/услуга есть, а НДС-контур неполный.
|
||||
Закрытие косвенных расходов 31 июля — не осталось ли хвостов.
|
||||
Списание РБП на 31 июля — не живёт ли часть РБП дольше ожидаемого.
|
||||
После полного month-end — что из остатков является реальной проблемой, а что нет.
|
||||
@@ -0,0 +1,314 @@
|
||||
# Этап 4 — corrective pack по family isolation, claim routing и чистой приемке
|
||||
|
||||
## 1. Контекст
|
||||
|
||||
Stage 4 уже работает в `family-based execution`:
|
||||
|
||||
- единица анализа: `family`;
|
||||
- единица реализации: `family pack`;
|
||||
- единица приемки: `family acceptance`.
|
||||
|
||||
По трем новым прогонам подтверждено: основная проблема в runtime не текстовая, а маршрутизационная:
|
||||
|
||||
- leakage между family/lane;
|
||||
- неправильный `claim_type` на корректных вопросах;
|
||||
- рассинхрон между route/domain/claim в разных слоях runtime;
|
||||
- смешанные acceptance-файлы, где трудно объективно мерить качество lane/family.
|
||||
|
||||
## 2. Архитектурная рамка corrective pack
|
||||
|
||||
Чтобы пакет был совместим с текущим проектом, фиксируем:
|
||||
|
||||
1. `core families` Stage 4:
|
||||
`VAT chain`, `RBP tail`, `FA amortization`.
|
||||
2. `control lanes` (regression/sanity, не first-class family):
|
||||
`settlements_60_62`, `month_close_indirect_costs`.
|
||||
3. Пакет не добавляет новые домены и не меняет Stage 4 модель.
|
||||
4. Пакет не строит новый proof engine и не уводит в Stage 5.
|
||||
|
||||
## 3. Цель corrective pack
|
||||
|
||||
Привести execution к состоянию, где:
|
||||
|
||||
1. вопрос из одного family/lane не уходит в чужой `claim/domain path`;
|
||||
2. routing в live и follow-up не расходится между runtime-слоями;
|
||||
3. acceptance выполняется по чистым family/lane файлам;
|
||||
4. `false_grounded_answer_rate = 0`;
|
||||
5. `wrong_family_route_rate = 0` на контрольном наборе этого pack.
|
||||
|
||||
## 4. Подволны
|
||||
|
||||
### Подволна 1 — Family isolation matrix
|
||||
|
||||
#### Задача
|
||||
|
||||
Снять матрицу соответствия вопроса и целевого family/lane, и явно показать точки leakage.
|
||||
|
||||
#### Что сделать
|
||||
|
||||
Построить матрицу по контрольным вопросам из трех файлов:
|
||||
|
||||
- `расчеты банк 60 62.txt`
|
||||
- `ндс книга покупок и продаж.txt`
|
||||
- `рбп затраты аморт.txt`
|
||||
|
||||
Для каждого вопроса зафиксировать:
|
||||
|
||||
- `raw_question`
|
||||
- `expected_lane_type` (`core_family` | `control_lane`)
|
||||
- `expected_family_or_lane`
|
||||
- `expected_domain`
|
||||
- `expected_claim_type`
|
||||
- `actual_domain`
|
||||
- `actual_claim_type`
|
||||
- `actual_query_subject`
|
||||
- `actual_source_profile`
|
||||
- `actual_business_scope`
|
||||
- `mismatch_type`
|
||||
|
||||
Минимальные lane:
|
||||
|
||||
1. `settlements_60_62` (control lane)
|
||||
2. `VAT chain` (core family)
|
||||
3. `RBP tail` (core family)
|
||||
4. `FA amortization` (core family)
|
||||
5. `month_close_indirect_costs` (control/sanity lane)
|
||||
|
||||
#### Acceptance
|
||||
|
||||
Есть явная матрица:
|
||||
|
||||
- что относится к core family, а что к control lane;
|
||||
- где и почему происходит leakage.
|
||||
|
||||
### Подволна 2 — Claim routing + domain purity alignment
|
||||
|
||||
#### Задача
|
||||
|
||||
Устранить переходы:
|
||||
|
||||
- settlement -> VAT claim;
|
||||
- settlement -> FA claim;
|
||||
- VAT -> settlement guard path;
|
||||
- month-close -> случайный FA/RBP claim без основания.
|
||||
|
||||
#### Что сделать
|
||||
|
||||
##### A. Синхронизировать domain inference между слоями
|
||||
|
||||
Унифицировать доменную классификацию для:
|
||||
|
||||
- `assistantService` domain hint;
|
||||
- `investigationState` explicit domain hint;
|
||||
- follow-up cross-scope checks.
|
||||
|
||||
Цель: один и тот же вопрос не должен получать разные домены в разных слоях runtime.
|
||||
|
||||
##### B. Ужесточить claim inference для settlement/VAT/FA
|
||||
|
||||
1. Settlement/advance/closure не должны резолвиться в:
|
||||
|
||||
- `prove_vat_chain_completeness`;
|
||||
- `prove_fixed_asset_amortization_coverage`.
|
||||
|
||||
2. Убрать ложный FA-триггер на числовых артефактах:
|
||||
|
||||
- числа из дат/сумм не должны поднимать FA claim;
|
||||
- `62.02` не должен теряться как `amount_token` в settlement flow.
|
||||
|
||||
3. FA claim допускается только при явном FA-сигнале:
|
||||
|
||||
- лексический FA-сигнал;
|
||||
- или валидные account/object anchors после account extraction cleanup.
|
||||
|
||||
##### C. Привязать `query_subject` к resolved family/lane
|
||||
|
||||
`query_subject` должен строиться от resolved route/domain/claim, а не от сырого mixed-domain списка.
|
||||
|
||||
Практический эффект:
|
||||
|
||||
- VAT не должен уходить в `supplier_tail_analysis`;
|
||||
- settlement не должен маскироваться под VAT/FA path.
|
||||
|
||||
##### D. Сохранить рабочий RBP path
|
||||
|
||||
Не ломать поднятый RBP контракт:
|
||||
|
||||
- `claim_type = prove_rbp_tail_state`;
|
||||
- обязательный live recipe;
|
||||
- non-zero admissible evidence path.
|
||||
|
||||
##### E. Для FA использовать route-lock/parity контроль
|
||||
|
||||
FA в этом паке контролируется через:
|
||||
|
||||
- `claim-route lock`;
|
||||
- `mock/live parity` по целевым FA вопросам;
|
||||
|
||||
а не через прямую метрику domain-card purity 1:1.
|
||||
|
||||
#### Acceptance
|
||||
|
||||
На контрольном наборе pack:
|
||||
|
||||
- `wrong_family_route_rate = 0`;
|
||||
- `wrong_claim_type_rate = 0`;
|
||||
- `domain_purity_guard_lane_match_rate = 1.0` для lanes с domain-card (`settlements`, `VAT`, `month_close`);
|
||||
- `fa_route_lock_correctness_rate >= 0.95`;
|
||||
- `supplier_customer_polarity` не остается unresolved на core settlement cases.
|
||||
|
||||
### Подволна 3 — Чистая структура acceptance-прогонов
|
||||
|
||||
#### Задача
|
||||
|
||||
Убрать смешанные acceptance-файлы.
|
||||
|
||||
#### Что сделать
|
||||
|
||||
Собрать отдельные прогоны:
|
||||
|
||||
1. `chat_export_settlements.txt` (control lane)
|
||||
2. `chat_export_vat.txt` (core family)
|
||||
3. `chat_export_rbp.txt` (core family)
|
||||
4. `chat_export_fa.txt` (core family)
|
||||
5. `chat_export_month_close_sanity.txt` (control lane)
|
||||
|
||||
Правило:
|
||||
|
||||
- один файл = один family/lane;
|
||||
- mixed files не используются как family acceptance.
|
||||
|
||||
#### Acceptance
|
||||
|
||||
Все acceptance-артефакты lane-clean и сопоставимы между волнами.
|
||||
|
||||
### Подволна 4 — Final live rerun по изолированным lanes
|
||||
|
||||
#### Задача
|
||||
|
||||
Пересобрать финальный live rerun после исправления isolation/routing.
|
||||
|
||||
#### Обязательный набор кейсов
|
||||
|
||||
`settlements_60_62` (control lane):
|
||||
|
||||
1. supplier settlement (`55 200`)
|
||||
2. buyer advance (`62.02`)
|
||||
3. closure case без суммы
|
||||
4. follow-up по тому же договору/документу
|
||||
|
||||
`VAT chain`:
|
||||
|
||||
1. услуги связи (`1 166,67 + НДС 233,33`)
|
||||
2. счет-фактура / книга покупок
|
||||
3. выпадение между документом и книгой
|
||||
4. follow-up по той же VAT-цепочке
|
||||
|
||||
`RBP tail`:
|
||||
|
||||
1. `Списание РБП за Июль 2020` (`5 000`)
|
||||
2. вариант без суммы
|
||||
3. полнота закрытия
|
||||
4. follow-up по объекту/документу
|
||||
|
||||
`FA amortization`:
|
||||
|
||||
1. `2 471,52 / 2 465,28 / 849,83`
|
||||
2. expected vs actual set
|
||||
3. missing object risk
|
||||
4. follow-up по объекту ОС
|
||||
|
||||
`month_close_indirect_costs` (control lane):
|
||||
|
||||
1. базовый вопрос по косвенным расходам
|
||||
2. зависший хвост
|
||||
3. limitation-honesty после полного month-end
|
||||
|
||||
#### Acceptance
|
||||
|
||||
Новый live rerun показывает:
|
||||
|
||||
- route/claim isolation без cross-family leakage;
|
||||
- корректную lane-классификацию;
|
||||
- честный limited mode только по фактической нехватке данных.
|
||||
|
||||
## 5. Метрики corrective pack
|
||||
|
||||
### Добавить/вывести
|
||||
|
||||
- `wrong_family_route_rate`
|
||||
- `wrong_claim_type_rate`
|
||||
- `domain_purity_guard_lane_match_rate`
|
||||
- `fa_route_lock_correctness_rate`
|
||||
- `family_isolation_correctness_rate`
|
||||
- `live_recipe_binding_rate`
|
||||
- `false_grounded_answer_rate`
|
||||
- `mechanism_discrimination_rate`
|
||||
- `limited_answer_honesty_rate`
|
||||
|
||||
### Минимальные пороги (для контрольного набора этого pack)
|
||||
|
||||
- `wrong_family_route_rate = 0`
|
||||
- `wrong_claim_type_rate = 0`
|
||||
- `domain_purity_guard_lane_match_rate = 1.0` (для lanes с domain-card)
|
||||
- `fa_route_lock_correctness_rate >= 0.95`
|
||||
- `false_grounded_answer_rate = 0`
|
||||
- `mechanism_discrimination_rate >= 0.90`
|
||||
- `limited_answer_honesty_rate >= 0.95`
|
||||
|
||||
## 6. Что создать
|
||||
|
||||
### В `docs/ARCH`
|
||||
|
||||
1. `10 - family_isolation_and_claim_routing_corrective_pack_2026-03-29.md`
|
||||
2. `10A - family_isolation_matrix.md`
|
||||
3. `10B - wrong_claim_route_register.md`
|
||||
4. `10C - clean_family_run_structure.md`
|
||||
5. `10D - family_acceptance_policy_update.md`
|
||||
6. `10E - cross_layer_domain_inference_parity.md`
|
||||
|
||||
### В `llm_normalizer/docs/runs/<new_run_pack>`
|
||||
|
||||
1. `run_summary.json`
|
||||
2. `before_after_metrics.json`
|
||||
3. `family_case_matrix.md`
|
||||
4. `acceptance_note.md`
|
||||
5. `chat_export_settlements.txt`
|
||||
6. `chat_export_vat.txt`
|
||||
7. `chat_export_rbp.txt`
|
||||
8. `chat_export_fa.txt`
|
||||
9. `chat_export_month_close_sanity.txt`
|
||||
10. `debug_payloads/`
|
||||
11. `routing_parity_diff.md`
|
||||
|
||||
## 7. Что нельзя делать
|
||||
|
||||
- не добавлять новые домены;
|
||||
- не менять Stage 4 family-based model;
|
||||
- не строить новый proof engine;
|
||||
- не смешивать acceptance разных family/lane в одном файле;
|
||||
- не закрывать acceptance по одному удачному ответу;
|
||||
- не лечить leakage общим ростом generic retrieval.
|
||||
|
||||
## 8. Финальный verdict
|
||||
|
||||
Выдать:
|
||||
|
||||
- `FAMILY_ISOLATION_FIXED / NOT_FIXED`
|
||||
- `CLAIM_ROUTING_FIXED / NOT_FIXED`
|
||||
- `CLEAN_FAMILY_ACCEPTANCE_READY / NOT_READY`
|
||||
|
||||
Общий статус:
|
||||
|
||||
- `STAGE4_FAMILY_ISOLATION_PACK_ACCEPTED`
|
||||
- или `STAGE4_FAMILY_ISOLATION_PACK_ACCEPTED_WITH_LIMITATIONS`
|
||||
- или `STAGE4_FAMILY_ISOLATION_PACK_NOT_ACCEPTED`
|
||||
|
||||
## 9. Ожидаемый итог
|
||||
|
||||
После этого пакета:
|
||||
|
||||
- settlement-вопросы не уходят в VAT/FA claim;
|
||||
- VAT-вопросы не ведутся через settlement-path;
|
||||
- mixed-file приемка не используется;
|
||||
- прогресс измеряется по чистым family/lane с сопоставимыми метриками и артефактами.
|
||||
@@ -0,0 +1,292 @@
|
||||
Этап 4 — пакет по амортизации.md
|
||||
: замыкание доказательной цепочки по объектам ОС
|
||||
1. Контекст
|
||||
|
||||
После аудита и последующих пакетов:
|
||||
|
||||
НДС уже не главный blocker;
|
||||
РБП выведен из критического состояния;
|
||||
амортизация остаётся следующим главным узлом.
|
||||
|
||||
По аудиту по амортизации картина такая:
|
||||
|
||||
источник не пустой;
|
||||
admissible evidence уже есть;
|
||||
live path уже что-то поднимает;
|
||||
но claim-proof не замыкается из-за:
|
||||
недостаточного mapping связей 1С,
|
||||
слабого покрытия claim anchors,
|
||||
отсутствия внятного expected set объектов ОС за июль.
|
||||
|
||||
То есть проблема по амортизации сейчас не в нуле данных, а в том, что система не умеет собрать из уже поднятых данных доказанный вывод:
|
||||
|
||||
все ли нужные объекты ОС попали в начисление;
|
||||
если не все — какой именно объект/контур выпал;
|
||||
или текущий набор начислений выглядит полным.
|
||||
2. Цель пакета
|
||||
|
||||
Нужно не “улучшить ответ”, а замкнуть proof-контур по амортизации:
|
||||
|
||||
вопрос про амортизацию → объекты ОС → expected set за июль → фактическое начисление → проводки/движения → покрытие / непокрытие → доказательный вывод
|
||||
|
||||
Итогом должно стать:
|
||||
|
||||
явное понимание, какие объекты ОС должны участвовать в начислении за июль;
|
||||
явное понимание, какие из них реально попали в начисление;
|
||||
восстановление связей между объектами ОС, документом начисления, движениями и проводками;
|
||||
non-zero claim-proof coverage;
|
||||
ответ, который может либо:
|
||||
доказать полноту начисления,
|
||||
либо показать, что есть риск пропуска конкретных объектов,
|
||||
либо честно ограничиться, если не хватает ключевой связи.
|
||||
3. Source of truth
|
||||
Базовый вопрос
|
||||
|
||||
31 июля начислена амортизация тремя суммами — 2 471,52, 2 465,28 и 849,83. Это похоже на полное начисление по всем нужным объектам за июль или есть риск, что какой-то объект ОС в июле не попал в амортизацию?
|
||||
|
||||
Текущий диагноз
|
||||
|
||||
По аудиту и прогонам:
|
||||
|
||||
admissible evidence уже есть;
|
||||
live path не нулевой;
|
||||
но итоговый proof не закрывается, потому что не хватает:
|
||||
корректной карты связей,
|
||||
object-level coverage,
|
||||
claim anchor closure.
|
||||
4. Главная рабочая гипотеза
|
||||
|
||||
Для амортизации основной разрыв сейчас в связке:
|
||||
|
||||
entity/relation mapping
|
||||
система не понимает до конца, как объект ОС связывается с начислением, движением, проводкой и expected coverage;
|
||||
expected set reconstruction
|
||||
система не умеет уверенно определить, какие объекты ОС вообще должны были попасть в начисление за июль;
|
||||
claim anchor closure
|
||||
сумма начисления и сам факт начисления видны, но они не собираются в доказательство полноты/неполноты охвата.
|
||||
5. Что нужно сделать
|
||||
|
||||
Работу выполнить по 5 узлам.
|
||||
|
||||
Узел A — Построить минимальную предметную модель амортизации
|
||||
Задача
|
||||
|
||||
Понять, какие сущности 1С обязательны для доказательного ответа на вопрос про полноту начисления амортизации.
|
||||
|
||||
Что сделать
|
||||
|
||||
Для кейса амортизации определить:
|
||||
|
||||
A1. Seed entities
|
||||
документ/операция начисления амортизации на 31 июля;
|
||||
три суммы: 2 471,52 / 2 465,28 / 849,83;
|
||||
July 2020;
|
||||
объекты ОС, если их можно выделить напрямую или через связанные документы/регистры.
|
||||
A2. Required entities
|
||||
|
||||
Минимально установить:
|
||||
|
||||
документ начисления амортизации;
|
||||
объект(ы) ОС;
|
||||
движения начисления;
|
||||
проводки;
|
||||
регистры состояния/начисления/учёта ОС;
|
||||
expected set объектов ОС на июль;
|
||||
фактический set объектов, попавших в начисление;
|
||||
признаки “должен был попасть / не попал”.
|
||||
A3. Expected transitions
|
||||
|
||||
Обязательные переходы:
|
||||
|
||||
объект ОС → начисление амортизации;
|
||||
начисление → движения/проводки;
|
||||
объект ОС → expected July coverage;
|
||||
expected set → actual set;
|
||||
actual set vs missing set → риск неполного начисления.
|
||||
Acceptance
|
||||
Должен появиться явный fa_required_entity_map.
|
||||
Должно быть понятно, без каких сущностей доказательство полноты невозможно.
|
||||
Узел B — Восстановить expected set объектов ОС за июль
|
||||
Задача
|
||||
|
||||
Ответить на главный скрытый вопрос:
|
||||
какие объекты ОС вообще должны были попасть в амортизацию за июль?
|
||||
|
||||
Что сделать
|
||||
Определить, откуда в 1С можно получить expected population объектов ОС на июль:
|
||||
активные объекты ОС;
|
||||
объекты, находящиеся в состоянии, допускающем амортизацию;
|
||||
объекты, не выбывшие и не исключённые из расчёта;
|
||||
объекты, для которых июльское начисление ожидаемо.
|
||||
Проверить:
|
||||
есть ли этот expected set в snapshot;
|
||||
есть ли он через live;
|
||||
нужно ли собирать его из нескольких регистров/документов.
|
||||
Зафиксировать:
|
||||
expected_fa_set
|
||||
actual_fa_set_from_amortization
|
||||
missing_fa_candidates
|
||||
uncertain_fa_candidates
|
||||
Acceptance
|
||||
Должен появиться reconstructible expected_fa_set, а не просто суммы начисления.
|
||||
Должно быть понятно, может ли система вообще доказать “полноту” начисления, а не только наличие документа.
|
||||
Узел C — Восстановить relation mapping по объектам ОС
|
||||
Задача
|
||||
|
||||
Понять, как именно объект ОС связывается с начислением, движениями и проводками.
|
||||
|
||||
Что сделать
|
||||
|
||||
Для каждого candidate объекта ОС построить relation map:
|
||||
|
||||
fa_object
|
||||
document_amortization
|
||||
movement
|
||||
posting
|
||||
period
|
||||
coverage_status
|
||||
|
||||
Нужно зафиксировать:
|
||||
|
||||
прямые связи;
|
||||
косвенные связи;
|
||||
missing links;
|
||||
ambiguous links;
|
||||
какие связи текущий runtime уже использует;
|
||||
какие связи есть в 1С, но не реконструируются рантаймом.
|
||||
Acceptance
|
||||
Должна появиться object-level relation map по амортизации.
|
||||
Должно стать ясно, где именно рвётся связь между ОС и начислением.
|
||||
Узел D — Замкнуть claim anchors для амортизации
|
||||
Задача
|
||||
|
||||
Сделать так, чтобы claim по амортизации опирался не только на суммы, а на полноценный набор anchors.
|
||||
|
||||
Что сделать
|
||||
|
||||
Для claim типа prove_fixed_asset_amortization_coverage выделять и проверять:
|
||||
|
||||
период;
|
||||
суммы начисления;
|
||||
документ начисления;
|
||||
объекты ОС;
|
||||
expected object set;
|
||||
actual object set;
|
||||
missing object candidates;
|
||||
проводки/движения, подтверждающие начисление.
|
||||
|
||||
В debug/export ввести:
|
||||
|
||||
claim_type
|
||||
required_anchors
|
||||
resolved_anchors
|
||||
missing_anchor_classes
|
||||
claim_anchor_coverage_ratio
|
||||
Acceptance
|
||||
Кейc по амортизации не должен падать просто как claim_anchor_coverage_insufficient без расшифровки.
|
||||
Должно быть видно, каких именно anchors не хватает.
|
||||
Узел E — Собрать proof-style answer по амортизации
|
||||
Задача
|
||||
|
||||
Сделать так, чтобы финальный ответ зависел от object-level proof, а не от общей гипотезы по lifecycle.
|
||||
|
||||
Что сделать
|
||||
Если proof-path собран
|
||||
|
||||
Ответ должен уметь сказать:
|
||||
|
||||
какие объекты ОС подтверждены в начислении;
|
||||
какие должны были попасть и не подтверждены;
|
||||
выглядит ли начисление полным;
|
||||
где именно есть риск пропуска.
|
||||
Если proof-path неполный
|
||||
|
||||
Ответ должен честно сказать:
|
||||
|
||||
каких данных не хватает;
|
||||
какого object-level звена не хватает;
|
||||
можно ли судить только о частичном покрытии.
|
||||
Запрещено
|
||||
выдавать общий lifecycle-туман без object-level explanation;
|
||||
ограничиваться только тем, что “сигнал слабый”.
|
||||
Acceptance
|
||||
Answer mode должен быть привязан к object-level proof.
|
||||
Амортизация должна перестать быть абстрактным month-close кейсом без объектной структуры.
|
||||
6. Проверки
|
||||
|
||||
Обязательно выполнить:
|
||||
|
||||
replay базового вопроса по амортизации;
|
||||
debug/export после фикса;
|
||||
live call inventory;
|
||||
relation reconstruction trace;
|
||||
expected vs actual FA coverage matrix;
|
||||
before/after по answer mode.
|
||||
|
||||
Желательно:
|
||||
|
||||
один соседний follow-up по тому же кейсу;
|
||||
один sanity-check по другому ОС-related кейсу, если есть.
|
||||
7. Метрики пакета
|
||||
|
||||
Добавить/обновить:
|
||||
|
||||
fa_expected_set_reconstruction_rate
|
||||
fa_relation_mapping_coverage_rate
|
||||
fa_claim_anchor_coverage_rate
|
||||
fa_actual_vs_expected_comparison_rate
|
||||
fa_proof_closure_rate
|
||||
fa_false_grounded_answer_rate
|
||||
Минимальные пороги
|
||||
fa_expected_set_reconstruction_rate >= 0.85
|
||||
fa_relation_mapping_coverage_rate >= 0.85
|
||||
fa_claim_anchor_coverage_rate >= 0.9
|
||||
fa_proof_closure_rate > 0
|
||||
fa_false_grounded_answer_rate = 0
|
||||
8. Обязательные артефакты
|
||||
|
||||
В новой run-папке положить:
|
||||
|
||||
README.md
|
||||
run_summary.json
|
||||
fa_expected_set_report.md
|
||||
fa_relation_mapping_report.md
|
||||
fa_claim_anchor_report.md
|
||||
fa_proof_closure_report.md
|
||||
fa_before_after_matrix.md
|
||||
chat_export_fa.md
|
||||
debug_payloads/
|
||||
raw_live_calls/
|
||||
fa_required_entity_map.json
|
||||
fa_expected_vs_actual_set.json
|
||||
fa_relation_map.json
|
||||
fa_admissibility_reject_breakdown.json
|
||||
9. Что не делать
|
||||
не тащить в эту волну РБП как главный фокус;
|
||||
не расползаться на весь month-close контур;
|
||||
не строить новый общий proof engine;
|
||||
не закрывать пакет по summary без replay амортизационного кейса;
|
||||
не маскировать отсутствие object-level proof красивым текстом ответа.
|
||||
10. Финальный verdict
|
||||
|
||||
В конце пакета выдать:
|
||||
|
||||
FA_EXPECTED_SET_FIXED / NOT_FIXED
|
||||
FA_RELATION_MAPPING_FIXED / NOT_FIXED
|
||||
FA_CLAIM_ANCHOR_CLOSURE_FIXED / NOT_FIXED
|
||||
FA_PROOF_CLOSURE_FIXED / NOT_FIXED
|
||||
|
||||
И общий статус:
|
||||
|
||||
FA_PACK_ACCEPTED
|
||||
или FA_PACK_ACCEPTED_WITH_LIMITATIONS
|
||||
или FA_PACK_NOT_ACCEPTED
|
||||
11. Ожидаемый результат
|
||||
|
||||
После этого пакета должно стать ясно:
|
||||
|
||||
какие объекты ОС должны были участвовать в начислении за июль;
|
||||
какие реально участвовали;
|
||||
по каким объектам доказательство есть;
|
||||
где именно остаётся разрыв;
|
||||
может ли система по амортизации выдавать не просто “limited”, а нормальный object-level proof-style вывод.
|
||||
Reference in New Issue
Block a user