+
    |w¼jM+  ã                   ó  a € R t!0 t R t^ RIHt ^ RIt^ RIt^ RIt^ RIHt ^ RI	H
t
 ^ RIHtHt ^ RIHtHtHtHt ^ RIHtHtHtHtHt / t] ^ k R R	 lt] ! R
 R4      4       tR R ltR R ltR R ltR R ltR R lt R# )z@Single-flow PSB onboarding: MikroTik secret + supported OLT WAN.)Ú	dataclassN)Údecrypt_pppoe_password)Údecrypt_secret)ÚRealMikrotikAdapterÚMikrotikProvisioningError)ÚCDataExecutionErrorÚprovision_cdata_onuÚprovision_cdata_pppoeÚverify_cdata_onu)ÚCustomerÚDeviceCredentialÚMikrotikDeviceÚ	OLTDeviceÚProvisioningEventc                óÜ   € V ^8„  d   QhR\         R,          R\         R\         R,          R\         R,          R\         R,          R\        \        ,          R\        \        \        3,          /# )	é   Ú
olt_onlineNÚmikrotik_reachableÚsecret_enabledÚpppoe_activeÚinternet_reachableÚerrorsÚreturn)ÚboolÚlistÚstrÚtuple)Úformats   "Ú,/var/www/html/bestweb/app/core/onboarding.pyÚ__annotate__r      sl   € ÷ _ñ _¬d°T­kð _Ìtð _Ü/3°d­{ð_ÜJNÐQUÍ+ð_ä37¸$µ;ð_äHLÌSÍ	ð_äV[Ô\_ÔadÐ\dÕVeñ_ó    c                óÞ   € V'       g   V e   V'       d	   Ve   Vf#   V'       d   RP                  V4      MRpRRV 23# V '       g   R# V'       g   R# V'       g   R# Vf   R# V'       g   R	# R
# )zOClassify only from observed evidence; never label an unavailable probe offline.z; z&Probe OLT atau MikroTik belum lengkap.Úunknownz'Status internet belum bisa dipastikan. )Úofflinez!ONU terverifikasi offline di OLT.)r#   z:Secret PPPoE tidak aktif atau tidak ditemukan di MikroTik.)Úwaiting_sessionz?ONU online dan secret aktif, tetapi sesi PPPoE belum terbentuk.)r"   z>Sesi PPPoE aktif, tetapi probe internet belum bisa dipastikan.)r"   zeSesi PPPoE aktif, tetapi probe internet BestWeb gagal; status fisik pelanggan perlu dipastikan ulang.)ÚactivezGInternet aktif; ONU, sesi PPPoE, dan probe internet terverifikasi live.)Újoin)r   r   r   r   r   r   Údetails   $$$$$$ r   Úclassify_live_connectivityr(      s|   € ÷ �Ò#×+=ÀÒAWÐ[gÒ[oß&,�—‘˜6Ô"Ð2ZˆØÐCÀFÀ8ÐLÐLÐLßØ=Ð=ßØVÐVßØcÐcØÒ!ØZÐZßð Bð  	BØ^Ð^r    c                   ó,   a € ] tR t^$t o V 3R ltRtV tR# )ÚOnboardingResultc                ó>   <€ V ^8„  d   Qh/ S[ ;R&   S[ ;R&   S[ ;R&   # )r   ÚmikrotikÚoltÚmessage)r   )r   Ú__classdict__s   "€r   r   ÚOnboardingResult.__annotate__$   s'   ø‡ ‚ á�Mñ ñ 
�Hñ ñ �Lò	 r    © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__)r/   s   @r   r*   r*   $   s   ø‡ ‡ „ r    r*   c                óR   € V ^8„  d   QhR\         R\        \        \        3,          /# ©r   Úcustomerr   ©r   r   r   )r   s   "r   r   r   +   s&   € ÷ !Vñ !Vœhð !V¬u´S¼#°X­ñ !Vr    c              ƒ   óÐ  "  € \        V P                  V P                  V P                  34      '       g   R# VP	                  \
        V P                  4      G Rj  x€L
 pV'       d%   VP                  '       d   VP                  '       g   R# VP	                  \        VP                  4      G Rj  x€L
 pV'       d   VP                  '       g   R#  \        VP                  VP                  \        VP                  4      VP                  ;'       g    RR7      p\        P                   ! VP"                  V P$                  4      G Rj  x€L
 w  rV\        P                   ! VP&                  V P                  \)        V P                  4      V4      G Rj  x€L
  \        P                   ! VP*                  V P                  4      G Rj  x€L
 w  rxV'       g   R# V'       g   RRVP,                   R23# V'       d   RMR	p	R
RVP,                   RV	 23#  EL¸ ELe LÍ L… LT  \.        \0        \2        3 d"   p
RR\5        T
4      R,           23u Rp
?
# Rp
?
i\6         d    Ru # i ; i5i)Úpending_configurationNé"  ©ÚhostÚusernameÚpasswordÚapi_portÚfailedr$   zSecret PPPoE aktif pada z; menunggu sesi pelanggan.z Profile default dipakai.Ú ÚprovisionedzPPPoE MikroTik aktif pada z; sesi pelanggan terverifikasi.zMikroTik gagal: ºNi,  N)r>   z4Device MikroTik atau kredensial PPPoE belum lengkap.)r>   z:Device MikroTik belum aktif atau credential belum terikat.)r>   z Credential MikroTik belum aktif.)rE   z3Secret PPPoE tidak terverifikasi aktif di MikroTik.)rE   z:MikroTik gagal karena koneksi atau credential tidak valid.)ÚallÚmikrotik_device_idÚpppoe_usernameÚpppoe_passwordÚgetr   Ú	is_activeÚcredential_idr   r   rA   rB   r   Úencrypted_secretrD   ÚasyncioÚ	to_threadÚresolve_profileÚservice_profileÚupsert_pppoe_secretr   Úverify_pppoeÚnamer   Ú
ValueErrorÚRuntimeErrorr   Ú	Exception)r;   ÚdbÚdeviceÚ
credentialÚadapterÚprofileÚused_defaultÚenabledr%   ÚsuffixÚexcs   &&         r   Ú	_mikrotikrd   +   s
  é € Ü�×+Ñ+¨X×-DÑ-DÀh×F]ÑF]Ð^×_Ò_Ø^Ð^Ø—6‘6œ.¨(×*EÑ*EÓF×F€Fß˜×)×)Ð)°×1E×1EÐ1EØdÐdØ—v‘vÔ.°×0DÑ0DÓE×E€Jß˜Z×1×1Ð1ØJÐJðVÜ%Ø—‘Ø×(Ñ(Ü# J×$?Ñ$?Ó@Ø—_‘_×,Ð,¨ô	
ˆô '.×&7Ò&7¸×8OÑ8OÐQY×QiÑQiÓ&j× jÑˆÜ×ÒØ×'Ñ'Ø×#Ñ#Ü" 8×#:Ñ#:Ó;Øó	
÷ 	
ð 	
ô !(× 1Ò 1°'×2FÑ2FÈ×H_ÑH_Ó `×`‰ˆßØRÐRßØ$Ð(@ÀÇÁÀÐMgÐ&hÐhÐhß0<Ñ,À"ˆØÐ :¸6¿;¹;¸-ÐGfÐgmÐfnÐoÐoÐoò5 Gò Fñ !kñ	
ñ aøô &¤z´<Ð@ô =ØÐ+¬C°«H°T­NÐ+;Ð<Ð<Õ<ûÜô VØUÒUðVüsæ   ‚AI&ÁHÁI&Á'I&Á9I&Â%I&Â0HÂ1I&Â=I&ÃI&ÃAH Ä6H Å
HÅA	H ÆHÆ2H ÇHÇH ÇI&ÇH Ç H Ç1I&Ç2H Ç:H ÈI&ÈI&ÈH ÈH ÈH ÈI#È4IÉ
I#ÉI&ÉI#ÉI#É I&É"I#É#I&c                óR   € V ^8„  d   QhR\         R\        \        \        3,          /# r:   r<   )r   s   "r   r   r   O   s&   € ÷ *\ñ *\œð *\¬%´´S°­/ñ *\r    c              ƒ   ó¼  "  € V P                   V P                  V P                  V P                  3p\	        V4      '       g   R# V P
                  R8w  g   V P                  R8w  d   R# VP                  \        V P                   4      G Rj  x€L
 pV'       d6   VP                  '       d$   VP                  R8w  g   VP                  '       g   R# VP                  \        VP                  4      G Rj  x€L
 p\        P                  ! RVP                   R24      pV'       d   VP                  '       d	   V'       g   R#  \         P"                  ! \$        VP&                  VP(                  ;'       g    ^VP*                  VP,                  VV P                  V P                  V P                  RR7
      G Rj  x€L
  \         P"                  ! \.        VP&                  VP(                  ;'       g    ^VP*                  VP,                  TV P                  V P                  V P                  V P0                  \3        V P4                  4      V P6                  ;'       g    V P8                  ;'       g    ^dR	7      G Rj  x€L
 p\         P"                  ! \:        VP&                  VP(                  ;'       g    ^VP*                  VP,                  VV P                  V P                  V P                  R
7	      G Rj  x€L
 pV'       g   R# RVP<                  3#  EL‡ EL# ELa L  L'  \>         d"   pRR\A        T4      R,           23u Rp?# Rp?i\B         d    Ru # i ; i5i)r>   zC-DATAz
FD1601S-B1NÚsshÚOLT_Ú_SSH_HOST_KEY_SHA256Ú2p)	rA   ÚportrB   rP   Úpinned_host_keyÚpon_portÚonu_idÚserial_numberÚprofile_name)rA   rk   rB   rP   rl   rm   rn   ro   rK   rL   Úvlan©rA   rk   rB   rP   rl   rm   rn   ro   rE   rG   zOLT gagal: rH   )r>   z>OLT belum lengkap: device, SN ONT, port PON, dan ONU ID wajib.)r>   z5Executor otomatis belum tersedia untuk model OLT ini.)r>   z2OLT SSH belum aktif atau credential belum terikat.)r>   z4Credential atau fingerprint host-key OLT belum siap.)rE   z8OLT tidak mengonfirmasi SN/ONU setelah command diterima.)rE   z@OLT gagal karena koneksi, credential, atau host-key tidak valid.)"Úolt_device_idÚont_snÚolt_portrn   rI   Ú
olt_vendorÚ	olt_modelrM   r   rN   Úmanagement_protocolrO   r   ÚosÚgetenvÚidrQ   rR   r   rA   rD   rB   rP   r	   rK   r   rL   Úservice_vlanÚ
pppoe_vlanr
   r.   r   r   rZ   )	r;   r[   Úrequiredr-   r]   ÚpinnedÚresultÚverifiedrc   s	   &&       r   Ú_oltr‚   O   s›  é € Ø×&Ñ&¨¯©¸×9JÑ9JÈHÏOÉOÐ\€HÜˆx�=Š=ØhÐhØ×Ñ˜hÔ&¨(×*<Ñ*<ÀÔ*LØ_Ð_Ø—‘”y (×"8Ñ"8Ó9×
9€Cß�c—m—m�m s×'>Ñ'>À%Ô'GÈs×O`×O`ÐO`Ø\Ð\Ø—v‘vÔ.°×0AÑ0AÓB×B€JÜ�YŠY˜˜cŸf™f˜XÐ%9Ð:Ó;€Fß˜Z×1×1Ð1¿Ø^Ð^ð\Ü×ÒÜØ—‘ §¡× 2Ð 2°¸Z×=PÑ=PØ'×8Ñ8È&Ø×&Ñ&¨x¯©ÈhÏoÉoØô
÷ 	
ð 	
ô ×(Ò(Ü!Ø—‘ §¡× 2Ð 2°¸Z×=PÑ=PØ'×8Ñ8È&Ø×&Ñ&¨x¯©ÈhÏoÉoØ#×2Ñ2Ü1°(×2IÑ2IÓJØ×&Ñ&×DÐD¨(×*=Ñ*=×DÐDÀô
÷ 
ˆô !×*Ò*ÜØ—‘ §¡× 2Ð 2°¸Z×=PÑ=PØ'×8Ñ8È&Ø×&Ñ&¨x¯©ÈhÏoÉoô	
÷ 
ˆ÷ ØWÐWØ˜fŸn™nÐ,Ð,òA :ò Cò
	
ñ
ñ
øô ô 8Ø˜;¤s¨3£x°¥~Ð&6Ð7Ð7Õ7ûÜô \Ø[Ò[ð\üsó   ‚B	MÂLÂMÂMÂ*"MÃ%MÃ2LÃ3/MÄ#MÄ5MÄ=MÅ 2L Å3AL Æ7LÆ86L Ç/A+L ÉL É/L É:LÉ;6L Ê2AL Ë5LË6L ÌL ÌMÌL ÌMÌMÌL ÌL ÌL ÌMÌ*MÍ MÍMÍMÍMÍMÍMÍMc                ó0   € V ^8„  d   QhR\         R\        /# r:   ©r   r*   )r   s   "r   r   r   |   s   € ÷ <ñ <¬Xð <Ô>Nñ <r    c              ƒ  óž  "  € RV n         RV n        \        W4      G Rj  x€L
 w  r#\        W4      G Rj  x€L
 w  rEW@n        W n        VR8X  d   VR8X  d   RV n         RV n        RV RV 2pM@RWB39   d   RV n         R	V RV 2pM(R
WB39   d   R
MRV n         VR
8X  d	   RV RV 2MRV RV 2pW`n        VP                  \        V P                  RV P                   V P                  V P                  V P                  R\        P                  ! RVRV/RR7      VR7	      4       VP                  4       G Rj  x€L
  \!        WBV4      #  EL& EL L5i)zGRun the complete supported path and persist only sanitized status text.ÚrunningÚconfiguringNrG   r%   zInternet aktif. Ú rE   zProvisioning belum selesai. r$   r>   zMenunggu sesi PPPoE pelanggan. z Menunggu konfigurasi perangkat. Ú
onboardingzintegrated-onboardingr,   r-   T)Ú	sort_keys)	Úcustomer_idÚtargetÚstatusÚvendorrs   rJ   Úadapter_keyÚpayload_summaryr.   )Úprovisioning_statusr�   r‚   rd   Úmikrotik_provisioning_statusÚolt_provisioning_statusÚprovisioning_messageÚaddr   r{   rv   rs   rJ   ÚjsonÚdumpsÚcommitr*   )r;   r[   Ú
olt_statusÚolt_messageÚ	mk_statusÚ
mk_messager.   s   &&     r   Ú_run_onboarding_unlockedr�   |   sŠ  é € à#,€HÔ Ø#€H„OÜ$(¨Ó$6×6Ñ€JÜ"+¨HÓ"9×9Ñ€IØ,5Ô)Ø'1Ô$Ø�MÔ! j°MÔ&AØ'4ˆÔ$Ø"ˆŒØ$ Z L°°+°Ð?‰Ø	�iÐ,Ô	,Ø'/ˆÔ$Ø0°°¸A¸k¸]ÐK‰à<MÐR[ÐQhÔ<hÑ'8ð  oFˆÔ$ØR[Ð_pÔRpÐ3°J°<¸qÀÀÑNð  yYð  Zdð  Yeð  efð  grð  fsð  wtˆØ$+Ô!Ø‡F�FÔØ—K‘K¨¸X×=YÑ=YØ×"Ñ"°(×2HÑ2HØ#×6Ñ6Ø+ÜŸ
š
 J°	¸5À*Ð#MÐY]Ô^Øôô ð �)‰)‹+×ÐÜ˜I°7Ó;Ð;ò1 7Ú9ñ, ùs2   ‚EŸE E´EµC?EÄ4EÄ5EÅEÅEc                ó0   € V ^8„  d   QhR\         R\        /# r:   r„   )r   s   "r   r   r   ›   s   € ÷ <ñ <¤8ð <Ô4Dñ <r    c              ƒ  ó&  "  € \         P                  V P                  \        P                  ! 4       4      pT;_uu_4       GRj  x€L
  \        W4      G Rj  x€L
 uuRRR4      GRj  x€L
  #  L) L L	  + GRj  x€L 
 '       g   i     R# ; i5i)zESingle hardware entry point; serialize duplicate clicks per customer.N)Ú_ONBOARDING_LOCKSÚ
setdefaultr{   rQ   ÚLockr�   )r;   r[   Úlocks   && r   Úrun_onboardingr¤   ›   sJ   é € ä×'Ñ'¨¯©´W·\²\³^ÓD€Dß�tŠtÜ-¨hÓ;×;÷ �tŒtÙ;÷ �t�t‹tüs`   ‚ABÁA.ÁBÁA4ÁA0ÁA4ÁBÁ(A2Á)BÁ0A4Á2BÁ4B	Á:A=Á;
B	ÂB	Â	Bc                ó0   € V ^8„  d   QhR\         R\        /# r:   )r   r   )r   s   "r   r   r   ¢   s   € ÷ 3ñ 3´8ð 3ÄCñ 3r    c              ƒ  ó~  "  € RpRpRpRpRp. pVP                  \        V P                  4      G Rj  x€L
 pV'       d;   VP                  '       d)   VP                  \        VP                  4      G Rj  x€L
 MRp	V'       d%   \
        P                  ! RVP                   R24      MRp
V'       d   V	'       d	   V
'       g   VP                  R4       M{ \        P                  ! \        VP                  VP                  ;'       g    ^V	P                  V	P                  W P                   V P"                  V P$                  R7	      G Rj  x€L
 pVP                  \*        V P,                  4      G Rj  x€L
 pV'       d;   VP                  '       d)   VP                  \        VP                  4      G Rj  x€L
 MRpV'       d	   V'       g   VP                  R	4       Mƒ \/        VP                  VP                  \1        VP                  4      VP                  ;'       g    R
R7      p\        P                  ! VP2                  V P4                  4      G Rj  x€L
 w  rEpRp\7        W#WEWgR7      w  ppWðn        VR8X  d   RMTV n        VV n        VP?                  4       G Rj  x€L
  V P8                  #  EL EL@ ELn  \&         d0   pTP                  R\)        T4      R,           24        Rp?EL¡Rp?ii ; i EL† ELG L§  \&         d/   pTP                  R\)        T4      R,           24        Rp?LÔRp?ii ; i Lš5i)zIRead-only reconciliation with explicit proof and an honest unknown state.NFrh   ri   z$Konfigurasi probe OLT belum lengkap.rr   zProbe OLT gagal: :Né    Nz)Konfigurasi probe MikroTik belum lengkap.r?   r@   TzProbe MikroTik gagal: )r   r   r   r   r   r   r%   rG   ) rM   r   rs   rO   r   ry   rz   r{   ÚappendrQ   rR   r
   rA   rD   rB   rP   ru   rn   rt   rZ   r   r   rJ   r   r   Úverify_pppoe_internetrK   r(   r�   r‘   r”   r˜   )r;   r[   r   Úmk_reachableÚ
mk_enabledÚ	mk_activer   r   r-   Úocr   rc   ÚmkÚmcr^   Ústater.   s   &&               r   Úrefresh_customer_online_statusr±   ¢   sš  é € à"€JØ€LØ"€JØ!€IØ&*ÐØ€Fà—‘”y (×"8Ñ"8Ó9×
9€Cß>AÀc×FW×FWÐFWˆr�v‰vÔ&¨×(9Ñ(9Ó:×	:Ð	:Ð]a€Bß?BŒR�YŠY˜˜cŸf™f˜XÐ%9Ð:Ô;È€Fß—BŸ6Ø�‰Ð<Õ=ð	@Ü&×0Ò0Ü  s§x¡x°c·l±l×6HÐ6HÀbØŸ™°r×7JÑ7JØ &×1BÑ1BØ—‘°h·o±oô	 ÷ ˆJð �v‰v”n h×&AÑ&AÓB×	B€Bß=?ÀB×DT×DTÐDTˆr�v‰vÔ&¨×(8Ñ(8Ó9×	9Ð	9ÐZ^€Bß—2Ø�‰ÐAÕBð
	EÜ)Ø—W‘W r§{¡{Ü'¨×(;Ñ(;Ó<ÀrÇ{Á{×GZÐGZÐVZôˆGô ?F×>OÒ>OØ×-Ñ-¨x×/FÑ/Fó?÷ 9Ñ5ˆJÐ#5ð  ˆLô 0ØØ!Ø-ô�N€Eˆ7ð
 „OØ49¸XÔ4E¡=È5€HÔ Ø$+€HÔ!Ø
�)‰)‹+×ÐØ�?‰?ÐòU :Ú	:òøô ô 	@Ø�M‰MÐ-¬c°#«h°t­nÐ-=Ð>×?Ò?ûð	@úò 
CÚ	9ñ9øô ô 	EØ�M‰MÐ2´3°s³8¸Dµ>Ð2BÐC×DÑDûð	Eúñ ùs  ‚0L=²J1³L=¿L=Á#L=Á4J4Á5L=Â-L=Â1L=Â9L=ÃL=Ã2J: ÄAJ: Å	J7Å
J: Å#L=Å1K7Å2L=Å>L=Æ#L=Æ3K:Æ4L=ÇL=Ç
L=ÇAK? È6K? ÉK=É	K? ÉAL=Ê L;Ê!L=Ê4L=Ê7J: Ê:K4Ë$K/Ë)L=Ë/K4Ë4L=Ë:L=Ë=K? Ë?L8Ì
$L3Ì.L=Ì3L8Ì8L=c                óv   € V ^8„  d   Qh/ ^ \         9   d%   \        \        \        P                  3,          ;R&   # )r   r    )Ú__conditional_annotations__ÚdictÚintrQ   r¢   )r   s   "r   r   r      s)   € × FÑ F÷ 0Ò /”4œœWŸ\™\Ð)Õ*Ñ /ò Gr    )"r³   Ú__doc__Údataclassesr   rQ   r–   ry   Úapp.core.customer_identityr   Úapp.core.device_credentialsr   Úapp.core.mikrotikr   r   Úapp.core.cdata_executorr   r   r	   r
   Úapp.models.modelsr   r   r   r   r   r    r(   r*   rd   r‚   r�   r¤   r±   r   )r³   s   @r   Ú<module>r½      so   øðÞ FÝ !Û Û Û 	å =Ý 6ß Lß uÓ uß fÕ fà-/Ð Ó /õ_ð( ÷ð ó ðõ!VõH*\õZ<õ><÷3r    