"""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", ]