import { LitElement } from 'lit'; import '../ok-qr/ok-qr.js'; /** Parte fiscal (emisor o receptor). */ export interface InvoiceParty { name: string; /** NIF / CIF / VAT. */ tax_id?: string; address?: string; city?: string; postal_code?: string; country?: string; email?: string; phone?: string; } /** Una línea de factura. */ export interface InvoiceLine { description: string; qty: number; unit_price: number; /** % de descuento sobre la línea (opcional). */ discount_percent?: number; /** % de impuesto aplicado a la línea (informativo; el cálculo va en `taxes`). */ tax_rate?: number; /** Importe de la línea (neto tras descuento, sin impuesto). */ total: number; } /** Resumen de un tipo impositivo. */ export interface InvoiceTaxLine { /** Etiqueta (p.ej. "IVA 21%"). */ label: string; /** Tipo en % (p.ej. 21). */ rate?: number; base: number; amount: number; } export interface OkInvoiceLabels { /** Mensaje cuando no hay datos de factura. */ empty: string; /** Título del documento (cabecera derecha). */ invoice: string; /** Etiqueta del nº de factura. */ number: string; /** Etiqueta de la fecha de emisión. */ date: string; /** Etiqueta de la fecha de vencimiento. */ dueDate: string; /** Cabecera del bloque receptor. */ billTo: string; /** Cabecera de columna: descripción. */ description: string; /** Cabecera de columna: cantidad. */ qty: string; /** Cabecera de columna: precio unitario. */ price: string; /** Cabecera de columna: descuento. */ discount: string; /** Cabecera de columna: impuesto. */ tax: string; /** Cabecera de columna: importe de línea. */ amount: string; /** Mensaje cuando no hay líneas. */ noLines: string; /** Etiqueta de la base imponible. */ taxBase: string; /** Etiqueta del descuento total. */ discountTotal: string; /** Etiqueta del total. */ total: string; /** Cabecera de la forma de pago. */ paymentMethod: string; } /** JSON completo de la factura. */ export interface InvoiceData { /** Emisor (con logo opcional). */ issuer: InvoiceParty & { logo_url?: string; }; /** Receptor / cliente. */ customer: InvoiceParty; /** Tipo fiscal (p.ej. 'F1' completa, 'F2' simplificada, 'R1' rectificativa). */ type?: string; /** Nº de factura (serie + número). */ number: string; /** Fecha de emisión (ya formateada o ISO legible). */ issue_date: string; /** Fecha de vencimiento (opcional). */ due_date?: string; lines: InvoiceLine[]; /** Base imponible total (suma de netos). */ subtotal: number; /** Descuento total agregado (opcional). */ discount_total?: number; /** Resumen de impuestos por tipo. */ taxes: InvoiceTaxLine[]; /** Suma de impuestos. */ tax_total: number; /** Total a pagar. */ total: number; /** Símbolo de moneda (def. '€'). */ currency?: string; /** Método de pago (p.ej. "Transferencia", "Tarjeta"). */ payment_method?: string; /** Condiciones de pago / IBAN / vencimiento textual. */ payment_terms?: string; /** Notas libres. */ notes?: string; /** Pie legal (LOPD, registro mercantil, etc.). */ footer?: string; /** Payload del QR (VeriFactu / verificación). Si vacío, no se pinta. */ qr?: string; /** Leyenda bajo el QR. */ qr_note?: string; } export declare class OkInvoice extends LitElement { static styles: import("lit").CSSResult; /** JSON de la factura a renderizar. */ invoice?: InvoiceData; /** Tamaño del QR en px (lado). */ qrSize: number; /** Textos traducibles (merge sobre los defaults en inglés). */ labels: Partial; private get t(); private cur; private money; render(): import("lit-html").TemplateResult<1>; private party; private renderTop; private renderBillTo; private renderLines; private renderSummary; private renderFoot; } declare global { interface HTMLElementTagNameMap { 'ok-invoice': OkInvoice; } }