+
    `Øjés  ã                   ó|  € R t ^ RIt^ RIHtHt ^ RIHtHt ^ RIHt ^ RIH	t	H
t
Ht ^ RIHt ^ RIHt ^ RIHtHtHt ^ R	IHtHt ^ R
IHt ^RIHt ^ RIHt R tR R ltR R ltR R lt R R lt!R R lt"R R lt#R R lt$R R lt%R R lt&R.R  R! llt'R" R# lt(R$ R% lt)R& R' lt*R( R) lt+R* R+ lt,R, R- lt-R# )/u\   
Production Tracking service â€” scan logic, hold management, overdue detection, dashboard.
N)ÚdatetimeÚtimezone)ÚOptionalÚList)ÚUUID)ÚselectÚfuncÚcase)ÚAsyncSession)ÚHTTPException)ÚDelayReasonMasterÚChassisStationLogÚProductionHold)ÚChassisMasterÚVehicleModelMaster)ÚStationMaster)Úschemas)Úflowc                  óJ   € \         P                  ! \        P                  4      # ©N)r   Únowr   Úutc© ó    Ú@/var/www/html/audi_dev/backend/app/modules/production/service.pyÚ_nowr      s   € Ü�<Š<œŸ™Ó%Ð%r   c                ó0   € V ^8„  d   QhR\         R\        /# )é   ÚminutesÚreturn)ÚintÚstr)Úformats   "r   Ú__annotate__r#      s   € ÷ 8ñ 8œ#ð 8¤#ñ 8r   c                 ón   € \        \        T ;'       g    ^ 4      ^<4      w  rV'       d	   V RV R2# V R2# )é    zh Úm)Údivmodr    )r   ÚhoursÚminss   &  r   Ú_fmt_minutesr*      s;   € Üœ˜WŸ\˜\¨Ó*¨BÓ/�K€Eß"'ˆeˆW�B�t�f˜AÐÐ7°¨v°Q¨ZÐ7r   c                ó0   € V ^8„  d   QhR\         R\        /# )r   Ústartr   )r   r    )r"   s   "r   r#   r#   !   s   € ÷ >ñ >”Hð >¤ñ >r   c                ót   € \        ^ \        \        4       V ,
          P                  4       ^<,          4      4      # )zMinutes elapsed since `start`.)Úmaxr    r   Útotal_seconds)r,   s   &r   Ú_elapsedr0   !   s(   € äˆq”#”t“v •~×4Ñ4Ó6¸Õ;Ó<Ó=Ð=r   c                óp   € V ^8„  d   QhR\         R\        P                  R\        R\        P                  /# ©r   ÚdbÚreqÚuser_idr   )r
   r   ÚScanRequestr   ÚScanResponse)r"   s   "r   r#   r#   )   sB   € ÷ @
ñ @
Üð@
ä	×	Ñ	ð@
ô ð@
ô ×Ññ	@
r   c              ƒ  óž  "  € V P                  \        \        4      P                  \        P                  VP                  8H  4      4      G Rj  x€L
 P                  4       P                  4       pV'       g   \        RRVP                   R24      hVP                  R8X  d   \        RRVP                   R24      hV P                  \        VP                  4      G Rj  x€L
 pV'       g   \        RR4      hV P                  \        \        4      P                  \        P                  VP                  8H  \        P                  VP                  8H  \        P                  R	8H  \        P                  R
8H  4      4      G Rj  x€L
 P                  4       P                  4       pV'       Edž   \!        VP"                  4      pVP$                  RJ;'       d    WdP$                  8„  p\        \&        P(                  ! 4       VP                  VP                  R\+        4       VVP,                  VVRVP.                  R7      pV P1                  V4       RVn        Wen        Wun        \+        4       Vn        \8        P:                  ! WP                  WB4      G Rj  x€L
 p	V	P                  R8X  d   Rp
M+R\8        P<                  ! W	P>                  4      G Rj  x€L
  2p
V PA                  4       G Rj  x€L
  \B        PD                  ! RVP                  VP<                  RVP<                   R\G        V4       RV
 R2VPH                  VVR7      # V P                  \        \        4      P                  \        P                  VP                  8H  \        P                  VP                  8H  \        P                  R8H  4      PK                  \        P"                  PM                  4       4      PO                  ^4      4      G Rj  x€L
 P                  4       P                  4       pVRJ;'       g0    VPP                  VP                  8H  ;'       d    VP6                  RJpV'       d’   VPP                  VP                  8X  d   VP6                  '       d   VP6                  MV'       d   VP"                  MRpV'       d   R\S        V4       2MRp\        RRVP                   RVP<                   V R2R7      h\8        PT                  ! WP                  V4      G Rj  x€L
 p\8        PV                  ! W4      G Rj  x€L
  V P                  \        \        4      P                  \        P                  VP                  8H  \        P                  VP                  8g  \        P                  R	8H  \        P                  R
8H  4      4      G Rj  x€L
 P                  4       PY                  4       pV F“  p\!        VP"                  4      pRVn        VVn        V P                  \        VP                  4      G Rj  x€L
 pV'       g   KX  VP$                  '       g   Kl  VP$                  ^ 8”  g   K  VVP$                  8„  Vn        K•  	  V P                  \        \        4      P                  \        P                  VP                  8H  \        P                  R	8H  \        P                  R
8H  \        P                  VP                  8g  4      4      G Rj  x€L
 P                  4       PY                  4       pV F€  p\!        VP"                  4      pRVn        VVn        V P                  \        VP                  4      G Rj  x€L
 pV'       g   KX  VP$                  '       g   Kl  VVP$                  8„  Vn        K‚  	  \        \&        P(                  ! 4       VP                  VP                  R	\+        4       VVP,                  R
VP.                  R7	      pV P1                  V4       VP                  Vn(        \+        4       Vn-        RVn        RVn.        V PA                  4       G Rj  x€L
  \B        PD                  ! R	VP                  VP<                  RVP<                   2VPH                  R7      #  ELV ELÈ EL' EL ELÝ ELÆ EL¹ EL£ ELˆ ELû EL’ EL¼ ELS Lq5i) u­   
Dual-scan logic:
- No open ARRIVAL at this station â†’ record ARRIVAL
- Open ARRIVAL at this station â†’ record COMPLETION
Also auto-closes any open log at OTHER stations.
Né”  z	Chassis 'z' not foundÚON_HOLDé™  z+' is ON HOLD. Resolve hold before scanning.úStation not foundÚARRIVALÚ
AT_STATIONÚ
COMPLETIONÚ	COMPLETED)Úlog_idÚ
chassis_idÚ
station_idÚ
event_typeÚ
scanned_atÚ
scanned_byÚ	scan_modeÚelapsed_minutesÚ
is_overdueÚstatusÚremarksÚAWAITING_QAz!Waiting for QA before it moves onz
Passed to zCompletion recorded at z after z. Ú.)rD   Ú
chassis_noÚstation_nameÚmessagerA   rH   rI   z at Ú i�  z	Chassis #z has already completed )Ústatus_codeÚdetail)	rA   rB   rC   rD   rE   rF   rG   rJ   rK   ÚWIPzArrival recorded at )rD   rN   rO   rP   rA   )/Úexecuter   r   ÚwhererN   ÚscalarsÚfirstr   Úproduction_hold_statusÚgetr   rC   r   rB   rD   rJ   r0   rE   Ústandard_cycle_time_minÚuuidÚuuid4r   rG   rK   ÚaddrH   rI   Ústation_completed_atr   Úon_completionrO   Úto_station_idÚcommitr   r7   r*   rA   Úorder_byÚdescÚlimitÚcurrent_station_idÚformat_ist_timeÚcheck_arrivalÚmark_receivedÚallÚstation_arrived_atÚtracking_status)r3   r4   r5   ÚchassisÚstationÚopen_log_hereÚelapsedrI   Úcompletion_logÚhandoffÚ	next_stepÚcompleted_log_hereÚis_already_completedÚcomp_dtÚtime_strÚpending_handoffÚopen_elsewhereÚold_logÚold_stationÚarrival_logs   &&&                 r   Úscan_chassisr}   )   s>  é € ð �j‰jÜ”=Ó!×'Ñ'¬×(@Ñ(@ÀCÇNÁNÑ(RÓSó
÷ 	
÷ �gƒi—‘“ð	 ÷
 Ü˜C 9¨S¯^©^Ð,<¸KÐ!HÓIÐIð ×%Ñ%¨Ô2ÜØØ˜Ÿ™Ð'Ð'RÐSó
ð 	
ð —F‘Fœ=¨#¯.©.Ó9×9€GßÜ˜CÐ!4Ó5Ð5ð �j‰jÜÔ$Ó%×+Ñ+Ü!×,Ñ,°×0BÑ0BÑBÜ!×,Ñ,°·±Ñ>Ü!×,Ñ,°	Ñ9Ü!×(Ñ(¨LÑ8ó	ó
÷ 	
÷ �gƒi—‘“ð ÷ €}ä˜=×3Ñ3Ó4ˆà×+Ñ+°4Ð7÷ :ð :Ø×9Ñ9Ñ9ð 	ô
 +Ü—:’:“<Ø×)Ñ)Ø—~‘~Ø#Ü“vØØ—m‘mØ#Ø!ØØ—K‘Kô
ˆð 	�‰ˆ~Ôð  +ˆÔØ(/Ô%Ø#-Ô ô (,£vˆÔ$Ü×*Ò*¨2×/AÑ/AÀ7ÓT×TˆØ�>‰>˜]Ô*Ø;‰Ià$¬4×+<Ò+<¸R×AVÑAVÓ+W×%WÐ$XÐYˆIà�i‰i‹k×ÐÜ×#Ò#Ø#Ø×)Ñ)Ø ×-Ñ-Ø-¨g×.BÑ.BÐ-CÀ7Ì<ÐX_ÓK`ÐJaÐacÐdmÐcnÐnoÐpØ!×(Ñ(Ø#Ø!ô
ð 	
ð —*‘*ÜÔ(Ó)×/Ñ/Ü%×0Ñ0°G×4FÑ4FÑFÜ%×0Ñ0°C·N±NÑBÜ%×0Ñ0°LÑ@ó÷ ‘(Ô,×7Ñ7×<Ñ<Ó>Ó?ÇÁÀaÃó÷ ÷ ‰'‹)—E‘E“Gð 	ð  dÐ*÷ oð oØ×*Ñ*¨g×.@Ñ.@Ñ@×mÐmÀW×EaÑEaÐimÐEmð 	÷
  ð ×.Ñ.°'×2DÑ2DÔDÈ×Ie×IeÐIeð ×,Ò,ç7IÐ(×3Ò3Ètð ÷
 =D˜œo¨gÓ6Ð7Ñ8ÈˆHÜØØ" 7×#5Ñ#5Ð"6Ð6MÈg×NbÑNbÐMcÐdlÐcmÐmnÐoôð ô !%× 2Ò 2°2×7IÑ7IÈ7Ó S×SˆÜ× Ò  Ó5×5Ð5ð —*‘*ÜÔ(Ó)×/Ñ/Ü%×0Ñ0°G×4FÑ4FÑFÜ%×0Ñ0°C·N±NÑBÜ%×0Ñ0°IÑ=Ü%×,Ñ,°Ñ<ó	ó÷ ÷ ‰'‹)—C‘C“Eð 	ó &ˆGÜ˜w×1Ñ1Ó2ˆGØ(ˆGŒNØ&-ˆGÔ#Ø "§¡¤}°g×6HÑ6HÓ I×IˆKß‰{˜{×B×BÒBÀ{×GjÑGjÐmnÖGnØ%,¨{×/RÑ/RÑ%R�Ö"ñ &ð —*‘*ÜÔ(Ó)×/Ñ/Ü%×0Ñ0°G×4FÑ4FÑFÜ%×0Ñ0°IÑ=Ü%×,Ñ,°Ñ<Ü%×0Ñ0°C·N±NÑBó	ó÷ ÷ ‰'‹)—C‘C“Eð 	ó &ˆGÜ˜w×1Ñ1Ó2ˆGØ(ˆGŒNØ&-ˆGÔ#à "§¡¤}°g×6HÑ6HÓ I×IˆKß‰{˜{×B×BÒBØ%,¨{×/RÑ/RÑ%R�Ö"ñ &ô (Ü—:’:“<Ø×)Ñ)Ø—~‘~Ø Ü“vØØ—m‘mØØ—K‘Kô

ˆð 	�‰ˆ{Ôð &)§^¡^ˆÔ"Ü%)£VˆÔ"Ø'+ˆÔ$Ø"'ˆÔà�i‰i‹k×ÐÜ×#Ò#Ø Ø×)Ñ)Ø ×-Ñ-Ø*¨7×+?Ñ+?Ð*@ÐAØ×%Ñ%ô
ð 	
ò[	
ò :ò	
òP Uò &Xâòò6 TÚ5òò Jòò Jñ. 	ùsa  ‚AcÁb$Á'cÁ7A(cÃb'Ã cÃ,BcÆb*Æ(cÆ-)cÇB?cÊb-Ê<cËb0ËcË-b3Ë.DcÏ=b6Ï>*cÐ) cÑ
cÑ!,cÒcÒ"cÒ8AcÔb9ÔcÔ4b<Ô5Bc×b?×A+cØ0cØ1	cØ?cÙcÙ&B#cÜ	cÜ
A+cÝ5cÝ6	cÞcÞCcácáAcâ'câ*câ-câ0câ3câ6câ9câ<câ?cãcãcãcãcc                óD   € V ^8„  d   QhR\         R\        P                  /# ©r   r3   r   )r
   r   ÚDashboardResponse)r"   s   "r   r#   r#   ï   s$   € ÷ Cñ CœLð C¬W×-FÑ-Fñ Cr   c              ƒ   óP  "  € \        4       pVP                  ^ ^ ^ ^ R7      pV P                  \        \        P
                  ! 4       4      P                  \        4      P                  \        P                  R8H  4      4      G Rj  x€L
 P                  4       ;'       g    ^ pV P                  \        \        P
                  ! 4       4      P                  \        4      P                  \        P                  R8H  \        P                  V8¬  4      4      G Rj  x€L
 P                  4       ;'       g    ^ pV P                  \        \        P
                  ! 4       4      P                  \        4      P                  \        P                  R8H  4      4      G Rj  x€L
 P                  4       ;'       g    ^ pV P                  \        \        4      P                  \        P                   R8H  4      P#                  \        P$                  4      4      G Rj  x€L
 pVP'                  4       P)                  4       p. p^ p	\+        4       p
V EFB  pV P                  \        \        \        \,        P.                  4      P1                  \        \        P2                  \        P2                  8H  4      P5                  \,        \,        P6                  \        P6                  8H  4      P                  \        P8                  VP8                  8H  \        P                  R8H  \        P:                  R8H  4      4      G Rj  x€L
 P)                  4       p. p^ pV EF¨  w  pppV
P=                  VP2                  4       \?        VP                  4      p\A        VPB                  RJ;'       d'    VPB                  ^ 8„  ;'       d    VVPB                  8„  4      p\A        V'       * ;'       d=    VPD                  RJ;'       d'    VPD                  ^ 8„  ;'       d    VVPD                  8„  4      pV'       d
   V^,          pRpVPF                  '       d=   V PI                  \J        VPF                  4      G Rj  x€L
 pV'       d   VPL                  pTPO                  \P        PR                  ! VP2                  VPT                  VPV                  VP                  TVPB                  TTVP                  ;'       g    R	VVR
7      4       EK«  	  Wž,          p	VPO                  \P        PX                  ! VP8                  VPZ                  VP\                  VP$                  \A        VP^                  4      VPB                  VPD                  \a        V4      VVR7
      4       EKE  	  V P                  \        \        \,        P.                  4      P5                  \,        \,        P6                  \        P6                  8H  4      P                  \        P                  R8H  4      P#                  \        PT                  4      4      G Rj  x€L
 P)                  4       pV UUu. uFŽ  w  ppVP2                  V
9  g   K  \P        Pb                  ! VP2                  VPT                  TVP                  ;'       g    R	VPd                  ;'       g!    VPf                  ;'       g    VPh                  R7      NK�  	  ppp\P        Pj                  ! \P        Pl                  ! VVVV	R7      VVR7      #  EL‡ ELø EL{ EL ELæ EL· Lñu uppi 5i)r%   )ÚhourÚminuteÚsecondÚmicrosecondrT   Nr?   r:   Tr=   r>   ÚNONE)rB   rN   rA   Ú
arrived_atrH   Úcycle_time_minrI   Ú
is_warningÚhold_statusÚdelay_reasonÚ
model_name)
rC   rO   Ústation_codeÚsequence_noÚrequires_qarˆ   Úalert_threshold_minÚchassis_countÚoverdue_countÚchassis_list)rB   rN   rŒ   rŠ   Úsince)Ú	wip_countÚcompleted_todayÚon_hold_countr’   )ÚkpisÚstationsÚunplaced)7r   ÚreplacerU   r   r   ÚcountÚselect_fromr   rV   rl   Úscalarr   rD   rE   rY   r   Ú	is_activerc   rŽ   rW   rj   Úsetr   Úmodel_numberÚjoinrB   Ú	outerjoinÚmodel_idrC   rJ   r^   r0   Úboolr[   r�   Údelay_reason_idrZ   r   Úreason_labelÚappendr   ÚChassisAtStationrN   rA   ÚStationLiveViewrO   r�   r�   ÚlenÚUnplacedChassisr_   Úhanded_to_production_atÚ
updated_atr€   ÚDashboardKPIs)r3   r   Útoday_startÚwipr–   Úon_holdÚstations_resultr™   Ústation_viewsÚtotal_overdueÚ
placed_idsÚstÚ	open_logsr“   r’   ÚlogÚcmrŒ   rp   rI   r‰   Údelay_labelÚdrÚwip_rowsrš   s   &                        r   Úget_dashboardr¾   ï   sÕ  é € Ü
‹&€CØ—+‘+ 1¨Q°qÀa�+ÓH€Kð —‘ÜŒt�zŠz‹|Ó×(Ñ(¬Ó7×=Ñ=Ü×)Ñ)¨UÑ2ó	
ó÷ ÷ �vƒx÷	ð ð ð	 ð  ŸZ™ZÜŒt�zŠz‹|Ó×(Ñ(Ô):Ó;×AÑAÜ×(Ñ(¨LÑ8Ü×(Ñ(¨KÑ7ó	
ó÷ ÷
 �vƒx÷ð ð
 ð ð —Z‘ZÜŒt�zŠz‹|Ó×(Ñ(¬Ó7×=Ñ=Ü×0Ñ0°IÑ=ó	
ó÷ ÷ �vƒx÷	ð ð ð	 ð ŸJ™JÜŒ}Ó×#Ñ#¤M×$;Ñ$;¸tÑ$CÓD×MÑMÌm×NgÑNgÓhó÷ €Oð ×&Ñ&Ó(×,Ñ,Ó.€Hà€MØ€MÜ“€JäˆàŸ:™:ÜÔ$¤mÔ5G×5TÑ5TÓU×ZÑZÜœ}×7Ñ7Ô;L×;WÑ;WÑWóç‰iÜ"Ô$6×$?Ñ$?Ä=×CYÑCYÑ$Yóç‰eÜ!×,Ñ,°·±Ñ=Ü!×,Ñ,°	Ñ9Ü!×(Ñ(¨LÑ8óó

÷ 

÷ ‰3‹5ð 	ð ˆØˆä#,ÑˆC��ZØ�N‰N˜2Ÿ=™=Ô)Ü˜sŸ~™~Ó.ˆGÜØ×*Ñ*°$Ð6÷ 9ð 9Ø×.Ñ.°Ñ2÷9ð 9à˜b×8Ñ8Ñ8óˆJô
 Ø”÷ 5ð 5Ø×*Ñ*°$Ð6÷5ð 5à×*Ñ*¨QÑ.÷5ð 5ð ˜b×4Ñ4Ñ4ó	ˆJ÷ Ø Õ"�ð ˆKØ×"×"Ð"ØŸ6™6Ô"3°S×5HÑ5HÓI×I�ßØ"$§/¡/�Kà×Ñ¤× 8Ò 8ØŸ=™=ØŸ=™=Ø—z‘zØŸ>™>Ø 'Ø!×9Ñ9Ø%Ø%Ø×5Ñ5×?Ð?¸Ø(Ø%ô!÷ ñ1 $-ðL 	Õ&ˆà×ÑœW×4Ò4Ø—}‘}ØŸ™ØŸ™ØŸ™Ü˜RŸ^™^Ó,Ø×5Ñ5Ø "× 6Ñ 6Ü˜lÓ+Ø'Ø%ô
÷ 	ñs ðP —j‘jÜŒ}Ô0×=Ñ=Ó>×HÑHÜÔ 2× ;Ñ ;¼}×?UÑ?UÑ Uó	
ç
‰%”×-Ñ-°Ñ6Ó
7¿¹Ä×AYÑAYÓ8Zó÷ ÷ �sƒuð	 ñ 'ô	ñ '‰NˆB�
¨"¯-©-¸zÑ*Iô	
Œ×ÒØ—}‘}Ø—}‘}Ø!Ø×1Ñ1×;Ð;°VØ×)Ñ)×XÐX¨R×-GÑ-G×XÐXÈ2Ï=É=÷	
ñ 'ð ñ 	ô ×$Ò$Ü×"Ò"ØØ+Ø!Ø'ô	
ð Øô	ð 	òkòòòò

òF JñFùó
	ùsñ   ‚B\&Â\Â\&ÂA8\&Ä\Ä\&Ä1A&\&Æ\Æ\&Æ1A!\&È\ÈD\&Ì2\Ì3B \&Î4&\&Ï\&Ï1\&Ð\&Ð$\&Ñ#\&Ñ$\Ñ%\&Ñ1A3\&Ó%E\&Ø,\Ø-\&Ù\ Ù9\ Ú\ Ú.\ Û\ Û5\&Ü\&Ü\&Ü\&Ü\&Ü\&Ü\&Ü \&c                óf   € V ^8„  d   QhR\         R\        R\        \        P                  ,          /# )r   r3   rN   r   )r
   r!   r   r   ÚTimelineEntry)r"   s   "r   r#   r#   x  s/   € ÷ %ñ %Üð%Ü"%ð%ä	Œ'×
Ñ
Õ ñ%r   c              ƒ   ó:  "  € V P                  \        \        4      P                  \        P                  V8H  4      4      G R j  x€L
 P                  4       P                  4       pV'       g   \        RR4      hV P                  \        \        \        4      P                  \        \        P                  \        P                  8H  4      P                  \        P                  VP                  8H  4      P                  \        P                  4      4      G R j  x€L
 P                  4       p. pV FÞ  w  rVR pVP                   '       d=   V P#                  \$        VP                   4      G R j  x€L
 pV'       d   VP&                  pVP)                  \*        P,                  ! VP.                  VP                  VP0                  VP2                  VP                  VP4                  VP6                  VVP8                  VP:                  R7
      4       Kà  	  V#  ELÐ Lý L¬5i)Nr9   úChassis not found)
rA   rC   rO   rD   rE   rH   rI   r‹   Údelay_remarksrJ   )rU   r   r   rV   rN   rW   rX   r   r   r   r¢   rC   rB   rc   rE   rj   r¦   rZ   r   r§   r¨   r   rÀ   rA   rO   rD   rH   rI   rÃ   rJ   )	r3   rN   rm   ÚlogsÚentriesr¹   r·   r»   r¼   s	   &&       r   Úget_chassis_timelinerÆ   x  s—  é € ð —Z‘ZÜŒ}Ó×#Ñ#¤M×$<Ñ$<À
Ñ$JÓKó÷ ç�wƒy—‘“ð ÷ Ü˜CÐ!4Ó5Ð5à—*‘*ÜÔ ¤-Ó0×5Ñ5Üœ=×3Ñ3Ô7H×7SÑ7SÑSó	
ç
‰%Ü×(Ñ(¨G×,>Ñ,>Ñ>ó
ç
‰(Ô$×/Ñ/Ó
0ó÷ ÷ �sƒuð 	ð €GÛ‰ˆØˆØ××ÐØ—v‘vÔ/°×1DÑ1DÓE×EˆBßØ Ÿo™o�à�‰”w×,Ò,Ø—:‘:Ø—}‘}ØŸ™Ø—~‘~Ø—~‘~Ø×/Ñ/Ø—~‘~Ø$Ø×+Ñ+Ø—:‘:ô
ö 	ñ ð& €NòEññ FùsE   ‚AHÁHÁ'HÁ-B,HÄHÄAHÅ,HÅ-HÅ9BHÈHÈHc                óZ   € V ^8„  d   QhR\         R\        \        P                  ,          /# r   )r
   r   r   ÚOverdueEntry)r"   s   "r   r#   r#   £  s)   € ÷ *Bñ *B¤,ð *B´4¼×8LÑ8LÕ3Mñ *Br   c              ƒ   óÂ  "  € V P                  \        \        4      P                  \        P                  R 8H  4      4      G Rj  x€L
 P                  4       P                  4       p. pV EFÛ  pVP                  '       d   VP                  ^ 8:  d   K)  V P                  \        \        \        4      P                  \        \        P                  \        P                  8H  4      P                  \        P                  VP                  8H  \        P                  R8H  \        P                  R8H  4      4      G Rj  x€L
 P                  4       pV Fò  w  rV\        VP                   4      pWsP                  8”  g   K,  RpVP"                  '       d=   V P%                  \&        VP"                  4      G Rj  x€L
 p	V	'       d   V	P(                  pVP+                  \,        P.                  ! VP                  VP0                  VP2                  VP                   VVP                  VVP4                  VP"                  RJR7	      4       Kô  	  EKÞ  	  \7        VR R7      #  EL EL! L«5i)TNr=   r>   )	rB   rN   rO   r‡   rH   rˆ   r‹   rÃ   Údelay_loggedc                 ó   € V P                   ) # r   )rH   )Úxs   &r   Ú<lambda>Ú%get_overdue_chassis.<locals>.<lambda>Í  s   € ¨q×/@Ñ/@Ñ.@r   )Úkey)rU   r   r   rV   rŸ   rW   rj   r[   r   r   r¢   rB   rC   rD   rJ   r0   rE   r¦   rZ   r   r§   r¨   r   rÈ   rN   rO   rÃ   Úsorted)
r3   r™   Úoverdue_listr·   r¸   r¹   rº   rp   r»   r¼   s
   &         r   Úget_overdue_chassisrÒ   £  sÕ  é € à—j‘jÜŒ}Ó×#Ñ#¤M×$;Ñ$;¸tÑ$CÓDó÷ ç�wƒy—‘“ð ð €LÜˆØ×)×)Ð)¨R×-GÑ-GÈ1Ô-LÙàŸ:™:ÜÔ$¤mÓ4×9Ñ9Üœ}×7Ñ7Ô;L×;WÑ;WÑWóç‰eÜ!×,Ñ,°·±Ñ=Ü!×,Ñ,°	Ñ9Ü!×(Ñ(¨LÑ8óó
÷ 
÷ ‰3‹5ð 	ó !‰GˆCÜ˜sŸ~™~Ó.ˆGØ×3Ñ3Ö3Ø"�Ø×&×&Ð&Ø!Ÿv™vÔ&7¸×9LÑ9LÓM×M�BßØ&(§o¡o˜à×#Ñ#¤G×$8Ò$8Ø!Ÿ}™}Ø!Ÿ}™}Ø!#§¡Ø"Ÿ~™~Ø$+Ø#%×#=Ñ#=Ø!,Ø"%×"3Ñ"3Ø!$×!4Ñ!4¸DÐ!@ô
%ö 
ô !ñ ôF �,Ñ$@ÔAÐAòQò
ñ NùsJ   ‚AIÁIÁC4IÄ9IÄ:;IÅ:IÆ#IÆ1IÆ2IÆ>BIÉIÉIc          
      óh   € V ^8„  d   QhR\         R\        R\        P                  R\        R\        /# )r   r3   rA   r4   r5   r   )r
   r   r   ÚDelayLogRequestÚdict)r"   s   "r   r#   r#   Ó  sG   € ÷ Rñ RÜðRäðRô 
×	 Ñ	 ðRô ð	Rô
 
ñRr   c              ƒ   ó2  "  € V P                  \        V4      G R j  x€L
 pV'       g   \        RR4      hVP                  Vn        VP                  Vn        W4n        \        4       Vn        V P                  4       G R j  x€L
  RRR\        V4      /#  Lv L5i)Nr9   zStation log not foundrP   z Delay reason logged successfullyrA   )
rZ   r   r   r¦   rÃ   Údelay_logged_byr   Údelay_logged_atrb   r!   )r3   rA   r4   r5   Ú	log_entrys   &&&& r   Ú	log_delayrÚ   Ó  s…   é € ð —f‘fÔ.°Ó7×7€IßÜ˜CÐ!8Ó9Ð9à #× 3Ñ 3€IÔØ!×/Ñ/€IÔØ 'ÔÜ $£€IÔà
�)‰)‹+×ÐØÐ9¸8ÄSÈÃ[ÐQÐQñ 8ñ ùs'   ‚BœB�B©ABÁ?BÂ BÂBc                óp   € V ^8„  d   QhR\         R\        P                  R\        R\        P                  /# r2   )r
   r   Ú
HoldCreater   ÚHoldOut)r"   s   "r   r#   r#   é  s:   € ÷ *ñ *Üð*ä	×	Ñ	ð*ô ð*ô ‡_�_ñ	*r   c              ƒ   ó¸  "  € V P                  \        \        4      P                  \        P                  VP                  8H  4      4      G R j  x€L
 P                  4       P                  4       pV'       g   \        RR4      h\        \        P                  ! 4       VP                  VP                  VP                  VP                  V\        4       RR7      pV P!                  V4       RVn        V P%                  4       G R j  x€L
  R pVP                  '       d=   V P'                  \(        VP                  4      G R j  x€L
 pV'       d   VP*                  p\,        P.                  ! VP0                  VP                  VP                  VP                  VVP                  VP                  VP2                  VP4                  VP6                  R7
      #  EL… LÑ L—5i)Nr9   rÂ   ÚACTIVE)Úhold_idrB   rC   Ú	hold_typeÚhold_reasonÚ	raised_byÚ	raised_atrJ   r:   )
rà   rB   rN   rC   rO   rá   râ   rã   rä   rJ   )rU   r   r   rV   rN   rW   rX   r   r   r\   r]   rB   rC   rá   râ   r   r^   rY   rb   rZ   r   rO   r   rÝ   rà   rã   rä   rJ   )r3   r4   r5   rm   ÚholdrO   r·   s   &&&    r   Úcreate_holdræ   é  sV  é € ð
 —Z‘ZÜŒ}Ó×#Ñ#¤M×$<Ñ$<ÀÇÁÑ$NÓOó÷ ç�wƒy—‘“ð ÷ Ü˜CÐ!4Ó5Ð5äÜ—
’
“Ø×%Ñ%Ø—>‘>Ø—-‘-Ø—O‘OØÜ“&Øô	€Dð ‡F�Fˆ4„LØ%.€GÔ"Ø
�)‰)‹+×Ðà€LØ‡‡€Ø—6‘6œ-¨¯©Ó9×9ˆßØŸ?™?ˆLä�?Š?Ø—‘Ø—?‘?Ø×%Ñ%Ø—?‘?Ø!Ø—.‘.Ø×$Ñ$Ø—.‘.Ø—.‘.Ø�{‰{ôð ò5ñ$ ñ :ùsJ   ‚AGÁGÁ'GÁ7BGÄGÄGÄ#GÅ GÅGÅBGÇGÇGc          
      ó|   € V ^8„  d   QhR\         R\        R\        P                  R\        R\        P                  /# )r   r3   rà   r4   r5   r   )r
   r   r   ÚHoldResolverÝ   )r"   s   "r   r#   r#     sD   € ÷ 4ñ 4Üð4äð4ô 
×	Ñ	ð4ô ð	4ô
 ‡_�_ñ4r   c              ƒ   ó  "  € V P                  \        V4      G R j  x€L
 pV'       g   \        RR4      hVP                  R8w  d   \        RR4      hW4n        \        4       Vn        VP                  Vn        RVn        V P                  \        \        P                  ! 4       4      P                  \        4      P                  \        P                  VP                  8H  \        P                  R8H  \        P                  V8g  4      4      G R j  x€L
 P!                  4       ;'       g    ^ pV P                  \"        VP                  4      G R j  x€L
 pV'       d   V^ 8X  d   RVn        V P'                  4       G R j  x€L
  R pVP(                  '       d=   V P                  \*        VP(                  4      G R j  x€L
 pV'       d   VP,                  p\.        P0                  ! VP                  VP                  V'       d   VP2                  MR VP(                  VVP4                  VP6                  VP8                  VP:                  VP                  VP                  VP                  VP                  R7      #  EL\ ELk EL. EL LÉ5i)	Nr9   zHold not foundrß   r;   zHold is already resolvedÚRESOLVEDÚRELEASED©rà   rB   rN   rC   rO   rá   râ   rã   rä   Úresolved_byÚresolved_atÚresolution_notesrJ   )rZ   r   r   rJ   rí   r   rî   rï   rU   r   r   rœ   r�   rV   rB   rà   rž   r   rY   rb   rC   r   rO   r   rÝ   rN   rá   râ   rã   rä   )	r3   rà   r4   r5   rå   Úother_activerm   rO   r·   s	   &&&&     r   Úresolve_holdrñ     sç  é € ð —‘œ¨Ó0×0€DßÜ˜CÐ!1Ó2Ð2Ø‡{�{�hÔÜ˜CÐ!;Ó<Ð<àÔÜ“v€DÔØ×0Ñ0€DÔØ€D„Kð Ÿ*™*ÜŒt�zŠz‹|Ó×(Ñ(¬Ó8×>Ñ>Ü×%Ñ%¨¯©Ñ8Ü×!Ñ! XÑ-Ü×"Ñ" gÑ-ó	
ó÷ ÷ �vƒx÷ð ð ð ð —F‘Fœ=¨$¯/©/Ó:×:€Gß�< 1Ô$Ø)3ˆÔ&à
�)‰)‹+×Ðà€LØ‡‡€Ø—6‘6œ-¨¯©Ó9×9ˆßØŸ?™?ˆLä�?Š?Ø—‘Ø—?‘?ß)0�7×%Ò%°dØ—?‘?Ø!Ø—.‘.Ø×$Ñ$Ø—.‘.Ø—.‘.Ø×$Ñ$Ø×$Ñ$Ø×.Ñ.Ø�{‰{ôð òA 1òò ;ò ñ :ùs|   ‚JœI8�J©C'JÄI;ÄJÄ*&JÅI>ÅJÅ!JÅ>JÅ?JÆ#JÆ:JÆ;JÇ9JÈA8JÉ;JÉ>JÊJÊJc                ó|   € V ^8„  d   QhR\         R\        \        ,          R\        \        P
                  ,          /# )r   r3   rJ   r   )r
   r   r!   r   r   rÝ   )r"   s   "r   r#   r#   M  s3   € ÷ "ñ "Üð"ä”S�Mð"ô 
Œ'�/‰/Õñ"r   c              ƒ   ó´  "  € \        \        \        4      P                  \        \        P                  \        P                  8H  4      pV'       d#   VP                  \        P                  V8H  4      pVP                  \        P                  P                  4       4      pV P                  V4      G R j  x€L
 P                  4       p. pV EF   w  rVR pVP                  '       d=   V P                  \        VP                  4      G R j  x€L
 pV'       d   VP                  pVP!                  \"        P$                  ! VP&                  VP                  VP(                  VP                  VVP*                  VP,                  VP.                  VP                  VP0                  VP2                  VP4                  VP                  R7      4       EK  	  V#  EL LÌ5i)Nrì   )r   r   r   r¢   rB   rV   rJ   rc   rä   rd   rU   rj   rC   rZ   r   rO   r¨   r   rÝ   rà   rN   rá   râ   rã   rí   rî   rï   )	r3   rJ   ÚqÚresultsÚoutrå   rº   rO   r·   s	   &&       r   Ú
list_holdsr÷   M  sQ  é € ô 	Œ~œ}Ó-×2Ñ2Ü”}×/Ñ/´>×3LÑ3LÑLó	€A÷ Ø�G‰G”N×)Ñ)¨VÑ3Ó4ˆØ	�
‰
”>×+Ñ+×0Ñ0Ó2Ó3€Aà—Z‘Z “]×"×'Ñ'Ó)€GØ
€CÜ‰ˆØˆØ�?�?ˆ?Ø—v‘vœm¨T¯_©_Ó=×=ˆBßØ!Ÿ™�Ø�
‰
”7—?’?Ø—L‘LØ—‘Ø—}‘}Ø—‘Ø%Ø—n‘nØ×(Ñ(Ø—n‘nØ—n‘nØ×(Ñ(Ø×(Ñ(Ø!×2Ñ2Ø—;‘;ô
÷ 	ñ ð* €Jò/ #ñ
 >ùs,   ‚B3GÂ5GÂ6AGÄ	GÄ
GÄB>GÇGc                óP   € V ^8„  d   QhR\         R\        R\        P                  /# )r   r3   rC   r   )r
   r   r   rª   )r"   s   "r   r#   r#   u  s*   € ÷ =ñ =Üð=Ü"&ð=ä×Ññ=r   c              ƒ   ó6  "  € V P                  \        V4      G R j  x€L
 pV'       g   \        RR4      hV P                  \	        \
        \        4      P                  \        \        P                  \
        P                  8H  4      P                  \
        P                  V8H  \
        P                  R8H  \
        P                  R8H  4      4      G R j  x€L
 P                  4       p. p^ pV EFH  w  rg\        VP                  4      pVP                   R J;'       d    W‚P                   8„  p	V	'       * ;'       d%    VP"                  R J;'       d    W‚P"                  8„  p
V	'       d
   V^,          pR pVP$                  '       d=   V P                  \&        VP$                  4      G R j  x€L
 pV'       d   VP(                  pTP+                  \,        P.                  ! VP                  VP0                  VP2                  VP                  TVP                   T	T
VP4                  ;'       g    RVR7
      4       EKK  	  \,        P6                  ! VP                  VP8                  VP:                  VP                   VP"                  \=        V4      VVR7      #  ELu ELÂ Lñ5i)Nr9   r<   r=   r>   r†   )
rB   rN   rA   r‡   rH   rˆ   rI   r‰   rŠ   r‹   )rC   rO   r�   rˆ   r�   r‘   r’   r“   )rZ   r   r   rU   r   r   r   r¢   rB   rV   rC   rD   rJ   rj   r0   rE   r[   r�   r¦   r   r§   r¨   r   r©   rN   rA   rY   rª   rO   r�   r«   )r3   rC   r·   r¸   r“   r’   r¹   rº   rp   rI   r‰   r»   r¼   s   &&           r   Úget_station_liverú   u  s3  é € ð �v‰v”m ZÓ0×	0€BßÜ˜CÐ!4Ó5Ð5à—z‘zÜÔ ¤-Ó0×5Ñ5Üœ=×3Ñ3Ô7H×7SÑ7SÑSó	
ç
‰%Ü×(Ñ(¨JÑ6Ü×(Ñ(¨IÑ5Ü×$Ñ$¨Ñ4ó
ó÷ ÷ �sƒuð ð €LØ€MÜ‰ˆÜ˜3Ÿ>™>Ó*ˆà×&Ñ&¨dÐ2÷ 5ð 5Ø×4Ñ4Ñ4ð 	ð
 ŒN÷ 1ð 1Ø×&Ñ&¨dÐ2÷1ð 1à×0Ñ0Ñ0ð 	÷
 Ø˜QÕˆMàˆØ××ÐØ—v‘vÔ/°×1DÑ1DÓE×EˆBßØ Ÿo™o�à×ÑœG×4Ò4Ø—}‘}Ø—}‘}Ø—:‘:Ø—~‘~Ø#Ø×5Ñ5Ø!Ø!Ø×1Ñ1×;Ð;°VØ$ô
÷ 	ñ) ôB ×"Ò"Ø—=‘=Ø—_‘_Ø—_‘_Ø×1Ñ1Ø×2Ñ2Ü˜,Ó'Ø#Ø!ô	ð 	òc 
1òñ8 Fùs`   ‚JœJ�J©B)JÃJÃA$JÄ8JÅJÅ%JÆ#JÆ%JÆ&JÆ2A3JÈ&A,JÊJÊJc                óZ   € V ^8„  d   QhR\         R\        \        P                  ,          /# r   )r
   r   r   ÚDelayReasonOut)r"   s   "r   r#   r#   ¸  s)   € ÷ Vñ V¤ð V´´g×6LÑ6LÕ1Mñ Vr   c              ƒ   ó4  "  € V P                  \        \        4      P                  \        P                  4      4      G R j  x€L
 pVP                  4       P                  4        Uu. uF"  p\        P                  P                  V4      NK$  	  up#  LOu upi 5ir   )
rU   r   r   rc   Úreason_coderW   rj   r   rü   Úmodel_validate)r3   ÚresultÚrs   &  r   Úlist_reason_codesr  ¸  sy   é € Ø—:‘:ÜÔ Ó!×*Ñ*Ô+<×+HÑ+HÓIó÷ €Fð ?E¿n¹nÓ>N×>RÑ>RÔ>TÓUÑ>T¸ŒG×"Ñ"×1Ñ1°!Ö4Ñ>TÑUÐUñùò Vùs#   ‚?BÁBÁ$BÁ&(BÂBÂBc                ód   € V ^8„  d   QhR\         R\        P                  R\        P                  /# )r   r3   r4   r   )r
   r   ÚDelayReasonCreaterü   )r"   s   "r   r#   r#   ¿  s0   € ÷ 5ñ 5Üð5Ü"×4Ñ4ð5ä×Ññ5r   c              ƒ   óT  "  € \        \        P                  ! 4       VP                  VP                  VP
                  R 7      pV P                  V4       V P                  4       G Rj  x€L
  V P                  V4      G Rj  x€L
  \        P                  P                  V4      #  L< L%5i))r¦   rþ   r§   ÚcategoryN)r   r\   r]   rþ   r§   r  r^   rb   Úrefreshr   rü   rÿ   )r3   r4   r¼   s   && r   Úcreate_reason_coder  ¿  s}   é € ô 
ÜŸ
š
›Ø—O‘OØ×%Ñ%Ø—‘ô	
€Bð ‡F�Fˆ2„JØ
�)‰)‹+×ÐØ
�*‰*�R‹.×ÐÜ×!Ñ!×0Ñ0°Ó4Ð4ñ Ùùs$   ‚A%B(Á'B$Á(B(Â B&Â$B(Â&B(c                óp   € V ^8„  d   QhR\         R\        R\        P                  R\        P                  /# )r   r3   Ú	reason_idr4   r   )r
   r   r   ÚDelayReasonUpdaterü   )r"   s   "r   r#   r#   Î  s8   € ÷ 5ñ 5Üð5Ü!%ð5Ü,3×,EÑ,Eð5ä×Ññ5r   c              ƒ   óÔ  "  € V P                  \        V4      G R j  x€L
 pV'       g   \        RR4      hVP                  e   VP                  Vn        VP                  e   VP                  Vn        VP
                  e   VP
                  Vn        V P                  4       G R j  x€L
  V P                  V4      G R j  x€L
  \        P                  P                  V4      #  LÅ L> L'5i)Nr9   úDelay reason not found)rZ   r   r   r§   r  rŸ   rb   r  r   rü   rÿ   )r3   r
  r4   r¼   s   &&& r   Úupdate_reason_coder  Î  s³   é € ð �v‰vÔ'¨Ó3×	3€BßÜ˜CÐ!9Ó:Ð:Ø
×ÑÒ#Ø×*Ñ*ˆŒØ
‡|�|ÒØ—l‘lˆŒØ
‡}�}Ò Ø—}‘}ˆŒØ
�)‰)‹+×ÐØ
�*‰*�R‹.×ÐÜ×!Ñ!×0Ñ0°Ó4Ð4ñ 
4ñ Ùùs9   ‚C(œC"�C(©A<C(Â%C$Â&C(Â>C&Â?$C(Ã$C(Ã&C(c                ó4   € V ^8„  d   QhR\         R\        RR/# )r   r3   r
  r   N)r
   r   )r"   s   "r   r#   r#   ß  s!   € ÷ ñ ¤ð ¼$ð À4ñ r   c              ƒ   ó¸   "  € V P                  \        V4      G R j  x€L
 pV'       g   \        RR4      hRVn        V P	                  4       G R j  x€L
  R #  L9 L5i)Nr9   r  F)rZ   r   r   rŸ   rb   )r3   r
  r¼   s   && r   Údelete_reason_coder  ß  sJ   é € Ø�v‰vÔ'¨Ó3×	3€BßÜ˜CÐ!9Ó:Ð:Ø€B„LØ
�)‰)‹+×Òñ	 
4ñ ùs&   ‚AœA�A©&AÁAÁAÁAc                óZ   € V ^8„  d   QhR\         R\        \        P                  ,          /# r   )r
   r   r   ÚStationBottleneck)r"   s   "r   r#   r#   ê  s'   € ÷ %ñ %Üð%ä	Œ'×
#Ñ
#Õ$ñ%r   c              ƒ   ó6  "  € V P                  \        \        P                  \        P
                  \        P                  \        P                  ! \        P                  4      P                  R 4      \        P                  ! 4       P                  R4      \        P                  ! \        \        P                  R8H  ^3^ R7      4      P                  R4      4      P                  \        \        P                  \        P                  8H  4      P!                  \        P"                  R8H  4      P%                  \        P                  \        P
                  \        P                  4      P'                  \        P                  ! \        P                  4      P)                  4       4      4      G Rj  x€L
 p. pVP+                  4        FÊ  pVP,                  ;'       g    ^pTP/                  \0        P2                  ! VP                  VP
                  \5        \7        VP8                  ;'       g    ^ 4      ^4      VP                  TVP:                  ;'       g    ^ \5        VP:                  ;'       g    ^ V,          ^d,          ^4      R7      4       KÌ  	  V#  Læ5i)Úavg_elapsedÚtotalT)Úelse_Úoverdue_cntr?   N)rC   rO   Úavg_elapsed_minrˆ   Útotal_completionsr’   Úoverdue_pct)rU   r   r   rC   r   rO   r[   r   ÚavgrH   Úlabelrœ   Úsumr	   rI   r¢   rV   rD   Úgroup_byrc   rd   rj   r  r¨   r   r  ÚroundÚfloatr  r  )r3   r   rö   Úrowr  s   &    r   Úget_bottleneck_analyticsr#  ê  sÒ  é € ð —:‘:ÜÜ×(Ñ(Ü×&Ñ&Ü×1Ñ1Ü�HŠHÔ&×6Ñ6Ó7×=Ñ=¸mÓLÜ�JŠJ‹L×Ñ˜wÓ'Ü�HŠHÜÔ'×2Ñ2°dÑ:¸AÐ>ÀaÔHóç‰e�MÓ"ó		
÷ 
‰Œmœ]×5Ñ5Ô9J×9UÑ9UÑUÓ	Vß	‰Ô ×+Ñ+¨|Ñ;Ó	<ß	‰Ü×(Ñ(Ü×&Ñ&Ü×1Ñ1ó

÷
 
‰”$—(’(Ô,×<Ñ<Ó=×BÑBÓDÓ	Eó%÷ €Fð* €CØ�z‰zŽ|ˆØ—	‘	—�˜QˆØ�
‰
”7×,Ò,Ø—~‘~Ø×)Ñ)Ü!¤%¨¯©×(<Ð(<¸1Ó"=¸qÓAØ×6Ñ6Ø#ØŸ/™/×.Ð.¨QÜ˜sŸ™×3Ð3°!°uÕ<¸sÕBÀAÓFô
ö 	ñ ð €JñCùs+   ‚F.JÆ0JÆ1+JÇAJÈ.)JÉJÉ2&Jr   ).Ú__doc__r\   r   r   Útypingr   r   r   Ú
sqlalchemyr   r   r	   Úsqlalchemy.ext.asyncior
   Úfastapir   Úapp.models.production_modelsr   r   r   Úapp.models.yard_modelsr   r   Úapp.models.rm_modelsr   rQ   r   Úapp.modules.station_workr   r   r*   r0   r}   r¾   rÆ   rÒ   rÚ   ræ   rñ   r÷   rú   r  r  r  r  r#  r   r   r   Ú<module>r-     sŸ   ðñó ß 'ß !Ý ç )Ñ )Ý /Ý !÷ñ ÷
 EÝ .Ý Ý )ò&õ8õ
>õ@
õLCõR%õV*Bõ`Rõ,*õZ4÷n"õP=õFVõ5õ5õ"÷%r   