eclipxe13 / CfdiUtils

PHP Common utilities for Mexican CFDI 3.2, 3.3 & 4.0

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Escritura del atributo Importe de Comprobante/Impuestos/Traslados/Traslado es redondeado y no debería

eclipxe13 opened this issue · comments

Al revisar el issue #38 se encontró que la escritura de un CFDI no escribe la correcta suma en los atributos cfdi:Comprobante/cfdi:Impuestos/cfdi:Traslados/cfdi:Traslado@Importe y cfdi:Comprobante/cfdi:Impuestos/cfdi:Retenciones/cfdi:Retencion@Importe.

Este problema es porque:
a) El la clase SumasConceptos dichos atributos son redondeados
b) En la clase SumasConceptosWriter dichos atributos son redondeados

Aquí un test para ilustrar el caso:

    public function testUsesAllDecimalsOnComplementoImpuestosTrasladosTrasladoImporte()
    {
        $comprobante = new Comprobante();
        $comprobante->addConcepto()->addTraslado(
            ['Importe' => '7.777777', 'Impuesto' => '002', 'TipoFactor' => 'Tasa', 'TasaOCuota' => '0.160000']
        );
        $comprobante->addConcepto()->addTraslado(
            ['Importe' => '2.222222', 'Impuesto' => '002', 'TipoFactor' => 'Tasa', 'TasaOCuota' => '0.160000']
        );

        $precision = 3;
        $sumasConceptos = new SumasConceptos($comprobante, $precision);
        $writer = new SumasConceptosWriter($comprobante, $sumasConceptos, $precision);
        $writer->put();

        print_r(XmlNodeUtils::nodeToXmlString($comprobante));

        $this->assertSame('10.000', $comprobante->searchAttribute('cfdi:Impuestos', 'TotalImpuestosTrasladados'));
        $this->assertSame(
            '9.999999',
            $comprobante->searchAttribute('cfdi:Impuestos', 'cfdi:Traslados', 'cfdi:Traslado', 'Importe')
        );
    }

Importante: Este no es un problema si al escribir el importe de cfdi:Comprobante/cfdi:Conceptos/cfdi:Concepto/cfdi:Impuestos/cfdi:Traslados/cfdi:Traslado@Importe y cfdi:Comprobante/cfdi:Conceptos/cfdi:Concepto/cfdi:Impuestos/cfdi:Retenciones/cfdi:Retencion@Importe ya se escribe redondeado.

Acabo de ver la hoja 72 y 73 del Anexo 20 y explícitamente dice que dichos atributos deben tener hasta la cantidad de decimales que soporte la moneda por lo que este issue no es válido.