Skip to main content

Overview

The Invoice types represent the complete structure of an electronic invoice (factura) as required by Ecuador’s tax authority (SRI). The main types are Invoice for the full XML structure and InvoiceInput for creating new invoices.

Invoice

The complete invoice structure with all required XML namespaces and attributes.
export type Invoice = {
  factura: {
    "@xmlns:ds": string;
    "@xmlns:xsi": string;
    "@id": string;
    "@version": string;
    infoTributaria: TaxInfo;
    infoFactura: InvoiceInfo;
    detalles: Details;
    reembolsos?: Reimbursements;
    retenciones?: Retentions;
    infoSustitutivaGuiaRemision?: RemisionGuideSustitutiveInfo;
    otrosRubrosTerceros?: OtherThirdPartyValues;
    tipoNegociable?: {
      correo: string;
    };
    maquinaFiscal?: {
      marca: string;
      modelo: string;
      serie: string;
    };
    infoAdicional?: AdditionalInfo;
  };
};

Fields

factura
object
required
The root element of the invoice
factura.@xmlns:ds
string
required
XML digital signature namespace. Default: http://www.w3.org/2000/09/xmldsig#
factura.@xmlns:xsi
string
required
XML schema instance namespace. Default: http://www.w3.org/2001/XMLSchema-instance
factura.@id
string
required
XML element identifier. Default: comprobante
factura.@version
string
required
Invoice version identifier
factura.infoTributaria
TaxInfo
required
Tax information including RUC, business details, and document type. See TaxInfo
factura.infoFactura
InvoiceInfo
required
Invoice details including buyer information, totals, and payment terms. See InvoiceInfo
factura.detalles
Details
required
Line items and product/service details. See Details
factura.reembolsos
Reimbursements
Optional reimbursement information. See Reimbursements
factura.retenciones
Retentions
Optional tax retention information. See Retentions
factura.infoSustitutivaGuiaRemision
RemisionGuideSustitutiveInfo
Optional remission guide substitutive information
factura.otrosRubrosTerceros
OtherThirdPartyValues
Optional third-party values and charges
factura.tipoNegociable
object
Optional negotiable document information
factura.maquinaFiscal
object
Optional fiscal machine information for retail environments
factura.infoAdicional
AdditionalInfo
Optional additional information fields

InvoiceInput

Input type for creating new invoices. Similar to Invoice but excludes XML attributes and the claveAcceso (access key) which is generated automatically.
export type InvoiceInput = {
  infoTributaria: Omit<TaxInfo, "claveAcceso">;
  infoFactura: InvoiceInfo;
  detalles: Details;
  reembolsos?: Reimbursements;
  retenciones?: Retentions;
  infoSustitutivaGuiaRemision?: RemisionGuideSustitutiveInfo;
  otrosRubrosTerceros?: OtherThirdPartyValues;
  tipoNegociable?: {
    correo: string;
  };
  maquinaFiscal?: {
    marca: string;
    modelo: string;
    serie: string;
  };
  infoAdicional?: AdditionalInfo;
};

Fields

infoTributaria
Omit<TaxInfo, 'claveAcceso'>
required
Tax information without the access key (generated automatically). See TaxInfo
infoFactura
InvoiceInfo
required
Invoice details including buyer information and totals. See InvoiceInfo
detalles
Details
required
Line items and product/service details. See Details
reembolsos
Reimbursements
Optional reimbursement information. See Reimbursements
retenciones
Retentions
Optional tax retention information. See Retentions
infoSustitutivaGuiaRemision
RemisionGuideSustitutiveInfo
Optional remission guide substitutive information
otrosRubrosTerceros
OtherThirdPartyValues
Optional third-party values and charges
tipoNegociable
object
Optional negotiable document information
maquinaFiscal
object
Optional fiscal machine information
infoAdicional
AdditionalInfo
Optional additional information fields

Usage Example

import { InvoiceInput } from 'open-factura';

const invoice: InvoiceInput = {
  infoTributaria: {
    ambiente: "1", // Testing environment
    tipoEmision: "1",
    razonSocial: "Mi Empresa S.A.",
    nombreComercial: "Mi Empresa",
    ruc: "1234567890001",
    codDoc: "01", // Invoice
    estab: "001",
    ptoEmi: "001",
    secuencial: "000000001",
    dirMatriz: "Av. Principal 123"
  },
  infoFactura: {
    // ... invoice info
  },
  detalles: {
    // ... line items
  }
};

Build docs developers (and LLMs) love