§
    Ó‹›j'  ã                  óp   — 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
 ddlmZ  G d„ d	¦  «        Zd
S )zzEquipment Efficiency and Fuel Consumption Analytics Service.
Strict Decimal Precision & Hexagonal Architecture COMPLIANT.
é    )Úannotations)ÚdateÚdatetime)ÚDecimal)ÚAny)ÚEquipmentRepositoryPort)ÚPostgresEquipmentRepositoryc                  ó8   — e Zd ZdZddd„Z	 ddd„Zdd„Zdd„ZdS )ÚEquipmentEfficiencyServiceuK   Enterprise service for tracking machinery fuel efficiency and ca mÃ¡y logs.NÚrepoú
Any | NoneÚreturnÚNonec                óŽ   — |€t          ¦   «         | _        d S t          |d¦  «        r	|| _        d S t          |¦  «        | _        d S )NÚrecord_fuel_log)r	   r   Úhasattr)Úselfr   s     úUC:\Projects\DSCons\app\modules\operations\application\equipment_efficiency_service.pyÚ__init__z#EquipmentEfficiencyService.__init__   sI   € Øˆ<Ý3Ñ5Ô5ˆDŒIˆIˆIÝ�TÐ,Ñ-Ô-ð 	:ØˆDŒIˆIˆIå3°DÑ9Ô9ˆDŒIˆIˆIó    Úequipment_idÚstrÚ	fill_dateú
str | dateÚfuel_quantity_litersúfloat | DecimalÚunit_price_vndÚtotal_cost_vndÚodometer_hoursÚsource_invoice_idú
str | Noneúdict[str, Any]c           	     ó²  — t          |t          ¦  «        rL	 t          j        |d¦  «                             ¦   «         }n%# t
          $ r t	          j        ¦   «         }Y nw xY w|}t          t          |¦  «        ¦  «        }	t          t          |¦  «        ¦  «        }
t          t          |¦  «        ¦  «        }t          t          |¦  «        ¦  «        }|dk    r|	dk    r|
dk    r|	|
z  }	 | j         	                    |||	|
|||¬¦  «        }d| 
                    d¦  «        | 
                    d¦  «        ddœS # t          $ r}d	d
|›�dœcY d}~S d}~ww xY w)u9   Ghi nháº­n lÆ°á»£t náº¡p dáº§u thá»±c táº¿ cá»§a ca mÃ¡y.ú%Y-%m-%dr   )r   r   r   r   r   r   r    ÚsuccessÚidÚ
created_atu1   Ä�Ã£ ghi nháº­n phiáº¿u Ä‘á»• dáº§u thÃ nh cÃ´ng.)ÚstatusÚlog_idr'   ÚmessageÚerroru(   KhÃ´ng thá»ƒ ghi nháº­n ca Ä‘á»• dáº§u: )r(   r*   N)Ú
isinstancer   r   Ústrptimer   Ú
ValueErrorÚtodayr   r   r   ÚgetÚ	Exception)r   r   r   r   r   r   r   r    Úfill_date_parsedÚqtyÚpriceÚcostÚhoursÚresÚexcs                  r   r   z*EquipmentEfficiencyService.record_fuel_log   s©  € õ �i¥Ñ%Ô%ð 	)ð0Ý#+Ô#4°YÀ
Ñ#KÔ#K×#PÒ#PÑ#RÔ#RÐ Ð øÝð 0ð 0ð 0Ý#'¤:¡<¤<Ð Ð Ð ð0øøøð  )Ðå•cÐ.Ñ/Ô/Ñ0Ô0ˆÝ�˜NÑ+Ô+Ñ,Ô,ˆÝ•s˜>Ñ*Ô*Ñ+Ô+ˆÝ�˜NÑ+Ô+Ñ,Ô,ˆà�1Š9ˆ9˜˜qš˜ U¨Q¢Y YØ˜‘;ˆDð	Ø”)×+Ò+Ø)Ø*Ø%(Ø$Ø#Ø$Ø"3ð ,ñ ô ˆCð $ØŸ'š' $™-œ-Ø!Ÿgšg lÑ3Ô3ØNð	ð ð øõ ð 	ð 	ð 	à!ØMÀcÐMÐMðð ð ð ð ð ð ð øøøøð	øøøs.   —'? ¿AÁAÃ,AD: Ä:
EÅEÅEÅEc                óD  — | j                              |¦  «        }|sddiS t          |d         ¦  «        }|d         }|d         }t          t          |                     d¦  «        pd¦  «        ¦  «        }| j                              |¦  «        }| j                              |¦  «        }t          d¦  «        }	t          d¦  «        }
|D ]L}|	t          t          |d         ¦  «        ¦  «        z  }	|
t          t          |d	         ¦  «        ¦  «        z  }
ŒM|dk    rY|rWt          d
„ |D ¦   «         ¦  «        }t          d„ |D ¦   «         ¦  «        }||k    r||z
  }n|dk    rt          |	|z  d¦  «        }t          d¦  «        }|dk    r|	|z  }t          d¦  «        }d}d}|dk    rl|dk    rf||z  t          d¦  «        z  }|t          d¦  «        k    r'dt          t          |dz
  d¦  «        ¦  «        › d�}d}n|t          d¦  «        k     rd}d}g }|D ]ú}|                     t          |d         ¦  «        t          |d         t          t          f¦  «        r|d                              d¦  «        nt          |d         ¦  «        t          |d         ¦  «        t          |d         ¦  «        t          |d	         ¦  «        t          |d         ¦  «        |                     d¦  «        r|d         pd› d|d         pd› �nd d!œ¦  «         Œû||||                     d"¦  «        t          |¦  «        t          |¦  «        t          |	¦  «        t          |
¦  «        t          t          |d#¦  «        ¦  «        t          t          |d#¦  «        ¦  «        |||d$œS )%uc   TÃ­nh toÃ¡n hiá»‡u suáº¥t sá»­ dá»¥ng nhiÃªn liá»‡u thá»±c táº¿ cá»§a má»™t thiáº¿t bá»‹ mÃ¡y mÃ³c.r+   u   KhÃ´ng tÃ¬m tháº¥y thiáº¿t bá»‹r&   Úequipment_codeÚequipment_nameÚfuel_norm_per_hourr   r   r   c              3  ó^   K  — | ](}t          t          |d          pd¦  «        ¦  «        V — Œ)dS ©r   r   N©r   r   ©Ú.0Úls     r   ú	<genexpr>zFEquipmentEfficiencyService.get_equipment_efficiency.<locals>.<genexpr>h   ó=   è è € ÐTÐTÀQ�'¥# aÐ(8Ô&9Ð&>¸QÑ"?Ô"?Ñ@Ô@ÐTÐTÐTÐTÐTÐTr   c              3  ó^   K  — | ](}t          t          |d          pd¦  «        ¦  «        V — Œ)dS r>   r?   r@   s     r   rC   zFEquipmentEfficiencyService.get_equipment_efficiency.<locals>.<genexpr>i   rD   r   é   éd   u   Hoáº¡t Ä‘á»™ng bÃ¬nh thÆ°á»�ngÚnormalén   u-   Cáº£nh bÃ¡o: TiÃªu hao vÆ°á»£t Ä‘á»‹nh má»©c u<   % - Cáº§n kiá»ƒm tra rÃ² rá»‰ hoáº·c tháº¥t thoÃ¡t dáº§u DO!ÚwarningéZ   uj   TiÃªu hao thá»±c táº¿ tháº¥p hÆ¡n Ä‘á»‹nh má»©c (Tiáº¿t kiá»‡m nhiÃªn liá»‡u hoáº·c mÃ¡y cháº¡y non táº£i)Úinfor   r$   r   r   r    Úinvoice_seriesÚ ú-Úinvoice_numberu   Náº¡p láº» hiá»‡n trÆ°á»�ng)r&   r   r   r   r   r   Úinvoice_refÚlicense_plateé   )r   r:   r;   rR   r<   Útotal_hours_operatedÚtotal_fuel_litersÚtotal_fuel_cost_vndÚ#average_consumption_liters_per_hourÚefficiency_percentageÚwarning_messageÚwarning_levelÚ	fuel_logs)r   Úget_equipment_by_id_or_coder   r   r0   Úget_fuel_logs_by_equipmentÚget_total_operated_hoursÚminÚmaxÚroundÚfloatÚappendr,   r   r   Ústrftime)r   r   ÚequipÚeq_idÚeq_codeÚeq_nameÚ	fuel_normr[   Útotal_hoursrU   Útotal_fuel_costÚlogÚmin_odoÚmax_odoÚavg_consumptionÚefficiency_pctÚwarning_msgrZ   Úformatted_logss                      r   Úget_equipment_efficiencyz3EquipmentEfficiencyService.get_equipment_efficiencyM   s   € ð ”	×5Ò5°lÑCÔCˆØð 	@ØÐ>Ð?Ð?å�E˜$”KÑ Ô ˆØÐ(Ô)ˆØÐ(Ô)ˆÝ�C §	¢	Ð*>Ñ ?Ô ?Ð DÀ1ÑEÔEÑFÔFˆ	ð ”I×8Ò8¸Ñ?Ô?ˆ	ð ”i×8Ò8¸Ñ?Ô?ˆõ $ A™JœJÐÝ! !™*œ*ˆØð 	Cð 	CˆCØ¥­¨SÐ1GÔ-HÑ)IÔ)IÑ!JÔ!JÑJÐØ�w¥s¨3Ð/?Ô+@Ñ'AÔ'AÑBÔBÑBˆOˆOð ˜!ÒÐ 	ÐÝÐTÐTÈ)ÐTÑTÔTÑTÔTˆGÝÐTÐTÈ)ÐTÑTÔTÑTÔTˆGØ˜Ò Ð Ø%¨Ñ/��Ø˜Q’�Ý#Ð$5¸	Ñ$AÀ1ÑEÔE�õ " !™*œ*ˆØ˜Š?ˆ?Ø/°+Ñ=ˆOõ ! ™œˆØ6ˆØ ˆØ�qŠ=ˆ=˜_¨qÒ0Ð0Ø-°	Ñ9½WÀS¹\¼\ÑIˆNØ¥¨¡¤Ò,Ð,ð rÍeÕTYÐZhÐknÑZnÐpqÑTrÔTrÑNsÔNsð  rð  rð  r�Ø )��Ø¥'¨"¡+¤+Ò-Ð-ð K�Ø &�ð ˆØð 	ð 	ˆCØ×!Ò!å˜c $œi™.œ.å! # kÔ"2µT½8Ð4DÑEÔEð"/  [Ô!1×!:Ò!:¸:Ñ!FÔ!FÐ!Få˜S Ô-Ñ.Ô.Ý,1°#Ð6LÔ2MÑ,NÔ,NÝ&+¨CÐ0@Ô,AÑ&BÔ&BÝ&+¨CÐ0@Ô,AÑ&BÔ&BÝ&+¨CÐ0@Ô,AÑ&BÔ&Bà—w’wÐ2Ñ3Ô3ð$7 cÐ*:Ô&;Ð&A¸rÐ#aÐ#aÀCÐHXÔDYÐD_Ð]_Ð#aÐ#aÐ#aà6ðð ñô ð ð ð" "Ø%Ø%Ø"ŸYšY Ñ7Ô7Ý"'¨	Ñ"2Ô"2Ý$)¨+Ñ$6Ô$6Ý!&Ð'8Ñ!9Ô!9Ý#(¨Ñ#9Ô#9Ý38½¸ÐPQÑ9RÔ9RÑ3SÔ3SÝ%*­5°ÀÑ+CÔ+CÑ%DÔ%DØ*Ø*Ø'ð
ð 
ð 	
r   c                ót  — | j                              ¦   «         }| j                              ¦   «         }| j                              ¦   «         }g }g }|D �]U}t	          t          |d         pd¦  «        ¦  «        }t	          t          |d         pd¦  «        ¦  «        }t	          t          |d         pd¦  «        ¦  «        }	t	          t          |d         pd¦  «        ¦  «        }
t	          t          |d         pd¦  «        ¦  «        }|
|k    r|
|z
  n'|dk    rt          ||z  d¦  «        nt	          d¦  «        }|dk    rt          ||z  d¦  «        nt	          d¦  «        }|dk    r|dk    rt          ||z  d	z  d¦  «        nt	          d	¦  «        }d
}|dk    rm||t	          d¦  «        z  k    rWd}|                     |d         |d         |d         d|› d|› dt          t          |d	z
  d¦  «        ¦  «        › d�ddœ¦  «         |                     t          |d         ¦  «        |d         |d         |d         t          |¦  «        t          |¦  «        t          |¦  «        t          |	¦  «        t          |¦  «        t          |¦  «        ||d         pddœ¦  «         �ŒW| 	                    d¦  «        pd| 	                    d¦  «        pd| 	                    d¦  «        pd| 	                    d¦  «        pdt          | 	                    d¦  «        pd¦  «        t          | 	                    d¦  «        pd¦  «        | 	                    d¦  «        pdt          | 	                    d¦  «        pd¦  «        t          | 	                    d¦  «        pd¦  «        d d!d"œ|t          |¦  «        |d#œS )$ul   BÃ¡o cÃ¡o tá»•ng há»£p Ä‘oÃ n xe, mÃ¡y Ä‘Ã o vÃ  tÃ¬nh hÃ¬nh cáº¥p phÃ¡t, tiÃªu hao dáº§u DO toÃ n cÃ´ng ty.r<   r   Útotal_litersÚ
total_costrn   rm   rF   rS   rG   rH   z1.10rJ   r:   rR   r;   u   Suáº¥t tiÃªu hao u    L/h vÆ°á»£t Ä‘á»‹nh má»©c (z L/h) +u%   % - Nghi váº¥n tháº¥t thoÃ¡t dáº§u DO)r:   rR   r;   r*   Úseverityr&   Ú
fill_count)r&   r:   r;   rR   Ústandard_fuel_normÚactual_fuel_raterU   rV   rj   Úefficiency_percentÚwarning_statusrx   Útotal_equipmentÚtotal_trucksÚtotal_excavatorsÚoperating_countÚtotal_fillsÚ	avg_priceÚlatest_fill_daterN   gÍÌÌÌÌÌX@u?   100% hÃ³a Ä‘Æ¡n Cá»¥c Thuáº¿ tá»« Petrolimex & TÃ¢n Tháº¿ Huynh)r}   r~   r   r€   rU   rV   Útotal_fills_countÚavg_price_per_literrƒ   Ú fleet_average_efficiency_percentÚfuel_source)ÚsummaryÚfleet_equipmentÚanomalies_countÚ	anomalies)r   Úget_fleet_countsÚget_fleet_fuel_totalsÚget_fleet_equipment_summaryr   r   ra   rc   rb   r0   Úlen)r   ÚcountsÚfuel_totÚ
equip_rowsÚfleet_itemsr‹   ÚrÚnormÚlitersr5   Úmax_oÚmin_or6   ÚrateÚeff_pctÚstatus_warns                   r   Úget_fleet_fuel_summaryz1EquipmentEfficiencyService.get_fleet_fuel_summary¤   sê  € à”×+Ò+Ñ-Ô-ˆØ”9×2Ò2Ñ4Ô4ˆØ”Y×:Ò:Ñ<Ô<ˆ
àˆØˆ	Øð "	ñ "	ˆAÝ�3˜qÐ!5Ô6Ð;¸!Ñ<Ô<Ñ=Ô=ˆDÝ�S  >Ô!2Ð!7°aÑ8Ô8Ñ9Ô9ˆFÝ�3˜q œÐ3°!Ñ4Ô4Ñ5Ô5ˆDÝ�C  )¤Ð 1°Ñ2Ô2Ñ3Ô3ˆEÝ�C  )¤Ð 1°Ñ2Ô2Ñ3Ô3ˆEØ',¨u¢} }�U˜U‘]�]ÐVZÐ]^ÒV^ÐV^½5ÀÈ$ÁÐPQÑ;RÔ;RÐ;RÕdkÐlmÑdnÔdnˆEØ/4°qªy¨y•5˜ %™¨Ñ+Ô+Ð+½gÀa¹j¼jˆDØ7;¸a²x°xÀDÈ1ÂHÀH•e˜T D™[¨CÑ/°Ñ3Ô3Ð3ÕRYÐZ]ÑR^ÔR^ˆGà"ˆKØ�aŠxˆx˜D 4­'°&©/¬/Ñ#9Ò9Ð9Ø'�Ø× Ò Ø&'Ð(8Ô&9Ø%& Ô%7Ø&'Ð(8Ô&9ð  h°4ð   hð   hÐUYð   hð   hÕbgÕhmÐnuÐx{Ñn{Ð}~ÑhÔhñ  cAô  cAð   hð   hð   hØ )ð"ð "ñ ô ð ð ×ÒÝ˜!˜Dœ'‘l”lØ"#Ð$4Ô"5Ø"#Ð$4Ô"5Ø!" ?Ô!3Ý&+¨D¡k¤kÝ$)¨$¡K¤KÝ%*¨6¡]¤]Ý',¨T¡{¤{Ý$ U™|œ|Ý&+¨G¡n¤nØ"-Ø œoÐ2°ð ð  ñ ô ð ñ ð" $*§:¢:Ð.?Ñ#@Ô#@Ð#EÀAØ &§
¢
¨>Ñ :Ô :Ð ?¸aØ$*§J¢JÐ/AÑ$BÔ$BÐ$GÀaØ#)§:¢:Ð.?Ñ#@Ô#@Ð#EÀAÝ%*¨8¯<ª<¸Ñ+GÔ+GÐ+LÈ1Ñ%MÔ%MÝ',¨X¯\ª\¸,Ñ-GÔ-GÐ-LÈ1Ñ'MÔ'MØ%-§\¢\°-Ñ%@Ô%@Ð%EÀAÝ',¨X¯\ª\¸+Ñ-FÔ-FÐ-KÈ!Ñ'LÔ'LÝ$'¨¯ªÐ5GÑ(HÔ(HÐ(NÈBÑ$OÔ$OØ48Ø`ðð ð  +Ý" 9™~œ~Ø"ð!
ð 
ð 	
r   )N)r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r   r"   )r   r   r   r"   )r   r"   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   rs   rœ   © r   r   r   r      s   € € € € € ØUÐUð:ð :ð :ð :ð :ð  )-ð/ð /ð /ð /ð /ðbU
ð U
ð U
ð U
ðn=
ð =
ð =
ð =
ð =
ð =
r   r   N)r    Ú
__future__r   r   r   Údecimalr   Útypingr   Ú=app.modules.operations.domain.ports.equipment_repository_portr   ÚGapp.modules.operations.infrastructure.repositories.equipment_repositoryr	   r   r¡   r   r   ú<module>r§      sË   ððð ð #Ð "Ð "Ð "Ð "Ð "à #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à aÐ aÐ aÐ aÐ aÐ aðð ð ð ð ð ð
P
ð P
ð P
ð P
ð P
ñ P
ô P
ð P
ð P
ð P
r   