383 lines
15 KiB
Python
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",
|
|
]
|