En mi empresa facturamos casi todo lo que podemos y no es la excepción que pidamos a Uber (servicio de transporte) estos documentos.
Pero el problema radica en que Uber no factura, si no los choferes. Uber no cuenta con un solo taxi y no da recibos fiscales en México, por lo que su sistema de facturación obliga a cada chofer a emitir el comprobante.
Esto hace complicado la clasificación contable de este servicio, por lo que hice un script rápido (uber.pl) en perl para analizar los comprobantes fiscales CFDI (Comprobantes Fiscales Digitales por Internet) en su formato XML.
#!/usr/bin/perl -w use strict; use XML::Simple; use File::Basename; # Parser filenames use File::Find; # Search in directories my %config = ( VC_recibidas => '/Users/pop/SAT_XML/VOI120502IH3/recibidas', Uber_str => 'SERVICIO PRIVADO DE TRANSPORTE CON CHOFER', ); sub Concepto { my $ref_concepto = shift; my $uber = 0; if (ref($ref_concepto) eq 'ARRAY') { for (my $i=0; $i <= (@{ $ref_concepto } - 1) ; $i++) { $uber = 1 if($ref_concepto->[$i]->{descripcion} =~ /$config{Uber_str}/); } } else { $uber = 1 if($ref_concepto->{descripcion} =~ /$config{Uber_str}/); } return $uber; } sub proc_files { # Find the Filename, Directory, extension and Date my ($file,$dir,$ext) = fileparse($File::Find::name, qr/\..*/); # If the extension of the file is ".xml" do rutine if ($ext eq '.xml') { my $Fac = XMLin("$file$ext"); if ( ( exists($Fac->{'cfdi:Complemento'}{'tfd:TimbreFiscalDigital'}{UUID}) ) && ( exists($Fac->{'cfdi:Emisor'}{rfc} ) ) && ( $Fac->{'cfdi:Receptor'}{rfc} ne '' ) && ( $Fac->{version} =~ '3.' ) ) { if (Concepto(\$Fac->{'cfdi:Conceptos'}{'cfdi:Concepto'})) { print "UBER $Fac->{'cfdi:Emisor'}{rfc} " . uc($Fac->{'cfdi:Complemento'}{'tfd:TimbreFiscalDigital'}{UUID}) . "\n"; } } } } $File::Find::prune = 1; find(\&proc_files, $config{VC_recibidas}); |
Tengo los CFDI’s en XML en el path “/Users/pop/SAT_XML/VOI120502IH3/recibidas” y notamos que varias facturas decían la leyenda “SERVICIO PRIVADO DE TRANSPORTE CON CHOFER”.
Con estos datos el script de perl busca en el directorio los XML’s itera en los conceptos y busca el string en la descripción.
Con este encontré 177 facturas rápidamente. Aquí un ejemplo de lo que manda:
pop$ ./uber.pl UBER MUSA580819US4 0177DF4A-1DB6-4FC6-A652-732033F91CAF UBER OURD830628L97 024CB729-A66B-425E-88BE-B36EF48904DF UBER GAME950429GY4 0314D11F-F312-46A1-BB0C-08C75680CFE6 UBER OOMA750822822 0778866F-01A1-47F5-9423-974F05B68506 |
El script lo libero como GPL y úsenlo para clasificar sus facturas 🙂