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

Проект «К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 0 3 1 * * each_row, next_dues_date ≤ $today

create_row→1643 (box_number/name/email/{{TODAY}}/formula {dues_amount}) + set_fields next_dues_date=DATEADD(...)

302

1643 Счета

Взнос: 3 дня до срока → напомнить

cron 0 10 * * * each_row, reminder_date=$tomorrow И status∉{paid,void}

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. Дефекты и расхождения с журналом

1.

12 таблиц против «10» в журнале: лишние — Быстрый ввод (1652), Подтверждения оплаты (1653) (либо журнал не учёл ветку быстрого ввода). Требует подтверждения координатором.

2.

6 дашбордов против «4»: дубли «Дебиторка» (1649 внутренняя + 1661 debitorka-2) и «Выездное обслуживание» (1648) не опубликованы. Похоже на недоигранный хвост сборки (правило-дубль E100-типа для дашбордов). Кандидат в архив: один из двух «Дебиторок».

3.

Статусы в публичном 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_archivearchivedIds:[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).