Comments (6)
Hola @simplygest,
Es decir, la factura se genera, pero los importes, totales, etc. no coinciden con los de la factura original.
¿Podrías pasar el código que estás utilizando para generar la factura? Si los totales no coinciden es un fallo muy grave de la librería, pero para poder arreglarlo necesito dar con el fallo primero.
Hay algún truco que se deba tener en cuenta cuando se usan todos estos impuestos?
"Truco" no hay, todo depende del formato en el que lo quiera la entidad receptora de la factura. Aquí existentes varias soluciones para añadir el recargo equivalente:
1. Como un impuesto
$fac->addItem(new FacturaeItem([
"name" => "Nombre",
"articleCode" => "A1234",
"quantity" => 2,
"unitPriceWithoutTax" => 100,
"discounts" => [
["reason" => "Descuento del 20%", "rate" => 20]
],
"taxes" => [
Facturae::TAX_IVA => 21,
Facturae::TAX_IRPF => 19,
Facturae::TAX_OTHER => 5.2 // <----- Recargo de equivalencia
]
]));
2. Como un cargo
$fac->addItem(new FacturaeItem([
"name" => "Nombre",
"articleCode" => "A1234",
"quantity" => 2,
"unitPriceWithoutTax" => 100,
"discounts" => [
["reason" => "Descuento del 20%", "rate" => 20]
],
"charges" => [
["reason" => "Recargo de equivalencia", "rate" => 5.2, "hasTaxes" => false] // <----- Recargo de equivalencia
],
"taxes" => [
Facturae::TAX_IVA => 21,
Facturae::TAX_IRPF => 19
]
]));
3. Como un impuesto especial
Esta funcionalidad que se recoge en los campos EquivalenceSurcharge
y EquivalenceSurchargeAmount
está contemplada en el formato FacturaE. Es seguramente la más correcta pero todavía no está implementada en Facturae-PHP.
from facturae-php.
Hola!
Al final conseguí crear la factura correctamente haciéndolo como un impuesto más, aunque utilicé TAX_IE en vez de TAX_OTHER.
Si lo hacía en "charges" no me cuadraban los totales, y si lo hacía con otro TAX_IVA para el Rec. Equiv. tampoco.
Como es un caso complejo (IVA, Recargo, Ret y Descuento) no conseguí averiguar cuándo me fallaba exactamente, así que voy a intentar recopilar más información y si consigo reproducirlo lo pongo aquí.
Gracias
from facturae-php.
@simplygest, conseguiste reproducir el fallo?
from facturae-php.
Hola!
Disculpa, estoy con varios proyectos a la vez y no he podido hacer pruebas.
Lo solucioné en su momento usando otro impuesto (TAX_IE) en vez de usando "charges".
Voy a intentar replicarlo en cuanto retome ese proyecto.
from facturae-php.
Hola!
Hoy me he acordado de que estaba esto pendiente y he hecho algunas pruebas.
Añadiendo el recargo como otro impuesto, al validar la factura (por ejemplo en viewer.facturadirecta.com) el resultado es correcto. Coincide con la factura original.
Si lo hago usando el apartado "charges" como en el ejemplo 2, el total es incorrecto. El "total sin impuestos" tiene en cuenta el recargo, y luego se aplica el IVA (y la retención irpf) a ese total, cuando creo que debería ser al contrario.
En el primer caso (el que me funciona), el total sin impuestos no tiene en cuenta ni el IVA ni el RE, y luego se añade el RE y se resta la Retención.
Hice una prueba sencilla, con importes "redondos" (100 + 21% IVA +5.2% RE - 19%IRPF) para analizar mejor qué pasaba.
Usando "otro impuesto": 100 + 21 + 5,20 - 19 = 107,20
Usando "charges": 105,20 -19,99 + 22,09 = 107.30
En mis primeras pruebas la factura era incluso más complicada (con descuento global y por línea) y era más difícil averiguar el origen del problema.
Un saludo!
from facturae-php.
Hola @simplygest,
Gracias por retomar el issue! He estado haciendo pruebas para reproducir lo que comentas y ya entiendo por qué ocurre.
He generado la factura (100€ BI, 21% IVA, 5.2% RE, 19% IRPF) de tres formas distintas, y este es el resultado:
Total factura | Total importe bruto | |
---|---|---|
Usando cargos | 107,30 € | 105,20 € |
Usando Impuestos Especiales | 107,20 € | 100,00 € |
Usando Recargo de Equivalencia | 107,20 € | 100,00 € |
El primer método devuelve unos importes distintos porque los cargos y descuentos se aplican antes de impuestos sobre la base imponible, alterando el total de la factura. Aunque no es un fallo (es lo que dice la especificación), creo que es importante tenerlo en cuenta a la hora de definir una factura (yo tampoco era suficientemente consciente de esto... 😓).
TLDR: Los recargos de equivalencia es mejor definirlos con la funcionalidad añadida en la v1.6.0 o como impuesto especial, pero nunca como cargo.
Dejo por aquí el script que he utilizado para hacer las pruebas:
use josemmo\Facturae\Facturae;
use josemmo\Facturae\FacturaeItem;
use josemmo\Facturae\FacturaeParty;
$party = new FacturaeParty([
"taxNumber" => "A00000000",
"name" => "Perico de los Palotes S.A.",
"address" => "C/ Falsa, 123",
"postCode" => "12345",
"town" => "Madrid",
"province" => "Madrid"
]);
$fac = new Facturae();
$fac->setNumber('TEST-DEC', '0001');
$fac->setIssueDate('2021-04-15');
$fac->setSeller($party);
$fac->setBuyer($party);
echo "==== 1. USANDO CARGOS ====\n";
$fac->addItem(new FacturaeItem([
"name" => "Prueba",
"quantity" => 1,
"unitPriceWithoutTax" => 100,
"charges" => [
["reason" => "Recargo de equivalencia", "rate" => 5.2, "hasTaxes" => false]
],
"taxes" => [
Facturae::TAX_IVA => 21,
Facturae::TAX_IRPF => 19
]
]));
$totals = $fac->getTotals();
echo "Total factura: {$totals['invoiceAmount']} €\n";
echo "Total importe bruto: {$totals['grossAmountBeforeTaxes']} €\n\n";
$fac->clearItems();
echo "==== 2. USANDO IMPUESTOS ESPECIALES ====\n";
$fac->addItem(new FacturaeItem([
"name" => "Prueba",
"quantity" => 1,
"unitPriceWithoutTax" => 100,
"taxes" => [
Facturae::TAX_IVA => 21,
Facturae::TAX_IE => 5.2,
Facturae::TAX_IRPF => 19
]
]));
$totals = $fac->getTotals();
echo "Total factura: {$totals['invoiceAmount']} €\n";
echo "Total importe bruto: {$totals['grossAmountBeforeTaxes']} €\n\n";
$fac->clearItems();
echo "==== 3. USANDO RECARGO DE EQUIVALENCIA ====\n";
$fac->addItem(new FacturaeItem([
"name" => "Prueba",
"quantity" => 1,
"unitPriceWithoutTax" => 100,
"taxes" => [
Facturae::TAX_IVA => ['rate'=>21, 'surcharge'=>5.2],
Facturae::TAX_IRPF => 19
]
]));
$totals = $fac->getTotals();
echo "Total factura: {$totals['invoiceAmount']} €\n";
echo "Total importe bruto: {$totals['grossAmountBeforeTaxes']} €\n\n";
from facturae-php.
Related Issues (20)
- ¿Existe una forma de añadir el IRPF al importe general y no calcularlo en cada item? HOT 1
- Error entorno de pruebas DIRe HOT 1
- IRPF Aparece como repercutido y no como retenido HOT 1
- Pregunta: e.FACT HOT 2
- Problemas validación con certificados camefirma HOT 2
- Múltiples facturas en el mismo export HOT 4
- PaymentsOnAccount HOT 1
- Firma invalida HOT 3
- Entorno de pruebas HOT 2
- Comprobación documento extranjero HOT 6
- Buscador de Centros administrativos HOT 2
- Advertencia al instalar con composer HOT 1
- eFact - A bad canonicalization algorithm was specified HOT 10
- Ley aplicable 1007/2023 HOT 1
- verifactu HOT 1
- SOAP-ENV:ServerProcedure 'consultarFactura' not present HOT 5
- Añadir análisis estático (o tipos básicos con PHPDoc)
- Algunas propiedades usan inglés y otras español HOT 1
- Valores de certificado en hexadecimal HOT 3
- Error en la documentacion para cargar la libreria sin composer HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from facturae-php.