docs(finance): C6+C7 finance-tooling implementation plan
11 задач в 3 фазах: Ф1 billing-audit скил (C6), Ф2 finance plugin enable + ru-tax-accounting скил (C7), Ф3 нормативка (Tooling/PSR/Pravila/CLAUDE) + роутер (routing-off-phase L13 + router-procedure) + наблюдатель (9-атрибутные блоки + C1/C2) + карта (+3 узла) + ADR-012 + push. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,880 @@
|
||||
# Finance-tooling (C6+C7) Implementation Plan
|
||||
|
||||
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
||||
|
||||
**Goal:** Наполнить разделы карты C6 «Финансы — биллинг и тарификация» и C7 «Финансы — бухгалтерия и налоги» dev-тулчейном (3 новых узла + reuse-классификация) и довести расширенную нормативку (включая роутер и наблюдатель).
|
||||
|
||||
**Architecture:** Гибрид с полным покрытием. Reuse-классификация ~11 существующих узлов в C6/C7 через `NODE_SECTION_SECONDARY` + 1 marketplace-плагин (`finance`, homed C7) + 2 self-authored project-скила (`billing-audit` для C6, `ru-tax-accounting` для C7). Нормативка по паттерну прошлых интеграций (Tooling/PSR_v1/Pravila/CLAUDE.md + ADR), расширенная роутером (`routing-off-phase.md`, `router-procedure.md`) и наблюдателем (9-атрибутные блоки + контролёры C1/C2).
|
||||
|
||||
**Tech Stack:** Markdown (скилы/нормативка/ADR), JS (`automation-graph-data.js` + `automation-graph.html`), JSON (`evals.json`), lefthook (markdownlint/cspell/gitleaks + brain-контролёры).
|
||||
|
||||
**Worktree:** `worktree-finance-tooling-c6-c7` (база origin/main `7df4786`). Спека: `docs/superpowers/specs/2026-05-20-finance-tooling-c6-c7-design.md` (commit `d984165`).
|
||||
|
||||
**Дисциплина (Pravila §15):** коммиты только явными путями (`git commit -m "..." -- <пути>`); pre-flight `git fetch && git log HEAD..origin/main --oneline` перед правкой каждого из нормативных файлов; субагенты+git — Sonnet/Opus, верификация commit-базы после каждого.
|
||||
|
||||
---
|
||||
|
||||
## File Structure
|
||||
|
||||
| Файл | Создаём/Меняем | Ответственность |
|
||||
|---|---|---|
|
||||
| `.claude/skills/billing-audit/SKILL.md` | Create | C6-скил: денежные инварианты Лидерры |
|
||||
| `.claude/skills/billing-audit/references/invariants.md` | Create | Чек-лист инвариантов + ссылки на биллинг-файлы |
|
||||
| `.claude/skills/billing-audit/evals/evals.json` | Create | Триггер-eval (positive + near-miss) |
|
||||
| `.claude/skills/ru-tax-accounting/SKILL.md` | Create | C7-скил: РСБУ/НК РФ контекст |
|
||||
| `.claude/skills/ru-tax-accounting/references/ru-tax-context.md` | Create | Налоговые режимы + маппинг выручка→база |
|
||||
| `.claude/skills/ru-tax-accounting/evals/evals.json` | Create | Триггер-eval |
|
||||
| `~/.claude/settings.json` | Modify (user-level, не коммит) | enable `finance` plugin |
|
||||
| `docs/adr/012-finance-tooling.md` | Create | Граница C6/C7, applicability, DEFERRED |
|
||||
| `docs/Tooling_v8_3.md` | Modify | §4.36/§4.37/§4.38 + §0 счётчик 60→63 + header |
|
||||
| `docs/Plugin_stack_rules_v1.md` | Modify | R10.1 Блок 1 (+finance) + note (+2 скила) + version |
|
||||
| `docs/Pravila_raboty_Claude_v1_1.md` | Modify | §13.2 +абзац finance-tooling + §10 changelog + version |
|
||||
| `docs/routing-off-phase.md` | Modify | +3 строки таблицы + L13 + scope + version |
|
||||
| `docs/router-procedure.md` | Modify | changelog-touch v1.0→v1.1 |
|
||||
| `CLAUDE.md` | Modify (прямой Edit, worktree-эксцепшн §5 п.10) | §3.3 +#61/#62/#63 + §0 + §6 + §9 + шапка |
|
||||
| `docs/automation-graph-data.js` | Modify | +3 NODES + NODE_SECTION + NODE_SECTION_SECONDARY + EDGES |
|
||||
| `docs/automation-graph.html` | Modify | +3 NODE_DETAILS `nd()` + NODE_META + версии-метки |
|
||||
| `cspell-words.txt` | Modify | новые термины по мере появления cspell-флагов |
|
||||
|
||||
---
|
||||
|
||||
## ФАЗА 1 — C6: скил billing-audit
|
||||
|
||||
### Task 1: Скил `billing-audit` (C6)
|
||||
|
||||
**Files:**
|
||||
|
||||
- Create: `.claude/skills/billing-audit/SKILL.md`
|
||||
- Create: `.claude/skills/billing-audit/references/invariants.md`
|
||||
- Create: `.claude/skills/billing-audit/evals/evals.json`
|
||||
|
||||
- [ ] **Step 1: Написать evals.json (триггер-кейсы первыми)**
|
||||
|
||||
Создать `.claude/skills/billing-audit/evals/evals.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"skill": "billing-audit",
|
||||
"positive": [
|
||||
"проверь корректность списания за лид",
|
||||
"аудит денежной логики биллинга",
|
||||
"не теряются ли копейки в prepaid→рублёвом балансе",
|
||||
"идемпотентно ли списание при ретрае",
|
||||
"правильно ли резолвится тарифная ступень",
|
||||
"что значит дрейф >5% в CsvReconcile",
|
||||
"проверь провенанс charge_source",
|
||||
"ревью PricingTierResolver на ошибки округления",
|
||||
"ledger двойной баланс — где может утечь сумма",
|
||||
"audit charge invariants before merge"
|
||||
],
|
||||
"near_miss": [
|
||||
{"prompt": "смоделируй BPMN процесса списания", "expect": "process-modeling #52"},
|
||||
{"prompt": "где узкое место в воронке оплат", "expect": "process-analysis #53"},
|
||||
{"prompt": "security-аудит платёжного эндпоинта", "expect": "D3 audit-security / Semgrep"},
|
||||
{"prompt": "посчитай РСБУ-проводки по выручке", "expect": "ru-tax-accounting #63"},
|
||||
{"prompt": "метрика MRR за месяц", "expect": "product-management metrics-review #42"}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
- [ ] **Step 2: Написать SKILL.md**
|
||||
|
||||
Создать `.claude/skills/billing-audit/SKILL.md`:
|
||||
|
||||
```markdown
|
||||
---
|
||||
name: billing-audit
|
||||
description: Аудит денежной корректности биллинг-кода Лидерры — money-инварианты при правке/ревью списаний, тарифов и баланса. Используй при «проверь списание», «аудит биллинга», «не теряются ли копейки», «идемпотентно ли списание», «корректна ли тарифная ступень», «что значит дрейф CsvReconcile», «провенанс charge_source». НЕ для моделирования процесса (process-modeling), поиска узких мест (process-analysis), security-аудита (D3), РСБУ/налогов (ru-tax-accounting), метрик выручки (product-management).
|
||||
---
|
||||
|
||||
# Billing Audit — аудит денежной корректности биллинга Лидерры
|
||||
|
||||
Проектный скил раздела C6 карты «Финансы — биллинг и тарификация». Проверяет
|
||||
**денежные инварианты** биллинг-подсистемы при правке или ревью кода. Объект —
|
||||
корректность *начисления* (не процесс, не безопасность, не учёт/налоги).
|
||||
|
||||
## Когда использовать
|
||||
|
||||
- Правка/ревью кода в `app/app/Services/Billing/**`, `app/app/Jobs/Supplier/CsvReconcileJob.php`,
|
||||
моделей `PricingTier`/`LeadCharge`, контроллеров биллинга.
|
||||
- Вопрос «безопасно ли это денежно?» по списанию, тарифу, балансу, сверке.
|
||||
|
||||
## Процедура аудита (5 инвариантов)
|
||||
|
||||
Полный чек-лист с проверками и ссылками на файлы — `references/invariants.md`.
|
||||
|
||||
1. **Сохранение суммы** — все денежные операции через `bcmath` (bcadd/bcsub/bcmul/bcdiv,
|
||||
scale фиксирован), никаких float; prepaid→₽ конвертация без потери копеек.
|
||||
2. **Идемпотентность списания** — один лид = одно списание; повтор/ретрай джоба
|
||||
не дублирует начисление (проверить уникальный ключ / advisory-lock / upsert).
|
||||
3. **Корректность тарифной ступени** — `PricingTierResolver` выбирает верную из 7
|
||||
ступеней по объёму; границы ступеней (включительно/исключительно) однозначны.
|
||||
4. **Дрейф сверки** — `CsvReconcileJob` порог >5%: что сравнивается, что значит дрейф,
|
||||
куда смотреть (рассинхрон поставки vs ошибка тарифа).
|
||||
5. **Провенанс charge_source** — каждое списание имеет прослеживаемый источник
|
||||
(`charge_source`); ручные/авто/CSV-восстановленные различимы.
|
||||
|
||||
## Границы
|
||||
|
||||
- ≠ `process-modeling` #52 / `process-analysis` #53 — те про *поток/процесс*; billing-audit про *деньги в коде*.
|
||||
- ≠ D3 audit-security (#39/#40) — те про *безопасность*; billing-audit про *денежную корректность*.
|
||||
- ≠ `ru-tax-accounting` #63 — тот про *учёт/налоги* (выход биллинга → налоговая база); billing-audit про *начисление*.
|
||||
- ≠ `product-management:metrics-review` #42 — тот про *метрики выручки*; billing-audit про *корректность*.
|
||||
|
||||
## Связано
|
||||
|
||||
- Reuse: Boost #10 (модели), Pest #18 (тесты инвариантов), Larastan #12 (bcmath/без float), Sentry #34 / Redis #35 (runtime/очередь).
|
||||
- ADR-012 (граница finance-tooling C6/C7).
|
||||
```
|
||||
|
||||
- [ ] **Step 3: Написать references/invariants.md**
|
||||
|
||||
Создать `.claude/skills/billing-audit/references/invariants.md`:
|
||||
|
||||
```markdown
|
||||
# Денежные инварианты биллинга Лидерры — чек-лист аудита
|
||||
|
||||
Объект-файлы (на момент 20.05.2026):
|
||||
|
||||
- `app/app/Services/Billing/PricingTierResolver.php` — резолюция 7 ступеней (pure).
|
||||
- `app/app/Services/Billing/LedgerService.php` — двойной баланс prepaid→₽ (bcmath).
|
||||
- `app/app/Services/Billing/BillingTopupService.php` — пополнение.
|
||||
- `app/app/Services/Billing/ChargeResult.php` — DTO результата списания.
|
||||
- `app/app/Models/PricingTier.php`, `app/app/Models/LeadCharge.php`.
|
||||
- `app/app/Repositories/PricingTierRepository.php`.
|
||||
- `app/app/Jobs/Supplier/CsvReconcileJob.php` — hourly сверка, алерт дрейфа >5%.
|
||||
- `app/app/Http/Controllers/Api/{AdminPricingTiersController,AdminBillingController,BillingController,TenantChargesController}.php`.
|
||||
|
||||
## I1. Сохранение суммы (bcmath, без float)
|
||||
|
||||
- [ ] Все арифметические операции с деньгами — `bcadd`/`bcsub`/`bcmul`/`bcdiv`/`bccomp` с явным `scale`.
|
||||
- [ ] Нет `+`/`-`/`*`/`/` над денежными значениями (Larastan/grep на float-арифметику в Billing).
|
||||
- [ ] prepaid→₽: конвертация округляет детерминированно (TRUNC/округление вниз в пользу tenant — свериться с кодом), сумма prepaid + ₽ не «исчезает».
|
||||
- [ ] Денежные колонки — целочисленные копейки или DECIMAL, не float/double.
|
||||
|
||||
## I2. Идемпотентность списания
|
||||
|
||||
- [ ] Один лид → одно списание: уникальность по (lead_id) или advisory-lock в `LedgerService`.
|
||||
- [ ] Ретрай `ImportLeadsJob`/`CsvReconcileJob` не создаёт дубль `lead_charges`.
|
||||
- [ ] Транзакция + `lockForUpdate` на балансе при мутации (TOCTOU — см. Sprint 3 lockForUpdate).
|
||||
|
||||
## I3. Корректность тарифной ступени
|
||||
|
||||
- [ ] `PricingTierResolver` выбирает ступень по объёму `delivered_in_month` верно на границах.
|
||||
- [ ] Границы ступеней непрерывны (нет дыр/перекрытий между 7 ступенями).
|
||||
- [ ] Pest покрывает граничные значения (ступень N → N+1).
|
||||
|
||||
## I4. Дрейф сверки CsvReconcile
|
||||
|
||||
- [ ] Порог >5% — что сравнивается (поставка поставщика vs начислено) → `supplier_csv_reconcile_log`.
|
||||
- [ ] Дрейф = рассинхрон поставки (норм) ИЛИ ошибка тарифа (баг) — различить по `charge_source`.
|
||||
|
||||
## I5. Провенанс charge_source
|
||||
|
||||
- [ ] Каждое `lead_charges.charge_source` заполнено и прослеживаемо.
|
||||
- [ ] Авто/ручное/CSV-восстановленное (`recovered_from_csv_at`) различимы.
|
||||
|
||||
## Reuse-инструменты
|
||||
|
||||
Boost #10 (Eloquent-introspection), Pest #18 + pest-parallel-debugger (тесты + race),
|
||||
Larastan #12 (статанализ bcmath), Sentry MCP #34 (runtime списаний), Redis MCP #35 (очередь сверки), context7 #60 (доки bcmath).
|
||||
```
|
||||
|
||||
- [ ] **Step 4: Валидировать структуру скила**
|
||||
|
||||
Run:
|
||||
|
||||
```bash
|
||||
cd ".claude/worktrees/finance-tooling-c6-c7" 2>/dev/null || cd "c:/моя/проекты/портал crm/Документация/.claude/worktrees/finance-tooling-c6-c7"
|
||||
node -e "JSON.parse(require('fs').readFileSync('.claude/skills/billing-audit/evals/evals.json','utf8')); console.log('evals.json OK')"
|
||||
grep -c "^name: billing-audit" .claude/skills/billing-audit/SKILL.md
|
||||
grep -c "^description:" .claude/skills/billing-audit/SKILL.md
|
||||
```
|
||||
|
||||
Expected: `evals.json OK`, оба grep → `1`.
|
||||
|
||||
- [ ] **Step 5: Триггер-eval (самопроверка по evals.json)**
|
||||
|
||||
Прогнать каждый `positive` промпт через дескрипшн скила: триггерит ли `description`?
|
||||
Каждый `near_miss` — уходит ли к указанному соседу (НЕ к billing-audit)? Зафиксировать
|
||||
результат в ответе (например «10/10 positive, 5/5 near-miss корректны»). При промахе —
|
||||
уточнить `description` (добавить/убрать ключевые слова) и перепроверить.
|
||||
|
||||
- [ ] **Step 6: lefthook-проверка + commit**
|
||||
|
||||
Run:
|
||||
|
||||
```bash
|
||||
git add -- .claude/skills/billing-audit/
|
||||
git commit -m "feat(finance): billing-audit skill — money invariants C6
|
||||
|
||||
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>" -- .claude/skills/billing-audit/
|
||||
```
|
||||
|
||||
Expected: PASS markdownlint/cspell/gitleaks. При cspell-флаге — добавить термины в `cspell-words.txt` (новой секцией `# finance-tooling C6+C7 — billing-audit skill (2026-05-20)`), `git add -- cspell-words.txt`, повторить commit с обоими путями.
|
||||
|
||||
---
|
||||
|
||||
## ФАЗА 2 — C7: finance plugin + ru-tax-accounting
|
||||
|
||||
### Task 2: Enable `finance` plugin + smoke
|
||||
|
||||
**Files:**
|
||||
|
||||
- Modify: `~/.claude/settings.json` (user-level, вне репозитория — НЕ коммитится)
|
||||
|
||||
- [ ] **Step 1: Прочитать текущий формат enabledPlugins**
|
||||
|
||||
Run:
|
||||
|
||||
```bash
|
||||
node -e "const s=require('os').homedir()+'/.claude/settings.json'; const j=JSON.parse(require('fs').readFileSync(s,'utf8')); console.log(JSON.stringify(j.enabledPlugins,null,2))"
|
||||
```
|
||||
|
||||
Expected: объект с ключами вида `"operations@knowledge-work-plugins": true`, `"product-management@knowledge-work-plugins": true`. Запомнить точный формат ключа.
|
||||
|
||||
- [ ] **Step 2: Добавить finance plugin**
|
||||
|
||||
Через skill `update-config` ИЛИ прямым редактированием `~/.claude/settings.json` добавить в `enabledPlugins`:
|
||||
|
||||
```json
|
||||
"finance@knowledge-work-plugins": true
|
||||
```
|
||||
|
||||
(ключ — точно по формату из Step 1; marketplace `knowledge-work-plugins` уже установлен).
|
||||
|
||||
- [ ] **Step 3: Smoke — скилы finance доступны**
|
||||
|
||||
Перезапустить сессию ИЛИ проверить доступность. Ожидаемо в списке скилов появляются
|
||||
`finance:reconciliation`, `finance:variance-analysis`, `finance:financial-statements`,
|
||||
`finance:journal-entry`, `finance:close-management`, `finance:audit-support`, `finance:sox-testing`.
|
||||
Зафиксировать в ответе фактический список доступных `finance:*` скилов (raw, не саммари).
|
||||
|
||||
- [ ] **Step 4: Зафиксировать применимость (для ADR-012, Task 4)**
|
||||
|
||||
Записать вывод (без коммита — войдёт в ADR Task 4):
|
||||
|
||||
- ✅ применимо C6: `reconciliation`, `variance-analysis`.
|
||||
- ⚠️ частично C7 (US-GAAP): `financial-statements`, `close-management`, `journal-entry`, `journal-entry-prep`.
|
||||
- ❌ not-applicable РФ: `sox-testing`, `audit-support`.
|
||||
- DEFERRED MCP: snowflake/databricks/bigquery (не наш стек).
|
||||
|
||||
> Примечание: enable settings.json — user-level, не попадает в git. Формализация — в нормативке (Task 5-9).
|
||||
|
||||
### Task 3: Скил `ru-tax-accounting` (C7)
|
||||
|
||||
**Files:**
|
||||
|
||||
- Create: `.claude/skills/ru-tax-accounting/SKILL.md`
|
||||
- Create: `.claude/skills/ru-tax-accounting/references/ru-tax-context.md`
|
||||
- Create: `.claude/skills/ru-tax-accounting/evals/evals.json`
|
||||
|
||||
- [ ] **Step 1: Написать evals.json**
|
||||
|
||||
Создать `.claude/skills/ru-tax-accounting/evals/evals.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"skill": "ru-tax-accounting",
|
||||
"positive": [
|
||||
"как учесть выручку за лиды по РСБУ",
|
||||
"НДС или УСН для SaaS-выручки",
|
||||
"переведи billing-выручку в налоговую базу",
|
||||
"какое налогооблагаемое событие при пополнении баланса",
|
||||
"выгрузка lead_charges для бухгалтера",
|
||||
"проводки по РСБУ за списания",
|
||||
"налоговый режим для подписочной выручки портала",
|
||||
"что с НДС при возврате на баланс tenant",
|
||||
"налоговая база УСН доходы по выручке за лиды"
|
||||
],
|
||||
"near_miss": [
|
||||
{"prompt": "проверь идемпотентность списания", "expect": "billing-audit #62"},
|
||||
{"prompt": "US-GAAP financial statement", "expect": "finance plugin #61 financial-statements"},
|
||||
{"prompt": "договор с поставщиком лидов", "expect": "D1 юриспруденция"},
|
||||
{"prompt": "обработка ПДн при выгрузке", "expect": "D2 ПДн 152-ФЗ"},
|
||||
{"prompt": "сверка ledger с банком", "expect": "finance plugin #61 reconciliation"}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
- [ ] **Step 2: Написать SKILL.md**
|
||||
|
||||
Создать `.claude/skills/ru-tax-accounting/SKILL.md`:
|
||||
|
||||
```markdown
|
||||
---
|
||||
name: ru-tax-accounting
|
||||
description: Контекст РСБУ и налогов РФ (НК РФ, НДС/УСН) применительно к SaaS-выручке Лидерры за лиды. Используй при «учёт выручки по РСБУ», «НДС или УСН», «налоговая база по выручке», «налогооблагаемое событие», «выгрузка для бухгалтера», «проводки РСБУ». НЕ для денежной корректности кода (billing-audit), US-GAAP-отчётности (finance plugin), договоров (D1 право), ПДн (D2), сверки с банком (finance reconciliation).
|
||||
---
|
||||
|
||||
# RU Tax & Accounting — РСБУ/НК РФ контекст для выручки Лидерры
|
||||
|
||||
Проектный скил раздела C7 карты «Финансы — бухгалтерия и налоги». Переводит
|
||||
billing-выручку (выход C6) в **российский учётно-налоговый контекст** (РСБУ + НК РФ).
|
||||
Закрывает gap, который US-GAAP-плагин `finance` (#61) не покрывает.
|
||||
|
||||
## Когда использовать
|
||||
|
||||
- Вопрос «как это учесть/обложить по РФ-правилам?» по выручке/пополнениям/возвратам.
|
||||
- Подготовка выгрузок/пояснений для бухгалтера из billing-данных.
|
||||
- Определение налогооблагаемого события и налоговой базы.
|
||||
|
||||
## Содержание (см. references/ru-tax-context.md)
|
||||
|
||||
1. **Налоговые режимы РФ** — НДС (ОСНО) vs УСН (доходы / доходы-расходы); что применимо к SaaS за лиды.
|
||||
2. **Налогооблагаемое событие** — пополнение баланса (аванс) vs списание за лид (реализация) vs возврат.
|
||||
3. **Маппинг billing→база** — `lead_charges`/`LedgerService` → выручка → налоговая база; роль `charge_source`.
|
||||
4. **РСБУ vs управленческий** — отличие от US-GAAP-отчётов плагина finance; первичка/документы.
|
||||
5. **Выгрузки для бухгалтера** — какие данные и в каком разрезе извлечь (Boost/Pest как инструменты выгрузки).
|
||||
|
||||
## Границы
|
||||
|
||||
- ≠ `billing-audit` #62 — тот про *корректность начисления в коде*; ru-tax про *учёт/налог результата*.
|
||||
- ≠ `finance` plugin #61 — тот US-GAAP-механика (проводки/отчёты/сверка); ru-tax — РФ-специфика РСБУ/НК.
|
||||
- ≠ D1 «Юриспруденция/договорная» — там договоры/право; ru-tax — налоги.
|
||||
- ≠ D2 «Защита ПДн (152-ФЗ)» — там персональные данные; ru-tax — налоги.
|
||||
|
||||
## Ограничение
|
||||
|
||||
Бухгалтерия компании ведётся вне dev-репо (1С/аутсорс). Скил даёт **контекст и выгрузки**,
|
||||
не заменяет бухгалтера и не является налоговой консультацией. Реальный платёжный
|
||||
провайдер — DEFERRED (Б-1).
|
||||
|
||||
## Связано
|
||||
|
||||
- Вход: выручка из C6 (`lead_charges`, `LedgerService`).
|
||||
- Reuse: data-scientist #49 (финмодели), Boost #10 / Pest #18 (выгрузка), finance plugin #61 (US-механика).
|
||||
- ADR-012 (граница finance-tooling C6/C7).
|
||||
```
|
||||
|
||||
- [ ] **Step 3: Написать references/ru-tax-context.md**
|
||||
|
||||
Создать `.claude/skills/ru-tax-accounting/references/ru-tax-context.md`:
|
||||
|
||||
```markdown
|
||||
# РСБУ / НК РФ — контекст для выручки Лидерры за лиды
|
||||
|
||||
> Не налоговая консультация. Контекст для подготовки данных бухгалтеру.
|
||||
|
||||
## 1. Налоговые режимы РФ
|
||||
|
||||
- **ОСНО + НДС (НК РФ гл. 21)** — НДС 20% на реализацию услуг РФ. Электронные/рекламные
|
||||
услуги — проверить место реализации и применимые льготы.
|
||||
- **УСН (НК РФ гл. 26.2)** — «доходы» (6%) или «доходы минус расходы» (15%). Без НДС
|
||||
(кроме исключений). Типичный режим для раннего SaaS.
|
||||
- Применимый режим зависит от регистрации ООО (Б-1) — до закрытия Б-1 фиксируем как параметр.
|
||||
|
||||
## 2. Налогооблагаемое событие
|
||||
|
||||
- **Пополнение баланса** = аванс (предоплата). По НДС — момент определения базы может
|
||||
возникать на аванс; по УСН-доходы — доход по поступлению (кассовый метод).
|
||||
- **Списание за лид** = реализация услуги (закрытие аванса).
|
||||
- **Возврат на баланс / с баланса** = корректировка базы.
|
||||
- Различать по `lead_charges.charge_source` и операциям `LedgerService`.
|
||||
|
||||
## 3. Маппинг billing → налоговая база
|
||||
|
||||
| Billing-сущность | Учётный смысл |
|
||||
|---|---|
|
||||
| Пополнение (`BillingTopupService`) | Аванс / поступление |
|
||||
| Списание (`LedgerService`, `lead_charges`) | Реализация (выручка) |
|
||||
| `delivered_in_month` (`tenants`) | Объём для tier — не налог напрямую |
|
||||
| Возврат | Корректировка |
|
||||
|
||||
## 4. РСБУ vs управленческий / US-GAAP
|
||||
|
||||
- РСБУ — российский план счетов, первичные документы (акт/УПД), кассовый/начисление.
|
||||
- US-GAAP-скилы плагина `finance` (#61) — иная форма (income statement / balance sheet);
|
||||
применимы для *внутренней управленки*, не для РФ-отчётности.
|
||||
|
||||
## 5. Выгрузки для бухгалтера
|
||||
|
||||
- Реестр списаний за период: `lead_charges` (period, tenant, сумма, charge_source).
|
||||
- Реестр пополнений: операции `LedgerService` / `BillingTopupService`.
|
||||
- Инструменты выгрузки: Boost #10 (Eloquent/SQL), Pest #18 (фикстуры/проверки), `BillingSummaryProvider` (готовый отчёт-провайдер).
|
||||
```
|
||||
|
||||
- [ ] **Step 4: Валидировать структуру скила**
|
||||
|
||||
Run:
|
||||
|
||||
```bash
|
||||
node -e "JSON.parse(require('fs').readFileSync('.claude/skills/ru-tax-accounting/evals/evals.json','utf8')); console.log('evals.json OK')"
|
||||
grep -c "^name: ru-tax-accounting" .claude/skills/ru-tax-accounting/SKILL.md
|
||||
grep -c "^description:" .claude/skills/ru-tax-accounting/SKILL.md
|
||||
```
|
||||
|
||||
Expected: `evals.json OK`, оба grep → `1`.
|
||||
|
||||
- [ ] **Step 5: Триггер-eval (самопроверка)**
|
||||
|
||||
Прогнать positive/near_miss как в Task 1 Step 5. Зафиксировать результат. При промахе — уточнить `description`.
|
||||
|
||||
- [ ] **Step 6: lefthook-проверка + commit**
|
||||
|
||||
Run:
|
||||
|
||||
```bash
|
||||
git add -- .claude/skills/ru-tax-accounting/
|
||||
git commit -m "feat(finance): ru-tax-accounting skill — РСБУ/НК РФ context C7
|
||||
|
||||
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>" -- .claude/skills/ru-tax-accounting/
|
||||
```
|
||||
|
||||
Expected: PASS. При cspell-флаге — добавить термины в `cspell-words.txt`, повторить с обоими путями.
|
||||
|
||||
---
|
||||
|
||||
## ФАЗА 3 — нормативка + роутер + наблюдатель + карта + ADR
|
||||
|
||||
> Перед правкой КАЖДОГО нормативного файла (Tooling/PSR_v1/Pravila/CLAUDE.md/routing-off-phase/router-procedure) — pre-flight: `git fetch && git log HEAD..origin/main --oneline` (Pravila §15.2).
|
||||
|
||||
### Task 4: ADR-012 — граница finance-tooling
|
||||
|
||||
**Files:**
|
||||
|
||||
- Create: `docs/adr/012-finance-tooling.md`
|
||||
|
||||
- [ ] **Step 1: Создать ADR-012**
|
||||
|
||||
Создать `docs/adr/012-finance-tooling.md` (формат как соседние ADR в `docs/adr/`):
|
||||
|
||||
```markdown
|
||||
# ADR-012: Finance-tooling — наполнение разделов карты C6 + C7
|
||||
|
||||
**Status:** Accepted
|
||||
**Date:** 2026-05-20
|
||||
**Контекст:** эпик finance-tooling (объединённые C6+C7), spec `docs/superpowers/specs/2026-05-20-finance-tooling-c6-c7-design.md`.
|
||||
|
||||
## Context
|
||||
|
||||
Разделы карты C6 «Финансы — биллинг и тарификация» и C7 «Финансы — бухгалтерия и
|
||||
налоги» были пусты. Биллинг-подсистема (Plan 4) велика в коде, но dedicated dev-tooling
|
||||
скуден. Заказчик решил объединить C6+C7 в один эпик и покрыть полностью.
|
||||
|
||||
## Decision
|
||||
|
||||
1. **finance plugin (#61)** (knowledge-work-plugins) — homed **C7** (primary), cross-ref C6.
|
||||
- ✅ C6: `reconciliation`, `variance-analysis`.
|
||||
- ⚠️ C7 частично (US-GAAP): `financial-statements`, `close-management`, `journal-entry`, `journal-entry-prep`.
|
||||
- ❌ not-applicable РФ: `sox-testing`, `audit-support` (нет SOX у частной РФ-компании).
|
||||
- DEFERRED: warehouse-MCP (snowflake/databricks/bigquery) — не стек проекта (PG+Redis).
|
||||
2. **billing-audit (#62)** — self-authored project-скил, C6. Денежные инварианты Лидерры.
|
||||
3. **ru-tax-accounting (#63)** — self-authored project-скил, C7. РСБУ/НК РФ. Закрывает gap US-плагина.
|
||||
4. **Граница C6 ↔ C7:** C6 = начисление денег клиенту за лиды; C7 = учёт и налоги компании.
|
||||
Точка стыка: billing-выручка (`lead_charges`/`LedgerService`) — выход C6 и вход C7.
|
||||
5. **Reuse** существующих узлов в C6/C7 через `NODE_SECTION_SECONDARY` (см. spec §6).
|
||||
|
||||
## Boundaries (конфликт-аудит)
|
||||
|
||||
- FIN1 warehouse-MCP → DEFERRED. FIN2 SOX → not-applicable РФ. FIN3 finance vs operations.
|
||||
- FIN4 finance reconciliation (инструмент) vs CsvReconcileJob (код). FIN5 billing-audit vs process-*/D3.
|
||||
- FIN6 ru-tax vs finance plugin vs D1/D2. FIN7 граница C6↔C7. FIN8 self-authored скилы линтуются.
|
||||
|
||||
## Consequences
|
||||
|
||||
- C6/C7 карты непусты. Новая off-phase подкатегория `finance-tooling` (15-я).
|
||||
- Реальный платёжный провайдер и warehouse-аналитика — DEFERRED (Б-1 / вне стека).
|
||||
- ru-tax-accounting — контекст/выгрузки, не налоговая консультация (бухгалтерия вне репо).
|
||||
```
|
||||
|
||||
- [ ] **Step 2: lefthook + commit**
|
||||
|
||||
Run:
|
||||
|
||||
```bash
|
||||
git add -- docs/adr/012-finance-tooling.md
|
||||
git commit -m "docs(adr): ADR-012 finance-tooling boundary C6/C7
|
||||
|
||||
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>" -- docs/adr/012-finance-tooling.md
|
||||
```
|
||||
|
||||
Expected: PASS (adr-judge job 9 OK). cspell-флаги → cspell-words.txt.
|
||||
|
||||
### Task 5: Tooling Прил.Н — §4.36/§4.37/§4.38 + §0 + header
|
||||
|
||||
**Files:**
|
||||
|
||||
- Modify: `docs/Tooling_v8_3.md`
|
||||
|
||||
- [ ] **Step 1: pre-flight sync**
|
||||
|
||||
Run: `git fetch && git log HEAD..origin/main --oneline` — ожидаемо пусто или чужие коммиты (не Tooling). Если Tooling изменён на origin/main — сначала rebase.
|
||||
|
||||
- [ ] **Step 2: Добавить §4.36 finance plugin** (после §4.35 context7)
|
||||
|
||||
Вставить блок (формат как §4.30):
|
||||
|
||||
```markdown
|
||||
### 4.36. finance plugin — финансы и бухгалтерия (off-phase, finance-tooling)
|
||||
|
||||
**Атрибуты:**
|
||||
|
||||
| id | name | kind | phase | subcategory | triggers | boundaries | dormant | last-touched |
|
||||
|---|---|---|---|---|---|---|---|---|
|
||||
| #61 | finance plugin | plugin | off-phase | finance-tooling | «сверка, variance-анализ, US-GAAP-отчётность, проводки, close» | ADR-012 (граница C6/C7, vs operations) | false | 2026-05-20 |
|
||||
|
||||
**Источник:** Claude Code plugin, marketplace `anthropics/knowledge-work-plugins`, plugin `finance@knowledge-work-plugins` (Anthropic Verified). Включается в `~/.claude/settings.json` `enabledPlugins`. 9 скилов (reconciliation/variance-analysis/financial-statements/close-management/journal-entry/journal-entry-prep/sox-testing/audit-support) + MCP-серверы (snowflake/databricks/bigquery/slack/ms365 — http).
|
||||
|
||||
**Категория:** off-phase, **finance-tooling** — 15-я off-phase подкатегория. Домашний раздел карты — **C7** «Финансы — бухгалтерия и налоги» (primary), cross-ref **C6** «биллинг/тарификация».
|
||||
|
||||
**Назначение:** учёт и финансовая отчётность — сверка счетов, анализ отклонений, US-GAAP-отчёты (P&L/BS/CF), управление закрытием периода, проводки.
|
||||
|
||||
**Роль:** инструмент **#61**. Применимость к РФ-контексту: ✅ `reconciliation`/`variance-analysis` (C6); ⚠️ `financial-statements`/`close-management`/`journal-entry`/`journal-entry-prep` (US-GAAP — частично, у нас РСБУ); ❌ `sox-testing`/`audit-support` (not-applicable — нет SOX у частной РФ-компании). MCP-серверы (snowflake/databricks/bigquery) — **DEFERRED**, не стек проекта.
|
||||
|
||||
**Конфликт-аудит (ADR-012):** FIN1 warehouse-MCP DEFERRED; FIN2 SOX not-applicable; FIN3 граница с operations #51 (finance = учёт/сверка/отчётность, operations = операционные процессы/риск); FIN4 finance `reconciliation` (инструмент) vs `CsvReconcileJob` (код проекта). РФ-специфику покрывает `ru-tax-accounting` #63.
|
||||
|
||||
**Координация:** PSR_v1 R10.1 Блок 1. Не UI → вне R6.0/R6.1/R14. ADR-012.
|
||||
|
||||
### 4.37. billing-audit — аудит денежной корректности (off-phase, finance-tooling)
|
||||
|
||||
**Атрибуты:**
|
||||
|
||||
| id | name | kind | phase | subcategory | triggers | boundaries | dormant | last-touched |
|
||||
|---|---|---|---|---|---|---|---|---|
|
||||
| #62 | billing-audit | skill | off-phase | finance-tooling | «аудит списания, money-инварианты, идемпотентность, тариф-резолюция, дрейф reconcile» | ADR-012 (vs process-*/D3/ru-tax) | false | 2026-05-20 |
|
||||
|
||||
**Источник:** self-authored standalone project-скил в `.claude/skills/billing-audit/` (`SKILL.md` + `references/invariants.md` + `evals/evals.json`). Свой, не вендоренный; **линтуется** (cspell+markdownlint, не в ignorePaths — как process-*/discovery-interview, LINT1).
|
||||
|
||||
**Категория:** off-phase, **finance-tooling**. Раздел карты **C6** «Финансы — биллинг и тарификация».
|
||||
|
||||
**Назначение:** аудит денежных инвариантов биллинг-кода Лидерры — сохранение суммы (bcmath/без float), идемпотентность списания, корректность 7-ступенчатой tier-резолюции, интерпретация дрейфа CsvReconcile >5%, провенанс charge_source.
|
||||
|
||||
**Роль:** инструмент **#62**. Триггер-eval в `.claude/skills/billing-audit/evals/evals.json`.
|
||||
|
||||
**Конфликт-аудит (ADR-012, FIN5):** объект иной — ≠ process-modeling/process-analysis (#52/#53, поток/процесс), ≠ D3 audit-security (#39/#40, безопасность), ≠ ru-tax-accounting (#63, учёт/налог результата), ≠ product-management metrics-review (#42, метрики выручки).
|
||||
|
||||
**Координация:** PSR_v1 R10.1 Блок 1 note (self-authored project-скил). Не UI → вне R6.0/R6.1/R14.
|
||||
|
||||
### 4.38. ru-tax-accounting — РСБУ/НК РФ контекст (off-phase, finance-tooling)
|
||||
|
||||
**Атрибуты:**
|
||||
|
||||
| id | name | kind | phase | subcategory | triggers | boundaries | dormant | last-touched |
|
||||
|---|---|---|---|---|---|---|---|---|
|
||||
| #63 | ru-tax-accounting | skill | off-phase | finance-tooling | «РСБУ, НДС/УСН, налоговая база, налогооблагаемое событие, выгрузка бухгалтеру» | ADR-012 (vs finance plugin/billing-audit/D1/D2) | false | 2026-05-20 |
|
||||
|
||||
**Источник:** self-authored standalone project-скил в `.claude/skills/ru-tax-accounting/` (`SKILL.md` + `references/ru-tax-context.md` + `evals/evals.json`). Свой, не вендоренный; **линтуется** (LINT1).
|
||||
|
||||
**Категория:** off-phase, **finance-tooling**. Раздел карты **C7** «Финансы — бухгалтерия и налоги».
|
||||
|
||||
**Назначение:** перевод billing-выручки (выход C6) в российский учётно-налоговый контекст — налоговые режимы (НДС/УСН), налогооблагаемое событие, маппинг выручка→база, выгрузки для бухгалтера. Закрывает РФ-gap US-GAAP-плагина finance #61.
|
||||
|
||||
**Роль:** инструмент **#63**. Не налоговая консультация; бухгалтерия компании ведётся вне dev-репо (1С/аутсорс). Реальный платёжный провайдер — DEFERRED (Б-1).
|
||||
|
||||
**Конфликт-аудит (ADR-012, FIN6):** ≠ billing-audit #62 (корректность начисления в коде), ≠ finance plugin #61 (US-GAAP-механика), ≠ D1 (договоры/право), ≠ D2 (ПДн 152-ФЗ).
|
||||
|
||||
**Координация:** PSR_v1 R10.1 Блок 1 note (self-authored project-скил). Не UI → вне R6.0/R6.1/R14.
|
||||
```
|
||||
|
||||
- [ ] **Step 3: Обновить §0 счётчик + header**
|
||||
|
||||
В §0 «КАНОН СЧЁТЧИКОВ»: счётчик формализованных позиций 60 → **63** (off-phase +3); добавить подкатегорию **finance-tooling** (15-я). Обновить header Прил.Н: v2.17 → **v2.18** с записью «finance-tooling: +§4.36 finance plugin #61 / §4.37 billing-audit #62 / §4.38 ru-tax-accounting #63; §0 счётчик 60→63 + 15-я подкатегория; cross-ref Pravila v1.34 / PSR_v1 v3.18 / CLAUDE.md v2.21». Сверить фактическое число в §0 (Step выполняется по факту прочитанного §0, не вслепую).
|
||||
|
||||
- [ ] **Step 4: lefthook + commit**
|
||||
|
||||
Run:
|
||||
|
||||
```bash
|
||||
git add -- docs/Tooling_v8_3.md cspell-words.txt
|
||||
git commit -m "docs(tooling): finance-tooling #61-#63 + §0 counter 60->63 (Прил.Н v2.18)
|
||||
|
||||
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>" -- docs/Tooling_v8_3.md cspell-words.txt
|
||||
```
|
||||
|
||||
Expected: PASS. cspell-флаги (РСБУ/УСН/etc. уже добавлены в Task 1/3; новые — добавить).
|
||||
|
||||
### Task 6: PSR_v1 R10.1 + version
|
||||
|
||||
**Files:**
|
||||
|
||||
- Modify: `docs/Plugin_stack_rules_v1.md`
|
||||
|
||||
- [ ] **Step 1: pre-flight sync** (`git fetch && git log HEAD..origin/main --oneline`).
|
||||
|
||||
- [ ] **Step 2: Блок 1 — добавить строку finance plugin** (после строки `operations` / в конец таблицы Блок 1)
|
||||
|
||||
```markdown
|
||||
| **finance** *(9 skills: `reconciliation` / `variance-analysis` / `financial-statements` / `close-management` / `journal-entry` / `journal-entry-prep` / `sox-testing` / `audit-support`)* | `anthropics/knowledge-work-plugins` (plugin `finance@knowledge-work-plugins`, Anthropic Verified) | финансы/бухгалтерия — сверка, анализ отклонений, US-GAAP-отчётность, закрытие периода, проводки. Категория: **finance-tooling** (Tooling #61, вне UI-пула). Homed C7, cross-ref C6 | при учётно-финансовой работе. Применимость РФ: ✅ reconciliation/variance; ⚠️ US-GAAP-скилы частично; ❌ SOX-скилы not-applicable; warehouse-MCP DEFERRED (ADR-012). Не UI → вне R6.0/R6.1/R14 |
|
||||
```
|
||||
|
||||
- [ ] **Step 3: Блок 1 — добавить note (self-authored finance-скилы)** (после note v3.13)
|
||||
|
||||
```markdown
|
||||
**Блок 1 — note (v3.18):** **billing-audit** (Tooling #62) + **ru-tax-accounting** (Tooling #63) — self-authored project-скилы в `.claude/skills/billing-audit/` и `.claude/skills/ru-tax-accounting/`, **не** вендоренные и **не** через marketplace; написаны проектом (паттерн `audit-portal`/`regression`/`process-*`/`discovery-interview`). **Линтуются** lefthook'ом (cspell+markdownlint), **не** в ignorePaths (LINT1). Категория **finance-tooling** (15-я off-phase подкатегория, разделы C6/C7 карты), вне R6.0/R6.1/R14. ADR-012.
|
||||
```
|
||||
|
||||
- [ ] **Step 4: Обновить версию-шапку PSR_v1** v3.17 → **v3.18** с changelog-строкой (формат как v3.9): «finance-tooling: R10.1 Блок 1 +finance plugin (#61) + note (+billing-audit #62 / ru-tax-accounting #63). Не UI → вне R6/R14. Содержательных изменений R0–R16: 0. Связано: Tooling v2.18, Pravila v1.34, CLAUDE.md v2.21; план `docs/superpowers/plans/2026-05-20-finance-tooling-c6-c7.md`».
|
||||
|
||||
- [ ] **Step 5: lefthook + commit**
|
||||
|
||||
```bash
|
||||
git add -- docs/Plugin_stack_rules_v1.md cspell-words.txt
|
||||
git commit -m "docs(psr): R10.1 finance-tooling #61-#63 (PSR_v1 v3.18)
|
||||
|
||||
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>" -- docs/Plugin_stack_rules_v1.md cspell-words.txt
|
||||
```
|
||||
|
||||
Expected: PASS.
|
||||
|
||||
### Task 7: Pravila §13.2 + version
|
||||
|
||||
**Files:**
|
||||
|
||||
- Modify: `docs/Pravila_raboty_Claude_v1_1.md`
|
||||
|
||||
- [ ] **Step 1: pre-flight sync.**
|
||||
|
||||
- [ ] **Step 2: §13.2 — добавить абзац** (после абзаца «Off-phase authoring-tooling + dev-support», перед `### 13.3`)
|
||||
|
||||
```markdown
|
||||
**Off-phase finance-tooling (C6+C7, v1.34, 20.05.2026):** Инструменты разделов C6 «Финансы — биллинг и тарификация» и C7 «Финансы — бухгалтерия и налоги» карты — #61 `finance` plugin (Tooling §4.36; marketplace `finance@knowledge-work-plugins`, Anthropic Verified, 9 скилов; homed C7, cross-ref C6; РФ-применимость: ✅ reconciliation/variance, ⚠️ US-GAAP-скилы частично, ❌ SOX-скилы not-applicable, warehouse-MCP DEFERRED), #62 `billing-audit` (Tooling §4.37; self-authored project-скил `.claude/skills/billing-audit/` — денежные инварианты биллинга C6: сохранение суммы bcmath, идемпотентность, tier-резолюция, дрейф reconcile, charge_source), #63 `ru-tax-accounting` (Tooling §4.38; self-authored project-скил `.claude/skills/ru-tax-accounting/` — РСБУ/НК РФ контекст C7: НДС/УСН, налоговая база, выгрузки бухгалтеру; закрывает РФ-gap US-плагина). Плюс reuse-классификация существующих узлов в C6/C7 через `NODE_SECTION_SECONDARY` (Boost/Pest/Larastan/Sentry/Redis/PM metrics-review/data-scientist/operations/process-*/context7) — без новых номеров. **Пятнадцатая** off-phase подкатегория. Off-phase, не UI → вне R6.0/R6.1/R14 PSR_v1. self-authored скилы billing-audit/ru-tax-accounting **линтуются** (не в ignorePaths, LINT1). Границы — ADR-012 (граница C6↔C7: начисление клиенту vs учёт/налоги компании; FIN1–FIN8). Регулируется PSR_v1 R10.1 Блок 1 (finance plugin) + note (2 self-authored скила). Установлено 20.05.2026 на ветке `worktree-finance-tooling-c6-c7`; план `docs/superpowers/plans/2026-05-20-finance-tooling-c6-c7.md`.
|
||||
```
|
||||
|
||||
- [ ] **Step 3: §0 cross-ref + §10 changelog + версия-шапка** Pravila v1.33 → **v1.34** (формат как соседние записи; +строку в §10 changelog-таблице).
|
||||
|
||||
- [ ] **Step 4: lefthook + commit**
|
||||
|
||||
```bash
|
||||
git add -- docs/Pravila_raboty_Claude_v1_1.md cspell-words.txt
|
||||
git commit -m "docs(pravila): §13.2 finance-tooling abzац (Pravila v1.34)
|
||||
|
||||
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>" -- docs/Pravila_raboty_Claude_v1_1.md cspell-words.txt
|
||||
```
|
||||
|
||||
### Task 8: Роутер — routing-off-phase.md + router-procedure.md
|
||||
|
||||
**Files:**
|
||||
|
||||
- Modify: `docs/routing-off-phase.md`
|
||||
- Modify: `docs/router-procedure.md`
|
||||
|
||||
- [ ] **Step 1: pre-flight sync.**
|
||||
|
||||
- [ ] **Step 2: routing-off-phase.md — +3 строки routing-таблицы** (в раздел «Таблица routing», после строки context7 #60)
|
||||
|
||||
```markdown
|
||||
| Аудит денежной корректности биллинга (списание/тариф/баланс/дрейф/charge_source) | **billing-audit** (project-скил) | #62 | finance-tooling | C6; ≠ process-*/D3/ru-tax (ADR-012) |
|
||||
| РСБУ/НК РФ контекст: НДС/УСН, налоговая база, выгрузка бухгалтеру | **ru-tax-accounting** (project-скил) | #63 | finance-tooling | C7; ≠ finance plugin/D1/D2 (ADR-012) |
|
||||
| Сверка счетов / variance-анализ / US-GAAP-отчётность / проводки | **finance plugin** | #61 | finance-tooling | C7; SOX not-applicable, warehouse-MCP DEFERRED (ADR-012) |
|
||||
```
|
||||
|
||||
- [ ] **Step 3: routing-off-phase.md — +связка L13** (в раздел «Канонические связки», после L12)
|
||||
|
||||
```markdown
|
||||
| L13 | `billing-audit` (#62) + `Pest` (#18) + `Boost` (#10) + `Sentry`/`Redis` (#34/#35) → `ru-tax-accounting` (#63) | Финансовая цепочка: аудит денежных инвариантов кода (billing-audit) тестами (Pest) на моделях (Boost) с runtime-фактами (Sentry/Redis) → перевод выверенной выручки в учётно-налоговый контекст (ru-tax). C6→C7. Граница — ADR-012. |
|
||||
```
|
||||
|
||||
- [ ] **Step 4: routing-off-phase.md — scope + версия** Обновить scope-диапазон «Tooling §4.11–§4.35» → «§4.11–§4.38»; версию v1.1 → **v1.2** (запись: «+3 строки finance-tooling #61-#63 + связка L13 + scope →§4.38; ADR-012»).
|
||||
|
||||
- [ ] **Step 5: router-procedure.md — changelog-touch** Добавить в Changelog строку:
|
||||
|
||||
```markdown
|
||||
- **v1.1 (2026-05-20)** — finance-tooling узлы #61-#63 добавлены в реестр Tooling §4.36-§4.38 (читаются step 3) и routing-off-phase.md (связка L13). Структурных правок процедуры нет. ADR-012.
|
||||
```
|
||||
|
||||
И обновить `**Status:**` строку версией v1.1.
|
||||
|
||||
- [ ] **Step 6: lefthook + commit**
|
||||
|
||||
```bash
|
||||
git add -- docs/routing-off-phase.md docs/router-procedure.md cspell-words.txt
|
||||
git commit -m "docs(router): finance-tooling routing rows + L13 chain (routing-off-phase v1.2)
|
||||
|
||||
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>" -- docs/routing-off-phase.md docs/router-procedure.md cspell-words.txt
|
||||
```
|
||||
|
||||
### Task 9: CLAUDE.md (прямой Edit — worktree-эксцепшн §5 п.10)
|
||||
|
||||
**Files:**
|
||||
|
||||
- Modify: `CLAUDE.md`
|
||||
|
||||
- [ ] **Step 1: pre-flight sync.**
|
||||
|
||||
- [ ] **Step 2: §3.3 — добавить 3 строки** (после #60 context7, формат однострочного индекса):
|
||||
|
||||
```markdown
|
||||
| 61 | Финансы/бухгалтерия (сверка, variance, US-GAAP, проводки) — *off-phase* | **finance plugin** | off-phase, finance-tooling — Tooling §4.36; homed C7, cross-ref C6; SOX not-applicable РФ |
|
||||
| 62 | Аудит денежной корректности биллинга (инварианты) — *off-phase* | **billing-audit** | off-phase, finance-tooling — Tooling §4.37; project-скил, раздел C6 |
|
||||
| 63 | РСБУ/НК РФ контекст (НДС/УСН, налоговая база) — *off-phase* | **ru-tax-accounting** | off-phase, finance-tooling — Tooling §4.38; project-скил, раздел C7 |
|
||||
```
|
||||
|
||||
- [ ] **Step 3: §0 cross-refs** Pravila v1.33→**v1.34** / PSR_v1 v3.17→**v3.18** / Tooling Прил.Н v2.17→**v2.18**.
|
||||
|
||||
- [ ] **Step 4: §6 +абзац** (сверху) «2026-05-20 finance-tooling integration (C6+C7)» — кратко: 3 узла (#61 finance plugin homed C7 / #62 billing-audit C6 / #63 ru-tax-accounting C7) + reuse + расширенная нормативка (роутер L13 + наблюдатель 9-атрибутные блоки) + ADR-012; разделы C6/C7 карты непусты; worktree.
|
||||
|
||||
- [ ] **Step 5: §9 +entry** v2.20 → **v2.21** с описанием правок (§3.3 +#61/#62/#63, §0 cross-refs, §6, шапка). Обновить шапку версии.
|
||||
|
||||
- [ ] **Step 6: lefthook + commit**
|
||||
|
||||
```bash
|
||||
git add -- CLAUDE.md cspell-words.txt
|
||||
git commit -m "docs(claude-md): §3.3 finance-tooling #61-#63 (CLAUDE.md v2.21)
|
||||
|
||||
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>" -- CLAUDE.md cspell-words.txt
|
||||
```
|
||||
|
||||
### Task 10: Карта — automation-graph-data.js + automation-graph.html
|
||||
|
||||
**Files:**
|
||||
|
||||
- Modify: `docs/automation-graph-data.js`
|
||||
- Modify: `docs/automation-graph.html`
|
||||
|
||||
- [ ] **Step 1: NODES — добавить 3 узла** (в массив `NODES`, рядом со skills_proj-кластером)
|
||||
|
||||
```javascript
|
||||
{ id: 'finance_plugin', label: 'finance\n(plugin)', group: 'plugins', size: 20, ring: 2, ...pos(2, 200) },
|
||||
{ id: 'billing_audit', label: 'billing-audit\n(skill)', group: 'skills_proj', size: 18, ring: 3, ...pos(3, 397) },
|
||||
{ id: 'ru_tax', label: 'ru-tax-accounting\n(skill)', group: 'skills_proj', size: 18, ring: 3, ...pos(3, 407) },
|
||||
```
|
||||
|
||||
- [ ] **Step 2: NODE_SECTION — добавить привязки** (в объект `NODE_SECTION`, новой секцией-комментарием)
|
||||
|
||||
```javascript
|
||||
// finance-tooling C6+C7 (20.05.2026) — разделы «Финансы»
|
||||
finance_plugin: 'C7', billing_audit: 'C6', ru_tax: 'C7',
|
||||
```
|
||||
|
||||
- [ ] **Step 3: NODE_SECTION_SECONDARY — finance cross-ref + reuse** (в объект `NODE_SECTION_SECONDARY`)
|
||||
|
||||
```javascript
|
||||
// finance-tooling C6+C7 (20.05.2026) — cross-ref + reuse-классификация
|
||||
finance_plugin: ['C6'],
|
||||
mcp_boost: ['C6', 'C7'], ag_pest: ['C6', 'C7'], lh_larastan: ['C6'],
|
||||
mcp_sentry: ['C6'], mcp_redis: ['C6'], product_mgmt: ['C6'],
|
||||
data_scientist: ['C6', 'C7'], ops_plugin: ['C6', 'C7'], context7: ['C6'],
|
||||
process_modeling: ['C6'], process_analysis: ['C6'],
|
||||
```
|
||||
|
||||
> Примечание: если у узла уже есть запись в `NODE_SECTION_SECONDARY` (напр. `mcp_boost: ['A3']`, `context7: ['A3']`, `ag_pest: ['A3']`, `process_modeling: ['C10']`, `process_analysis: ['C10']`, `product_mgmt: ['C10']`) — НЕ перезаписывать, а **дополнить** массив (`mcp_boost: ['A3','C6','C7']` и т.д.). Сверить с фактическим содержимым перед правкой.
|
||||
|
||||
- [ ] **Step 4: EDGES — добавить рёбра** (в массив `EDGES`, через хелпер `E(...)`)
|
||||
|
||||
```javascript
|
||||
E('tooling', 'finance_plugin', '§4.36 #61 — реестр'),
|
||||
E('tooling', 'billing_audit', '§4.37 #62 — реестр'),
|
||||
E('tooling', 'ru_tax', '§4.38 #63 — реестр'),
|
||||
E('billing_audit', 'ag_pest', 'аудит инвариантов\nчерез тесты'),
|
||||
E('mcp_boost', 'billing_audit','модели биллинга'),
|
||||
E('finance_plugin', 'ru_tax', 'РФ-специфика поверх\nUS-механики (ADR-012)'),
|
||||
E('billing_audit', 'ru_tax', 'выручка C6 →\nналог.база C7'),
|
||||
```
|
||||
|
||||
- [ ] **Step 5: NODE_DETAILS (`automation-graph.html`) — `nd()` для 3 узлов** (рядом с finance-кластером, формат как `discovery_interview`)
|
||||
|
||||
```javascript
|
||||
finance_plugin: nd(
|
||||
'Marketplace-плагин (Anthropic): финансы/бухгалтерия — сверка, variance-анализ, US-GAAP-отчётность, закрытие периода, проводки. 9 скилов.',
|
||||
'При учётно-финансовой работе C7 (и сверке/variance для C6). РФ: reconciliation/variance ✅; US-GAAP-скилы ⚠️; SOX ❌; warehouse-MCP DEFERRED.',
|
||||
'plugin finance@knowledge-work-plugins (enabledPlugins). Категория finance-tooling, homed C7. Не UI → вне R6/R14. Tooling §4.36 #61, CLAUDE.md §3.3 #61, ADR-012.',
|
||||
[{ name: 'Tooling', cond: '§4.36 #61 — реестр' }],
|
||||
[{ name: 'FIN2', cond: 'SOX not-applicable РФ' }, { name: 'FIN3', cond: 'граница с operations #51' }],
|
||||
[{ name: 'ru-tax-accounting', cond: 'РФ-специфика поверх US-механики' }]
|
||||
),
|
||||
billing_audit: nd(
|
||||
'Self-authored скил: аудит денежных инвариантов биллинга Лидерры — сумма (bcmath), идемпотентность, tier-резолюция, дрейф reconcile, charge_source.',
|
||||
'При правке/ревью кода Billing — проверить денежную корректность начисления.',
|
||||
'Свой project-скил .claude/skills/billing-audit/ (линтуется, LINT1). Не UI → вне R6/R14. Tooling §4.37 #62, CLAUDE.md §3.3 #62, ADR-012.',
|
||||
[{ name: 'Tooling', cond: '§4.37 #62 — реестр' }],
|
||||
[{ name: 'FIN5', cond: 'объект ≠ process-*/D3/ru-tax' }],
|
||||
[{ name: 'Pest', cond: 'инварианты через тесты' }, { name: 'Boost', cond: 'модели биллинга' }]
|
||||
),
|
||||
ru_tax: nd(
|
||||
'Self-authored скил: РСБУ/НК РФ контекст для выручки Лидерры — НДС/УСН, налоговая база, налогооблагаемое событие, выгрузки бухгалтеру.',
|
||||
'При «как учесть/обложить по РФ» — перевод billing-выручки (выход C6) в учётно-налоговый контекст C7.',
|
||||
'Свой project-скил .claude/skills/ru-tax-accounting/ (линтуется, LINT1). Закрывает РФ-gap US-плагина finance. Не UI → вне R6/R14. Tooling §4.38 #63, CLAUDE.md §3.3 #63, ADR-012.',
|
||||
[{ name: 'Tooling', cond: '§4.38 #63 — реестр' }],
|
||||
[{ name: 'FIN6', cond: '≠ finance plugin/billing-audit/D1/D2' }],
|
||||
[{ name: 'billing-audit', cond: 'выручка C6 → налог.база C7' }, { name: 'finance plugin', cond: 'US-механика' }]
|
||||
),
|
||||
```
|
||||
|
||||
- [ ] **Step 6: NODE_META — добавить 3 записи** (`automation-graph.html`, рядом с discovery_interview)
|
||||
|
||||
```javascript
|
||||
finance_plugin: { since: '20.05.2026', changed: '—', uses: 0, usesSrc: 'новый узел' },
|
||||
billing_audit: { since: '20.05.2026', changed: '—', uses: 0, usesSrc: 'новый узел' },
|
||||
ru_tax: { since: '20.05.2026', changed: '—', uses: 0, usesSrc: 'новый узел' },
|
||||
```
|
||||
|
||||
- [ ] **Step 7: Обновить версии-метки + счётчики META** В `automation-graph-data.js`/`automation-graph.html`: метку узла `claude_md` (`CLAUDE.md v2.20` → `v2.21`); счётчики «узлов/рёбер» в шапке/META (узлов +3, рёбер +7) — сверить фактические числа перед правкой; комментарий-счётчик «Покрывает все N узлов» в `NODE_SECTION` (+3).
|
||||
|
||||
- [ ] **Step 8: JS-smoke (карта парсится, секции покрыты, рёбра валидны)**
|
||||
|
||||
Run:
|
||||
|
||||
```bash
|
||||
node -e "
|
||||
const fs=require('fs'); const vm=require('vm');
|
||||
const src=fs.readFileSync('docs/automation-graph-data.js','utf8');
|
||||
const sandbox={module:{exports:{}},exports:{}}; vm.createContext(sandbox);
|
||||
vm.runInContext(src + '\n;globalThis.__d={NODES,EDGES,NODE_SECTION,NODE_SECTION_SECONDARY,SECTIONS};', sandbox);
|
||||
const d=sandbox.__d||globalThis.__d;
|
||||
const ids=new Set(d.NODES.map(n=>n.id));
|
||||
const miss=d.NODES.filter(n=>!d.NODE_SECTION[n.id]).map(n=>n.id);
|
||||
const badEdge=d.EDGES.filter(e=>!ids.has(e.from)||!ids.has(e.to)).map(e=>e.from+'->'+e.to);
|
||||
const c6=Object.entries(d.NODE_SECTION).filter(([,s])=>s==='C6').length;
|
||||
const c7=Object.entries(d.NODE_SECTION).filter(([,s])=>s==='C7').length;
|
||||
console.log('nodes',d.NODES.length,'edges',d.EDGES.length,'no-section',JSON.stringify(miss),'bad-edges',JSON.stringify(badEdge),'C6',c6,'C7',c7);
|
||||
"
|
||||
```
|
||||
|
||||
Expected: `no-section []`, `bad-edges []`, `C6 ≥1`, `C7 ≥2` (finance_plugin+ru_tax), nodes/edges +3/+7 от прежних.
|
||||
> Если data-файл не экспортирует через `module.exports` и `vm` не видит const — fallback: открыть `docs/automation-graph.html` через Playwright MCP, проверить 0 console-ошибок + screenshot; плюс grep-ассерты: `grep -c "finance_plugin\|billing_audit\|ru_tax" docs/automation-graph-data.js` → ≥9 (3 NODES + 3 NODE_SECTION + рёбра).
|
||||
|
||||
- [ ] **Step 9: lefthook + commit**
|
||||
|
||||
```bash
|
||||
git add -- docs/automation-graph-data.js docs/automation-graph.html cspell-words.txt
|
||||
git commit -m "feat(map): finance-tooling — populate C6+C7 (+3 nodes, +7 edges)
|
||||
|
||||
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>" -- docs/automation-graph-data.js docs/automation-graph.html cspell-words.txt
|
||||
```
|
||||
|
||||
### Task 11: Контролёры наблюдателя + финальная регрессия + push
|
||||
|
||||
- [ ] **Step 1: Прогон brain-контролёров C1/C2 на новых узлах**
|
||||
|
||||
Run:
|
||||
|
||||
```bash
|
||||
node tools/l1-watcher.mjs 2>&1 | tail -20 || true
|
||||
node tools/cross-ref-checker.mjs 2>&1 | tail -20 || true
|
||||
```
|
||||
|
||||
(точные имена скриптов — из `lefthook.yml` jobs 11-14; если иначе — взять оттуда). Expected: новые узлы (#61-#63) не вносят НОВЫХ name@source drift / cross-ref-разрывов. Pre-existing drift (известный, WARN-only) — допустим. Зафиксировать вывод.
|
||||
|
||||
- [ ] **Step 2: Финальная регрессия (docs/skills epic — quick)**
|
||||
|
||||
Run: `/regression quick` (markdownlint + cspell + при наличии PHP — pint/larastan). Expected: GREEN. Записать canonical status line.
|
||||
|
||||
- [ ] **Step 3: lychee на изменённых .md (pre-push gate)**
|
||||
|
||||
Run: `npx lefthook run pre-push 2>&1 | tail -30` (или `npm run links`). Expected: 0 broken на изменённых docs. gitleaks-full-history — в составе pre-push.
|
||||
|
||||
- [ ] **Step 4: Push**
|
||||
|
||||
Run:
|
||||
|
||||
```bash
|
||||
git fetch origin && git log HEAD..origin/main --oneline
|
||||
git push origin worktree-finance-tooling-c6-c7:main
|
||||
```
|
||||
|
||||
Expected: FF-push. Если origin/main ушёл вперёд — rebase на свежий origin/main, повтор JS-smoke, push.
|
||||
|
||||
- [ ] **Step 5: verification-before-completion**
|
||||
|
||||
Invoke superpowers:verification-before-completion: подтвердить разделы C6/C7 непусты (JS-smoke вывод), 3 узла во всех 8 артефактах, регрессия GREEN, push выполнен (`git log -1 origin/main`).
|
||||
|
||||
---
|
||||
|
||||
## Self-Review (выполнено при написании плана)
|
||||
|
||||
**Spec coverage:** §4 слои → Tasks 1-3 (скилы/плагин) + Tasks 4-10 (нормативка/карта/ADR). §5 узлы → Tasks 1/2/3 + §4.36-38 (Task 5). §6 reuse → Task 10 Step 3. §7 граница → ADR Task 4. §8 нормативка (8 артефактов) → Tasks 4-10 (Tooling/PSR/Pravila/CLAUDE/routing-off-phase/router-procedure/ADR/observer-блоки в Task 5 + контролёры Task 11). §9 карта → Task 10. §10 конфликт-аудит → ADR Task 4. §11 изоляция → header + pre-flight в каждом Task. §12 верификация → Task 11. Покрытие полное.
|
||||
|
||||
**Placeholder scan:** нет TBD/TODO; весь контент скилов/нормативки/ADR/карты приведён дословно. Счётчики (60→63, узлы/рёбра) с явным указанием «сверить факт перед правкой» — не placeholder, а защита от дрейфа.
|
||||
|
||||
**Type consistency:** node-id единообразны (`finance_plugin`/`billing_audit`/`ru_tax`) во всех Tasks (10 NODES/SECTION/EDGES/DETAILS/META); номера #61/#62/#63 и §4.36/§4.37/§4.38 согласованы между Tooling/PSR/Pravila/CLAUDE/routing/ADR; версии (Tooling v2.18 / PSR v3.18 / Pravila v1.34 / CLAUDE v2.21 / routing v1.2 / router-procedure v1.1) согласованы во всех cross-ref.
|
||||
Reference in New Issue
Block a user