feat: address QA analytics and report upload feedback
All checks were successful
CI/CD Pipeline / Run Tests (push) Successful in 2m26s
CI/CD Pipeline / Code Quality Checks (push) Successful in 5m3s
CI/CD Pipeline / Build and Push Dev Images (push) Successful in 32s
CI/CD Pipeline / Deploy Dev via Compose (push) Successful in 31s

This commit is contained in:
2026-07-19 13:32:56 +02:00
parent b025f12856
commit 9eb41f6fd4
28 changed files with 938 additions and 82 deletions

View File

@@ -33,6 +33,8 @@ class FinancialSummaryReportPeriodSerializer(serializers.Serializer):
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()
@@ -41,6 +43,10 @@ class FinancialSummaryResponseSerializer(serializers.Serializer):
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()
@@ -48,6 +54,7 @@ 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)
@@ -87,6 +94,8 @@ class EconomicsResponseSerializer(serializers.Serializer):
organization_id = serializers.UUIDField()
group = serializers.CharField()
periods = serializers.ListField(child=serializers.IntegerField())
data_available = serializers.BooleanField()
message = serializers.CharField(allow_null=True)
kpis = EconomicsKpisSerializer()
series = EconomicsMetricSeriesSerializer(many=True)
ratios = EconomicsRatioSerializer(many=True)
@@ -111,6 +120,9 @@ class PersonnelAgeDistributionSerializer(serializers.Serializer):
class PersonnelHistorySerializer(serializers.Serializer):
year = serializers.IntegerField()
average_employees = serializers.IntegerField()
avg_payroll_employees = serializers.IntegerField()
average_age = serializers.FloatField()
payroll_fund = serializers.IntegerField()
class PersonnelResponseSerializer(serializers.Serializer):
@@ -124,6 +136,7 @@ class PersonnelResponseSerializer(serializers.Serializer):
class EquipmentSummarySerializer(serializers.Serializer):
total_equipment = serializers.IntegerField()
machine_tools_and_equipment = serializers.IntegerField()
domestic_equipment = serializers.IntegerField()
imported_equipment = serializers.IntegerField()
physical_wear_percent = serializers.FloatField()
@@ -139,6 +152,10 @@ class EquipmentSummarySerializer(serializers.Serializer):
class EquipmentAgeDistributionSerializer(serializers.Serializer):
bucket = serializers.CharField()
units_count = serializers.IntegerField()
imported_equipment = serializers.IntegerField()
utilization_rate = serializers.FloatField()
lease_share_itn_percent = serializers.FloatField(allow_null=True)
weighted_wear_percent = serializers.FloatField()
class EquipmentCategorySerializer(serializers.Serializer):
@@ -320,6 +337,8 @@ class DashboardExecutorsSerializer(serializers.Serializer):
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()