feat(api): полное API для всех парсеров с документацией

This commit is contained in:
2026-02-01 15:19:21 +01:00
parent eacb1527c4
commit efa5c3ae34
8 changed files with 840 additions and 141 deletions

View File

@@ -1,13 +1,164 @@
"""
Сериализаторы для приложения парсеров.
Все сериализаторы read-only, так как данные загружаются только через парсеры.
"""
from apps.parsers.models import FinancialReport, FinancialReportLine
from apps.parsers.models import (
FinancialReport,
FinancialReportLine,
IndustrialCertificateRecord,
InspectionRecord,
ManufacturerRecord,
ParserLoadLog,
ProcurementRecord,
Proxy,
)
from rest_framework import serializers
# =============================================================================
# Минпромторг - Сертификаты промышленного производства
# =============================================================================
class IndustrialCertificateSerializer(serializers.ModelSerializer):
"""
Сертификат промышленного производства РФ.
Данные загружаются из Минпромторга.
"""
class Meta:
model = IndustrialCertificateRecord
fields = [
"id",
"load_batch",
"issue_date",
"certificate_number",
"expiry_date",
"certificate_file_url",
"organisation_name",
"inn",
"ogrn",
"created_at",
"updated_at",
]
read_only_fields = fields
# =============================================================================
# Минпромторг - Реестр производителей
# =============================================================================
class ManufacturerSerializer(serializers.ModelSerializer):
"""
Производитель из реестра Минпромторга.
Данные загружаются из Минпромторга.
"""
class Meta:
model = ManufacturerRecord
fields = [
"id",
"load_batch",
"full_legal_name",
"inn",
"ogrn",
"address",
"created_at",
"updated_at",
]
read_only_fields = fields
# =============================================================================
# Единый реестр проверок (proverki.gov.ru)
# =============================================================================
class InspectionSerializer(serializers.ModelSerializer):
"""
Проверка из Единого реестра проверок.
Поддерживает ФЗ-294 и ФЗ-248.
"""
class Meta:
model = InspectionRecord
fields = [
"id",
"load_batch",
"registration_number",
"inn",
"ogrn",
"organisation_name",
"control_authority",
"inspection_type",
"inspection_form",
"start_date",
"end_date",
"status",
"legal_basis",
"result",
"is_federal_law_248",
"data_year",
"data_month",
"created_at",
"updated_at",
]
read_only_fields = fields
# =============================================================================
# Государственные закупки (zakupki.gov.ru)
# =============================================================================
class ProcurementSerializer(serializers.ModelSerializer):
"""
Государственная закупка из ЕИС zakupki.gov.ru.
Поддерживает 44-ФЗ и 223-ФЗ.
"""
class Meta:
model = ProcurementRecord
fields = [
"id",
"load_batch",
"purchase_number",
"purchase_name",
"customer_inn",
"customer_kpp",
"customer_ogrn",
"customer_name",
"max_price",
"currency_code",
"placement_method",
"publish_date",
"end_date",
"status",
"law_type",
"purchase_object_info",
"href",
"region_code",
"data_year",
"data_month",
"created_at",
"updated_at",
]
read_only_fields = fields
# =============================================================================
# ФНС - Бухгалтерская отчетность
# =============================================================================
class FinancialReportLineSerializer(serializers.ModelSerializer):
"""Сериализатор строки финансового отчета."""
"""Строка финансового отчета."""
class Meta:
model = FinancialReportLine
@@ -23,7 +174,11 @@ class FinancialReportLineSerializer(serializers.ModelSerializer):
class FinancialReportSerializer(serializers.ModelSerializer):
"""Сериализатор финансового отчета."""
"""
Финансовый отчет ФНС.
Данные загружаются из Excel файлов.
"""
lines_count = serializers.SerializerMethodField()
@@ -50,7 +205,7 @@ class FinancialReportSerializer(serializers.ModelSerializer):
class FinancialReportDetailSerializer(FinancialReportSerializer):
"""Сериализатор финансового отчета с детализацией строк."""
"""Финансовый отчет с детализацией строк."""
lines = FinancialReportLineSerializer(many=True, read_only=True)
@@ -59,7 +214,11 @@ class FinancialReportDetailSerializer(FinancialReportSerializer):
class FNSFileUploadSerializer(serializers.Serializer):
"""Сериализатор для загрузки файлов FNS."""
"""
Сериализатор для загрузки файлов FNS.
Принимает список Excel файлов в формате fin_{id}_{ogrn}.xlsx
"""
files = serializers.ListField(
child=serializers.FileField(),
@@ -81,3 +240,55 @@ class FNSFileUploadSerializer(serializers.Serializer):
)
return value
# =============================================================================
# Служебные модели
# =============================================================================
class ParserLoadLogSerializer(serializers.ModelSerializer):
"""
Лог загрузки парсера.
Информация о каждой загрузке данных из внешнего источника.
"""
source_display = serializers.CharField(source="get_source_display", read_only=True)
class Meta:
model = ParserLoadLog
fields = [
"id",
"batch_id",
"source",
"source_display",
"records_count",
"status",
"error_message",
"created_at",
"updated_at",
]
read_only_fields = fields
class ProxySerializer(serializers.ModelSerializer):
"""
Прокси-сервер для парсеров.
Используется для обхода блокировок при парсинге.
"""
class Meta:
model = Proxy
fields = [
"id",
"address",
"is_active",
"last_used_at",
"fail_count",
"description",
"created_at",
"updated_at",
]
read_only_fields = fields