Como identificar facturas electrónicas de servicios de Uber

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 🙂


Donación





Author: El Pop

Fernando "El Pop" Romo Nació y creció en la Ciudad de México, estudió y pasó de noche la carrera de Física en la Facultad de Ciencias de la UNAM, en su crisis existencial cursó algo de Ingeniería Electrónica en la UAM. En el pasado trabajó (o eso decía) en el Área de Ingeniería de Sistemas de Banamex, del cual harto del método laboral del banco, renuncia y pone su primera empresa de indias conocida como "Físicos Ingenieros y Matemáticos en Concertación, S.A. de C.V." (FIMAT), por razones de sanidad fiscal la cierra y abre la empresa "Origen de Sistemas, S.A. de C.V.", la cual vende y se va a trabajar a Acer Computec Latino América, toma cargo de la dirección de sistemas y lleva a cabo proyectos en la región. En una nueva crisis existencial, decide dejar Acer y abrir un portal dedicado al Software Libre llamado "La Cofradia Digital". Actualmente es presidente del Grupo de usuarios de Linux de México, A.C. (cargo para el cual ya se considera viejo), Director General de la empresa "Incuvox, S.A. de C.V.", Director de Voipcamp, S.C. y cuando le queda tiempo libre trabaja en algo que le permita mantener a sus hijos.

Leave a Reply