§
    ÔŸ’j]  ã                  ó:   — d dl mZ 	 d dlmZ  G d„ d¦  «        ZdS )é    )Úannotations)ÚAnyc                  ój   — e Zd ZdZdd„Zdd„Zd d
„Zd!d„Zdd„Zd"d„Z	d#d„Z
d$d„Zd%d„Zd&d„Zd'd„ZdS )(ÚCaseHelpersMixinz7Helper and normalization utilities for case management.Ú	review_idÚstrÚfindingúdict[str, Any]Úreturnc                ó¤   — t          |                     d¦  «        pd¦  «        }t          |                     d¦  «        pd¦  «        }|p|p| › d�S )NÚ
finding_idÚ Úfinding_codez:finding)r   Úget)r   r	   r   r   s       úEC:\Projects\DSCons\app\services\operations_case_management\helpers.pyÚ_build_case_idzCaseHelpersMixin._build_case_id   sW   € Ý˜Ÿš \Ñ2Ô2Ð8°bÑ9Ô9ˆ
Ý˜7Ÿ;š; ~Ñ6Ô6Ð<¸"Ñ=Ô=ˆØÐC˜\ÐC°	Ð-CÐ-CÐ-CÐCó    c                ó„   — |                       d¦  «        }|                       d¦  «        }|r|r	d|› d|› d�S |rd|› d�S dS )NÚdocument_typeÚdossier_stageu
   Bá»• sung u3    há»£p lá»‡ Ä‘á»ƒ gá»¡ vÆ°á»›ng táº¡i giai Ä‘oáº¡n ú.u    há»£p lá»‡.uB   Gá»¡ thiáº¿u sÃ³t há»“ sÆ¡ vÃ  cáº­p nháº­t tráº¡ng thÃ¡i finding.)r   )r	   r   r   s      r   Ú_build_expected_outcomez(CaseHelpersMixin._build_expected_outcome   sn   € ØŸš OÑ4Ô4ˆØŸš OÑ4Ô4ˆØð 	s˜]ð 	sØr ÐrÐrÐboÐrÐrÐrÐrØð 	<Ø; Ð;Ð;Ð;Ð;ØSÐSr   ú	list[str]c                ób   — ddg}|                       d¦  «        r|                     d¦  «         |S )Nu'   CÃ³ báº±ng chá»©ng bá»• sung há»£p lá»‡uQ   Finding Ä‘Æ°á»£c chuyá»ƒn sang tráº¡ng thÃ¡i Ä‘Ã£ xá»­ lÃ½ hoáº·c chá»� xÃ¡c minhÚis_blockingu=   KhÃ´ng cÃ²n cháº·n readiness hoáº·c luá»“ng xá»­ lÃ½ há»“ sÆ¡)r   Úappend)r	   Úcriterias     r   Ú_build_success_criteriaz(CaseHelpersMixin._build_success_criteria   s>   € à5Ø_ð
ˆð �;Š;�}Ñ%Ô%ð 	]Ø�OŠOÐ[Ñ\Ô\Ð\Øˆr   Úseverityr   Úimpact_levelr   c                ó   — t          | pd¦  «                             ¦   «                              ¦   «         }t          |pd¦  «                             ¦   «                              ¦   «         }t          |¦  «        s|dv s|dv rdS |dv s|dv rdS dS )Nr   >   ÚhighÚcriticalr"   >   ÚmediumÚmoderater$   Úlow)r   ÚstripÚlowerÚbool)r   r    r   Únormalized_severityÚnormalized_impacts        r   Ú_derive_priorityz!CaseHelpersMixin._derive_priority"   s¯   € Ý! ( .¨bÑ1Ô1×7Ò7Ñ9Ô9×?Ò?ÑAÔAÐÝ Ð 2°Ñ3Ô3×9Ò9Ñ;Ô;×AÒAÑCÔCÐå�ÑÔð	à"Ð&:Ð:Ð:Ø Ð$8Ð8Ð8à�6ØÐ"8Ð8Ð8Ð<Mð R
ð =
ð =
ð �8Øˆur   c                ó¾   — t          |                      d¦  «        ¦  «        rdS t          |                      d¦  «        pd¦  «                             ¦   «         }|pdS )Nr   Úblockingr    r   Útracked)r)   r   r   r'   )r	   r    s     r   Ú_derive_operational_impactz+CaseHelpersMixin._derive_operational_impact2   sX   € Ý�—’˜MÑ*Ô*Ñ+Ô+ð 	Ø�:Ý˜7Ÿ;š; ~Ñ6Ô6Ð<¸"Ñ=Ô=×CÒCÑEÔEˆØÐ(˜yÐ(r   úfloat | Nonec                óª   — |                       d¦  «        pg }d„ |D ¦   «         }|sd S t          t          |¦  «        t          |¦  «        z  d¦  «        S )NÚ	evidencesc                ó|   — g | ]9}|                      d ¦  «        ®t          |                      d ¦  «        ¦  «        ‘Œ:S )Úconfidence_score)r   Úfloat©Ú.0Úitems     r   ú
<listcomp>z=CaseHelpersMixin._derive_confidence_score.<locals>.<listcomp>:   sJ   € ð 
ð 
ð 
àØ�xŠxÐ*Ñ+Ô+Ð7õ �$—(’(Ð-Ñ.Ô.Ñ/Ô/à7Ð7Ð7r   é   )r   ÚroundÚsumÚlen)r	   r3   Úscoress      r   Ú_derive_confidence_scorez)CaseHelpersMixin._derive_confidence_score8   sf   € Ø—K’K Ñ,Ô,Ð2°ˆ	ð
ð 
à!ð
ñ 
ô 
ˆð
 ð 	Ø�4Ý•S˜‘[”[¥3 v¡;¤;Ñ.°Ñ2Ô2Ð2r   r5   ú
str | Nonec                ó€   — | €d S 	 t          | ¦  «        }n# t          t          f$ r Y d S w xY w|dk    rdS |dk    rdS dS )Ng333333ë?Ústrongg333333ã?r$   Úweak)r6   Ú	TypeErrorÚ
ValueError)r5   Úvalues     r   Ú_derive_evidence_strengthz*CaseHelpersMixin._derive_evidence_strengthC   sj   € ØÐ#Ø�4ð	ÝÐ*Ñ+Ô+ˆEˆEøÝ�:Ð&ð 	ð 	ð 	Ø�4�4ð	øøøà�DŠ=ˆ=Ø�8Ø�CŠ<ˆ<Ø�8Øˆvs   † –+ª+Úpartsc                 óh   — i }| D ],}t          |t          ¦  «        r|                     |¦  «         Œ-|S ©N)Ú
isinstanceÚdictÚupdate)rI   ÚmergedÚparts      r   Ú_merge_metadataz CaseHelpersMixin._merge_metadataP   s@   € Ø!#ˆØð 	$ð 	$ˆDÝ˜$¥Ñ%Ô%ð $Ø—’˜dÑ#Ô#Ð#øØˆr   rG   úlist[dict[str, Any]]c                óH   — t          | t          ¦  «        rd„ | D ¦   «         S g S )Nc                ó<   — g | ]}t          |t          ¦  «        ¯|‘ŒS © ©rL   rM   r7   s     r   r:   z1CaseHelpersMixin._ensure_list.<locals>.<listcomp>Y   s'   € ÐEÐEÐE˜T­j¸½tÑ.DÔ.DÐE�DÐEÐEÐEr   )rL   Úlist©rG   s    r   Ú_ensure_listzCaseHelpersMixin._ensure_listW   s.   € Ý�e�TÑ"Ô"ð 	FØEÐE UÐEÑEÔEÐEØˆ	r   c                ó4   — t          | t          ¦  «        r| S i S rK   rV   rX   s    r   Ú_ensure_dictzCaseHelpersMixin._ensure_dict\   s   € Ý�e�TÑ"Ô"ð 	ØˆLØˆ	r   c                óÄ   — t          | t          ¦  «        rd„ | D ¦   «         S t          | t          ¦  «        r)|                      ¦   «         r|                      ¦   «         gS g S )Nc                ór   — g | ]4}t          |pd ¦  «                             ¦   «         ¯%t          |¦  «        ‘Œ5S )r   )r   r'   r7   s     r   r:   z8CaseHelpersMixin._ensure_string_list.<locals>.<listcomp>c   s9   € ÐKÐKÐK $µ3°t°z¸r±?´?×3HÒ3HÑ3JÔ3JÐK•C˜‘I”IÐKÐKÐKr   )rL   rW   r   r'   rX   s    r   Ú_ensure_string_listz$CaseHelpersMixin._ensure_string_lista   s_   € Ý�e�TÑ"Ô"ð 	LØKÐK¨%ÐKÑKÔKÐKÝ�e�SÑ!Ô!ð 	# e§k¢k¡m¤mð 	#Ø—K’K‘M”M�?Ð"Øˆ	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   r1   )r5   r   r   rA   )rI   r   r   r
   )rG   r   r   rR   )rG   r   r   r
   )rG   r   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r,   r0   r@   rH   rQ   rY   r[   r^   rU   r   r   r   r      sþ   € € € € € ØAÐAðDð Dð Dð Dð
Tð Tð Tð Tðð ð ð ðð ð ð ð )ð )ð )ð )ð	3ð 	3ð 	3ð 	3ðð ð ð ðð ð ð ðð ð ð ð
ð ð ð ð
ð ð ð ð ð r   r   N)Ú
__future__r   Útypingr   r   rU   r   r   ú<module>re      sh   ðØ "Ð "Ð "Ð "Ð "Ð "à =à Ð Ð Ð Ð Ð ð^ð ^ð ^ð ^ð ^ñ ^ô ^ð ^ð ^ð ^r   