§
    Š›j3"  ã            	      ó&  — U d Z ddlmZ ddlmZmZ ddlmZ ddlm	Z	 ddl
mZmZmZmZ ddlmZ ddlmZ  ed	¦  «         ed
¦  «         ed¦  «         ed¦  «         ed¦  «         ed¦  «         ed¦  «        dœZded<    G d„ d¦  «        ZdS )zsDomain Service for Heavy Equipment & Fuel Telematics.
Strict Decimal Precision & Hexagonal Architecture COMPLIANT.
é    )Úannotations)ÚdateÚ	timedelta)ÚDecimal)ÚAny)ÚEquipmentTypeEnumÚFuelEfficiencyAssessmentÚFuelTelematicsDashboardDataÚMaintenanceScheduleRecord)ÚEquipmentRepositoryPort)ÚPostgresEquipmentRepositoryz18.5000ú19.0000z16.0000z24.0000z14.0000)zEXC-KOMATSU-01úEXC-KOBELCO-02zEXC-DOOSAN-03zTRK-HOWO-01zTRK-HOWO-02zTRK-HOWO-03zROL-SAKAI-01zdict[str, Decimal]ÚSTANDARD_NORMS_L_PER_HOURc                  ó4   — e Zd ZdZ	 	 ddd	„Zdd„Z	 ddd„ZdS )ÚFuelTelematicsServicezJEvaluates equipment fuel efficiency against 2026 economic-technical norms.NÚrepoúEquipmentRepositoryPort | NoneÚpostgres_clientú
Any | NoneÚreturnÚNonec                ó>   — |pt          ¦   «         | _        || _        d S ©N)r   r   r   )Úselfr   r   s      úPC:\Projects\DSCons\app\modules\operations\application\fuel_telematics_service.pyÚ__init__zFuelTelematicsService.__init__%   s%   € ð
 Ð9Õ7Ñ9Ô9ˆŒ	Ø.ˆÔÐÐó    ÚcodeÚstrÚnamer   c                ó:  — |                      ¦   «         }|                     ¦   «         }d|v sd|v sd|v sd|v rt          j        S d|v sd|v sd|v sd|v sd	|v rt          j        S d
|v sd|v sd|v rt          j        S d|v sd|v rt          j        S t          j        S )NÚTRUu   táº£iÚbenÚhowoÚEXCu   Ä‘Ã ou   xÃºcÚkomatsuÚkobelcoÚROLÚluÚsakaiÚBULu   á»§i)ÚupperÚlowerr   Ú
DUMP_TRUCKÚ	EXCAVATORÚROLLERÚ	BULLDOZERÚOTHER)r   r   r!   Ú
code_upperÚ
name_lowers        r   Ú_determine_equipment_typez/FuelTelematicsService._determine_equipment_type-   së   € Ø—Z’Z‘\”\ˆ
Ø—Z’Z‘\”\ˆ
Ø�JÐÐ '¨ZÐ"7Ð"7¸5ÀJÐ;NÐ;NÐRXÐ\fÐRfÐRfÝ$Ô/Ð/Ø�JÐÐ '¨ZÐ"7Ð"7¸6ÀZÐ;OÐ;OÐS\Ð`jÐSjÐSjÐnwð  |Fð  oFð  oFÝ$Ô.Ð.Ø�JÐÐ $¨*Ð"4Ð"4¸À:Ð8MÐ8MÝ$Ô+Ð+Ø�JÐÐ &¨JÐ"6Ð"6Ý$Ô.Ð.Ý Ô&Ð&r   Ú
as_of_dateúdate | Noner
   c                óv  — |pt          j        ¦   «         }| j                             ¦   «         }g }g }d}|D �]}t	          |                     d¦  «        pd¦  «        }t	          |                     d¦  «        p|¦  «        }	t          t	          |                     d¦  «        pd¦  «        ¦  «        }
|
t          d¦  «        k    r|t          v rt          |         }
t          t	          |                     d¦  «        pd¦  «        ¦  «        }t          t	          |                     d	¦  «        pd¦  «        ¦  «        }t          t	          |                     d
¦  «        pd¦  «        ¦  «        }||k    r||z
  nF|
t          d¦  «        k    r%||
z                       t          d¦  «        ¦  «        nt          d¦  «        }|t          d¦  «        k    r%||z                       t          d¦  «        ¦  «        n|
}|
t          d¦  «        k    r8||
z
  |
z  t          d¦  «        z                       t          d¦  «        ¦  «        nt          d¦  «        }d}d}|t          d¦  «        k    rd}d}n-|t          d¦  «        k    rd}d}n|t          d¦  «        k     rd}|  	                    ||	¦  «        }t          ||	||
                     t          d¦  «        ¦  «        |                     t          d¦  «        ¦  «        |                     t          d¦  «        ¦  «        ||¬¦  «        }|                     |¦  «         |dk    rd}|t          d¦  «        k    r|nt          d¦  «        }|t          d¦  «        z                        t          d¦  «        ¦  «        }|                     t          ||	|t          d¬¦  «        z
  t          t          d¦  «        |t          d¦  «        z
  ¦  «        |                     t          d¦  «        ¦  «        |t          d ¦  «        |t          d!¬¦  «        z   |t          d"¬¦  «        z   dd¬#¦  «        ¦  «         �Œ!|sï|                     t          dd$t          j        t          d%¦  «        t          d&¦  «        t          d'¦  «        dd¬¦  «        ¦  «         |                     t          dd(|t          d!¬¦  «        z
  t          d)¦  «        t          d*¦  «        t          d+¦  «        t          d,¦  «        |t          d"¬¦  «        z   |t          d-¬¦  «        z   dd¬#¦  «        ¦  «         t#          |¦  «        }t%          d.„ |D ¦   «         t          d¦  «        ¦  «        }t          t	          |d/z  ¦  «        ¦  «        }|t          d¦  «        k    r%||z                       t          d¦  «        ¦  «        nt          d¦  «        }t'          |||                     t          d¦  «        ¦  «        |                     t          d¦  «        ¦  «        |||¬0¦  «        S )1NFÚequipment_codeÚ Úequipment_nameÚfuel_norm_per_hourr   z0.0000Útotal_litersÚmax_odoÚmin_odoz0.1z0.0001z100.0000ÚNORMALu9   Ä�á»™ng cÆ¡ hoáº¡t Ä‘á»™ng Ä‘áº¡t hiá»‡u suáº¥t tá»‘i Æ°uz25.0000ÚCRITICALuX   BÃ¡o Ä‘á»™ng: TiÃªu hao nhiÃªn liá»‡u báº¥t thÆ°á»�ng, cáº§n dá»«ng mÃ¡y kiá»ƒm Ä‘á»‹nh.z15.0000ÚWARNING_OVERCONSUMPTIONuR   VÆ°á»£t Ä‘á»‹nh má»©c >15%. Cáº§n kiá»ƒm tra há»‡ thá»‘ng kim phun vÃ  lá»�c giÃ³.z-5.0000ul   TiÃªu hao nhiÃªn liá»‡u tháº¥p hÆ¡n Ä‘á»‹nh má»©c (Tiáº¿t kiá»‡m nhiÃªn liá»‡u hoáº·c mÃ¡y cháº¡y non táº£i))r:   r<   Úequipment_typeÚstandard_norm_per_hourÚactual_liters_per_hourÚvariance_percentageÚstatusÚrecommendationr   Tz	1000.0000z250.0000é   )Údaysz200.0000z50.0000é<   éZ   )r:   r<   Úlast_maintenance_dateÚlast_maintenance_hoursÚcurrent_engine_hoursÚnext_maintenance_due_hoursÚhours_remainingÚinspection_expiry_dateÚinsurance_expiry_dateÚis_inspection_urgentÚis_maintenance_dueu/   MÃ¡y Ä�Ã o BÃ¡nh XÃ­ch Kobelco SK200-8 (0.8mÂ³)r   z22.5000z18.4200u   MÃ¡y Ä�Ã o Kobelco SK200-8z	3750.0000z	4010.0000z	4000.0000z-10.0000én   c              3  óD   K  — | ]}|j         t          d ¦  «        z  V — ŒdS )z8.0000N)rF   r   )Ú.0Úas     r   ú	<genexpr>z>FuelTelematicsService.get_dashboard_summary.<locals>.<genexpr>«   s2   è è € ÐOÐO¸aˆQÔ%­°Ñ(9Ô(9Ñ9ÐOÐOÐOÐOÐOÐOr   é   )r7   Útotal_active_equipmentÚtotal_fuel_consumed_litersÚtotal_operating_hoursÚ#average_consumption_liters_per_hourÚassessmentsÚmaintenance_schedules)r   Útodayr   Úget_fleet_equipment_summaryr    Úgetr   r   Úquantizer6   r	   Úappendr   r   Úmaxr   r0   ÚlenÚsumr
   )r   r7   Útarget_dateÚfleet_itemsra   rb   Úhas_kobelco_test_recordÚitemr   r!   ÚnormÚlitersr?   r@   ÚhoursÚactual_rateÚvariancerH   rI   Úeq_typeÚ
assessmentÚ
curr_hoursÚnext_dueÚtotal_activeÚ
total_fuelÚtotal_hoursÚavg_conss                              r   Úget_dashboard_summaryz+FuelTelematicsService.get_dashboard_summary:   sM  € ð !Ð0¥D¤J¡L¤Lˆð ”i×;Ò;Ñ=Ô=ˆà68ˆØACÐà"'Ðàð B	ñ B	ˆDÝ�t—x’xÐ 0Ñ1Ô1Ð7°RÑ8Ô8ˆDÝ�t—x’xÐ 0Ñ1Ô1Ð9°TÑ:Ô:ˆDÝ�3˜tŸxšxÐ(<Ñ=Ô=ÐBÀÑCÔCÑDÔDˆDØ•w˜xÑ(Ô(Ò(Ð(¨TÕ5NÐ-NÐ-NÝ0°Ô6�å�S §¢¨.Ñ!9Ô!9Ð!>¸QÑ?Ô?Ñ@Ô@ˆFÝ�c $§(¢(¨9Ñ"5Ô"5Ð":¸Ñ;Ô;Ñ<Ô<ˆGÝ�c $§(¢(¨9Ñ"5Ô"5Ð":¸Ñ;Ô;Ñ<Ô<ˆGØ+2°WÒ+<Ð+<�W˜wÑ&Ð&Ø<@Å7È8ÑCTÔCTÒ<TÐ<T�˜$‘×(Ò(­°©¬Ñ8Ô8Ð8ÕZaÐbjÑZkÔZkð ð KPÕRYÐZbÑRcÔRcÒJcÐJc˜6 E™>×3Ò3µG¸HÑ4EÔ4EÑFÔFÐFÐimˆKð �' (Ñ+Ô+Ò+Ð+ð  Ñ$¨Ñ,­w°zÑ/BÔ/BÑB×LÒLÍWÐU]ÑM^ÔM^Ñ_Ô_Ð_å˜XÑ&Ô&ð ð ˆFØXˆNØ�' )Ñ,Ô,Ò,Ð,Ø#�Ø!{��Ø�G IÑ.Ô.Ò.Ð.Ø2�Ø!u��Ø�G IÑ.Ô.Ò.Ð.ð "P�à×4Ò4°T¸4Ñ@Ô@ˆGå1Ø#Ø#Ø&Ø'+§}¢}µW¸XÑ5FÔ5FÑ'GÔ'GØ'2×';Ò';½GÀHÑ<MÔ<MÑ'NÔ'NØ$,×$5Ò$5µg¸hÑ6GÔ6GÑ$HÔ$HØØ-ð	ñ 	ô 	ˆJð ×Ò˜zÑ*Ô*Ð*àÐ'Ò'Ð'Ø*.Ð'ð %,­g°hÑ.?Ô.?Ò$?Ð$?˜˜ÅWÈ[ÑEYÔEYˆJØ"¥W¨ZÑ%8Ô%8Ñ8×BÒBÅ7È8ÑCTÔCTÑUÔUˆHØ!×(Ò(Ý)Ø#'Ø#'Ø*5½	ÀrÐ8JÑ8JÔ8JÑ*JÝ+.­w°xÑ/@Ô/@À*ÍwÐWaÑObÔObÑBbÑ+cÔ+cØ)3×)<Ò)<½WÀXÑ=NÔ=NÑ)OÔ)OØ/7Ý$+¨IÑ$6Ô$6Ø+6½ÈÐ9KÑ9KÔ9KÑ+KØ*5½	ÀrÐ8JÑ8JÔ8JÑ*JØ).Ø',ðñ ô ñô ð ñ ð" 'ð 	Ø×ÒÝ(Ø#3Ø#TÝ#4Ô#>Ý+2°9Ñ+=Ô+=Ý+2°9Ñ+=Ô+=Ý(/°	Ñ(:Ô(:Ø4Ø#wð	ñ 	ô 	ñô ð ð "×(Ò(Ý)Ø#3Ø#?Ø*5½	ÀrÐ8JÑ8JÔ8JÑ*JÝ+2°;Ñ+?Ô+?Ý)0°Ñ)=Ô)=Ý/6°{Ñ/CÔ/CÝ$+¨JÑ$7Ô$7Ø+6½ÈÐ9KÑ9KÔ9KÑ+KØ*5½	ÀsÐ8KÑ8KÔ8KÑ*KØ).Ø'+ðñ ô ñô ð õ  ˜;Ñ'Ô'ˆÝØOÐOÀ;ÐOÑOÔOÝ�HÑÔñ
ô 
ˆ
õ �c ,°Ñ"2Ñ3Ô3Ñ4Ô4ˆð �W XÑ.Ô.Ò.Ð.ð ˜+Ñ%×/Ò/µ¸Ñ0AÔ0AÑBÔBÐBå˜Ñ"Ô"ð 	õ +Ø"Ø#/Ø'1×':Ò':½7À8Ñ;LÔ;LÑ'MÔ'MØ"-×"6Ò"6µw¸xÑ7HÔ7HÑ"IÔ"IØ08Ø#Ø"7ð
ñ 
ô 
ð 	
r   )NN)r   r   r   r   r   r   )r   r    r!   r    r   r   r   )r7   r8   r   r
   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r6   r|   © r   r   r   r   "   st   € € € € € ØTÐTð 04Ø&*ð/ð /ð /ð /ð /ð'ð 'ð 'ð 'ð )-ðC
ð C
ð C
ð C
ð C
ð C
ð C
r   r   N)r€   Ú
__future__r   Údatetimer   r   Údecimalr   Útypingr   Ú"app.models.fuel_telematics_schemasr   r	   r
   r   Ú=app.modules.operations.domain.ports.equipment_repository_portr   ÚGapp.modules.operations.infrastructure.repositories.equipment_repositoryr   r   Ú__annotations__r   r�   r   r   ú<module>rŠ      s�  ððð ð ð #Ð "Ð "Ð "Ð "Ð "à $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð bÐ aÐ aÐ aÐ aÐ aðð ð ð ð ð ð �g˜iÑ(Ô(Ø�g˜iÑ(Ô(Ø�W˜YÑ'Ô'Ø�7˜9Ñ%Ô%Ø�7˜9Ñ%Ô%Ø�7˜9Ñ%Ô%Ø�G˜IÑ&Ô&ð1ð 1Ð ð ð ð ñ ð[
ð [
ð [
ð [
ð [
ñ [
ô [
ð [
ð [
ð [
r   