libredte_lib_sdk.billing.book.models module

DTO del componente billing.book.

class libredte_lib_sdk.billing.book.models.BookBag(book: dict[str, Any] | None, book_type: dict[str, Any], book_auth: dict[str, Any] | None, caratula: dict[str, Any], detalle: list[dict[str, Any]], raw: dict[str, Any])

Bases: object

Bolsa de un libro tributario (book.builder::build/book.loader::load).

Ambas operaciones devuelven esta misma forma — la diferencia es qué tan lejos llegó el procesamiento: loader.load() solo normaliza caratula/detalle a partir de los datos de entrada (book siempre viene None, sin importar el input); builder.build() sí construye y firma el libro, por lo que book viene poblado (el libro completo — genérico entre los 5 tipos, ej. libro_ventas/libro_compras traen {“LibroCompraVenta”: {…}} junto a su xml en base64 — no se tipa más allá de dict porque la clave raíz varía según el tipo). book_auth (la autorización del emisor) solo viene poblada si esa autorización se incluyó junto con los datos del emisor en la solicitud; si no, viene None.

xml_base64/xml/xml_bytes dan acceso directo al XML del libro construido — solo válidos cuando book no es None (ver is_construido); listos para encadenar a BookValidatorService. No usa XmlPayloadMixin: acá xml_base64 es una @property (el libro puede no estar construido), no un campo simple.

book: dict[str, Any] | None
book_auth: dict[str, Any] | None
book_type: dict[str, Any]
caratula: dict[str, Any]
detalle: list[dict[str, Any]]
classmethod from_api(data: dict[str, Any]) → BookBag

Construye un BookBag desde el data que devuelve la API.

property is_construido: bool

Si book viene poblado (builder.build(), no loader.load()).

raw: dict[str, Any]
property xml: str

XML del libro construido, como texto (ISO-8859-1).

property xml_base64: str

XML del libro construido, en base64 — ver BookValidatorService.

property xml_bytes: bytes

XML del libro construido, decodificado desde base64.