+
    Uej                     D   R t ^ RIt^ RIHtHt ^ RIHt ^ RIHtHtH	t	 Rt
RtRtRtR	tR
tRtRtRtRtRtRtRtRtRtRtRt]P6                  ! R]P8                  4      t]P6                  ! R4      t]P6                  ! R4      tR R lt R R lt!R R lt"R R  lt#R! R" lt$R# )#uL  Parsing partilhado das páginas CIRE do CITIUS.

Extraído de `cire.py` quando o sweep nacional (`cire_announcements.py`) passou a
precisar exactamente do mesmo parser de blocos. A página é a mesma
(`ConsultasCire.aspx`); muda só o filtro do formulário — por NIF no caso do
`cire.py`, por intervalo de datas no caso do sweep.
N)datedatetime)Any)BeautifulSoupNavigableStringTagz<https://www.citius.mj.pt/portal/consultas/ConsultasCire.aspxz*https://www.citius.mj.pt/portal/consultas/z!ctl00$ContentPlaceHolder1$rblTipoz%ctl00$ContentPlaceHolder1$txtPesquisaz!ctl00$ContentPlaceHolder1$rblDiasz&ctl00$ContentPlaceHolder1$ddlTribunaisz'ctl00$ContentPlaceHolder1$ddlGrupoActosz"ctl00$ContentPlaceHolder1$ddlActosz+ctl00$ContentPlaceHolder1$txtNumeroProcessoz*ctl00$ContentPlaceHolder1$txtCalendarDesdez(ctl00$ContentPlaceHolder1$txtCalendarAtez#ctl00$ContentPlaceHolder1$btnSearch 202425resultadocditalz (\d+)\s+documentos\s+encontradosz!(\d{1,2})[/-](\d{1,2})[/-](\d{4})z@<input\s+id='queryString'\s+type='hidden'\s+value=([^\s>]+)\s*/>c                L    V ^8  d   QhR\         R,          R\        R,          /# )   sNreturn)strr   )formats   "app/scrapers/cire_common.py__annotate__r   ,   s"     
 
S4Z 
D4K 
    c                    V '       g   R # \         P                  V 4      pV'       g   R # VP                  4       w  r#p \        \	        V4      \	        V4      \	        V4      4      P                  4       #   \         d     R # i ; iN)DATE_REsearchgroupsr   intr   
ValueError)r   mdmmys   &    r   parse_pt_dater!   ,   sf    qAxxzHA1ABQ05577 s   5A4 4BBc                0    V ^8  d   QhR\         R\        /# )r   strongr   )r   r   )r   s   "r   r   r   9   s     3 3 3 3r   c                   . pV P                   pVe   \        V\        4      '       d6   VP                  R9   d   MyVP	                  VP                  RRR7      4       MH\        V\        4      '       d3   \        V4      P                  4       pV'       d   VP	                  V4       VP                   pK  RP                  R V 4       4      P                  4       # )uQ   Percorre os irmãos a seguir a um <strong>, parando no próximo <br> ou <strong>. Tstripc              3   8   "   T F  q'       g   K  Vx  K  	  R # 5ir    ).0ps   & r   	<genexpr>&extract_value_after.<locals>.<genexpr>G   s     *u!AAus   	
)brr#   )
next_sibling
isinstancer   nameappendget_textr   r   r'   join)r#   partssibtxts   &   r   extract_value_afterr8   9   s    E


C
/c3xx++LLc67_--c(.."CS!88*u**0022r   c                R    V ^8  d   QhR\         R\        \        \        3,          /# )r   blockr   )r   dictr   r   )r   s   "r   r   r   J   s"        s  tCH~  r   c                   / pV P                  R4       F  pVP                  RR7      P                  R4      P                  4       P	                  4       pV'       d   VP                  R4      '       d   Ka  \        V4      pV'       g   Kv  VP                  W44       K  	  . pV P                  R4       EF  pVP                  R4      ;'       g    RpR	V9  d   K(  VP                  RR
R7       F  pR;p	;rVP                  R4       Fd  pVP                  RR7      P                  R4      P                  4       P	                  4       p\        V4      pRV9   d   TpKV  V'       g   K`  Tp	Tp
Kf  	  V	'       g   V
'       g   K  TP                  RT	;'       g    RRT
;'       g    RRT;'       g    R/4       K  	  EK
  	  WQR&   V# )u   Converte um `div.resultadocdital` num dict de campos etiquetados mais as
partes aninhadas (Insolvente, Administrador, Credor, …).r#   Tr&   :nifspanidr   InterDataListF)	recursiveNroler1   _parties)
find_allr3   rstripr'   lower
startswithr8   
setdefaultgetr2   )r:   fieldsr#   labelvaluepartiesdlsub_idinnerrC   r1   r>   lblvals   &             r   parse_blockrT   J   s     F..*d+2237==?EEG((//#F+%' + %'GnnV$##&([[5[9E $$D$4..2ooDo188=CCEKKM)&1C<CSDD 3 tt

FDJJBsyyVXYZ :	 %  !:Mr   c                R    V ^8  d   QhR\         R\        \         \        3,          /# )r   htmlr   )r   r;   r   )r   s   "r   r   r   m   s"      # $sCx. r   c           
        \        V R4      pVP                  RR7      ;'       g    VP                  RR7      p\        P                  VP	                  4       ;'       g    R4      pV'       d   \        VP                  ^4      4      M^ p. pV'       d9   VP                  R\        R7       F  pVP                  \        V4      4       K  	  \        VP                  RR7      4      pR	VR
VRVR\        P                  V 4      /# )u   Parseia uma página de resultados. `tokens` alinha posicionalmente com
`blocks` — o CITIUS emite um input `queryString` por bloco, pela mesma ordem.lxml'ctl00_ContentPlaceHolder1_divResultados)r@   &ctl00_ContentPlaceHolder1_upResultadosr   div)class_(ctl00_ContentPlaceHolder1_Pager1_lnkNexttotalblockshas_nexttokens)r   findCOUNT_REr   r3   r   grouprE   RESULT_BLOCK_CLASSr2   rT   boolQUERYSTRING_REfindall)rV   soup	containercount_matchr^   r_   r:   r`   s   &       r   parse_cire_pagerl   m   s     v&D		F	G  4993 LU LI //$--/"7"7R8K)4C!!!$%!E#%F''6H'IEMM+e,- JDII!KILMH&H.((.	 r   c                `    V ^8  d   QhR\         R\        \         \         R,          3,          /# )r   proc_rawr   N)r   tuple)r   s   "r   r   r      s'     " "C "E#sTz/$: "r   c                    RV 9   d?   V P                  R^4      w  rVP                  4       VP                  4       ;'       g    R3# V P                  4       R3# )uM   "869/26.9T8SNT, Juízo de Comércio de Sintra - Juiz 4" -> (número, juízo).,N)splitr'   )rn   process_numberjuizos   &  r   split_processru      sP    
h (sA 6##%u{{}'<'<<<>>T!!r   )%__doc__rer   r   typingr   bs4r   r   r   URLBASEF_TIPO
F_PESQUISAF_DIASF_TRIBUNAISF_GRUPOF_ACTOSF_NUMEROF_DESDEF_ATEF_BTNGRUPO_TODOSGRUPO_PUBLICIDADEGRUPO_ANUNCIOSGRUPO_ATOS_AIre   compile
IGNORECASErc   r   rg   r!   r8   rT   rl   ru   r)   r   r   <module>r      s    
 #  3 3D3 
-4
	,6
3
.8
62-  & ::92==I
**9
: _`
3" F,"r   