Документация проекта
Проект «К4 ГСК» — детальная документация
Slug: k4-garage-oc · id: 47 · Имя: k4-garage-oc
Прогон: doc-k4 (oc2), 2026-09-05. Сбор живьём через MCP (mcp.py), публичный контур — анонимный curl.
Публичный хост: https://smb.farhome.ru (не fortag; ссылки брать из живого publicUrl, §52/E-записки philibakery).
Контуры: публичные страницы 200; таблица собственников (1647) приватна (rows-API 404).
Сверка с журналом сборки: дерево 21 узел ✓; строк 85 ✓; правил 5 (301–305) ✓; формы 2 + страница оплаты ✓; расхождения: таблиц 12 (в журнале «10»), дашбордов 6 (в журнале «4») — см. «Открытые вопросы».
1. Дерево объектов (doc_tree, 21 узел)
id | тип | имя | slug | isPublished |
|---|---|---|---|---|
1641 | dataTable | Заявки на ремонт | work-order | ✅ |
1642 | dataTable | Смета (позиции) | work-order-line | — |
1643 | dataTable | Счета на взносы | invoice | ✅ |
1644 | dataTable | Строки счёта | invoice-line | — |
1645 | dataTable | Платежи | payment | — |
1646 | dataTable | Кредит-ноты | credit-note | — |
1647 | dataTable | Собственники (ГСК) | customer | — (приватная) |
1648 | dashboard | Выездное обслуживание | vyezdnoe-obsluzhivanie | — |
1649 | dashboard | Дебиторка | debitorka | — |
1650 | dataTable | Подрядчики | podryadchiki | — |
1651 | dataTable | Параметры ГСК | parametry-gsk | — |
1652 | dataTable | Быстрый ввод | bystryy-vvod | — |
1653 | dataTable | Подтверждения оплаты | podtverzhdeniya-oplaty | — |
1654 | dataTable | Фактические расходы | fakticheskie-raskhody | — |
1655 | form | Подать заявку на ремонт | podat-zayavku-na-remont | ✅ |
1656 | form | Я перевёл взнос | ya-perevyol-vznos | ✅ |
1657 | document | Оплата взносов | oplata-vznosov | ✅ |
1658 | dashboard | Статус заявок | status-zayavok | ✅ |
1659 | dashboard | Должники | dolzhniki | ✅ |
1660 | dashboard | Ремонтный фонд | remontnyy-fond | ✅ |
1661 | dashboard | Дебиторка (копия) | debitorka-2 | — |
2. Таблицы (12, суммарно 85 строк)
Счётчики — datatable_aggregate countNonEmpty(id). Все колонки — пользовательские (сверх ~6 системных).
1641 Заявки на ремонт (work-order) — 12 строк · purpose core_work_order · behaviour exclusive_scheduling · ПУБЛИЧНАЯ
number(seq WO-{YYYY}-), customer(ref→1647), company(ref), site_address, location(ref), assigned_tech(person), scheduled_start/end(datetime), total(rollup), status(status), notes, description, box_number, applicant_name, applicant_phone, applicant_email, photo_link, category(select), decision_note, vendor_ref(ref→1650), vendor_email, plan_total(rollup←1642), fact_total(rollup←1654), variance(formula), plan_rub, fact_rub(formula).
columnVisibility: external readAll=true только для number, status, category, box_number, variance, plan_total, fact_total; PII (applicant_*, customer, notes, total…) закрыты. Проверено анонимным curl: отдаются 7 ключей, 12 строк — утечек нет.
Статусы в публичном API — английские machine-id: approved, closed, in_work, rejected, review (§60.6: RU-метки через API непроверяемы).
1642 Смета (позиции) (work-order-line) — 18 строк
work_order(ref→1641), kind(select), description, product(ref), qty, unit_price(currency), line_total(formula), item_name.
1643 Счета на взносы (invoice) — 14 строк · purpose core_invoice · ПУБЛИЧНАЯ
number(seq), customer(ref→1647), company(ref), issue_date, due_date, period_start, tax_jurisdiction, total/amount_paid/amount_credited/tax_total(rollup), total_gross, outstanding, aging(formula), status(status), notes, box_number, owner_email, owner_name, period_label, amount_rub, reminder_date(formula).
columnVisibility: открыты aging, number, status, due_date, amount_rub, box_number, period_label(?) и т.п.; owner_name/owner_email/notes — закрыты (readAll=false).
1644 Строки счёта (invoice-line) — 0 строк · purpose core_invoice_line
invoice(ref), product(ref), description, qty, unit_price, line_total, subscription(ref), period_start/end, tax_category, tax_rate, tax_amount, line_total_gross.
1645 Платежи (payment) — 10 строк · purpose core_payment
invoice(ref→1643), amount(currency), kind(select), effect(formula), method(select), paid_at(date), reference. (rows-API снаружи — 404 ✓)
1646 Кредит-ноты (credit-note) — 0 строк · purpose core_credit_note
number(seq), invoice(ref), amount, effect(formula), reason(select), issued_at, notes.
1647 Собственники (ГСК) (customer) — 6 строк · purpose core_customer · ПРИВАТНАЯ (404 ✓)
name, email, phone, address, externalUser(externalPerson), source(select), loyalty_points, marketing_opt_in(bool), owner(person), notes, ar_balance(rollup), box_number, role_flag(select), next_dues_date, period_days, dues_amount, invoice_due_days.
1650 Подрядчики (podryadchiki) — 3 строки · purpose отсутствует
name, contact_person, email, phone.
1651 Параметры ГСК (parametry-gsk) — 5 строк
key, value(number), value_text, description.
1652 Быстрый ввод (bystryy-vvod) — 4 строки
entry_type(select), box_number, amount, text, applicant_name, applicant_email, processed(bool).
1653 Подтверждения оплаты (podtverzhdeniya-oplaty) — 3 строки
surname, box_number, amount, comment, reconciled(bool). (Цель формы 1656)
1654 Фактические расходы (fakticheskie-raskhody) — 10 строк
work_order(ref→1641), item_kind(select), item_name, amount, spent_at.
3. Автоматизации (5 правил, все enabled; меты по documentId таблиц)
id | таблица | имя | триггер | действия |
|---|---|---|---|---|
301 | 1647 Собственники | Взносы: срок наступил → начислить счёт | schedule cron | create_row→1643 (box_number/name/email/{{TODAY}}/formula {dues_amount}) + set_fields next_dues_date=DATEADD(...) |
302 | 1643 Счета | Взнос: 3 дня до срока → напомнить | cron | send_email owner_email ({{col.*}} в subject/body) |
303 | 1641 Заявки | Смета утверждена → задача подрядчику и письмо собственнику | status_transition →approved | send_email vendor_email + send_email applicant_email |
304 | 1641 Заявки | Статус заявки изменился → письмо заявителю | status_transition, status≠approved | send_email applicant_email ({{col.status}}, {{col.decision_note}}) |
305 | 1652 Быстрый ввод | Быстрый ввод → разбор интента заявки | event create, entry_type=«заявка», processed=false | create_row→1641 (notes/box/applicant) + set_fields processed=true |
Замечания: {{col.*}} и {{TODAY}} — в действиях правил (штатно резолвятся на рантайме, §60.4). Правила 303/304 — send_email с runOnAutomation:true.
4. Формы (2)
id | имя | цель | доступ | поля |
|---|---|---|---|---|
1655 | Подать заявку на ремонт | 1641 (Заявки) | submitAccess everyone | Описание (notes, ob.), бокс, имя, телефон, Email (об.), фото-ссылка, категория(select) |
1656 | Я перевёл взнос | 1653 (Подтверждения оплаты) | submitAccess everyone | Фамилия (об.), бокс (об.), сумма, комментарий |
portalExposed=false у обеих. Публичные адреса — 200 (см. §6).
5. Дашборды (6; 3 публичных)
id | имя | panels (кратко) | binding | pub |
|---|---|---|---|---|
1648 | Выездное обслуживание | метрика «Всего заявок» countNonEmpty(number); бар-чарт по статусам | 1641 | — |
1649 | Дебиторка | метрика «К оплате» sum(outstanding) ($-формат); бар by_aging | 1643 | — |
1658 | Статус заявок | таблица number/box/category/status/plan_total/decision_note; метрики | 1641 | ✅ |
1659 | Должники | таблица обезличенных неоплаченных счетов (box, period_label, amount_rub, due_date, status) | 1643 | ✅ |
1660 | Ремонтный фонд | метрика sum(amount) по 1654; pivot по item_kind | 1654 | ✅ |
1661 | Дебиторка (копия) | sum(amount_rub) status∉{paid,void} | 1643 | — |
6. Документ-шаблон и проверка токенов
1657 «Оплата взносов» (document, опубликован): тело 463 знака, чистая проза (QR-оговорка, телефон казначея +7 916 222-33-44, отсылки к формам/доскам).
Ключевой вопрос волны: поиск литеральных {{col.*}} в doc_get_content.markdown → токенов нет ([]). Это НЕ дефект сборки: в К4 нет правил generate_document и ни одного документа-шаблона для генерации; токен-машина (§61.4: чипы недоступны из MCP, шаблоны — только фиксированная проза) в К4 не задействована. Шаблоногенерируемых артефактов (квитанций) в проекте нет.
7. Публичный контур (анонимный curl, 2026-09-05)
URL-паттерн: https://smb.farhome.ru/public/k4-garage-oc/<slug>
адрес | статус |
|---|---|
/public/.../podat-zayavku-na-remont (форма) | 200 |
/public/.../ya-perevyol-vznos (форма) | 200 |
/public/.../status-zayavok (дашборд) | 200 |
/public/.../dolzhniki (дашборд) | 200 |
/public/.../remontnyy-fond (дашборд) | 200 |
/public/.../oplata-vznosov (документ, из doc_get.publicUrl) | 200 |
/api/public/.../data-tables/1647/rows (собственники) | 404 ✓ приватна |
/api/public/.../data-tables/1641/rows (заявки, опубл.) | 200, 12 строк, только 7 не-PII колонок |
/api/public/.../data-tables/1645/rows (платежи, не опубл.) | 404 ✓ |
8. Дефекты и расхождения с журналом
12 таблиц против «10» в журнале: лишние — Быстрый ввод (1652), Подтверждения оплаты (1653) (либо журнал не учёл ветку быстрого ввода). Требует подтверждения координатором.
6 дашбордов против «4»: дубли «Дебиторка» (1649 внутренняя + 1661 debitorka-2) и «Выездное обслуживание» (1648) не опубликованы. Похоже на недоигранный хвост сборки (правило-дубль E100-типа для дашбордов). Кандидат в архив: один из двух «Дебиторок».
Статусы в публичном API — англ. machine-id (RU-метки непроверяемы API, §60.6) — известный частичный приёмочный пункт.
9. Открытые вопросы / недоигранные пункты приёмки
Браузерный сабмит форм 1655/1656 не проверялся (curl-приёмка только статусов страниц). Нужен реальный POST через браузер + проверка появления строк в 1641/1653.
RU-метки статусов в публичном API — проверить нельзя (только визуально браузером на дашбордах 1658/1659).
Wave 2 (по карте К4): интеграции/доставщик писем — фактическая доставка писем правил 302–304 не верифицирована в этом прогоне (см. §60.5 про живую SMTP на прогоне сборки; здесь — только мета правил).
Дашборд-дубль 1649/1661 и неопубликованный 1648: решить судьбу (архив/публикация).
Таблицы-«обёртки» без purpose (1650–1654) — домен без платформенных статус-машин; осознанно или долг.
Правило 301 использует formula:"{dues_amount}" в create_row — резолв на рантайме не перепроверялся (см. §60.4/§62 для DATEADD).
Чистка (2026-09-05)
Указание владельца платформы: архивация всех пустых и неиспользуемых таблиц проекта (архивация, не удаление). Канал: scripts/mcp.py, живая сверка перед каждым решением.
Пустые таблицы (живая проверка datatable_get_rows limit=1): 1644 Строки счёта, 1646 Кредит-ноты. Остальные 10 таблиц — с данными (1641=12, 1642=18, 1643=14, 1645=10, 1647=6, 1650=3, 1651=5, 1652=4, 1653=3, 1654=10).
Проверка использования (живьём): правила — automation_get_meta по documentId всех 12 таблиц (инвентарь подтверждён: 301→1647, 302→1643, 303/304→1641, 305→1652; на 1644/1646/1651 правил нет); формы — form_get_meta (1655→1641, 1656→1653); дашборды — dashboard_get_meta всех шести (биндинги только 1641/1643/1654); перекрёстные ссылки схем — childDocumentId/referenceDocumentId во всех 12 схемах.
Архивировано
id | имя | статус |
|---|---|---|
1651 | Параметры ГСК (parametry-gsk) | архив с данными (5 строк key-value) |
Основания: у 1651 нет ни одного потребителя — ни правил, ни формы, ни панели дашбордов, ни ref/rollup-ссылок из других таблиц, ни публичного контура (isPublished=false). Значения параметров дублируются рабочими колонками 1647 (dues_amount, invoice_due_days, period_days) и константами правил/формул (напоминание −3 дня зашито в reminder_date формулой DATEADD). doc_archive → archivedIds:[1651], каскада нет (childCount=0).
Сохранено (пустые, но используются)
1644 Строки счёта — пустая, но на неё смотрят backlink-rollup'ы таблицы 1643: total (Σ line_total) и tax_total (Σ tax_amount) через 1644.invoice. Архив разорвал бы цепочку total_gross→outstanding→aging — она питает публичные «Должники»/«Дебиторка» и правило 302.
1646 Кредит-ноты — пустая, backlink-rollup amount_credited (Σ effect) в 1643; та же цепочка outstanding.
Прочие решения
«Дубль Дебиторки 1661» по живой сверке — дашборд (debitorka-2), а не таблица; в периметр чистки не входит, не тронут. Судьбу дубля 1649/1661 предлагается решать отдельной задачей.
Формы, правила, дашборды, документы — не тронуты (граница задачи).
Соседние проекты не затронуты (project_use перед каждым батчем записей, §54).
Итог дерева
doc_tree: до чистки 22 узла → после 21 (активных dataTable: 11). Пустые заготовки 1644/1646 сохранены как часть core-invoice цепочки.
Публичный доступ (Фаза 2, 2026-09-05)
Настоящая документация опубликована на платформе: documentId 1750, «Документация проекта», isPublished:true.
publicUrl: https://smb.farhome.ru/public/k4-garage-oc/dokumentatsiya-proekta — анонимный curl: 200, тело читается.
Проект k4-garage-oc (id 47) уже был isPublished:true (project_settings_get) — обход E32 через project_settings_set не понадобился.
Сверка тела (doc_get_content.markdown): расхождения только рендер-нормализация markdown (divider-строки таблиц, пустые строки перед списками); содержимое полное.
Фаза 3 (перепубликация 2026-09-05, чистка): документ 1750 заархивирован и документация пересоздана через doc_upsert (обход платформенного бага: тело существующего документа обновлять нельзя — «ok» без записи). Слаг dokumentatsiya-proekta сохранён (проверка doc_get), публичный URL без изменений: https://smb.farhome.ru/public/k4-garage-oc/dokumentatsiya-proekta. Актуальный documentId — в doc_tree (узел «Документация проекта») и в артефакте чистки (task-state/oc2-docs/artifacts/cleanup-k4_garage_oc.md).