feat: разворачивание комка finance-plugin — 8 навыков (роутер-реестр)

Эпик роутер-реестр, спека v2 §2, этап 1. Зонтик finance-plugin развёрнут
в 8 карточек-навыков + 8 под-узлов #61a..#61h.

- 8 карточек: audit-support, close-management, financial-statements,
  journal-entry, journal-entry-prep, reconciliation, sox-testing, variance-analysis
- journal-entry (финализация) и journal-entry-prep (подготовка к close) оставлены
  обе с разными визитками (решение по дублю)
- nodes.yaml: узел #61 → #61a..#61h; триггеры распределены; ADR-012 граница
  на sox-testing (SOX n/a РФ)
- зонтик убран; registry-load.test: 145 узлов / 137 active

Регрессия (без 5 pre-existing node:test файлов): 4365 passed, exit 0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Дмитрий
2026-06-18 23:39:50 +03:00
parent 65224b268c
commit 4a25302ac9
12 changed files with 350 additions and 32 deletions
@@ -1,12 +0,0 @@
{
"skill": "finance-plugin",
"kind": "external",
"needs": ["финансовая задача (сверка/variance/проводки/отчётность)"],
"produces": ["сверка / variance-анализ / проводки / финотчётность"],
"constraints": ["US-GAAP-ориентирован, частично применим РФ; SOX not-applicable", "РФ-налоги — за ru-tax-accounting (#63); ADR-012 граница C6/C7", "warehouse-MCP DEFERRED"],
"preview-form": "outline",
"defaults": ["reconciliation/variance применимы; US-GAAP-скилы с осторожностью"],
"key-decisions": ["применим ли скил для РФ-контекста"],
"acceptance-criteria": ["финансовая операция корректна, РФ-ограничения учтены"],
"source": { "version": "n/a", "hash": "0000000000000000000000000000000000000000000000000000000000000000", "path": "" }
}
@@ -0,0 +1,29 @@
{
"skill": "finance-plugin:audit-support",
"kind": "external",
"needs": [
"SOX-404 контроль для тестирования"
],
"produces": [
"workpapers, sample selection, классификация deficiency"
],
"constraints": [
"под-навык зонтика finance (US-GAAP финансы)",
"граница C6/C7 ADR-012; SOX not-applicable РФ; РФ-учёт — ru-tax-accounting"
],
"preview-form": "outline",
"defaults": [
"audit-support — поддержка SOX-404 тестирования"
],
"key-decisions": [
"какой контроль и sample"
],
"acceptance-criteria": [
"тестирование контроля задокументировано"
],
"source": {
"version": "n/a",
"hash": "0000000000000000000000000000000000000000000000000000000000000000",
"path": ""
}
}
@@ -0,0 +1,29 @@
{
"skill": "finance-plugin:close-management",
"kind": "external",
"needs": [
"процесс month-end close для управления"
],
"produces": [
"close-календарь: sequencing, dependencies, статус"
],
"constraints": [
"под-навык зонтика finance (US-GAAP финансы)",
"граница C6/C7 ADR-012; SOX not-applicable РФ; РФ-учёт — ru-tax-accounting"
],
"preview-form": "outline",
"defaults": [
"close-management — управление закрытием периода"
],
"key-decisions": [
"порядок и блокеры close"
],
"acceptance-criteria": [
"close спланирован по дням"
],
"source": {
"version": "n/a",
"hash": "0000000000000000000000000000000000000000000000000000000000000000",
"path": ""
}
}
@@ -0,0 +1,29 @@
{
"skill": "finance-plugin:financial-statements",
"kind": "external",
"needs": [
"данные для финансовой отчётности"
],
"produces": [
"P&L, balance sheet, cash flow + variance vs budget"
],
"constraints": [
"под-навык зонтика finance (US-GAAP финансы)",
"граница C6/C7 ADR-012; SOX not-applicable РФ; РФ-учёт — ru-tax-accounting"
],
"preview-form": "outline",
"defaults": [
"financial-statements — генерация финстейтментов (GAAP)"
],
"key-decisions": [
"какие материальные variance"
],
"acceptance-criteria": [
"отчётность по GAAP-презентации"
],
"source": {
"version": "n/a",
"hash": "0000000000000000000000000000000000000000000000000000000000000000",
"path": ""
}
}
@@ -0,0 +1,29 @@
{
"skill": "finance-plugin:journal-entry-prep",
"kind": "external",
"needs": [
"накопления/prepaid/амортизация для month-end"
],
"produces": [
"подготовленные проводки close (accruals/prepaid/depreciation/payroll)"
],
"constraints": [
"под-навык зонтика finance (US-GAAP финансы)",
"граница C6/C7 ADR-012; SOX not-applicable РФ; РФ-учёт — ru-tax-accounting"
],
"preview-form": "outline",
"defaults": [
"journal-entry-prep — подготовка проводок к закрытию"
],
"key-decisions": [
"какие accrual-проводки"
],
"acceptance-criteria": [
"проводки close подготовлены"
],
"source": {
"version": "n/a",
"hash": "0000000000000000000000000000000000000000000000000000000000000000",
"path": ""
}
}
@@ -0,0 +1,29 @@
{
"skill": "finance-plugin:journal-entry",
"kind": "external",
"needs": [
"операция для проводки (debits/credits)"
],
"produces": [
"journal entry с обоснованием для аудита"
],
"constraints": [
"под-навык зонтика finance (US-GAAP финансы)",
"граница C6/C7 ADR-012; SOX not-applicable РФ; РФ-учёт — ru-tax-accounting"
],
"preview-form": "outline",
"defaults": [
"journal-entry — финализация проводки"
],
"key-decisions": [
"дебет/кредит и обоснование"
],
"acceptance-criteria": [
"проводка сбалансирована и обоснована"
],
"source": {
"version": "n/a",
"hash": "0000000000000000000000000000000000000000000000000000000000000000",
"path": ""
}
}
@@ -0,0 +1,29 @@
{
"skill": "finance-plugin:reconciliation",
"kind": "external",
"needs": [
"GL-баланс vs subledger/bank для сверки"
],
"produces": [
"рекконсиляция + категоризация reconciling items"
],
"constraints": [
"под-навык зонтика finance (US-GAAP финансы)",
"граница C6/C7 ADR-012; SOX not-applicable РФ; РФ-учёт — ru-tax-accounting"
],
"preview-form": "outline",
"defaults": [
"reconciliation — сверка счетов"
],
"key-decisions": [
"источник расхождений"
],
"acceptance-criteria": [
"счета сверены, расхождения объяснены"
],
"source": {
"version": "n/a",
"hash": "0000000000000000000000000000000000000000000000000000000000000000",
"path": ""
}
}
@@ -0,0 +1,29 @@
{
"skill": "finance-plugin:sox-testing",
"kind": "external",
"needs": [
"контроль для SOX-404 тестирования (US)"
],
"produces": [
"sample, workpaper, оценка deficiency"
],
"constraints": [
"под-навык зонтика finance (US-GAAP финансы)",
"граница C6/C7 ADR-012; SOX not-applicable РФ; РФ-учёт — ru-tax-accounting"
],
"preview-form": "outline",
"defaults": [
"sox-testing — SOX-404 тестирование (US-only, n/a РФ)"
],
"key-decisions": [
"scope контроля"
],
"acceptance-criteria": [
"контроль протестирован"
],
"source": {
"version": "n/a",
"hash": "0000000000000000000000000000000000000000000000000000000000000000",
"path": ""
}
}
@@ -0,0 +1,29 @@
{
"skill": "finance-plugin:variance-analysis",
"kind": "external",
"needs": [
"финансовые variance для разбора"
],
"produces": [
"декомпозиция драйверов + waterfall + narrative"
],
"constraints": [
"под-навык зонтика finance (US-GAAP финансы)",
"граница C6/C7 ADR-012; SOX not-applicable РФ; РФ-учёт — ru-tax-accounting"
],
"preview-form": "outline",
"defaults": [
"variance-analysis — разбор бюджет-vs-факт"
],
"key-decisions": [
"драйверы variance"
],
"acceptance-criteria": [
"variance объяснён по драйверам"
],
"source": {
"version": "n/a",
"hash": "0000000000000000000000000000000000000000000000000000000000000000",
"path": ""
}
}
+111 -13
View File
@@ -1712,27 +1712,125 @@ nodes:
attributes:
tooling_section: "§4.35 #60"
- id: "#61"
name: "finance plugin"
slug: "finance-plugin"
- id: "#61a"
name: "finance-audit-support"
slug: "finance-plugin:audit-support"
category: "off-phase"
subcategory: "finance-tooling"
status: "active"
dormancy_reason: null
capabilities: лагин для финансовых операций: сверка (reconciliation), variance-анализ, подготовка проводок, финансовая отчётность; US-GAAP-ориентирован, частично применим для РФ; SOX not-applicable."
capabilities: оддержка SOX-404: workpapers, sample selection, классификация deficiency."
triggers:
- {keyword: "audit support", weight: 1.0}
boundaries: []
chain_membership: []
attributes:
tooling_section: "§4.36 #61"
- id: "#61b"
name: "finance-close-management"
slug: "finance-plugin:close-management"
category: "off-phase"
subcategory: "finance-tooling"
status: "active"
dormancy_reason: null
capabilities: "Управление month-end close: sequencing, dependencies, статус по дням."
triggers:
- {keyword: "close", weight: 1.0}
boundaries: []
chain_membership: []
attributes:
tooling_section: "§4.36 #61"
- id: "#61c"
name: "finance-financial-statements"
slug: "finance-plugin:financial-statements"
category: "off-phase"
subcategory: "finance-tooling"
status: "active"
dormancy_reason: null
capabilities: "Финстейтменты (P&L, balance sheet, cash flow) + variance vs budget по GAAP."
triggers:
- {keyword: "us-gaap-отчётность", weight: 1.0}
- {keyword: "financial statements", weight: 1.0}
boundaries: []
chain_membership: []
attributes:
tooling_section: "§4.36 #61"
- id: "#61d"
name: "finance-journal-entry"
slug: "finance-plugin:journal-entry"
category: "off-phase"
subcategory: "finance-tooling"
status: "active"
dormancy_reason: null
capabilities: "Финализация проводки (debits/credits) с обоснованием для аудита."
triggers:
- {keyword: "проводки", weight: 1.0}
- {keyword: "journal entry", weight: 1.0}
boundaries: []
chain_membership: []
attributes:
tooling_section: "§4.36 #61"
- id: "#61e"
name: "finance-journal-entry-prep"
slug: "finance-plugin:journal-entry-prep"
category: "off-phase"
subcategory: "finance-tooling"
status: "active"
dormancy_reason: null
capabilities: "Подготовка проводок к закрытию: accruals, prepaid, depreciation, payroll. (Подготовка ≠ финализация journal-entry.)"
triggers: []
boundaries: []
chain_membership: []
attributes:
tooling_section: "§4.36 #61"
- id: "#61f"
name: "finance-reconciliation"
slug: "finance-plugin:reconciliation"
category: "off-phase"
subcategory: "finance-tooling"
status: "active"
dormancy_reason: null
capabilities: "Сверка GL vs subledger/bank + категоризация reconciling items."
triggers:
- {keyword: "сверка", weight: 1.0}
- {keyword: "variance-анализ", weight: 1.0}
- {keyword: "us-gaap-отчётность", weight: 1.0}
- {keyword: "проводки", weight: 1.0}
- {keyword: "close", weight: 1.0}
- {keyword: "reconciliation", weight: 1.0}
- {keyword: "variance", weight: 1.0}
- {keyword: "journal entry", weight: 1.0}
- {keyword: "financial statements", weight: 1.0}
- {keyword: "audit support", weight: 1.0}
boundaries: []
chain_membership: []
attributes:
tooling_section: "§4.36 #61"
- id: "#61g"
name: "finance-sox-testing"
slug: "finance-plugin:sox-testing"
category: "off-phase"
subcategory: "finance-tooling"
status: "active"
dormancy_reason: null
capabilities: "SOX-404 тестирование контролей (US-only; not-applicable РФ по ADR-012)."
triggers: []
boundaries:
- {adr: "ADR-012", role: "граница C6/C7; US-GAAP-скилы частично применимы; SOX not-applicable РФ; warehouse-MCP DEFERRED"}
- {adr: "ADR-012", role: "SOX not-applicable РФ; US-GAAP частично применим"}
chain_membership: []
attributes:
tooling_section: "§4.36 #61"
- id: "#61h"
name: "finance-variance-analysis"
slug: "finance-plugin:variance-analysis"
category: "off-phase"
subcategory: "finance-tooling"
status: "active"
dormancy_reason: null
capabilities: "Декомпозиция variance на драйверы + waterfall + narrative (бюджет vs факт)."
triggers:
- {keyword: "variance-анализ", weight: 1.0}
- {keyword: "variance", weight: 1.0}
boundaries: []
chain_membership: []
attributes:
tooling_section: "§4.36 #61"
+2 -2
View File
@@ -118,8 +118,8 @@
| product-management (8) | ✅ DONE | 0258b9d (pushed) |
| design-plugin (7) | ✅ DONE | bf3d557 (committed, push deferred — observer-race) |
| marketing-plugin (8) | ✅ DONE | committed (push deferred) |
| operations (9: +process-doc узел) | ✅ DONE | этот коммит (push deferred) |
| finance-plugin (78) | ⬜ | |
| operations (9: +process-doc узел) | ✅ DONE | committed (push deferred) |
| finance-plugin (8, journal ×2 оставлены) | ✅ DONE | этот коммит (push deferred) |
| brand-voice (3) | ⬜ | |
| ui-ux-pro-max (7, +правка PSR) | ⬜ | |
+5 -5
View File
@@ -5,9 +5,9 @@ import { loadRegistry, clearCache, findByClassification, findByKeyword, findActi
describe('registry-load', () => {
beforeEach(() => clearCache());
it('loads registry (138 nodes: разворачивание #33/#19/#57/#36/#42/#46/#74/#51 комков 18.06.2026)', () => {
it('loads registry (145 nodes: разворачивание #33/#19/#57/#36/#42/#46/#74/#51/#61 комков 18.06.2026)', () => {
const r = loadRegistry();
expect(r.nodes).toHaveLength(138);
expect(r.nodes).toHaveLength(145);
expect(r.version).toBe('0.1.0');
});
@@ -46,9 +46,9 @@ describe('registry-load', () => {
it('findActiveNodes excludes non-active (nodes.yaml registry)', () => {
const r = loadRegistry();
const active = findActiveNodes(r);
// 138 nodes total; #1 historic, #17 dormant, #44/#50/#54/#67/#82/#83 deferred;
// развёрнуты: #33→2,#19→14,#57→7,#36→2,#42→8,#46→7,#74→8,#51 operations→9 (+8) → 130 active
expect(active).toHaveLength(130);
// 145 nodes total; #1 historic, #17 dormant, #44/#50/#54/#67/#82/#83 deferred;
// развёрнуты: ...,#51→9,#61 finance→8 (+7) → 137 active
expect(active).toHaveLength(137);
expect(active.map(n => n.id)).toContain('#18');
expect(active.map(n => n.id)).toContain('#19a');
expect(active.map(n => n.id)).not.toContain('#1');