feat(parsers): support FNS zip uploads in admin
Some checks failed
CI/CD Pipeline / Run Tests (push) Successful in 3m0s
CI/CD Pipeline / Code Quality Checks (push) Failing after 7m39s
CI/CD Pipeline / Telegram Notify Success (push) Has been skipped

This commit is contained in:
2026-03-20 13:43:11 +01:00
parent e470189f44
commit b8015d9cdd
8 changed files with 459 additions and 198 deletions

View File

@@ -4,6 +4,7 @@
Все сериализаторы read-only, так как данные загружаются только через парсеры.
"""
from apps.parsers.fns_upload import FNS_XLSX_FILENAME_RE
from apps.parsers.models import (
FinancialReport,
FinancialReportLine,
@@ -269,12 +270,8 @@ class FNSFileUploadSerializer(serializers.Serializer):
def validate_files(self, value):
"""Валидация файлов."""
import re
pattern = re.compile(r"^fin_\d+_\d{13,15}\.xlsx$")
for file in value:
if not pattern.match(file.name):
if not FNS_XLSX_FILENAME_RE.match(file.name):
raise serializers.ValidationError(
f"Неверный формат имени файла: {file.name}. "
"Ожидается: fin_{{id}}_{{ogrn}}.xlsx"
@@ -283,6 +280,17 @@ class FNSFileUploadSerializer(serializers.Serializer):
return value
class FNSZipUploadSerializer(serializers.Serializer):
"""Сериализатор для загрузки ZIP архива с FNS Excel файлами."""
file = serializers.FileField(help_text="ZIP архив с файлами fin_*.xlsx")
def validate_file(self, value):
if not value.name.lower().endswith(".zip"):
raise serializers.ValidationError("Поддерживаются только ZIP архивы")
return value
# =============================================================================
# Служебные модели
# =============================================================================