Документация проекта
Проект «К17 Пекарня Филина» — документация сборки
Slug: philibakery · Project id: 42 · Название: Philibakery-K17-oc
Дата документирования: 2026-09-05 (сбор живьём, прогон oc2-docs / doc-k17)
Источник данных: только живой сбор (doc_tree / datatable_get_schema / datatable_get_rows / automation_get_meta / form_get_meta / dashboard_get_meta / doc_get / project_settings_get / curl). Документация пишется впервые.
Дисклеймер о загрязнении: часть артефактов К17 физически лежит в проекте К14 (k14-beauty-salon, id 53) — см. dev-report §52/§54. Здесь зафиксировано только то, что реально находится в проекте philibakery (проверено project_use + doc_tree перед каждым батчем; demoted=false, активных архивных узлов нет).
1. Дерево объектов
Всего 27 узлов, архивированных нет (includeArchived:true даёт те же 27). Документов (type=document) в проекте нет.
Id | Тип | Имя | Slug | Published |
|---|---|---|---|---|
1556 | dataTable | Каталог | catalog | ✅ |
1557 | dataTable | Продажи (касса) | sale | — |
1558 | dataTable | Строка продажи | sale-line | — |
1559 | dataTable | Location | location | — |
1560 | dataTable | Движения склада | inventory-stock-movement | ✅ |
1561 | dataTable | Рецептура | bom | — |
1562 | dataTable | Строка рецептуры | bom-line | — |
1563 | dataTable | Производственный заказ | production-order | — |
1564 | dataTable | Производственная партия | production-batch | ✅ |
1565 | dataTable | Суточный расход материалов | daily-material-consumption | — |
1566 | dataTable | Строка расхода материалов | material-consumption-line | — |
1567 | dataTable | Поставщики | vendor | — |
1568 | dataTable | Заказ поставщику | purchase-order | ✅ |
1569 | dataTable | Строка заказа | purchase-order-line | — |
1570 | dataTable | Ledger | ledger | — |
1571 | dataTable | Region | region | — |
1572 | dataTable | Customer group | customer-group | — |
1573 | dataTable | Price list | price-list | — |
1574 | dataTable | Fx rate | fx-rate | — |
1575 | dataTable | Tax rate | tax-rate | — |
1576 | dashboard | Продажи | prodazhi | — |
1577 | dashboard | Склад | sklad | ✅ |
1578 | dashboard | Производство | proizvodstvo | ✅ |
1579 | dashboard | Закупки | zakupki | ✅ |
1580 | dataTable | Очередь дозаказа | ochered-dozakaza | — |
1581 | dataTable | Быстрый ввод | bystryy-vvod | — |
1582 | form | Быстрый ввод (склад) | bystryy-vvod-sklad | — |
Домены: продажи/касса (1557–1558), склад и остатки (1556, 1559–1560, 1570), производство по рецептуре (1561–1566), закупки (1567–1569), справочники прайс-политики (1571–1575), сервисные таблицы обходов (1580 очередь дозаказа, 1581 быстрый ввод).
2. Таблицы: схемы и счётчики записей
Счётчики — полным постраничным чтением datatable_get_rows (лимит 200/страница); агрегация по служебной колонке id не использовалась (молча возвращает 0).
1556 Каталог (7 строк)
sku:text Артикул · name:text Название · on_hand:balance В наличии · reorder_point:number Точка заказа · category:select Категория · reorder_qty:number Партия заказа · unit_cost:currency Цена закупа · sale_price:currency Цена продажи · default_vendor:reference Поставщик по умолчанию · needs_reorder:formula Нужен дозаказ · last_reorder_issued:date Последний дозаказ
1557 Продажи (касса) (1 строка)
number:sequence Чек № · customer:reference Клиент · sold_at:datetime Дата продажи · location:reference Магазин · total:rollup Итого · tax_total:rollup НДС итого · payment_method:select Способ оплаты · status:status Статус · notes:multilineText Заметки · customer_name:text · email:email · phone:phone · order_ref:text Номер заказа · payment_status:select Статус оплаты · payment_ref:text Платёж (ссылка) · payment_provider:text Платёжный провайдер · processor_fee:currency Комиссия · net:currency К зачислению · discount_code:text Промокод · discount_amount:currency Скидка
1558 Строка продажи (2 строки)
sale:reference Чек · product:reference Товар · qty:number · unit_price:currency · line_total:formula Сумма · tax_rate:number Ставка НДС, % · tax_amount:formula НДС · qty_neg:formula Минус количество (токен-механика для списания со склада)
1559 Location (0 строк)
code:text · name:text · timezone:select · address:text · lat:number · lng:number · parent_location:reference · geofence:geofence
1560 Движения склада (16 строк)
item:reference Товар · qty:number · movement_kind:select Тип движения · location:reference Склад · effective_date:date · reference:text Документ · status:status · reverses:reference Сторнирует · note:multilineText · unit_cost:number Себестоимость ед. · qty_remaining:rollup Остаток партии · layer_ref:reference Партия списания · consumption_line:reference Строка расхода
1561 Рецептура (2 строки)
name:text · product:reference Изделие · yield_qty:number Выход · active:boolean · notes:multilineText
1562 Строка рецептуры (5 строк)
bom:reference Спецификация · component:reference Компонент · qty_per:number Расход
1563 Производственный заказ (0 строк)
number:sequence Заказ № · bom:reference · qty_to_make:number К выпуску · scheduled_date:date · location:reference · status:status · notes:multilineText
1564 Производственная партия (1 строка)
number:sequence Партия № · bom:reference · qty:number · location:reference · date:date · bom_yield:lookup Выход · material_cost:rollup Стоимость материалов · unit_material_cost:formula Стоимость на единицу · status:status · notes:multilineText · exploded:boolean Спецификация раскрыта · costed_all:boolean Себестоимость посчитана (флаг идемпотентности)
1565 Суточный расход материалов (0 строк)
date:date · material:reference · location:reference · total_qty:number Всего · allocated:boolean Распределено
1566 Строка расхода материалов (2 строки)
batch:reference Партия · component:reference · planned_qty:number План · actual_qty:number Факт · allocated:boolean · cost:number Стоимость · costed:boolean Списано · location:reference · daily_consumption:reference · production_date:lookup
1567 Поставщики (2 строки)
name:text · email:email · phone:phone · address:multilineText · tax_id:text ИНН · payment_terms:select · owner:person · notes:multilineText
1568 Заказ поставщику (1 строка)
number:sequence Заказ № · vendor:reference · order_date:date · expected_date:date Ожидается · location:reference · total:rollup Итого · status:status · notes:multilineText
1569 Строка заказа (3 строки)
purchase_order:reference Заказ · product:reference · qty:number · unit_cost:currency · line_total:formula Сумма
1570 Ledger (0 строк)
parent_ref:reference Объект · delta:number Сумма · effective_date:date · status:status · reverses:reference · note:multilineText
1571–1575 Справочники (все 0 строк)
1571 Region: code, label · 1572 Customer group: code, label
1573 Price list: product/region/customer_group/qty_min/qty_max/valid_from/valid_to/price/currency/status (10 кол.)
1574 Fx rate: from_currency/to_currency/rate/valid_from/valid_to/source (6 кол.)
1575 Tax rate: jurisdiction/category/rate/valid_from (4 кол.)
1580 Очередь дозаказа (2 строки) — обход очереди дозаказа (карта К17)
item:reference Позиция · qty:number · unit_cost:currency · purchase_order:reference Заказ · is_issued:boolean В заказе · add_to_order:button В заказ
1581 Быстрый ввод (1 строка) — голосовой/быстрый текстовый ввод (обходSpeech-интента, dev-report §«Speech-коннектор не подтверждён»)
op_type:select Операция · item_name:text Позиция (текст) · qty:number Кол-во, кг · vendor_name:text Поставщик (текст) · price:currency Цена, ₽ · item_ref:reference Позиция (связь) · vendor_ref:reference Поставщик (связь) · confirm:boolean Подтвердить · processed:boolean Обработано
Итого строк: 45 (7+1+2+0+16+2+5+0+1+0+2+2+1+3+0+0+0+0+0+0+2+1).
3. Автоматизации (8 правил, все активны)
Меты получены automation_get_meta по documentId таблиц. Все правила включены (enabled:true) — следов дефекта §51 (привнесённые install_modules правила с active:null) в текущем следе нет.
Правило | Триггер | Условие | Действия |
|---|---|---|---|
R277 «Остаток ниже точки заказа → Очередь дозаказа» (табл. 1556) | schedule cron |
|
|
R281 «Продажа завершена → списание со склада» (1557) | status_transition | — |
|
R274 «Создать строки расхода из спецификации» (1564) | event |
|
|
R276 «Списать материалы (FIFO)» (1564) | manual |
|
|
R275 «Распределить дневной расход по строкам» (1565) | manual |
|
|
R280 «Приёмка заказа → приходные движения (черновик)» (1568) | status_transition | — |
|
R278 «Очередь → строка заказа поставщику» (1580) | manual, row |
|
|
R279 «Быстрый ввод → черновик движения» (1581) | event |
|
|
Замечания по дефектам: create_row-конфиги используют fields-форму {columnId, value} с токенами (правильная форма по E89); data-формы (молча пишущие пустые строки, §49) не зафиксированы — пустых строк-артефактов в целевых таблицах нет.
4. Формы
1582 «Быстрый ввод (склад)» (slug bystryy-vvod-sklad)
Привязка: targetDocumentId: 1581 (Быстрый ввод)
Поля (5): op_type, item_name, qty, vendor_name, price
Статусы: isPublished=false, publicUrl=null, publicUrlBlocked: document_not_published; portalExposed: false; config — пустой, portalConfig — null.
Формы в публичном контуре нет; вход в домен склада идёт через строку 1581 + правило R279.
5. Дашборды
Id | Имя | Панели (привязка) | Published |
|---|---|---|---|
1576 | Продажи | метрика «Выручка» (sum total, 1557, формат с префиксом | ❌ |
1577 | Склад | метрика «Остатки на складе» (sum on_hand, 1556), график «Движения по дням» (sum qty × effective_date/day, 1560) | ✅ |
1578 | Производство | метрика «Партий выпущено» (countNonEmpty number, 1564), график «Себестоимость материалов по партиям» (sum material_cost × date/day, 1564) | ✅ |
1579 | Закупки | метрика «Сумма закупок» (sum total, 1568), график «Суммы заказов по статусам» (sum total × status, 1568) | ✅ |
Дефект-кандидат: у панели «Выручка» дашборда 1576 numberFormat prefix $ при baseCurrency проекта RUB — визуальный разлад валюты. Дашборд 1576 не опубликован, наружу не торчит.
6. Документы-шаблоны и проверка токенов
В проекте philibakery нет ни одного узла type=document (doc_tree: 27 узлов — 22 dataTable + 4 dashboard + 1 form; с includeArchived — то же). Соответственно:
Проверка тел doc_get_content на литеральные токены {{col.*}} / {{parent.*}}: проведена, объектов для проверки — 0. Ключевой вопрос волны по документ-шаблонам для К17 закрывается как «в philibakery шаблонов нет».
Токены {{col.*}}/{{row.self}} живут в правилах автоматизации (R277) и там отрабатывают корректно (строки очереди дозаказа заполнены).
Напоминание о загрязнении: документ-шаблоны, найденные в прежнем прогоне в К14 (39→60 документов, §54), к philibakery отношения не имеют.
7. Публичный контур (curl, фактические статусы)
Настройки проекта: isPublished: true, baseCurrency RUB, timezone Europe/Moscow, portalAllowedOrigins/channels/externalDirectory — пустые. Namespace — корректный philibakery (§52 для текущего следа закрыт).
URL | Объект | HTTP |
|---|---|---|
| портал проекта | 200 |
| 1556 Каталог | 200 |
| 1560 Движения склада | 200 |
| 1564 Производственная партия | 200 |
| 1568 Заказ поставщику | 200 |
| 1577 дашборд Склад | 200 |
| 1578 дашборд Производство | 200 |
| 1579 дашборд Закупки | 200 |
| 1557 (не опубликована) | 404 (ожидаемо) |
| 1582 форма (не опубликована, blocked=document_not_published) | 404 (ожидаемо) |
8. Грабли проекта, подтверждённые на этом следе
Из dev-report.md / error.md по метке philibakery/К17:
§49/E89 — create_row в data-форме молча пишет пустую строку; canon — fields-форма с токенами. В текущем сборе all create_row в fields-форме.
§50 — install_modules создаёт дубль домена движений склада; на этом следе дублей нет (одна таблица 1560).
§51 — правила из install_modules приходят active:null; сейчас все 8 активны (следов незаактивированных правил нет).
§52 — публичный namespace наследует старый slug переименованного проекта; сейчас publicUrl резолвятся в philibakery (см. §7).
§53 — rollup не пересчитывается после удаления дочерних строк (проверка на живом удалении в этом прогоне не выполнялась — риск зафиксирован из §53).
§54 — активный проект глобален на пользователя; гонка параллельных сессий уводила записи в К14. В этом прогоне project_use вызывался перед каждым батчем, demoted:false контролировался.
E88 — install_modules: moduleIds (не modules); form_set_meta: привязка через targetDocumentId (ключ table игнорируется).
E90/E92 — параллельные exec с зависимым состоянием → дубли; весь сбор выполнен последовательными батчами.
9. Открытые вопросы
Дашборд 1576 «Продажи» не опубликован и при этом содержит $-форматирование выручки при RUB-валюте проекта — опубликовать после фикса формата или оставить внутренним?
Пустые домены: Location (1559), Производственный заказ (1563), Суточный расход (1565), Ledger (1570) и все справочники 1571–1575 — 0 строк. Демо-наполнение для этих таблиц не заводилось; часть из них (1563/1565) рассчитана на заполнение пользовательскими сценариями, часть (1571–1575) — служебные модульные.
R276/R275 — ручные триггеры (FIFO-списание, распределение расхода): требуется ли доводить до расписания/события, или ручной запуск — осознанный проект К17?
Форма 1582 не выставлена в портал (portalExposed:false) — быстрый ввод с телефона/киоска пекарни по этой ссылке недоступен; публикация формы — отдельное решение.
§53 rollup-пересчёт не проверялся живым удалением дочерних строк в этом прогоне (чтобы не ломать демо-данные) — остаётся неподтверждённым риском для on_hand/total/material_cost.
10. Публичный доступ (итог публикации 2026-09-05)
Проект: isPublished: true (project_settings_get; действий по публикации не потребовалось — шаг 11 прошёл без project_settings_set).
Документ «Документация проекта»: documentId 1760, создан doc_upsert (mode:create, без documentId; тело параметром body), isPublished: true, stateId: draft (на публичный доступ не влияет).
publicUrl: https://smb.farhome.ru/public/philibakery/dokumentatsiya-proekta — publicUrlBlocked: null.
Проверка тела живьём: doc_get_content (ключ markdown) — 15586 символов, дубликата нет (до создания в проекте было 0 документов).
Курлом: HTTP 200, маркер «К17 Пекарня Филина» присутствует в выдаче страницы.
Все публичные ссылки проекта (7 объектов из §7 + этот документ) резолвятся в namespace philibakery.
Чистка (2026-09-05)
Указание владельца платформы. Архивация пустых и неиспользуемых таблиц (только таблицы; формы/правила/дашборды/документы не трогали). Живая сверка перед решениями: построчное чтение datatable_get_rows (лимит 200/страница; агрегация по id не использовалась), меты 22 схем, 8 правил (по documentId таблицы), 4 дашбордов, формы 1582.
Архивировано (7, все пустые и неиспользуемые):
Id | Таблица | Строк | Обоснование |
|---|---|---|---|
1563 | Производственный заказ | 0 | ноль входящих ссылок/правил/дашбордов (только исходящие bom/location) |
1570 | Ledger | 0 | ни одного правила/колонки на него; R276 FIFO работает через ledgerRole-колонки 1560 и баланс 1556 (проверено полным конфигом) |
1571 | Region | 0 | входил только в 1573 (сам архивирован) |
1572 | Customer group | 0 | входил только в 1573 (сам архивирован) |
1573 | Price list | 0 | кластер ценовой политики install_modules; ноль входящих вне кластера |
1574 | Fx rate | 0 | ноль входящих |
1575 | Tax rate | 0 | ноль входящих (НДС в 1558 — числовая колонка, не ссылка) |
Каскада не было: каждый doc_archive вернул archivedIds:[self].
Сохранены (пустые, но используются):
Id | Таблица | Причина сохранения |
|---|---|---|
1559 | Location | 7 колонок-ссылок: 1557.location (purpose core_location), 1560.location, 1563.location, 1564.location, 1565.location, 1566.location, 1568.location |
1565 | Суточный расход материалов | ссылка 1566.daily_consumption (referenceDocumentId 1565) + триггер-таблица правила R275 |
Непустые таблицы (13) и все связи через них — не тронуты; ни одна непустая таблица неиспользуемой не оказалась («архив с данными» не понадобился).
Узлы: было 28 (22 dataTable + 4 dashboard + 1 form + 1 document) → стало 21 живых (15 dataTable + 4 dashboard + 1 form + 1 document) + 7 в архиве. Соседние проекты не затронуты (project_use перед каждой записью, demoted:false).
Перепубликация документации: из-за известного дефекта (обновление тела существующего документа через doc_upsert не работает — «ok» без записи тела) документ 1760 заархивирован и создан заново с телом параметром body, isPublished:true. Тело на платформе = версия этого файла на момент пересоздания (новый собственный documentId вписан только в локальную копию и артефакт чистки). Проверка: doc_get_content (ключ markdown) + живой curl publicUrl.