libredte_lib_sdk.billing.document.builder module

Servicio para billing.document.builder.

class libredte_lib_sdk.billing.document.builder.DocumentBuilderService(client: ApiClient)

Bases: object

Construye documentos tributarios (billing.document.builder).

El mismo worker de la API sirve tanto para un borrador como para el documento timbrado y firmado, según qué datos se le pasen — acá se separa en dos métodos explícitos para que la intención de cada llamada quede clara en el código que la usa.

build_draft(input_data: str | bytes | dict[str, Any], *, options: dict[str, Any] | None = None) → DocumentBag

Emite el borrador de un DTE a partir de datos de entrada.

input_data es el Encabezado/Detalle (y demás nodos) del formato DTE del SII como dict — o datos en otro formato (XML/YAML, un formulario, etc.), como bytes o str, junto con options={“parser”: {“strategy”: “<estrategia>”}} para indicar cómo parsearlos. El contenido de un archivo se debe pasar como bytes (leído en modo rb): se envía sin alterar su codificación. Un str ya es texto decodificado y se envía en UTF-8. Sin options, la API asume que input_data ya viene en el formato DTE del SII (estrategia default.json). Encabezado.IdDoc.Folio es opcional acá — un borrador sin folio no falla (queda con folio 0 en DocumentBag.document_id, sin nodo Folio en el XML). Sin CAF ni certificado, el resultado no queda timbrado (DocumentBag.is_timbrado es False).

build_signed(input_data: str | bytes | dict[str, Any], *, options: dict[str, Any] | None = None, caf_xml: str, certificate: Certificate) → DocumentBag

Genera el DTE real, timbrado y firmado.

input_data/options funcionan igual que en build_draft() — acá sí se necesita un Encabezado.IdDoc.Folio real, cubierto por caf_xml (el SDK no asigna folios: eso lo decide quien llama, típicamente porque lleva el correlativo). Requiere un CAF real (XML tal como lo entrega el SII) y el certificado digital del emisor. Para pruebas, ambos se pueden generar con IdentifierComponent.caf_faker y TradingPartiesComponent.mandatario_manager.