§
    0°ÐjØH  ã                   óB  — d Z ddlZddlZddlZddlZddlZddlmZ ej         	                    ej         
                    e¦  «        ¦  «        Zej         	                    e¦  «        Zej                             ed¦  «        Zej                             ed¦  «        Zej                             ed¦  «        Z ej        ¦   «         ZdddœZd	d
ddœZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ Zd„ Z d d„Z!d„ Z"d„ Z#e$dk    r ej%         e#¦   «         ¦  «         dS dS )!u  
ä»·æ ¼æŸ¥è¯¢æŽ¥å�£ï¼ˆæœ�åŠ¡ç«¯ï¼‰
======================
æ•°æ�®åº•åº§ï¼šæ•°æ�®/price_index.jsonï¼ˆç”± è„šæœ¬/build_price_index.py ç”Ÿæˆ�ï¼‰
è·¯ç”±ï¼šGET /api/price/query?sku=<è´§å�·æˆ–å…³é”®è¯�>&customer=<å®¢æˆ·å��ï¼Œå�¯é€‰>

æ�ƒé™�å�£å¾„ï¼ˆæœ�åŠ¡ç«¯å¼ºåˆ¶ï¼Œå‰�ç«¯å�ªæ˜¯å±•ç¤ºå±‚ï¼‰ï¼š
  Â· scope = all  ï¼šrole ä¸º admin/gmï¼Œæˆ–æ�ƒé™�é�¢æ�¿æŠŠè¯¥äººã€Œä»·æ ¼æŸ¥è¯¢ã€�å‹¾æˆ�ã€Œå…¨é‡�ã€�
                  â†’ å�¯è§�å…¨éƒ¨å®¢æˆ·æ˜Žç»†ï¼ˆå�«å®¢æˆ·å��ä¸Žä»·ï¼‰
  Â· scope = own  ï¼šé»˜è®¤ï¼ˆå�«æ‰€æœ‰ SALESï¼‰â†’ æ˜Žç»†å�ªè¿”å›ž é”€å”®å‘˜ == æœ¬äººå§“å�� çš„è®°å½•ï¼Œ
                  å…¶ä»–å®¢æˆ·çš„å®¢æˆ·å��/ä»·ä¸€å¾‹ä¸�å‡ºçŽ°åœ¨å“�åº”é‡Œ
  Â· scope = none ï¼šæ�ƒé™�é�¢æ�¿å‹¾ã€Œä¸�å�¯è§�ã€�â†’ 403
  Â· å…¨åº“åŒºé—´ï¼ˆæœ€ä½Ž/ä¸­ä½�/æœ€é«˜/å®¢æˆ·æ•°ï¼‰å¯¹æ‰€æœ‰è¢«æŽˆæ�ƒè€…å�¯è§�ï¼Œä½†ç»�ä¸�ç‚¹å��å…¶ä»–å®¢æˆ·
  ç‰¹æ®Šå�£å¾„ï¼šrole=='gm' é»˜è®¤å…¨é‡�ï¼Œå�¯è¢«é�¢æ�¿ä¸‹è°ƒï¼ˆé�¢æ�¿å€¼ä¼˜å…ˆï¼‰ã€‚

æ�ƒé™�å­˜å‚¨ï¼šæ•°æ�®/user_permissions.jsonï¼ˆä¸Ž ai_chat._load_user_permissions å�Œä¸€ä»½æ–‡ä»¶ï¼‰
         å­—æ®µ price_scope âˆˆ {'all','own','none'}
é    N)Úparse_qsu   æ•°æ�®zprice_index.jsonzuser_permissions.jsong        )ÚmtimeÚdatau   å…¨é‡�æ˜Žç»†u   ä»…è‡ªå·±å®¢æˆ·u	   ä¸�å�¯è§�©ÚallÚownÚnoneuÜ   ä»·æ ¼å�£å¾„ï¼šERP å�«ç¨Žå�•ä»· > 0ï¼Œå·²æŽ’é™¤èµ å“�ä¸Žé¢„æµ‹å�•ï¼ˆFO å¼€å¤´ï¼‰ï¼›2024/2026 æ—¥æœŸä¸ºæ—¥ç²’åº¦ã€�2025 ä¸ºæœˆç²’åº¦ï¼›å�Œä¸€è´§å�·å�¯èƒ½å�Œæ—¶ä»¥ U / ml / ç“¶ æˆ�äº¤ï¼Œæ¯”ä»·é¡»åœ¨å�Œä¸€å�•ä½�å†…è¿›è¡Œã€‚c                  óð  — t           j                             t          ¦  «        st	          d¦  «        ‚t           j                             t          ¦  «        } t          5  t          d         �t          d         | k    rTt          t          d¬¦  «        5 }t          j
        |¦  «        t          d<   ddd¦  «         n# 1 swxY w Y   | t          d<   t          d         cddd¦  «         S # 1 swxY w Y   dS )uZ   å¸¦ mtime ç¼“å­˜çš„ç´¢å¼•åŠ è½½ï¼ˆæ�¢æ–° ERP é‡�è·‘è„šæœ¬å�Žè‡ªåŠ¨ç”Ÿæ•ˆï¼Œæ— éœ€é‡�å�¯ï¼‰uE   price_index.json ä¸�å­˜åœ¨ï¼Œè¯·å…ˆè¿�è¡Œ è„šæœ¬/build_price_index.pyr   Nr   úutf-8©Úencoding)ÚosÚpathÚexistsÚ
INDEX_FILEÚRuntimeErrorÚgetmtimeÚ_LOCKÚ_CACHEÚopenÚjsonÚload)ÚmtÚfs     õD   /Users/liuxinyuan/Desktop/Hermesè¾“å‡º-å·¥ä½œç±»/è„šæœ¬/price_api.pyÚ
load_indexr   -   sE  € åŒ7�>Š>�*Ñ%Ô%ð dÝÐbÑcÔcÐcÝ	Œ×	Ò	�*Ñ	%Ô	%€BÝ	ð ð Ý�&Œ>Ð!¥V¨G¤_¸Ò%:Ð%:Ý•j¨7Ð3Ñ3Ô3ð .°qÝ!%¤¨1¡¤•�v‘ð.ð .ð .ñ .ô .ð .ð .ð .ð .ð .ð .øøøð .ð .ð .ð .à �F�7‰OÝ�fŒ~ðð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð s6   Á5C+ÂB=Â1C+Â=C	ÃC+ÃC	ÃC+Ã+C/Ã2C/c                  óÞ   — 	 t          t          d¬¦  «        5 } t          j        | ¦  «        }d d d ¦  «         n# 1 swxY w Y   t	          |t
          ¦  «        r|ni S # t          $ r i cY S w xY w)Nr   r   )r   Ú	PERM_FILEr   r   Ú
isinstanceÚdictÚ	Exception)r   Úds     r   Ú
load_permsr#   :   s¶   € ðÝ•) gÐ.Ñ.Ô.ð 	°!Ý”	˜!‘”ˆAð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	å˜q¥$Ñ'Ô'Ð/ˆqˆq¨RÐ/øÝð ð ð Øˆ	ˆ	ˆ	ðøøøs.   ‚A ˜9­A ¹=½A Á =ÁA ÁA,Á+A,c                 ó`  — | pi } |                       d¦  «        pd}|                       d¦  «        pd}|dv rdnd}t          ¦   «                               |¦  «        pi }t          |                      d¦  «        pd¦  «                             ¦   «                              ¦   «         }|d	vr|}||fS )
u=   è§£æž�è¯¥ç”¨æˆ·çš„ã€Œä»·æ ¼æŸ¥è¯¢ã€�å�£å¾„ï¼šall / own / noneÚroleÚsalesÚnameÚ )ÚadminÚgmÚreadonlyr   r   Úprice_scoper   )Úgetr#   ÚstrÚstripÚlower)Úuserr%   r'   ÚdefaultÚpÚss         r   Ú	scope_forr5   C   s¸   € àˆ:�2€DØ�HŠH�VÑÔÐ' €DØ�HŠH�VÑÔÐ" €DØÐ:Ð:Ð:ˆeˆeÀ€GÝ	‰Œ×	Ò	˜$Ñ	Ô	Ð	% 2€AÝˆA�EŠE�-Ñ Ô Ð& BÑ'Ô'×-Ò-Ñ/Ô/×5Ò5Ñ7Ô7€AØÐ&Ð&Ð&ØˆØˆgˆ:Ðó    c                 ó<  — t          | pi                      d¦  «        ¦  «        }t          ¦   «                              |¦  «        pi }|g}|                     d¦  «        pg D ]9}t          t          |¦  «        ¦  «        }|r||vr|                     |¦  «         Œ:|S )uâ   æœ¬äººå�¯è§†ä¸ºã€Œè‡ªå·±ã€�çš„å…¶ä»– ERP é”€å”®å‘˜å��ï¼ˆé»˜è®¤ç©ºï¼›ä»…æ˜¾å¼�é…�ç½®æ‰�ç”Ÿæ•ˆï¼‰ã€‚
    ç”¨é€”ï¼šERP é‡Œ å¤§å®¢æˆ·1/å¤§å®¢æˆ·2 è¿™ç±»å� ä½�å��ä¸‹æŒ‚çš„æˆ�äº¤ï¼Œè‹¥ç®¡ç�†å‘˜ç¡®è®¤æŸ�äººåº”çœ‹ï¼Œé…� price_aliasã€‚r'   Úprice_alias)Ú_nzr-   r#   r.   Úappend)r1   r'   r3   ÚoutÚas        r   Úaliases_forr=   P   sœ   € õ ��
˜×Ò Ñ'Ô'Ñ(Ô(€DÝ	‰Œ×	Ò	˜$Ñ	Ô	Ð	% 2€AØˆ&€CØ�eŠe�MÑ"Ô"Ð( bð ð ˆÝ•�A‘”‰KŒKˆØð 	�˜#��Ø�JŠJ�q‰MŒMˆMøØ€Jr6   c                  óü   — i } t          ¦   «                              ¦   «         D ]X\  }}t          |pi                      d¦  «        pd¦  «                             ¦   «                              ¦   «         }|dv r|| |<   ŒY| S )uN   ç»™æ�ƒé™�é�¢æ�¿ç”¨ï¼šæ¯�ä¸ªäººçš„ä»·æ ¼æŸ¥è¯¢å�£å¾„ï¼ˆé»˜è®¤å€¼æ�¥è‡ªè§’è‰²ï¼‰r,   r(   r   )r#   Úitemsr.   r-   r/   r0   )r;   Únmr3   Úvs       r   Úperm_matrixrB   ]   s   € à
€CÝ‘”×#Ò#Ñ%Ô%ð ð ‰ˆˆAÝ���b—’˜mÑ,Ô,Ð2°Ñ3Ô3×9Ò9Ñ;Ô;×AÒAÑCÔCˆØÐ&Ð&Ð&ØˆC�‰GøØ€Jr6   c                 ó.   — | pd                      ¦   «         S )Nr(   )r/   )r4   s    r   r9   r9   h   s   € ØˆG��?Š?ÑÔÐr6   é   c                 óü  — |                      ¦   «                              ¦   «         }|sg S |                     dd¦  «        }g }|                      d¦  «        pi                      ¦   «         D ]æ\  }}|                      ¦   «         }d}	||k    s||k    rd}	n3|                     |¦  «        s|                     |¦  «        rd}	n||v rd}	|	dk     r'||v r#||                     d¦  «        d         v rdnd	}
|
}	|	rZ| d
         |         }t          |                     d¦  «        pg ¦  «        }|                     |	t          |d¦  «        z   |f¦  «         Œç| 
                    d„ ¬¦  «         d„ |d|…         D ¦   «         S )uv   è´§å�·/äº§å“�å��å…³é”®è¯� â†’ å€™é€‰ SKUï¼ˆæ‰“åˆ†æŽ’åº�ï¼šè´§å�·ç²¾ç¡® > è´§å�·å‰�ç¼€ > å��ç§°ç²¾ç¡® > å��ç§°åŒ…å�«ï¼‰Ú r(   Úsearchr   iè  i¼  éô  i�  éÈ   ÚskusÚrecordsé2   c                 ó$   — | d          | d         fS )Nr   é   © )Úxs    r   ú<lambda>zmatch_skus.<locals>.<lambda>„   s   €   !¤˜u a¨¤d˜m€ r6   ©Úkeyc                 ó   — g | ]\  }}|‘ŒS rO   rO   )Ú.0Ú_r4   s      r   ú
<listcomp>zmatch_skus.<locals>.<listcomp>…   s   € Ð)Ð)Ð)‘$�!�QˆAÐ)Ð)Ð)r6   N)r0   r/   Úreplacer-   r?   Ú
startswithÚsplitÚlenr:   ÚminÚsort)ÚidxÚkwÚlimitÚkÚkcompactÚscoredÚskuÚstextÚs_lowÚscÚbaseÚrecÚns                r   Ú
match_skusrk   l   s¢  € à
�Š‰
Œ
×ÒÑÔ€AØð Øˆ	Ø�yŠy˜˜bÑ!Ô!€HØ€FØ—w’w˜xÑ(Ô(Ð.¨B×5Ò5Ñ7Ô7ð 2ð 2‰
ˆˆUØ—	’	‘”ˆØˆØ�AŠ:ˆ:˜ (Ò*Ð*ØˆBˆBØ×Ò˜aÑ Ô ð 	 E×$4Ò$4°XÑ$>Ô$>ð 	ØˆBˆBØ�%ˆZˆZØˆBØ�Š8ˆ8˜˜U˜
˜
à˜uŸ{š{¨3Ñ/Ô/°Ô2Ð2Ð2�3�3¸ˆDØˆBØð 	2Ø�f”+˜cÔ"ˆCÝ�C—G’G˜IÑ&Ô&Ð,¨"Ñ-Ô-ˆAØ�MŠM˜2¥ A r¡
¤
™?¨CÐ0Ñ1Ô1Ð1øØ
‡K‚KÐ+Ð+€KÑ,Ô,Ð,Ø)Ð)˜&  % œ.Ð)Ñ)Ô)Ð)r6   c                 óÊ   — | sdS t          | ¦  «        }t          |                     d¦  «        t           ¦  «        r'd„ |d                              ¦   «         D ¦   «         |d<   |S )uW   å¯¹æ–¹å�¯è§�çš„å…¨åº“è�šå�ˆï¼šåŽ»æŽ‰å�¯èƒ½å��æŸ¥åˆ°å…·ä½“å�•æ�®çš„å­—æ®µï¼ˆå�•æ�®å�·ï¼‰NÚlastc                 ó&   — i | ]\  }}|d k    ¯||“ŒS )ÚorderrO   ©rU   ra   rA   s      r   ú
<dictcomp>z"_strip_private.<locals>.<dictcomp>Ž   s#   € ÐHÐHÐH™d˜a ¸1Àº<¸<�Q˜¸<¸<¸<r6   )r    r   r-   r?   )Ústatsr4   s     r   Ú_strip_privaters   ˆ   sa   € àð ØˆtÝˆU‰Œ€AÝ�!—%’%˜‘-”-¥Ñ&Ô&ð IØHÐH a¨¤i§o¢oÑ&7Ô&7ÐHÑHÔHˆˆ&‰	Ø€Hr6   c                 ó„  — t          d„ | D ¦   «         ¦  «        }|sdS d„ }t          d„ | D ¦   «         ¦  «        }t          d„ | D ¦   «         ¦  «        }t          t          d„ | D ¦   «         ¦  «        ¦  «        }t          | d„ ¬¦  «        }t	          |d	         d
¦  «         ||d¦  «         ||d¦  «         ||d¦  «        t	          |d         d
¦  «        t	          t          |¦  «        t          |¦  «        z  d
¦  «        |rt	          ||z  d
¦  «        ndt          | ¦  «        t          t          d„ | D ¦   «         ¦  «        ¦  «        t	          |d¦  «        t	          |d¦  «        |t	          |d         d
¦  «        |                     d¦  «        |                     d¦  «        |                     d¦  «        pddœdœS )uS   ä¸Ž build_price_index.agg å�Œå�£å¾„çš„è½»é‡�è�šå�ˆï¼ˆç”¨äºŽã€Œä»…è‡ªå·±ã€�å­�é›†ï¼‰c              3   óP   K  — | ]!}|                      d ¦  «        ®|d          V — Œ"dS )ÚpriceN©r-   ©rU   Úrs     r   ú	<genexpr>z_agg.<locals>.<genexpr>”   s5   è è € ÐJÐJ˜q¨q¯uªu°W©~¬~Ð/I��'”
Ð/IÐ/IÐ/IÐ/IÐJÐJr6   Nc                 ó>  — t          | ¦  «        dk    rt          | d         d¦  «        S t          | ¦  «        dz
  |z  }t          |¦  «        }t          |dz   t          | ¦  «        dz
  ¦  «        }t          | |         d||z
  z
  z  | |         ||z
  z  z   d¦  «        S )NrN   r   é   )r[   ÚroundÚintr\   )ÚvalsÚqqÚposÚloÚhis        r   Úqz_agg.<locals>.q˜   s”   € Ýˆt‰9Œ9˜Š>ˆ>Ý˜˜aœ !Ñ$Ô$Ð$Ý�4‰yŒy˜1‰} Ñ"ˆÝ�‰XŒXˆÝ��a‘�˜T™œ Q™Ñ'Ô'ˆÝ�T˜"”X  c¨B¡h¡Ñ0°4¸´8¸sÀR¹xÑ3HÑHÈ!ÑLÔLÐLr6   c              3   óD   K  — | ]}|                      d ¦  «        pdV — ŒdS )Úqtyr   Nrw   rx   s     r   rz   z_agg.<locals>.<genexpr>    s1   è è € Ð4Ð4 q�—’�e‘”Ð! Ð4Ð4Ð4Ð4Ð4Ð4r6   c              3   óD   K  — | ]}|                      d ¦  «        pdV — ŒdS )Útotalr   Nrw   rx   s     r   rz   z_agg.<locals>.<genexpr>¡   s1   è è € Ð6Ð6¨�—’�g‘”Ð# !Ð6Ð6Ð6Ð6Ð6Ð6r6   c              3   ón   K  — | ]0}|                      d ¦  «        ¯|                      d ¦  «        pdV — Œ1dS )Úunitr(   Nrw   rx   s     r   rz   z_agg.<locals>.<genexpr>¢   s@   è è € ÐOÐO°ÀÇÂÀvÁÄÐO˜Ÿš˜f™œÐ+¨ÐOÐOÐOÐOÐOÐOr6   c                 ó’   — t          |                      d¦  «        pd¦  «        t          |                      d¦  «        pd¦  «        fS ©NÚdater(   ro   ©r.   r-   ©ry   s    r   rQ   z_agg.<locals>.<lambda>£   s:   € ­¨Q¯UªU°6©]¬]Ð-@¸bÑ)AÔ)AÅ3ÀqÇuÂuÈWÁ~Ä~ÐG[ÐY[ÑC\ÔC\Ð(]€ r6   rR   r   r|   g      Ð?g      à?g      è?éÿÿÿÿc              3   óP   K  — | ]!}|                      d ¦  «        ¯|d          V — Œ"dS ©ÚcustomerNrw   rx   s     r   rz   z_agg.<locals>.<genexpr>¨   s<   è è € Ð=rÐ=rÐPQÐ`a×`eÒ`eÐfpÑ`qÔ`qÐ=r¸aÀ
¼mÐ=rÐ=rÐ=rÐ=rÐ=rÐ=rr6   é   é   rv   r�   r†   rŠ   r(   )rv   r�   r†   rŠ   )r\   Úp25Úp50Úp75ÚmaxÚavgÚweighted_avgÚ
deal_countÚcustomer_countÚ	qty_totalÚamount_totalÚunitsrm   )ÚsortedÚsumÚsetr™   r}   r[   r-   )rK   Úpsr„   ÚqsumÚtsumr    Úlatests          r   Ú_aggr¨   ’   sÍ  € å	ÐJÐJ GÐJÑJÔJÑ	JÔ	J€BØð ØˆtðMð Mð Mõ Ð4Ð4¨GÐ4Ñ4Ô4Ñ4Ô4€DÝÐ6Ð6¨gÐ6Ñ6Ô6Ñ6Ô6€DÝ•3ÐOÐO°gÐOÑOÔOÑOÔOÑPÔP€EÝ�Ð]Ð]Ð^Ñ^Ô^€Få�R˜”U˜A‰Œ q q¨¨T¡{¤{¸1¸1¸RÀ¹;¼;ÈqÈqÐQSÐUYÉ{Ì{Ý�R˜”V˜QÑÔ­­c°"©g¬g½¸B¹¼Ñ.?ÀÑ(CÔ(CØ15Ð?�˜d T™k¨1Ñ-Ô-Ð-¸4Ý˜'‘l”lµc½#Ð=rÐ=rÐU\Ð=rÑ=rÔ=rÑ:rÔ:rÑ6sÔ6sÝ˜4 ‘^”^µU¸4À±^´^ÈeÝ  w¤°Ñ3Ô3¸V¿ZºZÈÑ=OÔ=OØŸ
š
 5Ñ)Ô)°6·:²:¸fÑ3EÔ3EÐ3KÈðMð Mðð ð r6   c                 ó`   — 	 |sdS t          | |z
  |z  dz  d¦  «        S # t          $ r Y dS w xY w)u'   a ç›¸å¯¹ b çš„é«˜/ä½Žç™¾åˆ†æ¯”ï¼ˆb>0ï¼‰Ng      Y@rN   )r}   r!   )r<   Úbs     r   Ú_deltar«   ¯   sS   € ðØð 	Ø�4Ý�a˜!‘e˜q‘[ 5Ñ(¨!Ñ,Ô,Ð,øÝð ð ð Øˆtˆtðøøøs   ‚ † Ÿ
-¬-r(   é,  c                 óD  ‡‡‡ ‡!‡"‡#‡$— t          ¦   «         Š"t          | ¦  «        \  }}t          | pi                      d¦  «        ¦  «        }| pi                      d¦  «        pd}|dk    r	ddd|dœd	fS t          |¦  «        }t          ‰¦  «        Št          t	          ‰pd
¦  «        ¦  «        Š‰dvrd
Š‰"d                              d¦  «        pi Š$ˆfd„}	d||t
                               ||¦  «        |||‰t          ‰pddd‰"d                              d¦  «        ‰"d                              d¦  «        ‰"d                              d¦  «        dœgˆ$fd„dD ¦   «         z   ˆ"fd„dD ¦   «         dœ}
|�sµ‰�rÁt          | ¦  «        Š!g }‰"d                              ¦   «         D �]0\  }} |	|                     d¦  «        pg ¦  «        }|dk    rˆfd„|D ¦   «         }nˆ!ˆfd„|D ¦   «         }|sŒMt          |¦  «        }||d<   |                     d¦  «        pi                      d¦  «        pd
|d<   |                     d¦  «        pi                      d ¦  «        pd
|d <   |                     d¦  «        pi                      d!¦  «        pd
|d!<   |                     d¦  «        pi                      d"¦  «        |d"<   | 
                    |¦  «         �Œ2|                     d#„ ¬$¦  «         ‰|
d%<   |d d&…         |
d'<   t          |¦  «        |
d(<   d)‰t          |¦  «        fz  |
d*<   |d+k    rd,|z  |
d-<   |
d.fS g }t          ‰"d                              ¦   «         ¦  «        D ]†\  }}‰rGt           |	|                     d¦  «        pg ¦  «        ¦  «        }|r| 
                    ||f¦  «         ŒN|                     d/¦  «        r#| 
                    |d/         d0         |f¦  «         Œ‡|                     d¬1¦  «         g |
d2<   ˆ"fd3„|d d4…         D ¦   «         |
d5<   ‰rd6nd7|
d*<   |
d.fS t          ‰"|¦  «        }|sJg |
d2<   d|
d8<   d9‰"d                              d:¦  «        ‰"d                              d¦  «        fz  |
d*<   |
d.fS |d;         }‰"d         |         }t          |                     d¦  «        pi ¦  «        }||d<   |                     d<¦  «        d=k    |d><   |d>          |d?<   |                     d<¦  «        d@k    rd|d?<   d|
d8<   ||
d<   ||
d<   ˆ"fdA„|D ¦   «         |
d2<    |	|                     d¦  «        pg ¦  «        }|                     d/¦  «        pi }‰r!|rt!          t          |¦  «        ¦  «        nd Š#nt!          |¦  «        Š#‰#�|                     d¦  «        ‰#d<   ‰#|
dB<   ‰pd|
dC<   |                     d¦  «        pi |
dD<   |                     dE¦  «        pg |
dE<   |                     dF¦  «        pi |
dF<   t          | ¦  «        Š |dk    rt          |¦  «        }nˆ fdG„|D ¦   «         }‰rˆfdH„|D ¦   «         }|rt          |¦  «        nd }||
dI<   |d+k    rdJ|t          |¦  «        fz  |
d-<   i }|D ]@}|                     |                     d%¦  «        pdKg ¦  «         
                    |¦  «         ŒAg }|                     ¦   «         D ]”\  }}t          |¦  «        }||d%<   d|dL<   t%          t'          dM„ |D ¦   «         ¦  «        ¦  «        |dN<   ‰#r1t)          |dO         dP         ‰#pi                      dQ¦  «        ¦  «        nd |dR<   | 
                    |¦  «         Œ•|                     dS„ ¬$¦  «         ||
dT<   ‰#rV|rT‰rdUndV‰r|d;         dR         n,t)          t+          dW„ |D ¦   «         ¦  «        ‰#dQ         ¦  «        ˆ#fdX„dYD ¦   «         dZœ|
d[<   t%          |d\„ d¬]¦  «        }t          |¦  «        |
d^<   t-          d;t          |¦  «        |z
  ¦  «        |
d_<   g |
d<   |d |…         D ]à}|                     d`¦  «        |                     d%¦  «        |                     da¦  «        pd
|                     db¦  «        |                     dP¦  «        |                     dc¦  «        |                     dd¦  «        |                     de¦  «        dfœ}|dk    r|                     d¦  «        |d<   |
d          
                    |¦  «         Œá|
d.fS )gNr'   r%   r&   r	   FuE   æ— æ�ƒæŸ¥çœ‹ä»·æ ¼æ•°æ�®ï¼ˆæ�ƒé™�é�¢æ�¿ï¼šä»·æ ¼æŸ¥è¯¢ = ä¸�å�¯è§�ï¼‰Úprice_forbidden)ÚokÚerrorÚcodeÚscopei“  r(   )Ú2024Ú2025Ú2026ÚmetaÚby_yearc                 óB   •— ‰st          | ¦  «        S ˆfd„| D ¦   «         S )uU   æŒ‰æ‰€é€‰å¹´ä»½è¿‡æ»¤æ˜Žç»†ï¼›year ä¸ºç©ºï¼�ä¸�è¿‡æ»¤ï¼ˆä¸Ž old è¡Œä¸ºå®Œå…¨ä¸€è‡´ï¼‰c                 ó`   •— g | ]*}t          |                     d ¦  «        ¦  «        ‰k    ¯(|‘Œ+S ©ÚyearrŽ   )rU   ry   r»   s     €r   rW   z%query.<locals>.yf.<locals>.<listcomp>Í   s5   ø€ Ð<Ð<Ð<�a¥ Q§U¢U¨6¡]¤]Ñ!3Ô!3°tÒ!;Ð!;�Ð!;Ð!;Ð!;r6   )Úlist)Úrsr»   s    €r   Úyfzquery.<locals>.yfÉ   s0   ø€ àð 	Ý˜‘8”8ˆOØ<Ð<Ð<Ð<˜2Ð<Ñ<Ô<Ð<r6   Tr   u   å…¨éƒ¨Úrecord_countÚsku_with_pricer�   ©r»   Úlabelr¿   Ú	sku_countr�   c           
      ó  •— g | ]…}||‰                      |¦  «        pi                       d d¦  «        ‰                      |¦  «        pi                       dd¦  «        ‰                      |¦  «        pi                       dd¦  «        dœ‘Œ†S )r¿   r   rÃ   r�   rÁ   rw   )rU   ÚyÚ
years_metas     €r   rW   zquery.<locals>.<listcomp>×   s¯   ø€ ð @ð @ð @ð "#ð	 '(°!Ø/9¯~ª~¸aÑ/@Ô/@Ð/FÀB×.KÒ.KÈNÐ\]Ñ.^Ô.^Ø,6¯NªN¸1Ñ,=Ô,=Ð,CÀ×+HÒ+HÈÐVWÑ+XÔ+XØ1;·²ÀÑ1BÔ1BÐ1HÀb×0MÒ0MÐN^Ð`aÑ0bÔ0bðdð dð @ð @ð @r6   c                 óH   •— i | ]}|‰d                                |¦  «        “ŒS )r¶   rw   )rU   ra   r^   s     €r   rq   zquery.<locals>.<dictcomp>Ü   s=   ø€ ð Oð Oð O¨q�Q˜˜FœŸš¨Ñ*Ô*ð Oð Oð Or6   )Ú	generatedÚ
year_rangeÚcriteriarÀ   r¿   r�   Úsourcesr·   )r¯   r²   Úscope_defaultÚscope_labelÚviewerr%   ÚkeywordÚcustomer_filterÚ
disclaimerr»   Úyear_optionsr¶   rJ   rK   c                 óF   •— g | ]}‰|                      d ¦  «        pdv ¯|‘ŒS ©r“   r(   rw   ©rU   ry   r“   s     €r   rW   zquery.<locals>.<listcomp>è   s4   ø€ ÐSÐSÐS !¨X¸!¿%º%À
Ñ:KÔ:KÐ:QÈrÐ-RÐ-R˜AÐ-RÐ-RÐ-Rr6   c                 óŽ   •— g | ]A}‰|                      d ¦  «        pdv r&t          |                      d¦  «        ¦  «        ‰v ¯?|‘ŒBS )r“   r(   r&   )r-   r9   )rU   ry   Úal0r“   s     €€r   rW   zquery.<locals>.<listcomp>ê   sZ   ø€ ð <ð <ð < !¨X¸!¿%º%À
Ñ:KÔ:KÐ:QÈrÐ-RÐ-RÝ # A§E¢E¨'¡N¤NÑ 3Ô 3°sÐ :Ð :ð Ø :Ð :Ð :r6   rd   ÚproductÚspecÚcatÚlife_monthsc                 ó2   — |                       d¦  «        pd S ©NrŸ   r   rw   ©Úzs    r   rQ   zquery.<locals>.<lambda>õ   s   €  q§u¢u¨^Ñ'<Ô'<Ð'AÀÐ%B€ r6   rR   r“   é<   Úcustomer_skusÚcustomer_sku_totalu£   å®¢æˆ·ã€Œ%sã€�å��ä¸‹ %d ä¸ªè´§å�·æœ‰æˆ�äº¤ä»·ï¼ˆæŒ‰é‡‘é¢�æŽ’åº�ï¼Œæœ€å¤šæ˜¾ç¤º 60 ä¸ªï¼‰ï¼›ç‚¹è´§å�·æˆ–ç›´æŽ¥åœ¨ä¸Šé�¢è¾“å…¥è´§å�·å�¯çœ‹è¯¥è´§å�·çš„ä»·æ ¼åŒºé—´ã€‚Úhintr   u€   å½“å‰�å�£å¾„ï¼šä»…æ˜¾ç¤ºé”€å”®å‘˜ä¸ºã€Œ%sã€�çš„æˆ�äº¤æ˜Žç»†ï¼›å…¨åº“åŒºé—´å¯¹æ‰€æœ‰æŽˆæ�ƒè€…å�¯è§�ï¼Œä½†ä¸�å�«å…¶ä»–å®¢æˆ·å��ã€‚Úown_noterI   rr   rœ   )ÚreverseÚmatchesc                 óp   •— g | ]2\  }}|‰d          |         d                               d¦  «        pd|dœ‘Œ3S )rJ   rØ   r'   r(   )rd   r'   rœ   rw   )rU   rj   r4   r^   s      €r   rW   zquery.<locals>.<listcomp>	  s]   ø€ ð ?ð ?ð ?Ù-1¨Q°ð  !¨3¨v¬;°q¬>¸)Ô+D×+HÒ+HÈÑ+PÔ+PÐ+VÐTVØ&'ð)ð )ð ?ð ?ð ?r6   é   Úhotu‚   è¾“å…¥è´§å�·ï¼ˆå¦‚ 2AM101-1ï¼‰æˆ–äº§å“�å��å…³é”®è¯�ï¼ˆå¦‚ FastAmpliï¼‰ï¼›å¹´ä»½åˆ‡æ�¢å�ªå½±å“�æ˜Žç»†ä¸ŽåŒºé—´ï¼Œä¸�æ”¹è´§å�·æ€»é‡�uF   è¾“å…¥è´§å�·ï¼ˆå¦‚ 2AM101-1ï¼‰æˆ–äº§å“�å��å…³é”®è¯�ï¼ˆå¦‚ FastAmpliï¼‰Úfoundur   æ²¡æœ‰åŒ¹é…�çš„è´§å�·æˆ–äº§å“�å��ï¼›å½“å‰�ä»·æ ¼ç´¢å¼•è¦†ç›– %s å¹´ ERP æˆ�äº¤è®°å½•ï¼ˆ%d ä¸ªè´§å�·æœ‰æˆ�äº¤ä»·ï¼‰rÉ   r   ÚsourceÚerp_onlyÚ	in_masterÚunlistedÚcomponent_ofc                 ó  •— g | �]}|‰d          |         d                               d¦  «        pd‰d          |         d                               d¦  «        pd‰d          |         d                               d¦  «        pd‰d          |         d                               d¦  «        ‰d          |         d                               d¦  «        ‰d          |                               d¦  «        pi                       d	d
¦  «        dœ‘�ŒS )rJ   rØ   r'   r(   rÙ   rÚ   rÛ   rë   rr   rœ   r   )rd   r'   rÙ   rÚ   rÛ   rë   rœ   rw   )rU   r4   r^   s     €r   rW   zquery.<locals>.<listcomp>#  s  ø€ ð 'ð 'ñ 'ð ð  !¨3¨v¬;°q¬>¸)Ô+D×+HÒ+HÈÑ+PÔ+PÐ+VÐTVØ!$ V¤¨Q¤°	Ô!:×!>Ò!>¸vÑ!FÔ!FÐ!LÈ"Ø # F¤¨A¤¨yÔ 9× =Ò =¸eÑ DÔ DÐ JÈØ'*¨6¤{°1¤~°iÔ'@×'DÒ'DÀ]Ñ'SÔ'SØ"% f¤+¨a¤.°Ô";×"?Ò"?ÀÑ"IÔ"IØ'*¨6¤{°1¤~×'9Ò'9¸'Ñ'BÔ'BÐ'HÀb×&MÒ&MÈlÐ\]Ñ&^Ô&^ð`ð `ð 'ñ 'ð 'r6   ÚmarketÚmarket_yearÚsku_by_yearr    Úby_unitc                 ó\   •— g | ](}t          |                     d ¦  «        ¦  «        ‰v ¯&|‘Œ)S )r&   )r9   r-   )rU   ry   Úals     €r   rW   zquery.<locals>.<listcomp>>  s5   ø€ Ð@Ð@Ð@�Q¥c¨!¯%ª%°©.¬.Ñ&9Ô&9¸RÐ&?Ð&?ˆqÐ&?Ð&?Ð&?r6   c                 óF   •— g | ]}‰|                      d ¦  «        pdv ¯|‘ŒS rÔ   rw   rÕ   s     €r   rW   zquery.<locals>.<listcomp>@  s4   ø€ ÐGÐGÐG�Q ¨a¯eªe°JÑ.?Ô.?Ð.EÀ2Ð!FÐ!FˆqÐ!FÐ!FÐ!Fr6   ÚmineuŒ   å½“å‰�å�£å¾„ï¼šä»…æ˜¾ç¤ºé”€å”®å‘˜ä¸ºã€Œ%sã€�çš„æˆ�äº¤æ˜Žç»†ï¼ˆ%d æ�¡ï¼‰ï¼›å…¨åº“åŒºé—´å¯¹æ‰€æœ‰æŽˆæ�ƒè€…å�¯è§�ï¼Œä½†ä¸�å�«å…¶ä»–å®¢æˆ·å��ã€‚u   â€”Úis_minec              3   ój   K  — | ].}|                      d ¦  «        ¯|                      d ¦  «        V — Œ/dS )r&   Nrw   )rU   rP   s     r   rz   zquery.<locals>.<genexpr>P  s;   è è € Ð$RÐ$R¸À1Ç5Â5ÈÁ>Ä>Ð$R Q§U¢U¨7¡^¤^Ð$RÐ$RÐ$RÐ$RÐ$RÐ$Rr6   Ú
last_salesrm   rv   r—   Úvs_market_p50c                 ó2   — |                       d¦  «        pd S rÝ   rw   rÞ   s    r   rQ   zquery.<locals>.<lambda>S  s   € ˜aŸeše NÑ3Ô3Ð8°qÐ9€ r6   Úby_customerÚselectedÚself_allc              3   ó2   K  — | ]}|d          d         V — ŒdS )rm   rv   NrO   rx   s     r   rz   zquery.<locals>.<genexpr>[  s+   è è € Ð8Ð8¨a�q˜”y Ô)Ð8Ð8Ð8Ð8Ð8Ð8r6   c                 ó<   •— i | ]}|‰                      |¦  «        “ŒS rO   rw   )rU   ra   rñ   s     €r   rq   zquery.<locals>.<dictcomp>\  s%   ø€ ÐWÐWÐW¨A�q˜&Ÿ*š* Q™-œ-ÐWÐWÐWr6   )r\   r—   r™   r›   )Úcustomer_scopeÚvs_market_p50_pctrñ   Úcomparec                 ó’   — t          |                      d¦  «        pd¦  «        t          |                      d¦  «        pd¦  «        fS rŒ   rŽ   r�   s    r   rQ   zquery.<locals>.<lambda>`  s;   € ­C°·²°f±´Ð0CÀÑ,DÔ,DÅcÈ!Ï%Ê%ÐPWÉ.Ì.ÐJ^Ð\^ÑF_ÔF_Ð+`€ r6   )rS   rå   Úrecords_totalÚ	truncatedr�   rŠ   r†   rˆ   ro   r»   )r�   r“   rŠ   r†   rv   rˆ   ro   r»   )r   r5   r9   r-   r.   ÚSCOPE_LABELÚ
DISCLAIMERr=   r?   r¨   r:   r]   r[   r¼   rk   r    rs   Ú
setdefaultr¡   r£   r«   r\   r™   )%r1   Úsku_kwr“   Úrecord_limitr»   r²   Údefault_scoper'   r%   r¾   rh   Úrows0rd   ri   r½   Úvis0r<   Útoprj   ÚcandsÚprimaryÚprodÚall_recsÚ	stats_allÚvisrø   Úbcsry   ÚrowsÚcÚ
vis_sortedr;   rö   r×   r^   rñ   rÆ   s%     ` `                           @@@@@r   Úqueryr  ¹   sø
  øøøøøøø€ Ý
‰,Œ,€CÝ$ T™?œ?Ñ€Eˆ=Ý��
˜×Ò Ñ'Ô'Ñ(Ô(€DØˆJ�B×Ò˜FÑ#Ô#Ð. w€DØ�‚€ØÐ&mØ)°Eð;ð ;Ø<?ð@ð 	@õ �‰[Œ[€FÝ�8‰}Œ}€HÝ�s�4�:˜2‰ŒÑÔ€DØÐ+Ð+Ð+ØˆØ�V”—’ Ñ+Ô+Ð1¨r€Jð=ð =ð =ð =ð =ð  ¸Ý&Ÿ?š?¨5°%Ñ8Ô8ÀDÐRVØ°(Í*Ø�M˜EØ&+°hØ.1°&¬k¯oªo¸nÑ.MÔ.MØ+.¨v¬;¯?ª?Ð;KÑ+LÔ+LØ03°F´·²Ð@PÑ0QÔ0QðSð Sð Tð@ð @ð @ð @ð '?ð	@ñ @ô @ñ	@ðOð Oð Oð OðNðOñ Oô OðPð P€Dð" ñ .Øñ 	å˜dÑ#Ô#ˆCØˆEØ œK×-Ò-Ñ/Ô/ð  ñ  ‘��SØ�R˜Ÿš 	Ñ*Ô*Ð0¨bÑ1Ô1�Ø˜E’>�>ØSÐSÐSÐS rÐSÑSÔS�D�Dð<ð <ð <ð <ð < rð <ñ <ô <�Dàð ØÝ˜‘J”J�Ø��%‘Ø ŸWšW YÑ/Ô/Ð5°2×:Ò:¸6ÑBÔBÐHÀb��&‘	Ø ŸWšW YÑ/Ô/Ð5°2×:Ò:¸6ÑBÔBÐHÀb��&‘	ØŸGšG IÑ.Ô.Ð4°"×9Ò9¸%Ñ@Ô@ÐFÀB��%‘Ø$'§G¢G¨IÑ$6Ô$6Ð$<¸"×#AÒ#AÀ-Ñ#PÔ#P��-Ñ Ø—’˜Q‘”�‘Ø�JŠJÐBÐBˆJÑCÔCÐCØ'ˆD�ÑØ$)¨#¨2¨#¤JˆD�Ñ!Ý),¨U©¬ˆDÐ%Ñ&ðgØjrÕtwÐx}Ñt~Ôt~Ðiñ@ˆD�‰Là˜Š~ˆ~ð%iØkoñ%p��ZÑ à˜�9ÐØˆÝ˜S œ[×.Ò.Ñ0Ô0Ñ1Ô1ð 	>ð 	>‰HˆC�Øð >Ý˜˜˜3Ÿ7š7 9Ñ-Ô-Ð3°Ñ4Ô4Ñ5Ô5�Øð )Ø—J’J  3˜xÑ(Ô(Ð(øØ—’˜Ñ!Ô!ð >Ø—
’
˜C œL¨Ô6¸Ð<Ñ=Ô=Ð=øØ�Š˜ˆÑÔÐØˆˆY‰ð?ð ?ð ?ð ?Ø58¸¸"¸´Xð?ñ ?ô ?ˆˆU‰ð Y]ð`ð Tð Tà_ð 	ˆV‰ð �SˆyÐå�s˜FÑ#Ô#€EØð ØˆˆY‰ØˆˆW‰ð LØ�ŒK�OŠO˜LÑ)Ô)¨3¨v¬;¯?ª?Ð;KÑ+LÔ+LðONñ NˆˆV‰à�SˆyÐà�AŒh€GØ
ˆfŒ+�gÔ
€CÝ�—’˜	Ñ"Ô"Ð( bÑ)Ô)€DØ€Dˆ�KØŸš Ñ*Ô*¨jÒ8€DˆÑØ Ô,Ð,€DˆÑØ‡x‚x�ÑÔ˜^Ò+Ð+ØˆˆZÑØ€Dˆ�MØ€Dˆ�KØ€Dˆ�Oð'ð 'ð 'ð 'ð !&ð'ñ 'ô '€Dˆ�Oð ˆr�#—'’'˜)Ñ$Ô$Ð*¨Ñ+Ô+€HØ—’˜Ñ Ô Ð& B€IØð +Ø3;ÐE•¥ X¡¤Ñ/Ô/Ð/Àˆˆå 	Ñ*Ô*ˆØÐØ%ŸMšM¨)Ñ4Ô4ˆˆyÑØ€Dˆ�NØ˜- %€DˆÑØ#Ÿ-š-¨	Ñ2Ô2Ð8°b€DˆÑØ—M’M 'Ñ*Ô*Ð0¨b€Dˆ�MØ—m’m IÑ.Ô.Ð4°"€Dˆ�Oõ 
�TÑ	Ô	€BØ�‚~€~Ý�8‰nŒnˆˆà@Ð@Ð@Ð@˜(Ð@Ñ@Ô@ˆØð HØGÐGÐGÐG˜#ÐGÑGÔGˆØÐ%�4�‰9Œ9ˆ9 €DØ€Dˆ�LØ�‚~€~ðaØdhÕjmÐnqÑjrÔjrÐcsñtˆˆZÑð €CØð Að AˆØ�Š�q—u’u˜ZÑ(Ô(Ð1¨E°2Ñ6Ô6×=Ò=¸aÑ@Ô@Ð@Ð@Ø€DØ—’‘”ð ð ‰ˆˆ2Ý�‰HŒHˆØˆˆ*‰Øˆˆ)‰Ý ¥Ð$RÐ$R¸RÐ$RÑ$RÔ$RÑ!RÔ!RÑSÔSˆˆ,‰ØV\Ðf�V A f¤I¨gÔ$6¸¸À2×8JÒ8JÈ5Ñ8QÔ8QÑRÔRÐRÐbfˆˆ/ÑØ�Š�A‰ŒˆˆØ‡I‚IÐ9Ð9€IÑ:Ô:Ð:Ø€DˆÑð ð 
�$ð 
à,4ÐD˜j˜j¸*Ø=Eð "I  a¤¨Ô!9Ð!9Ý•3Ð8Ð8°4Ð8Ñ8Ô8Ñ8Ô8¸&À¼-ÑHÔHØWÐWÐWÐWÐ1VÐWÑWÔWð	
ð 
ˆˆY‰õ ˜Ð!`Ð!`ÐjnÐoÑoÔo€JÝ 
™OœO€DˆÑÝ˜A�s :™œ°Ñ=Ñ>Ô>€DˆÑØ€Dˆ�OØ˜˜˜Ô&ð $ð $ˆØ—u’u˜V‘}”}°!·%²%¸
Ñ2CÔ2CÈQÏUÊUÐSYÉ]Ì]ÐM`Ð^`Ø—e’e˜E‘l”l¨Q¯UªU°7©^¬^ÀaÇeÂeÈGÁnÄnØŸš˜g™œ°·²°f±´ð?ð ?ˆð �EŠ>ˆ>ØŸ5š5 ™>œ>ˆC�‰LØˆYŒ×Ò˜sÑ#Ô#Ð#Ð#Ø�ˆ9Ðr6   c           
      ó  — d| j         v rId„ t          | j                              d¦  «        d         ¦  «                             ¦   «         D ¦   «         ni }	 t	          |t          |                     d¦  «        ¦  «        t          |                     d¦  «        ¦  «        t          |                     d¦  «        ¦  «        ¬¦  «        \  }}n!# t          $ r}dd	|z  d
œd}}Y d}~nd}~ww xY w|                      ||¦  «         dS )uS   åœ¨ é”€å”®å·¥ä½œå�°æœ�åŠ¡.py çš„ do_GET é‡Œè°ƒç”¨ï¼šprice_api.handle_get(self, _au)ú?c                 ó&   — i | ]\  }}||d          “ŒS )r   rO   rp   s      r   rq   zhandle_get.<locals>.<dictcomp>q  s"   € Ð	KÐ	KÐ	K‘d�a˜ˆ!ˆQˆqŒTÐ	KÐ	KÐ	Kr6   rN   rd   r“   r»   rº   Fu   ä»·æ ¼ç´¢å¼•ä¸�å�¯ç”¨ï¼š%s)r¯   r°   rH   N)	r   r   rZ   r?   r  r9   r-   r!   Ú
_send_json)ÚhandlerÚauÚqsÚresr±   Úes         r   Ú
handle_getr&  o  s  € àORÐV]ÔVbÐObÐObÐ	KÐ	K�h w¤|×'9Ò'9¸#Ñ'>Ô'>¸qÔ'AÑBÔB×HÒHÑJÔJÐ	KÑ	KÔ	KÐ	KÐhj€BðRÝ˜"�c "§&¢&¨¡-¤-Ñ0Ô0µ#°b·f²f¸ZÑ6HÔ6HÑ2IÔ2IÝ" 2§6¢6¨&¡>¤>Ñ2Ô2ð4ñ 4ô 4‰	ˆˆTˆTøåð Rð Rð RØ Ð+GÈ!Ñ+KÐLÐLÈcˆTˆˆˆˆˆˆøøøøðRøøøà×Ò�s˜DÑ!Ô!Ð!Ð!Ð!s   ÁA6C Ã
C+Ã
C&Ã&C+c                  ó|  ‡— dd l } |                      ¦   «         }|                     dd¬¦  «         |                     dd¬¦  «         |                     ddd¬¦  «         |                     d	d
¬¦  «         |                     dd¬¦  «         |                     dt          d¬¦  «         |                     ¦   «         }t          |j        |j        dœ|j        |j	        |j
        ¬¦  «        \  Š}t          d|‰                     d¦  «        ‰                     d¦  «        fz  ¦  «         ‰                     d¦  «        rt          d‰d         ¦  «         d S t          dt          j        ‰                     d¦  «        d¬¦  «        ¦  «         t          dt          j        ˆfd„dD ¦   «         d¬¦  «        ¦  «         t          dt          j        ‰                     d¦  «        d¬¦  «        ¦  «         t          d t          j        ‰                     d!¦  «        d¬¦  «        ¦  «         t          d"t          j        ‰                     d#¦  «        d¬¦  «        ¦  «         t          d$t          j        d%„ ‰                     d&g ¦  «        D ¦   «         d¬¦  «        ¦  «         t          d't          j        ‰                     d(g ¦  «        d |j        …         d¬¦  «        ¦  «         t          d)t!          t#          d*„ ‰                     d(g ¦  «        D ¦   «         ¦  «        ¦  «        d d+…         ¦  «         d S ),Nr   z--skur(   )r2   z
--customerz--yearu   2024/2025/2026ï¼Œç•™ç©º=å…¨éƒ¨)r2   Úhelpz--useru	   åˆ˜æ–°å…ƒz--roler&   z--limité   )Útyper2   )r'   r%   rº   zHTTP %d  scope=%s  year=%sr²   r»   r°   zerror:zyear_options:rÒ   F)Úensure_asciizproduct:c                 ód   •— i | ],}|‰                      d i ¦  «                              |¦  «        “Œ-S )rØ   rw   )rU   ra   r$  s     €r   rq   z_cli.<locals>.<dictcomp>‹  sI   ø€ ð "gð "gð "gÀq ! S§W¢W¨Y¸Ñ%;Ô%;×%?Ò%?ÀÑ%BÔ%Bð "gð "gð "gr6   )rd   r'   rÙ   rÚ   rÛ   rë   rî   zmarket :rñ   zsku_by_year:ró   zmine   :rø   zby_cust:c                 óJ   — g | ] }|d          |d         d         |d         dœ‘Œ!S )r“   rm   rv   rœ   )r  rm   rj   rO   rx   s     r   rW   z_cli.<locals>.<listcomp>‘  sN   € ð "^ð "^ð "^Ø=>ð )*¨*¬¸qÀ¼yÈÔ?QØ()¨,¬ð#9ð #9ð "^ð "^ð "^r6   rþ   zrecords:rK   zcustomers named in response:c              3   ó&   K  — | ]}|d          V — ŒdS r’   rO   rx   s     r   rz   z_cli.<locals>.<genexpr>–  s&   è è € ÐCÐC q�Q�z”]ÐCÐCÐCÐCÐCÐCr6   rè   )ÚargparseÚArgumentParserÚadd_argumentr~   Ú
parse_argsr  r1   r%   rd   r“   r»   Úprintr-   r   Údumpsr`   r¡   r£   )r/  Úapr<   r±   r$  s       @r   Ú_clir6  {  s4  ø€ Ø€O€O€OØ	×	 Ò	 Ñ	"Ô	"€BØ‡O‚O�G R€OÑ(Ô(Ð(Ø‡O‚O�L¨"€OÑ-Ô-Ð-Ø‡O‚O�H bÐ/O€OÑPÔPÐPØ‡O‚O�H k€OÑ2Ô2Ð2Ø‡O‚O�H g€OÑ.Ô.Ð.Ø‡O‚O�I¥C°€OÑ3Ô3Ð3Ø
�Š‰Œ€AÝ˜qœv¨q¬vÐ6Ð6¸¼¸q¼zÐPQÔPVÐWÑWÔW�I€CˆÝ	Ð
&¨$°·²¸Ñ0@Ô0@À#Ç'Â'È&Á/Ä/Ð)RÑ
RÑSÔSÐSØ
‡w‚wˆwÑÔð Ýˆh˜˜GœÑ%Ô%Ð%ØˆÝ	ˆ/�4œ: c§g¢g¨nÑ&=Ô&=ÈEÐRÑRÔRÑSÔSÐSÝ	ˆ*•d”jð "gð "gð "gð "gØ"eð"gñ "gô "gà.3ð5ñ 5ô 5ñ 6ô 6ð 6õ 
ˆ*•d”j §¢¨Ñ!2Ô!2ÀÐGÑGÔGÑHÔHÐHÝ	ˆ.�$œ* S§W¢W¨]Ñ%;Ô%;È%ÐPÑPÔPÑQÔQÐQÝ	ˆ*•d”j §¢¨¡¤¸uÐEÑEÔEÑFÔFÐFÝ	ˆ*•d”jð "^ð "^ØBEÇ'Â'È-ÐY[ÑB\ÔB\ð"^ñ "^ô "^à.3ð5ñ 5ô 5ñ 6ô 6ð 6õ 
ˆ*•d”j §¢¨°BÑ!7Ô!7¸¸¼¸Ô!AÐPUÐVÑVÔVÑWÔWÐWÝ	Ð
(Ý
•ÐCÐC¨C¯GªG°I¸rÑ,BÔ,BÐCÑCÔCÑCÔCÑ
DÔ
DÀSÀbÀSÔ
IñKô Kð Kð Kð Kr6   Ú__main__)rD   )r(   r(   r¬   r(   )&Ú__doc__r   r   ÚsysÚ	threadingÚtimeÚurllib.parser   r   ÚdirnameÚabspathÚ__file__Ú
SCRIPT_DIRÚROOTÚjoinÚDATA_DIRr   r   ÚLockr   r   r	  r
  r   r#   r5   r=   rB   r9   rk   rs   r¨   r«   r  r&  r6  Ú__name__ÚexitrO   r6   r   ú<module>rG     s  ððð ð& €€€Ø 	€	€	€	Ø 
€
€
€
Ø Ð Ð Ð Ø €€€Ø !Ð !Ð !Ð !Ð !Ð !àŒW�_Š_˜RœWŸ_š_¨XÑ6Ô6Ñ7Ô7€
Ø	„w‡‚�zÑ"Ô"€ØŒ7�<Š<˜˜hÑ'Ô'€ØŒW�\Š\˜(Ð$6Ñ7Ô7€
ØŒG�LŠL˜Ð#:Ñ;Ô;€	àˆ	ŒÑÔ€Ø Ð	%Ð	%€à$Ð->ÈÐTÐT€ðg€
ð
ð 
ð 
ðð ð ð
ð 
ð 
ð
ð 
ð 
ðð ð ðð ð ð*ð *ð *ð *ð8ð ð ðð ð ð:ð ð ðrð rð rð rðl"ð "ð "ðKð Kð Kð< ˆzÒÐØ€C„HˆTˆT‰VŒVÑÔÐÐÐð Ðr6   