# Factura

La clase Invoice es el corazón de PHP FacturaE. Proporciona una API fluent para construir documentos XML FacturaE conformes con validación automática, cálculo de impuestos y firma digital.

Crear una factura

use PhpFacturae\Invoice;
$invoice = Invoice::create('2024-001')
->date('2024-03-09')
->seller($seller)
->buyer($buyer)
->line('Servicio', price: 100, vat: 21)
->transferPayment('ES12 3456 7890 1234 5678 9012');

Configuración básica

Series y fechas:

$invoice->series('A')
->date('2024-03-09')
->operationDate('2024-03-01')
->billingPeriod(from: '2024-03-01', to: '2024-03-31');

Esquema y tipo:

use PhpFacturae\Enums\Schema;
use PhpFacturae\Enums\InvoiceType;
$invoice->schema(Schema::V3_2_2)
->type(InvoiceType::Full);

Versiones de esquema: V3_2, V3_2_1, V3_2_2 (por defecto). Tipos de factura: Full (FC), Simplified (FA), SimplifiedRectified (AF).

Moneda y descripción:

$invoice->currency('EUR')
->description('Servicios de consultoría mensual');

Descuentos y cargos generales

$invoice->generalDiscount('Descuento cliente VIP', rate: 10);
$invoice->generalDiscount('Pronto pago', amount: 50.00);
$invoice->generalCharge('Gastos de envío', amount: 15.00);

Facturas rectificativas

use PhpFacturae\Enums\CorrectionReason;
use PhpFacturae\Enums\CorrectionMethod;
$invoice->corrects(
invoiceNumber: '2024-001',
reason: CorrectionReason::TransactionDetail,
method: CorrectionMethod::FullReplacement,
series: 'A'
);

Adjuntos

$invoice->attachFile('/ruta/al/contrato.pdf', 'Contrato firmado');

Exportar a XML

$xml = $invoice->toXml();
$invoice->export('/ruta/a/factura.xml');

Firma digital

use PhpFacturae\Signer;
$invoice->sign(Signer::pfx('certificado.pfx', 'password'))
->export('factura-firmada.xml');

Referencia de métodos

MétodoParámetrosDescripción
create()string $numberConstructor estático
series()string $seriesEstablecer serie
date()string|DateTimeImmutable $dateFecha de emisión
operationDate()string|DateTimeImmutable $dateFecha de operación
billingPeriod()$from, $toPeriodo de facturación
schema()Schema $schemaVersión FacturaE
type()InvoiceType $typeTipo de factura
currency()string $currencyMoneda (ISO 4217)
description()string $descriptionDescripción
seller()Party $sellerVendedor
buyer()Party $buyerComprador
line()Ver Líneas e impuestosAñadir línea
exemptLine()Ver Líneas e impuestosLínea exenta
customLine()Ver Líneas e impuestosLínea con impuestos custom
transferPayment()string $iban, ?string $dueDate, ?float $amountPago por transferencia
cashPayment()?string $dueDate, ?float $amountPago en efectivo
cardPayment()?string $dueDate, ?float $amountPago con tarjeta
directDebitPayment()string $iban, ?string $dueDate, ?float $amountDomiciliación
splitPayments()Ver PagosPagos fraccionados
sign()InvoiceSigner $signerFirmar factura
toXml()Generar XML
export()string $pathExportar a archivo