Документация проекта

Проект «К5 СНТ/ТСЖ/ЖСК» — детальная документация

Slug: k5-hoa · Project id: 35 · Название на платформе: K5-hoa-oc

Дата снятия: 2026-09-05, прогон oc2 (задача doc-k5), канал scripts/mcp.py

Источник ожиданий: журнал сборки (dev-report §61, error.md E99) — сверка фактов живьём, доверие фактам платформы

Итог сверки с журналом сборки

Параметр

Ожидание

Факт живьём

Статус

Узлы дерева

28

28

Таблицы

14 (7 модульных + 7 своих)

14 (7 + 7)

Строки суммарно

87

84

⚠️ расхождение −3 (см. «Открытые вопросы» п.5)

Правила

5

5 (id 306–310), все enabled:true, у всех есть успешные runs

⚠️ приёмка ожидала «4 активно / 5-е не подтверждено» — факт: подтверждены запусками все 5

Документы-шаблоны

4

4 (1678–1681)

Формы

5

5 (1685–1689), все опубликованы

Дашборды

3

5 (1669, 1670, 1682, 1683, 1684)

⚠️ расхождение +2 (модульные 1669/1670 не учтены журналом)

Сквозной цикл

тик → счёт → платёж → авто-paid + квитанция + письмо

подтверждён частично: платёж a25c3a2c (уч. 45, 144 ₽, run 876 правила 310) → авто-статус paid счёта INV-2026-0015 ✅, квитанция doc 1690 прикреплена ✅, письмо: run success ✅ (доставка тела — открытый контроль §61.5)

✅ с оговоркой

1. Дерево объектов (28 узлов)

id

Тип

Название

Slug

Публичный

1669

dashboard

Выездное обслуживание

vyezdnoe-obsluzhivanie

1670

dashboard

Дебиторка

debitorka

1682

dashboard

Финансы (публичный)

finansy-publichnyy

1683

dashboard

Заявки

zayavki

1684

dashboard

Кворум ОСС

kvorum-oss

1662

dataTable

Заявки на работы

work-order

1663

dataTable

Строки сметы

work-order-line

1664

dataTable

Счета

invoice

1665

dataTable

Строки счёта

invoice-line

1666

dataTable

Платежи

payment

1667

dataTable

Кредит-ноты

credit-note

1668

dataTable

Собственники

customer

1671

dataTable

Параметры СНТ

t2-parametry-snt

1672

dataTable

Подрядчики

t3-podryadchiki

1673

dataTable

Собрания

t4-sobraniya

1674

dataTable

Показания

t7-pokazaniya

1675

dataTable

Уведомления об оплате

t12-uvedomleniya-ob-oplate

1676

dataTable

Запросы долга

t13-zaprosy-dolga

1677

dataTable

Бюллетени

t14-byulleteni

1678

document

Квитанция (шаблон)

kvitantsiya-shablon

1679

document

Протокол ОСС (шаблон)

protokol-oss-shablon

1680

document

Страница СНТ

stranitsa-snt

1681

document

Уведомление о собрании

uvedomlenie-o-sobranii

1685

form

Запросить сумму долга

proba-forma

1686

form

Подать заявку на работы

podat-zayavku-na-raboty

1687

form

Отправить показания

otpravit-pokazaniya

1688

form

Сообщить об оплате

soobshchit-ob-oplate

1689

form

Бюллетень общего собрания

byulleten-obshchego-sobraniya

2. Таблицы (14): схема + счётчики

Счётчики — серверная агрегация (datatable_aggregate, countNonEmpty+countEmpty по первой колонке), без выгрузки строк. Первый счётчик в таблице строк = полное число строк (пустых ячеек в probe-колонке нет нигде).

id

Таблица

Модульная?

Колонок

Строк

1662

Заявки на работы

да

19

6

1663

Строки сметы

да

7

14

1664

Счета

да

25

15

1665

Строки счёта

да

13

3

1666

Платежи

да

10

9

1667

Кредит-ноты

да

7

0

1668

Собственники

да

20

6

1671

Параметры СНТ

нет

3

6

1672

Подрядчики

нет

4

4

1673

Собрания

нет

8

2

1674

Показания

нет

8

12

1675

Уведомления об оплате

нет

6

2

1676

Запросы долга

нет

5

2

1677

Бюллетени

нет

11

3

Схемы колонок

1662 · Заявки на работы (19): number:sequence, customer:reference, company:reference, site_address:multilineText, location:reference, assigned_tech:person, scheduled_start:datetime, scheduled_end:datetime, total:rollup, status:status, notes:multilineText, description:multilineText, category:select, applicant_name:text, applicant_email:email, applicant_phone:phone, plot_code:text, contractor:reference, estimate_gate:boolean

1663 · Строки сметы (7): work_order:reference, kind:select, description:text, product:reference, qty:number, unit_price:currency, line_total:formula

1664 · Счета (25): number:sequence, customer:reference, company:reference, issue_date:date, due_date:date, period_start:date, tax_jurisdiction:text, total:rollup, amount_paid:rollup, amount_credited:rollup, tax_total:rollup, total_gross:formula, outstanding:formula, aging:formula, status:status, notes:multilineText, period_label:text, plot_code:text, owner_email:email, owner_phone:phone, amount_due:number, is_issued:boolean, reminder14:formula, reminder3:formula, aging_ru:formula

1665 · Строки счёта (13): invoice:reference, product:reference, description:text, qty:number, unit_price:currency, line_total:formula, subscription:reference, period_start:date, period_end:date, tax_category:text, tax_rate:formula, tax_amount:formula, line_total_gross:formula

1666 · Платежи (10): invoice:reference, amount:currency, kind:select, effect:formula, method:select, paid_at:date, reference:text, payer_email:email, plot_code:text, documents:documents

1667 · Кредит-ноты (7): number:sequence, invoice:reference, amount:currency, effect:formula, reason:select, issued_at:date, notes:multilineText

1668 · Собственники (20): name:text, email:email, phone:phone, address:multilineText, externalUser:externalPerson, source:select, loyalty_points:number, marketing_opt_in:boolean, owner:person, notes:multilineText, ar_balance:rollup, plot_code:text, object_type:select, area:number, dues_rate:number, next_due_date:date, last_dues_run:date, voting_right:select, last_meter_value:number, last_meter_date:date

1671 · Параметры СНТ (3): param_key:text, value_num:number, description:text

1672 · Подрядчики (4): name:text, specialization:select, email:email, phone:phone

1673 · Собрания (8): title:text, meeting_date:date, meeting_type:select, agenda:multilineText, status:select, ballots_issued:number, ballots_submitted:number, documents:files

1674 · Показания (8): object_ref:reference, plot_code:text, meter_type:select, value:number, period_label:text, status:select, prev_value:number, submitted_at:date

1675 · Уведомления об оплате (6): payer_name:text, payer_email:email, plot_code:text, amount:number, comment:multilineText, processed:boolean

1676 · Запросы долга (5): plot_code:text, requester_email:email, requester_name:text, answer_status:select, submitted_at:date

1677 · Бюллетени (11): meeting_ref:reference, owner_name:text, plot_code:text, q1_budget:select, q2_dues_rate:select, q3_contract:select, comment:multilineText, submitted_at:date, 4c9bff13-1217-42ab-8750-caa2e0d0d15a:date, 1398eee4-0c34-455c-9db9-a68d0f016f50:status, 47b47e79-6f0c-420f-8b9f-041f911c8c1e:person

3. Автоматизации (5 правил, id 306–310)

Меты читались по documentId таблицы (automation_get_meta); история — automation_list_runs {documentId, ruleId}.

Правило

Название

Таблица

Триггер

enabled

Runs (ok/skipped)

306

Начисление взносов → черновики счетов

1668 Собственники

event: schedule 0 9 * * * (each_row)

True

1 (1/0)

307

Напоминание о сроке оплаты → email собственнику

1664 Счета

schedule 0 10 * * * (each_row, conditions: status=sent + reminder14/3 = $tomorrow)

True

5 (5/0)

308

Новая заявка → подрядчик по категории

1662 Заявки на работы

event create → stages-branch маршрутизация подрядчика по категории

True

1 (1/0)

309

Заявка закрыта → уведомление заявителю

1662 Заявки на работы

status_transition → done (runOnAutomation:true)

True

1 (1/0)

310

Поступил платёж → квитанция и email

1666 Платежи

event create → generate_document (шаблон 1678) + send_email

True

2 (2/0)

Расхождение с журналом приёмки: журнал ожидал «4 из 5 активны, пятое не подтверждено». Факт на 2026-09-05: все 5 правил enabled:true, у каждого — успешные запуски (12 runs, 0 skipped). Пятое правило подтверждено живой историей)

4. Формы (5)

id

Название

Slug / публичный URL

Цель (targetDocumentId)

Полей

Назначение (assign)

1685

Запросить сумму долга

NoneURL

1676 (Запросы долга)

3

— (не прогонялось)

1686

Подать заявку на работы

NoneURL

1662 (Заявки на работы)

6

— (не прогонялось)

1687

Отправить показания

NoneURL

1674 (Показания)

4

— (не прогонялось)

1688

Сообщить об оплате

NoneURL

1675 (Уведомления об оплате)

5

— (не прогонялось)

1689

Бюллетень общего собрания

NoneURL

1677 (Бюллетени)

6

— (не прогонялось)

Все формы isPublished:true, portalExposed:false (портальные виджеты не подключены).

Назначение форм (form_assign) не прогонялось в этом прогоне — пункт приёмки остаётся недоигранным.

1685 носит след тестового прошлого: slug proba-forma (формально рабочий адрес, но имя-в-URL не соответствует названию «Запросить сумму долга»).

5. Дашборды (факт 5, журнал ожидал 3)

id

Название

Публичный

Панелей

Привязки

1669

Выездное обслуживание

— (private)

3

1662

1670

Дебиторка

— (private)

3

1664

1682

Финансы (публичный)

https://smb.farhome.ru/public/k5-hoa/finansy-publichnyy

5

1662, 1664, 1666

1683

Заявки

— (private)

2

1662

1684

Кворум ОСС

— (private)

4

1673, 1677

Лишние против журнала 2 — модульные Выездное обслуживание (1669) и Дебиторка (1670): приватные, созданы модулями field_service/billing_ar.

6. Документы-шаблоны и проверка токенов (ключевой вопрос волны)

id

Название

Токены {{col.*}} в теле

Токены {{parent.*}} в теле

Публичный

1678

Квитанция (шаблон)

НЕТ

5 шт.

1679

Протокол ОСС (шаблон)

НЕТ

6 шт.

1680

Страница СНТ

НЕТ

0 шт.

1681

Уведомление о собрании

НЕТ

0 шт.

Вывод по ключевому вопросу: в телах шаблонов литеральных токенов {{col.*}} НЕТ. Шаблоны (1678 квитанция, 1679 протокол ОСС) используют {{parent.*}}; живая проверка на реально сгенерированной квитанции (doc 1690, «Квитанция 45 2026-09-04», прикреплена к платежу уч.45): все 5 {{parent.*}} остались литералами в теле (Участок/кв: {{parent.plot_code}} и т.д.). Это точно воспроизводит §61.4: чипы шаблонов — UI-сущность редактора, из MCP не резолвятся; nameTemplate правила при этом резолвится корректно. Следствие: авто-квитанции содержимое не несут — нужен UI-чип или фиксация данных в columns-полях.

Документы 1680 «Страница СНТ» и 1681 «Уведомление о собрании» — фиксированная проза, токенов нет, опубликованы.

7. Публичный контур (анонимный curl)

URL

Код

Комментарий

https://smb.farhome.ru/public/k5-hoa/stranitsa-snt

200

док 1680

https://smb.farhome.ru/public/k5-hoa/uvedomlenie-o-sobranii

200

док 1681

https://smb.farhome.ru/public/k5-hoa/finansy-publichnyy

200

дашборд 1682

https://smb.farhome.ru/public/k5-hoa/proba-forma

200

форма 1685

https://smb.farhome.ru/public/k5-hoa/podat-zayavku-na-raboty

200

форма 1686

https://smb.farhome.ru/public/k5-hoa/otpravit-pokazaniya

200

форма 1687

https://smb.farhome.ru/public/k5-hoa/soobshchit-ob-oplate

200

форма 1688

https://smb.farhome.ru/public/k5-hoa/byulleten-obshchego-sobraniya

200

форма 1689

https://smb.farhome.ru/public/k5-hoa/invoice

200

таблица 1664 «Счета» (публикация осмысленна приёмкой: visibility-утечка owner_email исправлена обёрткой columnVisibility — §61.8/E99)

https://smb.farhome.ru/public/k5-hoa/kvitantsiya-shablon

404

неопубликованный шаблон 1678 — приватность ✅

https://smb.farhome.ru/public/k5-hoa/debitorka

404

неопубликованный дашборд 1670 — приватность ✅

https://smb.farhome.ru/public/k5-hoa/stranitsa-snt-nope

404

несуществующий слаг — приватность ✅

Все ответы 200 — SPA-шелл (данные рендерятся клиентски); вердикт приватности по §61.8 — анонимный curl, получены: опубликованное → 200, непубликованное → 404. Проект isPublished:true, baseCurrency RUB, timezone Europe/Moscow, channels [] (важно: §62.8 — при пустых channels доставка send_message падает; send_email на этой сборке работает — письма правил 307/309/310 имеют успех в runs, но см. открытый контроль §61.5).

8. Грабли проекта (из dev-report/error)

§61.4 — чипы шаблонов ({{parent.*}}) недоступны из MCP: сгенерированные квитанции — литеральные токены. Потверждено живьём (doc 1690).

§61.8 / E99(2)columnVisibility без обёртки {"columns":{...}} возвращает ok и НЕ применяется → утечка ПД в публичную таблицу; единственный вердикт — анонимный curl.

E99(1) — лишняя скобка в IF-цепочке формулы даёт #ERROR (RU-литералы формул при этом работают — §61.11); проверка баланса скобок до отправки.

§61.2 — формы document-first: doc_upsert {type:'form'}form_set_meta; ключ table валидатор молча принимает, но цель НЕ биндит.

§61.3 / §62.7generate_document требует целевую колонку типа documents, files отвергается.

§61.5send_email: {{col.X}} в subject резолвится, в теле после отправки видны одиночные {col.X} — доставка тела под открытым контролем (Resend).

§61.9 — автопереход sent→paid работает; sent→partial мёртв (amount_paid суммирует отрицательный effect). Живое подтверждение: INV-2026-0015 paid, но amount_paid:-144 — аномальное знаковое значение при корректном статусе.

§61.7 — schedule-правило тикает сразу после создания при истинных условиях (дата-гейт обязателен).

§61.12 — stages/branch в правилах валидируются и исполняются живьём (правило 308 работает ветками по 5 категориям).

стр.141 dev-reportexclusive_scheduling заявлен только для части purpose; для К5 окна работ — core_work_order (см. открытый вопрос п.1).

стр.140 — модуля голосования ОСС в каталоге нет; обход паттерном assigned_forms_task (назначение форм не прогонялось — п.2).

9. Открытые вопросы (недоигранные пункты приёмки и расхождения)

1.

Эксклюзивный планировщик (exclusive_scheduling, запрет двойного бронирования окон работ, таблица 1662 purpose core_work_order) — не проверялся живьём (нужны два пересекающихся слота). Статус: гипотеза из допущения карты.

2.

Назначение форм (form_assign / coverage) — не прогонялось; формы 5/5 опубликованы, но паттерн assigned_forms_task для бюллетеней ОСС (1689) не верифицирован.

3.

Пятое правило — журнал приёмки: «4 из 5 активно, пятое не подтверждено». Факт: все 5 enabled и с успешными runs; если «пятым» названо 307 (напоминания, 5 runs) — пункт закрыт доказательством; в первоисточнике приёмки (карта) не уточнено, какое правило ставилось под сомнение → требует пометки в карте, не в платформе.

4.

Сгенерированные квитанции с литеральными {parent.*} (doc 1690) — контент-дефект по §61.4; обход (фиксированная проза или ручные чипы в UI) не выбран.

5.

Счётчик строк 84 ≠ 87 из журнала (−3). Агрегация consistent внутри таблиц (нет countEmpty), значит расхождение в журнале (возможно, счёт по удалённым/мягко удалённым строкам или устаревший снимок). Кандидат: Кредит-ноты 1667 = 0 строк при живых платёжных артефактах — возможно, 3 строки были удалены в ходе отладки знака amount_paid (§61.9).

6.

Таблица «Счета» (1664) опубликована — намеренная публичность финансовых данных СНТ? columnVisibility верифицирована приёмкой (E99), но решение о публикации самой таблицы стоит подтвердить у владельца.

7.

Доставка тела писем — открытый контроль §61.5 (Resend) не выполнен.

8.

amount_paid = −144 при статусе paid (INV-2026-0015) —известный баг §61.9 (sent→partial мёртв); статус прав, знак в rollup нет; чинить или документировать как есть.

Публичный доступ (Фаза 2, публикация документации)

Документ «Документация проекта» был опубликован на платформе: documentId 1752, mode=create (без documentId), дублей в doc_tree не было. СТАТУС ПОСЛЕ ЧИСТКИ 2026-09-05: 1752 заархивирован, актуальная версия перепубликована новым документом (обход бага обновления тела — см. секцию «Чистка»).

publicUrl: https://smb.farhome.ru/public/k5-hoa/dokumentatsiya-proekta — doc_get: isPublished=true, publicUrlBlocked=null; анонимный curl: 200 (185767 б).

Тело верифицировано doc_get_content (ключ markdown): совпадает с локальным файлом (16980 символов), секции «Открытые вопросы» на месте.

Проект k5-hoa уже был isPublished=true (project_settings_get 2026-09-05) — project_settings_set (обход E32) НЕ потребовался.

stateId документа: draft (публикация не зависела от стадий flow).

Чистка (2026-09-05)

Указание владельца платформы: архивировать пустые и неиспользуемые таблицы проекта. Канал — scripts/mcp.py (codedocs MCP), проект k5-hoa (id 35) перезакреплялся project_use перед каждой записью.

Метод (живая сверка)

Пустота: datatable_aggregate (countNonEmpty+countEmpty по первой колонке каждой из 14 таблиц); нулевой результат дополнительно верифицирован datatable_get_rows {limit:1}. Живые счётчики совпали с разделом 2 (сумма 84); единственная пустая таблица — 1667 Кредит-ноты.

Использование каждой пустой/кандидатной таблицы: form_get_meta (targetDocumentId форм 1685–1689), automation_get_meta по documentId таблиц (правила 306–310, включая цели действий — rule 306 пишет в 1664), dashboard_get_meta (привязки панелей 1669/1670/1682/1683/1684), схемы всех 14 таблиц на межтабличные связи (referenceDocumentId, rollup childDocumentId), флаг публикации (doc_get), дополнительно: agent_list ([]), chat_widget_get_meta (отключён).

Инструментальная грабля: countNonEmpty по columnId "id" молча возвращает 0 для НЕпустых таблиц (служебный id — не колонка). Зонд обязан быть реальной первой колонкой схемы.

Итог

Действие

Таблицы

Архивирована (1)

1671 Параметры СНТ — не пустая (6 строк), но не используется НИ ОДНИМ объектом (ни форма, ни правило, ни дашборд, ни ref/rollup-колонка, не публична) → «архив с данными». doc_archivearchivedIds:[1671], каскада нет

Сохранена пустой (1)

1667 Кредит-ноты — 0 строк, но используется: rollup 1664.Кредит-ноты (amount_credited) со childDocumentId=1667; модульная таблица billing (сквозной цикл тик→счёт→платёж) — пустота штатна

Сохранены используемыми (12)

1662 (формы/правила 308,309/дашборды/refs), 1663 (rollup 1662.total), 1664 (публична, дашборды, правила 306 action/307, refs 1665–1667, rollup 1668), 1665 (rollups 1664.total/tax_total), 1666 (dash 1682, rollup 1664.amount_paid, rule 310), 1668 (rule 306, refs 1662/1664/1674), 1672 (ref 1662.contractor), 1673 (dash 1684, ref 1677.meeting_ref), 1674 (form 1687), 1675 (form 1688), 1676 (form 1685), 1677 (form 1689, dash 1684)

Формы, правила, дашборды, документы — не тронуты (граница задачи: только таблицы).

Дерево до/после

До: 29 узлов (14 dataTable, 5 dashboard, 5 form, 5 document — вкл. 1752).

После архива 1671: 28 узлов (13 dataTable, 5 dashboard, 5 form, 5 document).

Перепубликация документации (архив 1752 → создание нового) — счётчик не меняет: 28 → 28. Соседние проекты не затронуты.

Перепубликация документации (обход бага тела)

Известное ограничение: doc_upsert с существующим documentId возвращает ok, но тело НЕ обновляет. Обход по указанию: архив 1752 → doc_upsert без documentId с параметром body, isPublished:true.

Новый documentId: 1754 (предсказан пробным doc_upsert 1753, сразу заархивирован); название/слаг dokumentatsiya-proekta сохранены (конфликта с архивированным 1752 не возникло).

publicUrl: https://smb.farhome.ru/public/k5-hoa/dokumentatsiya-proekta — анонимный curl 200 (слаг не изменился, секция «Публичный доступ» выше актуальна).

Тело верифицировано doc_get_content (ключ markdown): совпадает с локальным файлом; внутренний stateId нового документа — draft (косметика, публикация работает).