§
    ÔŸ’jD"  ã                  óF   — d dl mZ 	 d dlmZ d dlmZ  G d„ d¦  «        ZdS )é    )Úannotations)ÚAny)ÚCompanyOperationalBlockedItemc                  ó2   — e Zd ZdZdd„Zdd	„Zdd„Zdd„ZdS )ÚBlockersBuilderMixinz*Blocker extraction and construction mixin.Úsessionúdict[str, Any]Úreturnú#list[CompanyOperationalBlockedItem]c                óJ
  — g }t          |                     d¦  «        pd¦  «        }t          |                     d¦  «        pd¦  «        }t          |                     d¦  «        pd¦  «        }|                      |                     d¦  «        ¦  «        D �]Š}|                      |                     d¦  «        ¦  «        }|r|d         ni }|                      ||¬¦  «        }	t	          |                     d	¦  «        ¦  «        �rÚ|                     t          |pd
|pd
|pd
t          |                     d¦  «        pd¦  «        pd
|                     d¦  «        |                     d¦  «        p|                     d¦  «        t          |                     d¦  «        pd¦  «        t          |                     d¦  «        pd¦  «        |                     d¦  «        p|                     d¦  «        |                     d¦  «        p|                     d¦  «        dt          |                     d¦  «        pd¦  «        pd
|                     d¦  «        p|                     d¦  «        |                      |                     d¦  «        |                     d¦  «        |                     d¦  «        |                     d¦  «        |	dœ¦  «        ¬¦  «        ¦  «         t          |  	                    ||¬¦  «        d¬ ¦  «        D �]\  }
}|                     t          |pd
|pd
|pd
t          |                     d¦  «        pd¦  «        pd
t          |                     d!¦  «        pd¦  «        pd
|                     d"¦  «        p|                     d¦  «        t          |                     d¦  «        p|                     d¦  «        pd#¦  «        t          |                     d¦  «        pd$¦  «        |                     d!¦  «        p|                     d"¦  «        |                     d%¦  «        p|                     d¦  «        t          |                     d&¦  «        pd'¦  «        t          |                     d(¦  «        p|› d)|
› �¦  «        pd
|                     d¦  «        |                      |                     d¦  «        |                     d¦  «        |                     d¦  «        |                     d*¦  «        d+œ¦  «        ¬¦  «        ¦  «         �Œ�ŒŒ|S ),z/Map blocking findings into blocker board items.Úproject_codeÚ Úproject_nameÚ	review_idÚfindingsÚassignmentsr   ©r   ÚfindingÚis_blockingNÚfinding_codeÚassigned_employee_codeÚresponsible_department_codeÚassigned_department_codeÚtitlezBlocking dossier findingÚstatusÚopenÚassigned_employee_nameÚdescriptionÚresolution_noteÚdossier_review_findingÚ
finding_idÚdue_dateÚmetadataÚsupplement_statusÚseverityÚimpact_level)r$   r%   r&   Úblocker_reasons)r   r   Úreview_session_idr   Úemployee_codeÚdepartment_coder   r   ÚownerÚreasonÚsource_typeÚreference_idr"   r#   é   )ÚstartÚowner_employee_coder*   zPost-review blockerÚpendingr,   r-   Údossier_review_follow_upr.   ú:Útrigger_phase)r!   Úfinding_statusr5   )
ÚstrÚgetÚ_ensure_listÚ_collect_blocker_reasonsÚboolÚappendr   Ú_merge_metadataÚ	enumerateÚ!_collect_post_completion_blockers)Úselfr   Úitemsr   r   r   r   r   Úprimary_assignmentr'   ÚindexÚblocker_actions               úNC:\Projects\DSCons\app\services\operations_case_management\blockers_builder.pyÚ_build_blockers_from_sessionz1BlockersBuilderMixin._build_blockers_from_session   sT  € ð 68ˆÝ˜7Ÿ;š; ~Ñ6Ô6Ð<¸"Ñ=Ô=ˆÝ˜7Ÿ;š; ~Ñ6Ô6Ð<¸"Ñ=Ô=ˆÝ˜Ÿš KÑ0Ô0Ð6°BÑ7Ô7ˆ	à×(Ò(¨¯ª°ZÑ)@Ô)@ÑAÔAð U	ñ U	ˆGØ×+Ò+¨G¯KªK¸Ñ,FÔ,FÑGÔGˆKØ3>Ð!F ¨Q¤ ÀBÐØ"×;Ò;Ø¨ð <ñ ô ˆOõ �G—K’K Ñ.Ô.Ñ/Ô/ñ Ø—’Ý1Ø%1Ð%9°TØ%1Ð%9°TØ*3Ð*;°tÝ%(¨¯ª°^Ñ)DÔ)DÐ)JÈÑ%KÔ%KÐ%SÈtØ&8×&<Ò&<Ð=UÑ&VÔ&VØ(/¯ªÐ4QÑ(RÔ(Rð )NØ-×1Ò1Ð2LÑMÔMÝ! '§+¢+¨gÑ"6Ô"6Ð"TÐ:TÑUÔUÝ" 7§;¢;¨xÑ#8Ô#8Ð#B¸FÑCÔCØ0×4Ò4Ð5MÑNÔNð LØ-×1Ò1Ð2JÑKÔKØ&Ÿ{š{¨=Ñ9Ô9ð  :Ø"Ÿ;š;Ð'8Ñ9Ô9Ø$<Ý%(¨¯ª°\Ñ)BÔ)BÐ)HÀbÑ%IÔ%IÐ%QÈTØ!3×!7Ò!7¸
Ñ!CÔ!Cð "3Ø"Ÿ;š; zÑ2Ô2Ø!%×!5Ò!5Ø#ŸKšK¨
Ñ3Ô3à5<·[²[ÐATÑ5UÔ5UØ,3¯KªK¸
Ñ,CÔ,CØ07·²¸NÑ0KÔ0KØ3Bð	ð ñ"ô "ð%ñ ô ñô ð õ> *3Ø×6Ò6Ø#¨Wð 7ñ ô ð ð	*ñ *ô *ð .ñ .Ñ%��~ð —’Ý1Ø%1Ð%9°TØ%1Ð%9°TØ*3Ð*;°tÝ%(¨¯ª°^Ñ)DÔ)DÐ)JÈÑ%KÔ%KÐ%SÈtÝ&)Ø*×.Ò.Ð/DÑEÔEÐKÈñ'ô 'ð ' ð  Ø(6×(:Ò(:Ð;LÑ(MÔ(Mð )FØ"Ÿ;š;Ð'DÑEÔEÝ!Ø*×.Ò.¨wÑ7Ô7ð 5Ø&Ÿ{š{¨7Ñ3Ô3ð5à4ñô õ
  # >×#5Ò#5°hÑ#?Ô#?Ð#LÀ9ÑMÔMØ,×0Ò0Ð1FÑGÔGð AØ)×-Ò-Ð.?Ñ@Ô@Ø-×1Ò1°(Ñ;Ô;ð  =Ø)×-Ò-¨mÑ<Ô<Ý$'Ø*×.Ò.¨}Ñ=Ô=ð :Ø9ñ%ô %õ &)Ø*×.Ò.¨~Ñ>Ô>ÐXÀYÐBXÐBXÐQVÐBXÐBXñ&ô &ð & ð  Ø!/×!3Ò!3°JÑ!?Ô!?Ø!%×!5Ò!5Ø*×.Ò.¨zÑ:Ô:à.5¯kªk¸,Ñ.GÔ.GØ29·+²+¸hÑ2GÔ2GØ1?×1CÒ1CÀOÑ1TÔ1Tðð ñ"ô "ð=&ñ &ô &ñ(ô (ð (ñ (ñ.ð` ˆó    r   úlist[dict[str, Any]]c          
     óB  — g }|                       ||¬¦  «        }|                     |                      ||¬¦  «        ¦  «         |D ]X}|                      |¦  «        sŒ|                     |                      |d|                     d¦  «        pdi¦  «        ¦  «         ŒY|S )zTCollect unresolved post-completion follow-up actions that should appear as blockers.r   r-   r3   )Ú_collect_post_close_actionsÚextendÚ"_collect_post_verification_actionsÚ_is_blocking_follow_upr<   r=   r8   )r@   r   r   rA   Ú
follow_upsÚactions         rE   r?   z6BlockersBuilderMixin._collect_post_completion_blockerso   sÏ   € ð ')ˆà×5Ò5¸gÈwÐ5ÑWÔWˆ
Ø×ÒØ×3Ò3¸GÈWÐ3ÑUÔUñ	
ô 	
ð 	
ð !ð 	ð 	ˆFØ×.Ò.¨vÑ6Ô6ð Øà�LŠLØ×$Ò$Øà% v§z¢z°-Ñ'@Ô'@ð (6Ø5ðñô ñô ð ð ð ˆrG   ú	list[str]c               ó  — g }|                       |                     d¦  «        ¦  «        |                       |                     d¦  «        ¦  «        g}|D ]¡}dD ]œ}|                     |¦  «        }t          |t          ¦  «        r |                     d„ |D ¦   «         ¦  «         ŒLt          |t
          ¦  «        r;|                     ¦   «         r'|                     |                     ¦   «         ¦  «         Œ�Œ¢|                      |                     d¦  «        ¦  «        D ]á}|                       |                     d¦  «        ¦  «        }	|  	                    |	|¬¦  «        sŒBdD ]œ}|	                     |¦  «        }t          |t          ¦  «        r |                     d„ |D ¦   «         ¦  «         ŒLt          |t
          ¦  «        r;|                     ¦   «         r'|                     |                     ¦   «         ¦  «         Œ�Œâ|S )zICollect human-readable blocker reasons from metadata and action payloads.r#   )Úblocked_reasonsÚblocking_reasonsc              3  óz   K  — | ]6}t          |pd ¦  «                             ¦   «         ¯%t          |¦  «        V — Œ7dS ©r   N©r7   Ústrip©Ú.0Úitems     rE   ú	<genexpr>z@BlockersBuilderMixin._collect_blocker_reasons.<locals>.<genexpr>›   óW   è è € ð #ð #Ø&*µs¸4¸:À2±´×7LÒ7LÑ7NÔ7Nð#Ý˜D™	œ	ð#ð #ð #ð #ð #ð #rG   ÚactionsÚaction_payload)r^   r   c              3  óz   K  — | ]6}t          |pd ¦  «                             ¦   «         ¯%t          |¦  «        V — Œ7dS rU   rV   rX   s     rE   r[   z@BlockersBuilderMixin._collect_blocker_reasons.<locals>.<genexpr>ª   r\   rG   )
Ú_ensure_dictr8   Ú
isinstanceÚlistrK   r7   rW   r<   r9   Ú_action_matches_finding)
r@   r   r   ÚreasonsÚsourcesÚsourceÚkeyÚvaluerO   Úpayloads
             rE   r:   z-BlockersBuilderMixin._collect_blocker_reasons�   s*  € ð  ˆà×Ò˜gŸkšk¨*Ñ5Ô5Ñ6Ô6Ø×Ò˜gŸkšk¨*Ñ5Ô5Ñ6Ô6ð
ˆð
 ð 	2ð 	2ˆFØ>ð 2ð 2�ØŸ
š
 3™œ�Ý˜e¥TÑ*Ô*ð 2Ø—N’Nð #ð #Ø.3ð#ñ #ô #ñ ô ð ð õ   ¥sÑ+Ô+ð 2°·²±´ð 2Ø—N’N 5§;¢;¡=¤=Ñ1Ô1Ð1øð2ð ×'Ò'¨¯ª°IÑ(>Ô(>Ñ?Ô?ð 	2ð 	2ˆFØ×'Ò'¨¯
ª
Ð3CÑ(DÔ(DÑEÔEˆGØ×/Ò/Ø&°ð 0ñ ô ð ð Ø>ð 2ð 2�ØŸš CÑ(Ô(�Ý˜e¥TÑ*Ô*ð 2Ø—N’Nð #ð #Ø.3ð#ñ #ô #ñ ô ð ð õ   ¥sÑ+Ô+ð 2°·²±´ð 2Ø—N’N 5§;¢;¡=¤=Ñ1Ô1Ð1øð2ð ˆrG   rZ   r;   c                óZ  — t          |                      d¦  «        pd¦  «                             ¦   «                              ¦   «         }|dv rdS t	          |                      d¦  «        ¦  «        s"t	          |                      d¦  «        ¦  «        rdS t          |                      d¦  «        pd¦  «                             ¦   «                              ¦   «         }t          |                      d	¦  «        pd¦  «                             ¦   «                              ¦   «         }|d
v pd|v S )zBReturn True when a follow-up item should be surfaced as a blocker.r   r   >   ÚdoneÚclosedÚacceptedÚresolvedÚverifiedÚ	completedFÚblockingr   TÚpriorityÚaction_type>   ÚhighÚcriticalÚblock)r7   r8   rW   Úlowerr;   )rZ   r   Únormalized_priorityÚnormalized_types       rE   rM   z+BlockersBuilderMixin._is_blocking_follow_up²   s  € å�T—X’X˜hÑ'Ô'Ð-¨2Ñ.Ô.×4Ò4Ñ6Ô6×<Ò<Ñ>Ô>ˆØð 
ð 
ð 
ð �5å�—’˜Ñ$Ô$Ñ%Ô%ð 	­¨d¯hªh°}Ñ.EÔ.EÑ)FÔ)Fð 	Ø�4å! $§(¢(¨:Ñ"6Ô"6Ð"<¸"Ñ=Ô=×CÒCÑEÔE×KÒKÑMÔMÐÝ˜dŸhšh }Ñ5Ô5Ð;¸Ñ<Ô<×BÒBÑDÔD×JÒJÑLÔLˆØ"Ð&:Ð:ÐX¸gÈÐ>XÐXrG   N)r   r	   r
   r   )r   r	   r   r	   r
   rH   )r   r	   r   r	   r
   rP   )rZ   r	   r
   r;   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rF   r?   r:   rM   © rG   rE   r   r   
   sv   € € € € € Ø4Ð4ð`ð `ð `ð `ðDð ð ð ð<#ð #ð #ð #ðJYð Yð Yð Yð Yð YrG   r   N)Ú
__future__r   Útypingr   Úapp.models.schemasr   r   r~   rG   rE   ú<module>r‚      s„   ðØ "Ð "Ð "Ð "Ð "Ð "à <à Ð Ð Ð Ð Ð à <Ð <Ð <Ð <Ð <Ð <ðzYð zYð zYð zYð zYñ zYô zYð zYð zYð zYrG   