| name | smeta |
| description | Автоматизация черновика сметы по ТЗ электросетевого подряда (ПС 10/35/110 кВ). Используй когда пользователь говорит "собери смету", "сметь лот", "смета по ТЗ", "расценки под [объект]", присылает ссылку zakupki.gov/44fz/223fz на лот по проектированию или строительству подстанции/ВЛ, или PDF-ТЗ с объёмами работ. НЕ используй для — ремонт/эксплуатация вне сборников 8/16/33 ФСНБ-2022, генподряд с архитектурными разделами, ТЗ не электросетевой тематики, готовые сметы на проверку (для этого есть отдельный skill `/smeta-review`). |
| allowed-tools | Read, Write, Edit, Bash, WebFetch, Grep, Glob |
Skill: /smeta — автоматизация черновика сметы
Что ты делаешь
Собираешь черновик локальной сметы по ТЗ для подрядчика электросетевого строительства. Работаешь через 6 фаз: INGEST → EXTRACT → RETRIEVE → RANK → ASSEMBLE → DELIVER. Финал — готовая к импорту в смета.ру/Гранд-Смету заготовка + отчёт сметчику с обоснованием каждого решения.
Абсолютные запреты (нарушение = провал скилла)
- НЕ ВЫДУМЫВАЙ коды расценок. Каждый код ФЕР/ФЕРм/ФЕРп извлекается из индекса
knowledge/fsnb_2022/. Если в индексе не нашлось — помечаешь позицию NEEDS_MANUAL и оставляешь сметчику.
- НЕ ВЫДУМЫВАЙ индексы Минстроя. Только из
knowledge/minstroy_indices.json. Если файл старше 90 дней — СТОП, попроси обновить выгрузкой с fgiscs.minstroyrf.ru.
- НЕ ПРИНИМАЙ решений вместо сметчика. Если confidence < 70, позиция с красным маркером. Если < 40 — не включай в итоговый XML, оставь в отчёте как «варианты для проверки».
- НЕ УДАЛЯЙ исходные данные. PDF и извлечённый markdown всегда остаются в папке проекта.
- НЕ ОТПРАВЛЯЙ ничего наружу. Архив смет заказчика — конфиденциален. Запросы к LLM идут по обезличенным позициям (без имён заказчиков, адресов, номеров контрактов).
Prerequisites (проверь ПЕРЕД запуском)
[ -f ~/.claude/skills/smeta/knowledge/minstroy_indices.json ] || exit "нужна свежая выгрузка индексов"
[ -d ~/.claude/skills/smeta/knowledge/fsnb_2022 ] || exit "нужен индекс ФСНБ-2022"
python3 -c "import chromadb, playwright, lxml" || exit "pip install -r requirements.txt"
Если чего-то нет — сообщи пользователю точно чего не хватает и как получить (ссылка на Минстрой, команда для индексации ФСНБ).
Входы
Пользователь даёт одно из:
- URL zakupki.gov (44-ФЗ/223-ФЗ) — качаешь сам через Playwright
- PDF — работаешь с присланным файлом
- Папка с ТЗ + приложениями
Если ссылок несколько — обрабатывай по одному, не параллельно.
Фаза 1 — INGEST
Если URL zakupki: python scripts/fetch_lot.py <URL> --out ~/smeta-projects/<slug>/raw/
Скрипт кладёт в raw/:
tz.pdf (основной ТЗ)
attachments/*.pdf (приложения, опросники, схемы)
lot_meta.json (НМЦК, заказчик, сроки, площадка, требования к опыту)
Проверь читаемость PDF. Если скан — scripts/pdf_to_pages.py --ocr включит Tesseract + pdftotext.
Далее: python scripts/pdf_to_pages.py — разбивает на постраничный markdown + PNG каждой страницы (нужно для Vision по схемам ОРУ и таблицам).
Фаза 2 — EXTRACT (работы и объёмы)
Прогоняешь tz.md + PNG схем через мультимодальный Claude. Промпт — prompts/extract_works.md.
Строгий structured output (Pydantic):
class Work(BaseModel):
id: str
title: str
unit: str
quantity: float
source_quote: str
source_page: int
category: Literal["СМР", "Монтаж", "ПНР", "Оборудование", "Материалы", "Прочие"]
notes: str | None
Результат — extracted/works.json. Каждая работа ОБЯЗАНА иметь source_quote.
Валидация: если суммарно работ < 15 для лота крупнее ₽10 млн — перепроверь, ты пропустил разделы.
Фаза 3 — RETRIEVE (кандидаты из ФСНБ-2022)
Для каждой Work — python scripts/fsnb_retrieve.py --query "{title} {notes}" --top-k 5 --sbornik "33,8,16".
Приоритетные сборники для электросетевого:
- ФЕРм 33 — электротехнические установки (трансформаторы, ОРУ, РУ)
- ФЕРм 08 — электрические сети (ВЛ, КЛ)
- ФЕР 16 — трубопроводы внутренние
- ФЕРп — пусконаладочные работы (для ПНР-позиций)
Результат — retrieved/candidates.json.
Фаза 4 — RANK (выбор расценки с confidence)
Для каждой работы — Claude с промптом prompts/rank_fsnb.md. Даёшь: работу, цитату ТЗ, 5 кандидатов, полный текст технической части каждого кандидата.
Выход:
class Selection(BaseModel):
work_id: str
chosen_code: str | None
confidence: int
rationale: str
warnings: list[str]
unit_mismatch: bool
Правила confidence:
- 90–100 — точное совпадение наименования + единиц + состав работ
- 70–89 — совпадение по существу, может потребовать коэффициента
- 40–69 — похоже, но сметчик должен проверить
- 0–39 — непонятно,
NEEDS_MANUAL
Фаза 5 — ASSEMBLE
python scripts/arps_build.py --selections rank/selections.json --indices knowledge/minstroy_indices.json --out output/
Генерирует:
output/smeta.xml — АРПС 1.10 XML (импортится в смета.ру И Гранд-Смету)
output/draft.xlsx — Excel-черновик с цветовой разметкой (красное = NEEDS_MANUAL, жёлтое = confidence 40–69)
output/README.md — отчёт сметчику
Валидация XML: python scripts/verify_arps.py output/smeta.xml — XSD + sanity (все позиции имеют объём >0, все коды существуют в ФСНБ, сумма сходится).
Фаза 6 — DELIVER
Структура итоговой папки:
~/smeta-projects/2026-04-24-oek-maryino/
├── raw/
├── extracted/
├── retrieved/
├── rank/
├── output/
│ ├── smeta.xml
│ ├── draft.xlsx
│ └── README.md
├── audit.log
└── .cost.json
Финальное сообщение пользователю:
✔ Смета-черновик готов: ~/smeta-projects/2026-04-24-oek-maryino/
• {N} позиций всего
• {K} требуют ручной проверки (confidence < 70)
• {M} не найдены в ФСНБ (NEEDS_MANUAL)
• Предварительная сумма (базис 2022 г.): ₽{X} млн
• Текущие цены (с индексами Q{Y}): ₽{Z} млн
• Red flags: {список 1-3 штук}
• Токенов потрачено: {T} (~₽{P})
Следующие шаги:
1. Сметчик проверяет output/README.md
2. Импортирует output/smeta.xml в смета.ру или Гранд-Смету
3. Правит позиции NEEDS_MANUAL и confidence <70
4. Применяет коэффициенты из условий контракта (зимние, стеснённость)
Работа с ошибками
- Лот недоступен без авторизации → скажи как получить PDF вручную
- ТЗ сканом без OCR → флаг
--ocr, предупреди о падении точности
- Много NEEDS_MANUAL (>30%) → вероятно ТЗ не электросетевое, предложи отказ
- Индексы Минстроя старше 90 дней → СТОП
- XSD-валидация не прошла → сохрани как
smeta.xml.INVALID, напиши сметчику
Audit trail (обязательно)
В audit.log для каждой позиции:
[W-001] "Монтаж трансформатора ТМ 1000/10"
Source: tz.pdf, page 14, "...предусмотреть установку силового трансформатора 1000 кВА..."
Candidates: ФЕРм 33-04-012-03 (0.87), ФЕРм 33-04-011-01 (0.72), ...
Chosen: ФЕРм 33-04-012-03 (confidence: 88)
Rationale: "Совпадает мощность (1000 кВА), тип ТМ, единица — 1 шт. Кандидат 33-04-011 — для ТС, отличается."
Warnings: []
Time: 3.2s, Tokens: 4200 in + 450 out, Cost: ₽4.8
Этот лог — основа для аргументации перед экспертизой заказчика.
Версионность
- v0.1 (MVP, 2–3 недели) — только EXTRACT + отчёт в Excel, без XML и без RAG по ФСНБ.
- v0.5 (6–8 недель) — добавляем RETRIEVE + RANK по сборнику 33 (ФЕРм).
- v1.0 (12–16 недель) — полный pipeline, XML АРПС 1.10, все 3 сборника, Vision для схем ОРУ.
- v1.5 (стретч) — архив типовых узлов «Силы Тока», автосборка похожих ПС.
Что пользователь должен знать
Этот скилл НЕ заменяет сметчика. Он экономит 60–80% механической работы (разбор ТЗ + подбор расценок-черновика). Финальная смета всегда утверждается человеком. Без этого экспертиза заказчика зарежет документ, а подрядчик получит претензии по завышению/занижению.