feat(sf): ППТ/ПМТ ТЭП-парсер (Табл.11/12/13) → ekb_ppt_tep MVP (#1085) #1133
No reviewers
Labels
No labels
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
Fable 5 ревью
feedback/max
generative
GG-форсайт
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
вторичка
ИРД
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#1133
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "feat/ekb-ppt-tep"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Что
MVP-парсер ТЭП из пояснительных записок ППТ/ПМТ (pdfplumber). Геометрия ППТ/ПМТ уже в
planning_projects(1170, WFS) — добавляет ТЭП-контент. Часть #1085/#1067.Состав
data/sql/138_ekb_ppt_tep.sql—ekb_ppt_tep(doc_ref UNIQUE, project_type, zone_balance JSONB, tep JSONB, phasing JSONB, raw_tables JSONB, …), idempotent.ekb_ppt_tep_parser.py—parse_ppt_tep(pdf_bytes): pdfplumber → Табл.11 (баланс зон), Табл.12 (ТЭП), Табл.13 (очередность) по caption «Таблица N». ⚠️ кириллица только через pdfplumber (poppler = mojibake).ekb_ppt_tep_sync.py— Celeryingest_ppt_tep(docs), seed-doc (URL placeholder), verify=False. Ручной/редкий, beat нет.Что извлеклось из образца (ppt2018_22823, 131 стр)
zone_name!='')Исправлен баг:
_TABLE_HINT_REматчил оглавление → tep пуст; оставлен только явный caption «Таблица N».VERIFY перед прод-прогоном (не блокер)
_SEED_DOCSURL =# VERIFY URL(уточнить реальный URL пояснительной записки на екатеринбург.рф/ГИСОГД); пока ingest скипает с WARNING.raw_tablesв БД для отладки; пост-фильтры Табл.11/13 — follow-up.MVP #1085.
✅ APPROVE — ТЭП-parser MVP (inert scaffold, как #1118).
Verified prod (deploy-safety): миграция
138_ekb_ppt_tep.sql— таблица отсутствует,138не в_schema_migrations→ применится один раз. Idempotent (BEGIN/COMMIT, CREATE TABLE/INDEX IF NOT EXISTS, guarded UNIQUE(doc_ref) DO-block, partial GIN на zone_balance). 138 — координированный номер (см. NB в 137). Merge-risk = миграция only.Task инертен: beat НЕ зарегистрирован, seed-URL = placeholder
# VERIFY→ingest_ppt_tepявно скипает placeholder (if url.startswith("# VERIFY")). На проде не запустится до ручного вызова с реальным URL.Проверил байты (verify-don't-trust):
_norm_valuere.sub(r"[-]", ...)— это range Private-Use-Area (PDF-garbage-глифы), а не ASCII-hyphen (-= range-оператор между PUA-кодпойнтами). Не баг — корректная чистка.ОК:
verify=False+ #242-комментарий (урок из #1126) ✓; pdfplumber уже в deps (#1118), lock не трогается ✓; UPSERT ON CONFLICT(doc_ref)+SAVEPOINT per-doc+CAST jsonb psycopg v3 ✓; graceful (таблица не найдена → [], не исключение); raw_tables (cap 10 rows) для отладки; 24 синтетических + 6 real-skipif тестов.🟡 MINOR → consolidated follow-up (не блокеры, до прод-прогона): Табл.11 post-filter
zone_name != ''(2 преамбульных артефакта), Табл.13 dedup/post-filter (continuation-шум merged-cells), уточнение seed-URL, врезка в analyze (join doc_ref↔planning_projects.source_key), vault-запись.Merging (squash).