checks.py: тождество сальдо по каждой строке, суммы родителя = Σ детей того же data_type (CURRENCY/QUANTITY исключены; обороты — по колонкам, сальдо — по колонкам или по нетто при свёрнутом сальдо родителя), «Итого» = корневой счёт (R-13: нет корня — «Итого» пусто/0; R-20: нет «Итого» — false и предупреждение). osv.py: OsvParser — лимит размера, чтение по сигнатуре, листы по содержимому (формы ББ/ОФР и прочие — пропуск с предупреждением), карта исходов D-6, кооперативный дедлайн, metrics (rows без TOTAL, warnings с «sheet=<имя> hierarchy=<стратегия>» первой записью по листу). get_parser(settings, rules_dir=…) → OsvParser (словари грузятся при создании: битый словарь — падение старта); PARSE_MAX_BYTES / PARSE_TIMEOUT_SECONDS в Settings и .env.*; app.py передаёт настройки. test_null_parser.py → test_parser_factory.py. Тесты: юнит-карта статусов, «Испорченная сумма», «Пустая ОСВ», два листа ОСВ, новый синоним без релиза кода (R-8); property-тест на 66 реальных файлах (все done, < 5 с, схема v1.1). test_app и интеграционный round-trip ждут ошибку реального парсера вместо NOT_IMPLEMENTED. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
43 lines
2.7 KiB
Plaintext
43 lines
2.7 KiB
Plaintext
# Пример локального окружения. Скопируйте в api/.env: cp .env.example .env
|
||
# Порты и учётные данные — стандартные для docs/dev/docker-compose.yml (`make up`: NATS 4222, MinIO 9000).
|
||
# Сервис без БД: видит только NATS и S3.
|
||
|
||
DEBUG=true
|
||
|
||
# Dev-запуск слушает только loopback. По умолчанию приложения (без этих строк) — 0.0.0.0:8000, как в контейнере платформы.
|
||
SERVER__HOST=127.0.0.1
|
||
SERVER__PORT=8000
|
||
|
||
# MinIO (адрес без схемы — так ждёт miniopy-async). Один бакет для входных файлов и результатов.
|
||
OPENBAO__MINIO__MINIO_URL=localhost:9000
|
||
OPENBAO__MINIO__MINIO_ADMIN_LOGIN=minioadmin
|
||
OPENBAO__MINIO__MINIO_ADMIN_PASSWORD=minioadmin
|
||
OPENBAO__MINIO__MINIO_BUCKET=arm-ka
|
||
# false — MinIO по http (docker compose); по умолчанию true (https, как на платформе)
|
||
OPENBAO__MINIO__MINIO_SECURE=false
|
||
|
||
# NATS без JetStream; пустые NATS_SEED/NATS_JWT — подключение без nkeys
|
||
OPENBAO__NATS__NATS_URL=nats://localhost:4222
|
||
OPENBAO__NATS__NATS_SEED=
|
||
OPENBAO__NATS__NATS_JWT=
|
||
|
||
# Необязательные настройки (значения ниже — значения по умолчанию из src/core/config.py)
|
||
# Префикс путей приложения за прокси и версия в OpenAPI
|
||
ROOT_PATH=/
|
||
VERSION=1.0.0
|
||
# `service.name` конвертов контракта; допустимо только tabular-parser (иное — ошибка старта). Queue group NATS —
|
||
# константа в коде (`tabular-parser`), этой настройкой не меняется
|
||
SERVICE_NAME=tabular-parser
|
||
# false — не подключаться к NATS (воркер не стартует; /healthcheck отдаёт nats = off)
|
||
NATS_ENABLED=true
|
||
# Число заданий, обрабатываемых одновременно
|
||
WORKER_CONCURRENCY=1
|
||
# Повторы публикации ack и результата в NATS после первой попытки (3 — всего до 4 попыток, пауза 2 с; 0 — без повторов)
|
||
PUBLISH_RETRIES=3
|
||
# Размер process-local LRU обработанных job_id (защита от дублей доставки)
|
||
DONE_CACHE_SIZE=1000
|
||
# Лимиты разбора: размер файла в байтах (больше — UNSUPPORTED_FORMAT, книга не открывается; 52428800 = 50 МиБ)
|
||
# и время разбора одного файла в секундах (больше — TIMEOUT); оба ниже reply_deadline ядра (5 мин)
|
||
PARSE_MAX_BYTES=52428800
|
||
PARSE_TIMEOUT_SECONDS=120
|