
    cj<@                         S SK r S SKrS SKrS SKJr  S SKJr  \" S5      r\S-  S-  r\S-  S-  r	\S-  r
\S	-  r\S
-  r/ SQrS rS r1 SkrS rS rS rS r\S:X  a  \" 5         gg)    N)defaultdict)Pathz/home/sebas/work/gastos-europarawzextracted-text.txtzvicky-manual.txtderiveddatazexcluded.json)^)albert heijnu   Supermercado neerlandés.alta)jumbou(   Cadena de supermercado en Países Bajos.r	   )
condomerieu    Sex shop conocido de Ámsterdam.r	   )primarku(   Tienda de ropa y básicos de bajo costo.r	   )zfriet pointu'   Local de papas fritas y comida rápida.r	   )zns groepz+Ferrocarriles neerlandeses / transporte NS.r	   )zns-amsterdamu(   Transporte ferroviario neerlandés / NS.r	   )schipholz.Compra o transporte en el aeropuerto Schiphol.r	   )zr.j. mulder9   Comercio local en Ámsterdam; rubro exacto no confirmado.baja)zhet karbeelu)   Restaurante en Warmoesstraat, Ámsterdam.media)zla belle superu0   Minimercado o tienda de alimentos en Ámsterdam.r   )
temple baru"   Pub irlandés / bar en Ámsterdam.r	   )mcdonaldu   Comida rápida McDonald’s.r	   )zvictoria hotelzConsumo en hotel.r	   )flagship amsterdamu4   Paseo turístico en barco por canales de Ámsterdam.r	   )il primozRestaurante italiano.r   )zvan gogh museumzEntrada al Museo Van Gogh.r	   )
anne frankzEntrada a la Casa de Ana Frank.r	   )ztwinkies bussumu    Café o local de comida rápida.r   )zlamor amsterdamuA   Bar o restaurante en Ámsterdam; nombre abreviado en el extracto.r   )zthe bulldogu   Coffee shop/bar de Ámsterdam.r	   )zgame galaxyu,   Arcade o local de videojuegos en Ámsterdam.r   )zcafe katoenu   Café o restaurante.r   )zb.smitu?   Tienda pequeña en Ámsterdam; probablemente souvenir o retail.r   )zghm b b b.v.r   r   )zcity phone internet"   Tienda de telefonía o accesorios.r	   )zadolfo suarezz#Cargo en aeropuerto Madrid-Barajas.r	   )zpending.uberz Viaje o cargo pendiente de Uber.r	   )intrusoBar o restaurante en Madrid.r   )el corte ingleszGran tienda por departamentos.r	   )leftiesz!Tienda de ropa del grupo Inditex.r	   )
phone shopr   r	   )uniqlozTienda de ropa Uniqlo.r	   )cabifyzViaje en Cabify.r	   )zamazon web servicesz%Cargo de AWS / infraestructura cloud.r	   )zvercel domainszDominio o servicio de Vercel.r	   )village rosaz.Alojamiento en Brasil; fuera del viaje Europa.r   )openaiu!   Suscripción de OpenAI / ChatGPT.r	   )	claude.aiu#   Suscripción de Claude / Anthropic.r	   )zomio berlinu)   Pasaje o reserva de transporte vía Omio.r	   )zgoeuro corpz.Pasaje o reserva de transporte de Omio/GoEuro.r	   )aerobusz"Traslado en bus al/del aeropuerto.r	   )louvreticketzEntrada al Museo del Louvre.r	   )zsagrada familiazEntrada a la Sagrada Familia.r	   )buckaroozDPago procesado por Buckaroo, probablemente para entradas Anne Frank.r   )
versaillesz(Entrada o reserva vinculada a Versalles.r	   )zbiglietteriamusei.vaticzEntrada a Museos Vaticanos.r	   )zduomo.firenzezEntrada al Duomo de Florencia.r	   )zmuseo del pradozEntrada al Museo del Prado.r	   )zde kroon van singelu+   Bar o restaurante sobre Singel, Ámsterdam.r   )zmolenmuseum de zaanschez,Entrada o visita al museo de Zaansche Molen.r	   )
old bridgezTienda o retail local.r   )	sam tabaku+   Tienda de tabaco y souvenirs en Ámsterdam.r	   )la pampazRestaurante parrilla.r	   )z
c&m*singeluK   Comercio pequeño sobre Singel 506, Ámsterdam; rubro exacto no confirmado.r   )zcroissanterie outmayeru   Panadería o cafetería.r   )papizzau   Local de pizza rápida.r	   )zta-wha chin artsu"   Tienda de artesanías o souvenirs.r   )zhotel beursstraatu"   Alojamiento / hotel en Ámsterdam.r	   )kamyinu.   Supermercado o tienda de alimentos asiáticos.r   )zzara madridzTienda de ropa Zara.r	   )zbutragueno estebanz5Comercio local en Madrid; rubro exacto no confirmado.r   )zvivaz rosaledar   r   )zviandas de salamancaz&Tienda gourmet / fiambres / alimentos.r	   )dekorazoncarmenu*   Tienda de decoración o regalos en Madrid.r   )
ch lumierez=Alojamiento en Madrid o reserva de hotel al inicio del viaje.r   )ztaberna la danielau!   Taberna o restaurante madrileño.r	   )pharmacie desu"   Farmacia o perfumería en Francia.r   )zbouillon pigalleu'   Restaurante Bouillon Pigalle en París.r	   )
tonnarellozRestaurante Tonnarello en Roma.r	   )frigidariumu   Heladería o postres en Roma.r   )zfilippo calabriau)   Comercio o local gastronómico en Italia.r   )pizzicaroliu&   Restaurante o comida rápida italiana.r   )z
il chioscozKiosco o local de comida.r   )zeis srlu   Heladería o local de postres.r   )
trapizzinoz$Local de comida italiana Trapizzino.r	   )zall'antico vinaiou8   Sandwichería / local gastronómico All’Antico Vinaio.r	   )z
neu*ditechu$   Tienda de electrónica o accesorios.r   )
romacentrou.   Comercio o servicio turístico en Roma centro.r   )zdms pantheon selfu,   Comercio de autoservicio cerca del Panteón.r   )	cremoniniu*   Comida o servicio gastronómico Cremonini.r   )zguelfi tuscany foodu,   Tienda gastronómica / alimentos de Toscana.r   )rossopomodorou$   Restaurante/pizzería Rossopomodoro.r	   )panjetan+Comercio local; rubro exacto no confirmado.r   )zrooster firenzeu(   Restaurante o comida rápida en Firenze.r   )zultima srlsz5Comercio local en Italia; rubro exacto no confirmado.r   )	sha jahanu(   Restaurante indio o local gastronómico.r   )desparzSupermercado Despar.r	   )deel balancez+Recarga o movimiento interno de saldo Deel.r	   )airbnbu2   Cobro, autorización o reverso vinculado a Airbnb.r   )deelu(   Transferencia o pago recibido vía Deel.r	   )interactive brokz(Transferencia desde Interactive Brokers.r	   )!fee for international transactionu,   Comisión bancaria por compra internacional.r	   )monthly account service feez)Cargo mensual de mantenimiento de cuenta.r	   c                     U R                  5       n[         H  u  pxn	Xv;   d  M  XS4s  $    US:X  a  gU(       a  gSSSSS	S
SSSSS.
n
U
R                  US5      nUS:X  a  US;   a  US-  nUS;  a  SOSn	XS4$ )Nknown_or_webincome)z+Ingreso, reintegro o transferencia a favor.r	   	heuristic)   Comisión o cargo bancario.r	   rA   zGasto de transporte o traslado.u   Entrada o actividad turística.z#Compra de supermercado o alimentos.u   Comida, bar o cafetería.z$Compra de ropa, accesorios o retail.zAlojamiento u hotel.u    Suscripción o servicio digital.z%Transferencia o movimiento de dinero.r5   rB   )
	transport
attraction	groceries
food_drinkshoppinglodgingsubscriptiontransferotherfeenon_trip)US/CABRz Fuera del viaje Europa.)rK   r   r   rA   )lowerKNOWNget)merchantcategoryis_feetypcountry
trip_scopelowkeydescconfcat_maps              3/home/sebas/work/gastos-europa/app/build_dataset.py
guess_descr_   n   s    
..
C 4:~-- ! hQA67:1:):;>,G ;;x!NODZG$>**j07fD{""    c                  ^   / n S nS nS n[         R                  5       R                  5        GHJ  nUR                  S5      (       a%  UR	                  S5      R	                  5       nS nS nM?  UR	                  5       nU(       d  MX  US;   a  SU;   a  SOSnMj  [
        R                  " SU5      (       a  UnM  UR                  S5      (       d  M  S	US
S  ;   d  M  US
S  R                  S	S5      u  pg[
        R                  " SU5      nU(       d  M  UR                  S5      R                  SS5      R                  SS5      n	[        U	5      n
U R                  SUSU=(       d    SU=(       d    SXjS.5        GMM     S n[        R                  5       R                  5        GH
  nUR	                  5       nU(       a  UR                  S5      (       a  M3  [
        R                  " SU5      (       a  UnMS  UR                  S5      (       d  Mk  S	US
S  ;   d  Mv  US
S  R                  S	S5      u  pg[
        R                  " SU5      nU(       d  M  UR                  S5      R                  SS5      R                  SS5      n	[        U	5      n
U R                  SSSU=(       d    SSXjS.5        GM     U $ )Nz	## photo-z# )zPending TransactionszPosted TransactionsPendingpendingpostedz^\d{2}/\d{2}/\d{4}$z- u    —       z[-+]?\$?([0-9][0-9,]*\.?[0-9]*)r   $ ,
sebas_bankS)source
source_refpaid_bydatestatusrS   
amount_usd)zSource:zPayer:z	Currency vicky_manualzvicky-manualVmanual)SRC	read_text
splitlines
startswithstriprematchrsplitsearchgroupreplacefloatappendVSRC)entriesphotoro   sectionlinesrS   amount_smnumamts              r^   parse_sourcesr      sY   G
ET47**,??;''**T"((*EDtwX
**,(>>!*aIXGx88*A..DH<<'QqrU"2!"12ga!8H		<hGA''!*$$S,44S<Cc
CNN\usZ^Zdbdnun{y{  HP  b  c! -" 
D ++-
**,ALL!ABBH88*A..DH<<'QqrU"2!"12ga!8H		<hGA''!*$$S,44S<Cc
CNN^Z]eieomo  zB  NV  h  i . Nr`   >   photo-1389.jpgphoto-1390.jpgphoto-1391.jpgc                    SR                  U R                  SS5      U R                  SS5      U R                  SS5      U R                  SS5      U R                  SS5      U R                  SS5      U R                  S	S
5      S /5      $ )N|rl   rh   rm   rn   ro   rp   rS   rq   r   z.2f)joinrR   )es    r^   tx_keyr      s    88	hr	l2	i	fR	hr	j55q!#
&  r`   c                      [         R                  " [        R                  5       5      n [	        U [
        5      (       a<  U  Vs1 s H.  n[        U5      R                  5       (       d  M#  [        U5      iM0     sn$ [	        U [        5      (       a7  U R                  5        VVs1 s H  u  p#U(       d  M  [        U5      iM     snn$  [        5       $ s  snf s  snnf ! [         a     [        5       $ f = fN)jsonloadsEXCLUDEDrv   
isinstanceliststrry   dictitems	Exceptionset)r   xkvs       r^   excluded_keysr      s    zz(,,./dD!!$(;DqCFLLNFCFD;;dD!!&*jjl8lsqaFCFl88 " 5L <8 5LsB   AC "C)C8C ;(C #C4CC C 
C32C3c                   ^^ U S   mTR                  5       mU S   nU S   [        ;   a  ST;   a	  US:  a  U* nUS:X  a  SO	US:  a  SOSnS	T;   =(       d    S
T;   nSnSnSnU(       a  SnGO[        U4S jS 5       5      (       a  SnO[        U4S jS 5       5      (       a  SnO[        U4S jS 5       5      (       a  SnO[        U4S jS 5       5      (       a  SnO[        U4S jS 5       5      (       a  SnO[        U4S jS 5       5      (       a  S nOj[        U4S! jS" 5       5      (       a  S#nS$nOK[        U4S% jS& 5       5      (       a  S oPS   [        ;   a  SOS$nO[        U4S' jS( 5       5      (       a  S)nS$n[        U4S* jS+ 5       5      (       a  S,n[        U4S- jS. 5       5      (       a  S/n[        U4S0 jS1 5       5      (       a  S2nS3T;   a  S4nS5T;   a  S6nS7T;   d  S8T;   a  S9nS:T;   a  S;nS$nS<T;   d  S=T;   d  S>T;   d  S?T;   a  US@;   a  SAnUS#:X  a  S$n[        TXTX6U5      u  pn
U S   [        ;   a  ST;   a  SBnSCn	SDn
0 U EU[	        0 U ESU0E5      U S    SEU 3X4XVUSXU
SF.E$ )GNrS   rq   rm   r9   r   zeroexpenser@   r<   r=   rK   rh   europe_triprL   c              3   ,   >#    U  H	  oT;   v   M     g 7fr    .0r   rY   s     r^   	<genexpr>enrich.<locals>.<genexpr>   s       C   B!#X   B   )omiogoeuror   uberzns zns-r   zaerop.airport
luchthavenr!   rC   c              3   ,   >#    U  H	  oT;   v   M     g 7fr   r   r   s     r^   r   r      s       Y   X!#X   Xr   )
museumr   sagradaduomovaticr"   r$   prador   molenmuseumrD   c              3   ,   >#    U  H	  oT;   v   M     g 7fr   r   r   s     r^   r   r      s       L   K!#X   Kr   )
r   r
   supercroissanterier)   viandas	carrefourfranprixr7   conadrE   c              3   ,   >#    U  H	  oT;   v   M     g 7fr   r   r   s     r^   r   r      s       m   l!#X   lr   )#r   cafebarfriet
restaurantr   bulldogr   twinkieslamorkarbeelkatoenr   r'   r(   tabernazde kroonvivazpancakebouillonr.   r/   bistrotpizzeriachioscor0   zantico vinaior2   guelfir3   roosterr6   zristorante al solezbuffet mestrer-   rF   c              3   ,   >#    U  H	  oT;   v   M     g 7fr   r   r   s     r^   r   r      s       Y   X!#X   Xr   )r   r   r   r   r   r   z
city phonez
fa. b.smitzara	dekorazontabakz
arts & cra
butraguenor&   r%   zpremium retailquotdayquotidayz
miss manonlindtditechr1   zmarket s.r.l.panjerir4   r,   rG   c              3   ,   >#    U  H	  oT;   v   M     g 7fr   r   r   s     r^   r   r      s     SR!#XRr   )hotelr+   beursstraatr   rH   c              3   ,   >#    U  H	  oT;   v   M     g 7fr   r   r   s     r^   r   r      s     VU!#XUr   )r   r    z
aws.amazonvercelspotifyrI   rM   c              3   ,   >#    U  H	  oT;   v   M     g 7fr   r   r   s     r^   r   r      s     *z!#Xzr   )r9   c              3   ,   >#    U  H	  oT;   v   M     g 7fr   r   r   s     r^   r   r      s     JI!#XIr   )r8   r:   r;   rJ   c              3   ,   >#    U  H	  oT;   v   M     g 7fr   r   r   r   rS   s     r^   r   r      s       {  #zQ=  #zr   )z AMSTERDAM 	AmsterdamSCHIPHOLBUSSUMDAMRAKzAlbert HeijnJUMBOzBCK*NSzBCK*GHMBuckarooSingelBeursstraatKamYinPAPIZZANLc              3   ,   >#    U  H	  oT;   v   M     g 7fr   r   r   s     r^   r   r      s       u  #tQ=  #tr   )z MADRID GranViaPRADOSAGRADAzEL CORTELEFTIESCabifyzADOLFO SUAREZzZARA MADRID	SALAMANCACARMENROSALEDA
BUTRAGUENOESc              3   ,   >#    U  H	  oT;   v   M     g 7fr   r   r   s     r^   r   r      s     
L"KQ="Kr   )PARIS
VERSAILLESLOUVRELUMIEREFRBERLINDEDUOMOITVaticzVat VAVAzIMBITUBA BRrO   zWA ONzCA ONzFort Myers FLzFL ON)rI   rJ   rN   z'Alojamiento de Airbnb del viaje Europa.r	   user_confirmed:)rq   r   idtyperU   category_guesscountry_guessrX   
allocationdescriptiondescription_confidencedescription_source)rP   DEEL_AIRBNB_PHOTOSanyr_   r   )r   idxr   rV   rL   catrW   tripr[   r\   desc_sourcerY   rS   s              @@r^   enrichr     su   z]H 0Cao#,,SS1Wd(cAg8C	,	3	[7TX[7[CC-T
C	  C   B  C  
C  
C  IT  EH	  Y   X  Y  
Y  
Y  _k  [^	  L   K  L  
L  
L  R]  NQ	  m   l  m  
m  
m  s  or	  Y   X  Y  
Y  
Y  _i  [^	SRS	S	SYbUX	VUV	V	V\jX[q{lp	*z*	*	*	CS_Q`dvQv  }G4	JIJ	J	JPZCak\`
  {  #z  {  {  {  EI  }D
  u  #t  u  u  u  C  w~

L"K
LLLVZg8TW(DG(h(2DG $'Z(g1_5PT[_gTg--ww
n:d(3S4PD,,S8& ea  eS&1IA1I|S1I*JSTUaSbRccdehdiPjru  UX  ~B  PR  ae  Yd  e  er`   c                     [         R                  SSS9  [        5       n [        [	        5       5       VVs/ s H  u  p[        X!S-   5      PM     nnnU Vs/ s H  o"R                  S5      U ;  d  M  UPM     nn[         S-  R                  [        R                  " USSS95        [         S	-  R                  S
SS9 n[        R                  " U[        US   R                  5       5      S9ofR                  5         UR!                  U5        S S S 5        [#        S U 5       5      n[#        S U 5       5      n[#        S U 5       5      n	[#        S U 5       5      n
[#        S U 5       5      n[%        [&        5      n[%        [&        5      n[%        [&        5      nU H[  nUS   S:X  d  M  US   S:X  d  M  XS   ==   US   * -  ss'   XS   =(       d    S==   US   * -  ss'   XS   ==   US   * -  ss'   M]     [)        U5      [)        U5      [)        U5      -
  [)        U Vs1 s H  o"S   S:X  d  M  US   iM     sn5      [)        U Vs/ s H  o"S   S :X  d  M  UPM     sn5      [+        U* S5      [+        U* S5      [+        U	* S5      [+        U
* S5      [+        US5      [-        [/        UR1                  5       S! SS"95      [-        [/        UR1                  5       S# SS"95      [-        [/        UR1                  5       5      5      S$.n[         S%-  R                  [        R                  " USSS95        g s  snnf s  snf ! , (       d  f       GN?= fs  snf s  snf )&NT)parentsexist_okrf   r   ztransactions.jsonre   F)indentensure_asciiztransactions.csvwrh   )newliner   )
fieldnamesc              3   @   #    U  H  oS    S:X  d  M  US   v   M     g7f)r  r   rq   Nr   r   r   s     r^   r   build.<locals>.<genexpr>   s     IAfIy4H,   c              3   V   #    U  H  oS    S:X  d  M  US   S:X  d  M  US   v   M!     g7f)r  r   rX   r   rq   Nr   r&  s     r^   r   r'     s.     m'QvY	5IaP\o_lNl<'   )))c              3   V   #    U  H  oS    S:X  d  M  US   S:X  d  M  US   v   M!     g7f)r  r   rX   rM   rq   Nr   r&  s     r^   r   r'     s0     mW&	98LOQRS_Q`blQlOAlOWr*  c              3   B   #    U  H  oS    (       d  M  US   v   M     g7f)rU   rq   Nr   r&  s     r^   r   r'     s     A'Qx[<'s   c              3   @   #    U  H  oS    S:X  d  M  US   v   M     g7f)r  r@   rq   Nr   r&  s     r^   r   r'     s     KGqy(7J?1\?Gr(  r  r   rX   r   r  rq   r  unknownrn   rl   rj   rm   rs   c                     U S   $ Nrf   r   kvs    r^   <lambda>build.<locals>.<lambda>   s      gi  jk  glr`   )rZ   reversec                     U S   $ r0  r   r1  s    r^   r3  r4     s      ~@	  A	B	  ~C	r`   )countexcluded_countimage_countmanual_vicky_countexpense_total_allexpense_total_tripexpense_total_non_trip
fees_totalincome_totalby_category_tripby_country_tripby_payer_tripzsummary.json)OUTmkdirr   	enumerater   r  rR   
write_textr   dumpsopencsv
DictWriterr   keyswriteheader	writerowssumr   r   lenroundr   sortedr   )excludedir   all_entriesr   fr"  sum_allsum_tripsum_nontripsum_fees
sum_incomeby_cat
by_countryby_payersummarys                   r^   buildr_     s8   IIdTI*H*3MO*DE*D31A#*DKE#G1uuXh'FQGG	((GATY)Z[
 
 	&	&sB	&	71
..tGAJOO,='>
?RSR]R]^eRf 
8IIIGm'mmHmWmmKA'AAHKGKKJuF+e*<z{SXGYhV9iAlO]$B%&'1\?*::')6Y71\?:JJ7y\"ao%55"	 
 \3{3CCL3P_b  ~E  dc  ~Exy  KS  IT  Vb  Ibdsdefrds  ~E  dc  `d  z}  JQ  ~g  JQ  EF  W`  Ua  cf  Uf  @  JQ  ~g  zh  }B  DK  CK  LM  }N  di  ks  js  tu  dv  PU  Wb  Vb  cd  Pe  sx  zB  yB  CD  sE  UZ  [e  fg  Uh  |@  AG  HN  HT  HT  HV  \l  vz  A{  ||  OS  TZ  [e  [k  [k  [m  sC	  M	Q	  TR	  OS	  d	h	  i	o	  p	x	  p	~	  p	~	  p	@
  i	A
  d	B
  C
G##DJJwqu$UV# FG	7	7 dc  ~gs6   L:M 2M =AM&M6	MMM
M__main__)rz   r   rI  collectionsr   pathlibr   BASEru   r   rC  DATAr   rQ   r_   r   r  r   r   r  r_  __name__r   r`   r^   <module>rf     s      # ,-
Ul))e|((
Yf}/!_	B#8"J L 		 eFW, z	G r`   