From 4593cdc62c4d0e2cadbbac0bbb19bbf1d106ff18 Mon Sep 17 00:00:00 2001 From: Andrey Epifancev Date: Sat, 7 Nov 2026 04:14:24 +0400 Subject: [PATCH] =?UTF-8?q?docs(#190):=20M-10=20format=3Dcsv=20=D0=B2=20RE?= =?UTF-8?q?ADME,=20M-14=20=D1=81=D1=81=D1=8B=D0=BB=D0=BA=D0=B0=20R-4=20?= =?UTF-8?q?=D0=B2=20docstring,=20M-16=20CLAUDE.md=20=D0=BF=D1=80=D0=BE=20?= =?UTF-8?q?=D0=B0=D1=83=D0=B4=D0=B8=D1=82=20=D0=B2=D1=8B=D0=B3=D1=80=D1=83?= =?UTF-8?q?=D0=B7=D0=BA=D0=B8=20=D0=BC=D0=B5=D1=82=D1=80=D0=B8=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- CLAUDE.md | 2 +- README.md | 2 +- api/src/domain/quality_attribution.py | 2 +- api/src/services/documents.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index dc9d92a..e377366 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -121,7 +121,7 @@ `ObjectStorage.stream` (поток из S3, первая порция до заголовков → `FILE_CONTENT_NOT_FOUND`; сессию тело потока не держит; имя — RFC 5987, `X-Content-Type-Options: nosniff`; освобождение потока — `common/streaming.py`: `ClosingStreamingResponse` + `ChainedStream` закрывают источник и при обрыве клиента). Скачивание первички, CSV и комментарии аудит не пишут (в отличие от - экспорта сводной ОСВ в xlsx — тот пишет `EXPORT`; OQ-153). `HeaderPatch.units` — непустая строка после обрезки (пробельная — 422). `GET /users/brief` — `current_user` без права; `documents_count` у ЮЛ — `repositories/directories`; CSV чек-листа — + экспорта сводной ОСВ в xlsx и выгрузки метрик качества `GET /quality-metrics/export` — те пишут `EXPORT`; OQ-153). `HeaderPatch.units` — непустая строка после обрезки (пробельная — 422). `GET /users/brief` — `current_user` без права; `documents_count` у ЮЛ — `repositories/directories`; CSV чек-листа — `?format=csv` у `GET …/checklist`. Контракт для фронта — `../docs/dev/api-contract-slice-3b.md`; решения — `openspec/changes/archive/2026-10-07-slice-3b-statements-api/design.md`. - **Факты качества первички (AURORA-1759)** — отдельная схема `dkb_metrics` (`QUALITY_METRICS_SCHEMA`), таблицы `quality_intake_fact` / diff --git a/README.md b/README.md index fa2c942..7b69b41 100644 --- a/README.md +++ b/README.md @@ -978,7 +978,7 @@ API (`/api/v1/quality-metrics`, право `QUALITY_METRICS_VIEW`, выдаёт | `GET /matrix` | матрица «источник × причина» за период (период по дате приёма, фильтры ГК, ЮЛ, тип, источник `pipeline`, скан/цифровой), технические отказы по файлам, «в работе», уникальные отчёты | | `GET /series` | ряд по месяцам даты приёма для причины (`cause`) | | `GET /cells/{cell}/documents` | постраничный список документов ячейки (`limit`, `offset`) | -| `GET /export` | выгрузка фактов за период, `fmt=csv` (UTF-8 с BOM) или `json`; пишет `audit_event(EXPORT)` | +| `GET /export` | выгрузка фактов за период, `format=csv` (UTF-8 с BOM) или `json`; пишет `audit_event(EXPORT)` | Экран веб-интерфейса — «Качество первички» (`web/src/widgets/QualityMetrics`). diff --git a/api/src/domain/quality_attribution.py b/api/src/domain/quality_attribution.py index 3979a3c..07a3939 100644 --- a/api/src/domain/quality_attribution.py +++ b/api/src/domain/quality_attribution.py @@ -41,7 +41,7 @@ def attribute_value_fix(confirmed: str, raw_text: str) -> Attribution: `parse_amount` требует `Source`; здесь он не определяет исход («О»→«0» и выделение числового ядра в тексте работают одинаково для PDF и Excel), поэтому берём `Source.OCR` — распознавание различий между источниками в `parse_amount` касается только неоднозначных разделителей тысяч, а их чтение в эту цифровую проверку не - входит (решение задачи 3, см. отчёт). + входит (источник на цифровую проверку не влияет). """ rules = default_rules() parsed = parse_amount(raw_text, Source.OCR, rules) diff --git a/api/src/services/documents.py b/api/src/services/documents.py index c3fe6bd..99499c9 100644 --- a/api/src/services/documents.py +++ b/api/src/services/documents.py @@ -482,7 +482,7 @@ class DocumentService: """Факт исхода `CONFIRMED` с атрибуцией правок (§14.2-§14.4; design quality-metrics §4.2, §5, §6; AURORA-1759). Гейт — `OUTCOME_FACT_DOCUMENT_TYPES`: DISCLOSURE/OTHER без факта (как у факта приёма/ `AUTO_CONFIRMED`, Task 5/6). Правки ищутся по ЖИВЫМ колонкам `*_modified`/`original_*`/`source_text` - (первичка не мутируется) — не по JSON `quality_intake_fact.payload` (решение задачи 7, см. отчёт: тот + (первичка не мутируется) — не по JSON `quality_intake_fact.payload` (R-4, design.md: тот payload собран для другой цели и его форма — не для этого сравнения). Пишется в транзакции вызывающего (`confirm`), без `flush`/`commit`. """