Files
state-corp-backend/src/apps/organization/contract_serializers.py
Aleksandr Meshchriakov d6ca9f5399
All checks were successful
CI/CD Pipeline / Code Quality Checks (push) Successful in 2m6s
CI/CD Pipeline / Run Tests (push) Successful in 4m33s
CI/CD Pipeline / Build and Push Dev Images (push) Successful in 38s
CI/CD Pipeline / Deploy Dev via Compose (push) Successful in 32s
fix: correct organization analytics aggregation
2026-07-28 15:27:59 +02:00

383 lines
15 KiB
Python

"""Serializer contracts for OpenAPI documentation."""
from apps.organization.serializers import (
CorporationScopeDictionarySerializer,
OrganizationCatalogDetailSerializer,
OrganizationCatalogListSerializer,
)
from rest_framework import serializers
class OrganizationCatalogListResponseSerializer(serializers.Serializer):
count = serializers.IntegerField()
next = serializers.CharField(allow_null=True)
previous = serializers.CharField(allow_null=True)
results = OrganizationCatalogListSerializer(many=True)
class CorporationScopeDictionaryResponseSerializer(serializers.Serializer):
results = CorporationScopeDictionarySerializer(many=True)
class FinancialSummaryMetricSerializer(serializers.Serializer):
amount = serializers.IntegerField()
previous_amount = serializers.IntegerField()
delta_percent = serializers.FloatField()
class FinancialSummaryReportPeriodSerializer(serializers.Serializer):
year = serializers.IntegerField()
quarter = serializers.IntegerField(allow_null=True)
class FinancialSummaryResponseSerializer(serializers.Serializer):
organization_id = serializers.UUIDField()
report_period = FinancialSummaryReportPeriodSerializer()
data_available = serializers.BooleanField()
message = serializers.CharField(allow_null=True)
revenue = FinancialSummaryMetricSerializer()
net_profit = FinancialSummaryMetricSerializer()
taxes_paid = FinancialSummaryMetricSerializer()
insurance_contributions = FinancialSummaryMetricSerializer()
class EconomicsKpiSerializer(serializers.Serializer):
value = serializers.IntegerField()
previous_value = serializers.IntegerField()
delta_value = serializers.IntegerField()
delta_percent = serializers.FloatField()
direction = serializers.ChoiceField(choices=("up", "down", "unchanged"))
unit = serializers.CharField()
class EconomicsKpisSerializer(serializers.Serializer):
revenue = EconomicsKpiSerializer(required=False)
ebitda = EconomicsKpiSerializer(required=False)
net_profit = EconomicsKpiSerializer(required=False)
revenue_per_employee = EconomicsKpiSerializer(required=False)
gross_profit = EconomicsKpiSerializer(required=False)
operating_profit = EconomicsKpiSerializer(required=False)
net_debt = EconomicsKpiSerializer(required=False)
loans = EconomicsKpiSerializer(required=False)
assets = EconomicsKpiSerializer(required=False)
capex = EconomicsKpiSerializer(required=False)
rd_expenses = EconomicsKpiSerializer(required=False)
class EconomicsPointSerializer(serializers.Serializer):
period = serializers.IntegerField()
value = serializers.IntegerField()
class EconomicsMetricSeriesSerializer(serializers.Serializer):
metric = serializers.CharField()
unit = serializers.CharField()
points = EconomicsPointSerializer(many=True)
class EconomicsRatioSerializer(serializers.Serializer):
period = serializers.IntegerField()
ros = serializers.FloatField()
roa = serializers.FloatField(allow_null=True)
roe = serializers.FloatField(allow_null=True)
ebitda_margin = serializers.FloatField()
class EconomicsRatioNormativesSerializer(serializers.Serializer):
ros = serializers.FloatField(allow_null=True)
roa = serializers.FloatField(allow_null=True)
roe = serializers.FloatField(allow_null=True)
ebitda_margin = serializers.FloatField(allow_null=True)
class EconomicsReportPeriodSerializer(serializers.Serializer):
year = serializers.IntegerField()
report_half_year = serializers.IntegerField(allow_null=True)
class EconomicsRatiosReportPeriodSerializer(serializers.Serializer):
financial_form = serializers.CharField()
report_year = serializers.IntegerField()
report_quarter = serializers.IntegerField(allow_null=True)
class EconomicsResponseSerializer(serializers.Serializer):
organization_id = serializers.UUIDField()
group = serializers.CharField()
periods = serializers.ListField(child=serializers.IntegerField())
report_periods = EconomicsReportPeriodSerializer(many=True)
ratios_report_period = EconomicsRatiosReportPeriodSerializer(allow_null=True)
data_available = serializers.BooleanField()
message = serializers.CharField(allow_null=True)
kpis = EconomicsKpisSerializer()
series = EconomicsMetricSeriesSerializer(many=True)
ratios = EconomicsRatioSerializer(many=True)
ratio_normatives = EconomicsRatioNormativesSerializer()
class PersonnelHeadcountSerializer(serializers.Serializer):
average_employees = serializers.IntegerField()
avg_payroll_employees = serializers.IntegerField()
payroll_fund = serializers.IntegerField()
production_workers = serializers.IntegerField(allow_null=True)
engineering_workers = serializers.IntegerField(allow_null=True)
administrative_workers = serializers.IntegerField(allow_null=True)
workers_needed = serializers.IntegerField(allow_null=True)
class PersonnelAgeDistributionSerializer(serializers.Serializer):
age_group = serializers.CharField()
employees_count = serializers.IntegerField()
class PersonnelHistorySerializer(serializers.Serializer):
year = serializers.IntegerField()
report_month = serializers.IntegerField(allow_null=True)
average_employees = serializers.IntegerField()
avg_payroll_employees = serializers.IntegerField()
average_age = serializers.FloatField(allow_null=True)
payroll_fund = serializers.IntegerField()
class PersonnelResponseSerializer(serializers.Serializer):
organization_id = serializers.UUIDField()
report_year = serializers.IntegerField()
report_month = serializers.IntegerField(allow_null=True)
average_age = serializers.FloatField(allow_null=True)
headcount = PersonnelHeadcountSerializer()
age_distribution = PersonnelAgeDistributionSerializer(many=True)
history = PersonnelHistorySerializer(many=True)
class EquipmentSummarySerializer(serializers.Serializer):
total_equipment = serializers.IntegerField()
machine_tools_and_equipment = serializers.IntegerField()
domestic_equipment = serializers.IntegerField(allow_null=True)
imported_equipment = serializers.IntegerField()
physical_wear_percent = serializers.FloatField()
weighted_wear_percent = serializers.FloatField(allow_null=True)
utilization_rate = serializers.FloatField(allow_null=True)
avg_shift_work = serializers.FloatField(allow_null=True)
equipment_needed = serializers.IntegerField(allow_null=True)
average_age_years = serializers.FloatField()
commissioned_equipment = serializers.IntegerField()
decommissioned_equipment = serializers.IntegerField()
class EquipmentAgeDistributionSerializer(serializers.Serializer):
bucket = serializers.CharField()
units_count = serializers.IntegerField()
imported_equipment = serializers.IntegerField(allow_null=True)
utilization_rate = serializers.FloatField(allow_null=True)
lease_share_itn_percent = serializers.FloatField(allow_null=True)
weighted_wear_percent = serializers.FloatField(allow_null=True)
weighted_load_factor = serializers.FloatField(allow_null=True)
class EquipmentCategorySerializer(serializers.Serializer):
category = serializers.CharField()
total_equipment = serializers.IntegerField()
domestic_equipment = serializers.IntegerField(allow_null=True)
imported_equipment = serializers.IntegerField()
physical_wear_percent = serializers.FloatField(allow_null=True)
weighted_wear_percent = serializers.FloatField(allow_null=True)
utilization_rate = serializers.FloatField(allow_null=True)
lease_share_itn_percent = serializers.FloatField(allow_null=True)
class EquipmentDynamicsPointSerializer(serializers.Serializer):
period = serializers.IntegerField()
value = serializers.IntegerField()
class EquipmentDynamicsSeriesSerializer(serializers.Serializer):
metric = serializers.CharField()
label = serializers.CharField()
points = EquipmentDynamicsPointSerializer(many=True)
class EquipmentResponseSerializer(serializers.Serializer):
organization_id = serializers.UUIDField()
report_year = serializers.IntegerField()
summary = EquipmentSummarySerializer()
age_distribution = EquipmentAgeDistributionSerializer(many=True)
categories = EquipmentCategorySerializer(many=True)
dynamics_series = EquipmentDynamicsSeriesSerializer(many=True)
class ProductsSummarySerializer(serializers.Serializer):
military_output_amount = serializers.IntegerField()
civilian_output_amount = serializers.IntegerField()
hightech_output_amount = serializers.IntegerField()
rd_volume_amount = serializers.IntegerField()
shipped_goods_amount = serializers.IntegerField()
class ProductsProductionSeriesSerializer(serializers.Serializer):
period = serializers.CharField()
military_output_amount = serializers.IntegerField()
civilian_output_amount = serializers.IntegerField()
hightech_output_amount = serializers.IntegerField()
class ProductsSalesSeriesSerializer(serializers.Serializer):
period = serializers.CharField()
military_domestic_amount = serializers.IntegerField()
military_export_amount = serializers.IntegerField()
civilian_domestic_amount = serializers.IntegerField()
civilian_export_amount = serializers.IntegerField()
class ProductsRdVolumeSeriesSerializer(serializers.Serializer):
period = serializers.CharField()
rd_volume_amount = serializers.IntegerField()
class ProductsShippedGoodsSeriesSerializer(serializers.Serializer):
period = serializers.CharField()
shipped_goods_amount = serializers.IntegerField()
class ProductsTableRowSerializer(serializers.Serializer):
period = serializers.CharField()
military_output_amount = serializers.IntegerField()
civilian_output_amount = serializers.IntegerField()
hightech_output_amount = serializers.IntegerField()
rd_volume_amount = serializers.IntegerField()
shipped_goods_amount = serializers.IntegerField()
class ProductsResponseSerializer(serializers.Serializer):
organization_id = serializers.UUIDField()
report_year = serializers.IntegerField()
frequency = serializers.CharField()
price_mode = serializers.CharField()
summary_period = serializers.CharField()
summary = ProductsSummarySerializer()
production_series = ProductsProductionSeriesSerializer(many=True)
sales_series = ProductsSalesSeriesSerializer(many=True)
rd_volume_series = ProductsRdVolumeSeriesSerializer(many=True)
shipped_goods_series = ProductsShippedGoodsSeriesSerializer(many=True)
table = ProductsTableRowSerializer(many=True)
class RiskProfileResponseSerializer(serializers.Serializer):
organization_id = serializers.UUIDField()
financial_reports_available = serializers.BooleanField()
tax_reports_available = serializers.BooleanField()
in_defense_unreliable_suppliers_registry = serializers.BooleanField()
in_275_fz_registry = serializers.BooleanField()
bankruptcy_messages_found = serializers.BooleanField()
risk_level = serializers.CharField()
updated_at = serializers.CharField()
class ForecastRowSerializer(serializers.Serializer):
year = serializers.IntegerField()
revenue_amount = serializers.IntegerField()
net_profit_amount = serializers.IntegerField()
margin_percent = serializers.FloatField()
class ForecastSummarySerializer(serializers.Serializer):
revenue_cagr_percent = serializers.FloatField()
net_profit_cagr_percent = serializers.FloatField()
horizon_margin_percent = serializers.FloatField()
horizon_revenue_amount = serializers.IntegerField()
class ForecastProductivityRowSerializer(serializers.Serializer):
year = serializers.IntegerField()
revenue_per_employee_amount = serializers.IntegerField()
class ForecastHeadcountRowSerializer(serializers.Serializer):
year = serializers.IntegerField()
average_employees = serializers.IntegerField()
class ForecastInvestmentRowSerializer(serializers.Serializer):
year = serializers.IntegerField()
capex_amount = serializers.IntegerField()
class ForecastRdRowSerializer(serializers.Serializer):
year = serializers.IntegerField()
rd_volume_amount = serializers.IntegerField()
class ForecastTableRowSerializer(serializers.Serializer):
year = serializers.IntegerField()
revenue_amount = serializers.IntegerField()
net_profit_amount = serializers.IntegerField()
margin_percent = serializers.FloatField()
revenue_per_employee_amount = serializers.IntegerField()
average_employees = serializers.IntegerField()
capex_amount = serializers.IntegerField()
rd_volume_amount = serializers.IntegerField()
class ForecastRiskFactorSerializer(serializers.Serializer):
code = serializers.CharField()
name = serializers.CharField()
impact_level = serializers.CharField()
probability_level = serializers.CharField()
comment = serializers.CharField()
class ForecastResponseSerializer(serializers.Serializer):
organization_id = serializers.UUIDField()
scenario = serializers.CharField()
horizon_years = serializers.IntegerField()
base_year = serializers.IntegerField()
summary = ForecastSummarySerializer()
forecast = ForecastRowSerializer(many=True)
table = ForecastTableRowSerializer(many=True)
productivity_series = ForecastProductivityRowSerializer(many=True)
headcount_series = ForecastHeadcountRowSerializer(many=True)
investment_series = ForecastInvestmentRowSerializer(many=True)
rd_series = ForecastRdRowSerializer(many=True)
risk_factors = ForecastRiskFactorSerializer(many=True)
opportunity_factors = ForecastRiskFactorSerializer(many=True)
class DashboardDistributionSerializer(serializers.Serializer):
cluster = serializers.CharField()
cluster_label = serializers.CharField(required=False)
organizations_share_percent = serializers.FloatField()
class DashboardExecutorsSerializer(serializers.Serializer):
cluster = serializers.CharField()
executors_count = serializers.IntegerField()
class DashboardHeadcountGrowthSerializer(serializers.Serializer):
cluster = serializers.CharField()
from_year = serializers.IntegerField(allow_null=True)
to_year = serializers.IntegerField(allow_null=True)
growth_percent = serializers.FloatField()
class DashboardResponseSerializer(serializers.Serializer):
corporation_scope = serializers.CharField(allow_null=True)
distribution_by_cluster = DashboardDistributionSerializer(many=True)
executors_by_cluster = DashboardExecutorsSerializer(many=True)
headcount_growth_by_cluster = DashboardHeadcountGrowthSerializer(many=True)
bankruptcy_free_share_by_cluster = DashboardDistributionSerializer(many=True)
__all__ = [
"CorporationScopeDictionaryResponseSerializer",
"EconomicsResponseSerializer",
"EquipmentResponseSerializer",
"FinancialSummaryResponseSerializer",
"ForecastResponseSerializer",
"OrganizationCatalogDetailSerializer",
"OrganizationCatalogListResponseSerializer",
"PersonnelResponseSerializer",
"ProductsResponseSerializer",
"RiskProfileResponseSerializer",
"DashboardResponseSerializer",
]