Ë
    ÅÍ�j‰  ã                  ó¸   — d Z ddlmZ ddlZddlmZmZ ddlmZ ddlm	Z	 ddl
mZ  ed«      Z ed	«      Z ed
«      Zdd„Zdd„Zdd„Z	 	 	 	 	 	 	 	 	 	 	 	 dd„Zy)aÓ  
Modulo do FUNIL LINKIA por tag.

Reaproveita a coleta pesada de contatos GHL que ja e feita em
tracking.coletar_atribuicao_cached() e adiciona a etapa de pageviews
(a partir do JSONL local).

Etapas:
  Visitantes  -> pageviews da landing no periodo
  Leads       -> contatos criados no periodo (dateAdded no range)
  Iniciaram   -> contatos com tag iniciou_fluxo_compra_*
  Compraram   -> contatos com tag comprou-*

Taxas de conversao sao calculadas etapa-a-etapa.
é    )ÚannotationsN)ÚdatetimeÚtimezone)ÚPath)ÚIterable)ÚZoneInfozAmerica/Sao_PauloÚUTCz;/opt/mia/workspace/clientes/px3lab/tracking/pageviews.jsonlc                ór   — | sy 	 t        j                  | j                  dd«      «      S # t        $ r Y y w xY w)NÚZz+00:00)r   ÚfromisoformatÚreplaceÚ	Exception)Úvs    ú5/opt/mia/workspace/clientes/px3lab/dashboard/funil.pyÚ	_parse_dtr       s;   € ÙØðÜ×%Ñ% a§i¡i°°XÓ&>Ó?Ð?øÜò Ùðús   …$* ª	6µ6c               #  ó2  K  — t         j                  «       sy 	 t         j                  dd¬«      5 } | D ]-  }|j                  «       }|sŒ	 t	        j
                  |«      –— Œ/ 	 d d d «       y # t        $ r Y ŒEw xY w# 1 sw Y   y xY w# t        $ r Y y w xY w­w)NÚrzutf-8)Úencoding)ÚPAGEVIEWS_FILEÚexistsÚopenÚstripÚjsonÚloadsr   )ÚfÚlines     r   Ú_iter_pageviewsr   )   s£   è ø€ Ü× Ñ Ô"ØðÜ× Ñ  ¨wÐ Ó7ð 	¸1Øò �Ø—z‘z“|�ÙØðÜŸ*™* TÓ*Ó*ñ÷	ð 	øô !ò Ùðú÷	ð 	ûô ò Ùðüso   ‚B™B °A<Á
A-Á!A<Á$B Á,BÁ-	A9Á6A<Á8A9Á9A<Á<BÂB ÂBÂB Â	BÂBÂBÂBc                óŒ   — d}t        «       D ]4  }t        |j                  dd«      «      }|sŒ!| |cxk  r|k  sŒ-n Œ0|dz  }Œ6 |S )Nr   ÚtsÚ é   )r   r   Úget)Ú
inicio_utcÚfim_utcÚtotalÚpvÚdts        r   Úcontar_pageviewsr(   :   sM   € Ø€EÜÓò ˆÜ�r—v‘v˜d BÓ'Ó(ˆÚ�* Ô- gÖ-Ø�Q‰J‰Eðð €Ló    c                ó�  ‡‡— d}d}d}| D ]¡  }t        |j                  d«      xs d«      }	|	r||	cxk  r|k  sn Œ1|dz  }|j                  d«      xs g D �
cg c]  }
t        |
«      j                  «       ‘Œ }}
t	        ˆfd„|D «       «      r|dz  }t	        ˆfd„|D «       «      sŒ�|dz  }Œ£ t        ||«      }d„ }d	d
|dddœdd| |||«      ddœdd| |||«      ddœdd| |||«      ddœg}||||| |||«       |||«       |||«       |||«      dœt        j                  t        «      j                  d¬«      dœS c c}
w )z4Recebe contatos GHL crus e retorna funil no periodo.r   Ú	dateAddedr    r!   Útagsc              3  ó&   •K  — | ]  }|‰v –— Œ
 y ­w©N© )Ú.0ÚtÚtags_inicious     €r   ú	<genexpr>zmontar_funil.<locals>.<genexpr>U   s   øè ø€ Ò/ Qˆq�LÔ Ñ/ùó   ƒc              3  ó&   •K  — | ]  }|‰v –— Œ
 y ­wr.   r/   )r0   r1   Útags_compras     €r   r3   zmontar_funil.<locals>.<genexpr>W   s   øè ø€ Ò. Aˆq�KÔÑ.ùr4   c                ó.   — |rt        | |z  dz  d«      S dS )Néd   é   g        )Úround)ÚnumÚdenoms     r   Ú_pctzmontar_funil.<locals>._pct\   s   € Ù.3Œu�S˜5‘[ 3Ñ&¨Ó*Ð<¸Ð<r)   zVisitantes (LP)zPageviews rastreados na landingNz#94a3b8)ÚnomeÚ	descricaoÚcountÚconv_anterior_pctÚcorzLeads (Linkia)zContatos criados no periodoz#60a5fazIniciaram fluxozTag iniciou_fluxo_compra_*z#fbbf24Ú	CompraramzTag comprou-*z#4ade80)Ú
visitantesÚleadsÚ	iniciaramÚ	compraramÚconv_visitante_leadÚconv_lead_iniciouÚconv_iniciou_comprouÚconv_visitante_compraÚseconds)Útimespec)ÚetapasÚkpisÚ	gerado_em)
r   r"   ÚstrÚlowerÚanyr(   r   ÚnowÚTZ_UTCÚ	isoformat)Úcontatosr#   r$   r6   r2   rE   rF   rG   Úcr'   r1   r,   rD   r=   rN   s      ``          r   Úmontar_funilrY   C   s   ù€ ð €EØ€IØ€Iàò 	ˆÜ�q—u‘u˜[Ó)Ò/¨RÓ0ˆÙ˜*¨Ô5¨gÔ5ØØ�‰
ˆØ)*¯©¨v«Ò)<¸"Ö> 1”�A“—‘•Ð>ˆÐ>ÜÓ/¨$Ô/Ô/Ø˜‰NˆIÜÓ.¨Ô.Õ.Ø˜‰N‰Ið	ô " *¨gÓ6€Jò=ð
 &Ø:ØØ!%Øñ	
ð %Ø6ØÙ!% e¨ZÓ!8Øñ	
ð &Ø5ØÙ!% i°Ó!7Øñ	
ð  Ø(ØÙ!% i°Ó!;Øñ	
ð-€Fð@ à$ØØ"Ø"Ù$(¨°
Ó$;Ù$(¨°EÓ$:Ù$(¨°IÓ$>Ù%)¨)°ZÓ%@ñ	
ô —\‘\¤&Ó)×3Ñ3¸YÐ3ÓGñð ùòU ?s   Á E)r   rQ   )ÚreturnzIterable[dict])r#   r   r$   r   rZ   Úint)rW   z
list[dict]r#   r   r$   r   r6   úset[str]r2   r\   rZ   Údict)Ú__doc__Ú
__future__r   r   r   r   Úpathlibr   Útypingr   Úzoneinfor   ÚTZ_BRrU   r   r   r   r(   rY   r/   r)   r   ú<module>rd      s�   ðñõ #ã ß 'Ý Ý å áÐ$Ó%€Ù	�%‹€áÐSÓT€óóó"ðHØðHàðHð ðHð ð	Hð
 ðHð 
ôHr)   