Descuentos y cargos

Para añadir uno o varios descuentos a una línea de producto se debe indicar a la hora de crear la instancia de FacturaeItem. De forma similar, pueden añadirse cargos a un producto que, al contrario que los descuentos, incrementarán su precio.

$fac->addItem(new FacturaeItem([
  "name" => "Un producto con descuento",
  "unitPriceWithoutTax" => 500, // NOTA: estos descuentos y cargos se
                                // aplican sobre la base imponible
  "discounts" => [
    ["reason" => "Descuento del 20%", "rate" => 20],
    ["reason" => "5€ de descuento", "amount" => 5]
  ],
  "charges" => [
    ["reason" => "Recargo del 1,30%", "rate" => 1.3]
  ],
  "taxes" => [Facturae::TAX_IVA => 21]
]));

Descuentos y cargos sobre el total con impuestos

Supongamos que vendemos un producto por un importe de 100€ (IVA incluido) y descuento de 5€. Por defecto, Facturae-PHP aplicará el descuento sobre los 100€ siempre y cuando se indique el campo unitPrice en vez de unitPriceWithoutTax:

$fac->addItem(new FacturaeItem([
  "name" => "Un producto con descuento",
  "unitPrice" => 100,
  "discounts" => [
    ["reason" => "Descuento de 5€ (IVA incluído)", "amount" => 5]
  ],
  "taxes" => [Facturae::TAX_IVA => 10]
]));

Esto significa que Facturae-PHP ajustará el importe del descuento para representarlo en función de la base imponible como especifica el estándar.

Si se quisiera evitar este comportamiento y aplicar un descuento a la base imponible de una línea de producto con impuestos incluídos, se deberá usar el flag hasTaxes:

$fac->addItem(new FacturaeItem([
  "name" => "Un producto con descuento",
  "unitPrice" => 100,
  "discounts" => [
    ["reason" => "Descuento de 5€", "amount" => 5, "haxTaxes" => false]
  ],
  "taxes" => [Facturae::TAX_IVA => 10]
]));

NOTA

Consulta el test DiscountsTest.php dentro del directorio tests/ para más información sobre este comportamiento.