feat(fns): парсер ФНС бухгалтерской отчетности

- Модели FinancialReport и FinancialReportLine
- FNSExcelParser для файлов fin_{id}_{ogrn}.xlsx
- FNSReportService с дедупликацией по хешу файла
- Celery задачи для мониторинга папки (каждые 5 мин)
- API: POST /fns/upload/, GET /fns/reports/
- Django admin интеграция
- 25 unit-тестов
This commit is contained in:
2026-02-01 14:44:19 +01:00
parent eb0d6f2600
commit cd0e21350b
17 changed files with 1537 additions and 10 deletions

View File

@@ -6,6 +6,56 @@
---
## [0.4.0] - 2026-01-28
### Добавлено
#### Парсер ФНС бухгалтерской отчетности (`apps.parsers.clients.fns`)
- **FNSExcelParser** — парсер Excel файлов бухгалтерской отчетности:
- Формат файла: `fin_{external_id}_{ogrn}.xlsx`
- Поддержка форм: №1 (Баланс), №2 (Прибыль/Убыток), №3 (Капитал), №4 (Денежные потоки), №6 (Целевое использование)
- Автоматическое определение года и формы по структуре листа
- Извлечение значений period_start/period_end для каждой строки
- **Модели** (`models.py`):
- `FinancialReport` — отчет с метаданными (external_id, ogrn, file_hash, status, source)
- `FinancialReportLine` — строки отчета (form_code, line_code, year, period_start, period_end)
- SHA256 хэш файла для дедупликации
- Индексы: ogrn, year, form_code+line_code
- **Сервисный слой** (`services.py`):
- `FNSReportService` — сохранение отчетов, проверка дубликатов по хешу
- Поиск по ОГРН
- Bulk-сохранение строк отчета
- **Celery задачи** (`tasks.py`):
- `scan_fns_directory` — периодическое сканирование папки каждые 5 минут
- `process_fns_file` — обработка одного файла
- `process_fns_files_batch` — пакетная обработка через API
- Перемещение файлов в `processed/` или `failed/`
- **API endpoints** (`views.py`, `urls.py`):
- `POST /api/v1/parsers/fns/upload/` — пакетная загрузка файлов
- `GET /api/v1/parsers/fns/reports/` — список отчетов с фильтрацией
- `GET /api/v1/parsers/fns/reports/{id}/` — детали отчета со строками
- **Админка** (`admin.py`):
- `FinancialReportAdmin` с inline для строк
- Цветовая индикация статусов
- Фильтры: status, source, ogrn
#### Тестирование
- 25 unit-тестов для парсера, схем и сервиса
- Покрытие: валидация имени файла, парсинг значений, сохранение отчетов
### Конфигурация
- `FNS_WATCH_DIRECTORY` — папка для мониторинга (`/src/input/fns`)
- `FNS_PROCESSED_DIRECTORY` — папка обработанных файлов
- `FNS_FAILED_DIRECTORY` — папка с ошибками
- Celery Beat: `scan-fns-directory` каждые 5 минут
---
## [0.3.0] - 2026-01-27
### Добавлено