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

Проект «К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 0 5 * * *, scope each_row, tz Europe/Moscow

needs_reorder = true И last_reorder_issued <= $today

create_row→1580 (токены {{row.self}}, {{col.reorder_qty}}, {{col.unit_cost}}) + set_fields[last_reorder_issued] (формула TODAY()) — флаг идемпотентности от дублей (E59/E63)

R281 «Продажа завершена → списание со склада» (1557)

status_transition

create_rows_from_source (строки продажи → приход… т.е. расходные движения через qty_neg в 1558 → движения в 1560)

R274 «Создать строки расхода из спецификации» (1564)

event

exploded isFalse

create_rows_from_source (рецептура 1561/1562 → строки расхода 1566)

R276 «Списать материалы (FIFO)» (1564)

manual

costed_all isFalse

post_ledger_fifo — FIFO-списание себестоимости по партиям (1560)

R275 «Распределить дневной расход по строкам» (1565)

manual

allocated isFalse

allocate_across

R280 «Приёмка заказа → приходные движения (черновик)» (1568)

status_transition

create_rows_from_source (1569 → 1560 draft; обход locksRow-терминальности §38/E77 — черновиком с переходом)

R278 «Очередь → строка заказа поставщику» (1580)

manual, row

is_issued = false

set_fields[is_issued] + create_row→1569

R279 «Быстрый ввод → черновик движения» (1581)

event

confirm = true

create_row→1560 + set_fields[processed]

Замечания по дефектам: 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, формат с префиксом $), метрика «Число продаж» (countNonEmpty number, 1557), график «by_day» (bar, по дням)

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

/public/philibakery/

портал проекта

200

/public/philibakery/catalog

1556 Каталог

200

/public/philibakery/inventory-stock-movement

1560 Движения склада

200

/public/philibakery/production-batch

1564 Производственная партия

200

/public/philibakery/purchase-order

1568 Заказ поставщику

200

/public/philibakery/sklad

1577 дашборд Склад

200

/public/philibakery/proizvodstvo

1578 дашборд Производство

200

/public/philibakery/zakupki

1579 дашборд Закупки

200

/public/philibakery/sale

1557 (не опубликована)

404 (ожидаемо)

/public/philibakery/bystryy-vvod-sklad

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. Открытые вопросы

1.

Дашборд 1576 «Продажи» не опубликован и при этом содержит $-форматирование выручки при RUB-валюте проекта — опубликовать после фикса формата или оставить внутренним?

2.

Пустые домены: Location (1559), Производственный заказ (1563), Суточный расход (1565), Ledger (1570) и все справочники 1571–1575 — 0 строк. Демо-наполнение для этих таблиц не заводилось; часть из них (1563/1565) рассчитана на заполнение пользовательскими сценариями, часть (1571–1575) — служебные модульные.

3.

R276/R275 — ручные триггеры (FIFO-списание, распределение расхода): требуется ли доводить до расписания/события, или ручной запуск — осознанный проект К17?

4.

Форма 1582 не выставлена в портал (portalExposed:false) — быстрый ввод с телефона/киоска пекарни по этой ссылке недоступен; публикация формы — отдельное решение.

5.

§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-proektapublicUrlBlocked: 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.