Skip to main content

SDK para la integración con los servicios de SimpleFactura

Project description

SDK SimpleFactura

El SDK SimpleFactura es una solución en Python diseñada para facilitar la integración con los servicios de SimpleFactura, parte de ChileSystems. Este SDK provee un conjunto de clases y métodos que permiten realizar operaciones como facturación, gestión de productos, proveedores, clientes, sucursales, folios, Datos de empresa y boletas de honorarios.


Características principales

  • Simplifica la interacción con los servicios de SimpleFactura.
  • Proporciona interfaces específicas para operaciones como:
    • Facturación: Generación y gestión de documentos tributarios electrónicos.
    • Gestión de productos, proveedores y clientes.
    • Gestión de folios.
    • Emisión de boletas de honorarios.
  • Compatible con Python 3.6 y superior.

Requisitos

Dependencias

Las dependencias necesarias para utilizar este SDK son:

  • requests
  • aiohttp
  • requests-toolbelt
  • pydantic
  • httpx
  • pytest
  • requests-mock
  • python-dotenv
  • pytest-asyncio
  • aiofiles

Plataforma

El SDK es compatible con Python 3.6 y versiones superiores.


Instalación

Puedes instalar el SDK y sus dependencias utilizando pip:

pip install SimpleFacturaSDK

Si necesitas instalar las dependencias manualmente:

pip install requests requests-toolbelt pydantic aiohttp pytest requests-mock python-dotenv pytest-asyncio httpx aiofiles

Opcional(Clonar el repositorio e instalar dependencias desde requirements.txt)

git clone https://github.com/pereacarlos/SimpleFacturaSDK-python.git
cd SimpleFacturaSDK-python
pip install -r requirements.txt

Cómo empezar Para utilizar el SDK, simplemente inicializa la clase ClientSimpleFactura proporcionando tu nombre de usuario y contraseña:

from ClientSimpleFactura import ClientSimpleFactura
import os
from dotenv import load_dotenv
load_dotenv()

username = os.getenv("SF_USERNAME")
password = os.getenv("SF_PASSWORD")

def main():
    client_api = ClientSimpleFactura(username, password)
    
    # Ejemplo: Uso de los servicios
    facturacionService = client_api.Facturacion
    productoService = client_api.Productos
    proveedorService = client_api.Proveedores
    clientesService = client_api.Clientes
    sucursalService = client_api.Sucursales
    folioService = client_api.Folios
    configuracionService = client_api.ConfiguracionService
    boletaHonorarioService = client_api.BoletaHonorarioService

if __name__ == "__main__":
    main()

Ejemplo de Uso del SDK SimpleFactura y Descripción General del Código

ObtenerPDF

Este ejemplo demuestra cómo utilizar el SDK SimpleFacturaSdk para interactuar con el servicio de facturación electrónica SimpleFactura. Específicamente, se realiza una solicitud para descargar el PDF de una factura electrónica. El proceso incluye:

  1. Configuración de Credenciales: Las credenciales se obtienen de un archivo .env para autenticar al usuario.
  2. Creación de Solicitud: Se configura una solicitud con los datos necesarios, como el RUT del emisor, tipo de documento, y folio.
  3. Llamada al Servicio: Se utiliza el cliente del SDK para llamar al endpoint /dte/pdf y obtener el PDF de la factura.
  4. Guardado del PDF: Si la respuesta es exitosa, el archivo PDF se guarda localmente.

El código utiliza programación asincrónica para garantizar un manejo eficiente de la comunicación con la API.

import asyncio
from client_simple_factura import ClientSimpleFactura
from models.GetFactura.Credenciales import Credenciales
from models.GetFactura.DteReferenciadoExterno import DteReferenciadoExterno
from models.GetFactura.SolicitudPdfDte import SolicitudPdfDte
import os
from dotenv import load_dotenv
load_dotenv()

username = os.getenv("SF_USERNAME")
password = os.getenv("SF_PASSWORD")

async def main():

    async with ClientSimpleFactura(username, password) as client_api:
        pdf = SolicitudPdfDte(
            credenciales=Credenciales(
                rut_emisor="76269769-6",
                nombre_sucursal="Casa Matriz"
            ),
            dte_referenciado_externo=DteReferenciadoExterno(
                folio=4117,
                codigoTipoDte=33,
                ambiente=0
            )
        )
        try:
            pdf_response = await client_api.Facturacion.obtener_pdf(pdf)
            if pdf_response.status == 200:
                with open("factura.pdf", "wb") as file:
                    file.write(pdf_response.data)
                print("PDF guardado exitosamente")
            else:
                print(f"Error: {pdf_response.message}")
        except Exception as err:
            print(f"Error: {err}")

if __name__ == "__main__":
    asyncio.run(main())

ObtenerTimbre

Este ejemplo utiliza el SDK SimpleFacturaSdk para obtener el timbre de una factura electrónica desde el servicio SimpleFactura. El proceso incluye:

  1. Configuración de Credenciales: Las credenciales se obtienen de un archivo .env para autenticar al usuario.
  2. Creación de Solicitud: Se configura una solicitud que incluye datos como el RUT del emisor, nombre de la sucursal, folio, tipo de documento, y ambiente.
  3. Llamada al Servicio: Se realiza una llamada al endpoint correspondiente para obtener el timbre asociado a la factura.
  4. Guardado del Timbre: Si la respuesta es exitosa, el timbre recibido en formato Base64 se decodifica y se guarda como una imagen en el archivo timbre.png. El código utiliza programación asincrónica para manejar las solicitudes y asegura un manejo eficiente de los recursos y errores durante la ejecución.
import asyncio
from client_simple_factura import ClientSimpleFactura
from models.GetFactura.Credenciales import Credenciales
from models.GetFactura.DteReferenciadoExterno import DteReferenciadoExterno
from models.GetFactura.SolicitudPdfDte import SolicitudPdfDte
import base64
import json
import os
from dotenv import load_dotenv
load_dotenv()
username = os.getenv("SF_USERNAME")
password = os.getenv("SF_PASSWORD")
async def main():
    async with ClientSimpleFactura(username, password) as client_api:
        solicitud = SolicitudPdfDte(
            credenciales=Credenciales(
                rut_emisor="76269769-6",
                nombre_sucursal="Casa Matriz"
            ),
            dte_referenciado_externo=DteReferenciadoExterno(
                folio=4117,
                codigoTipoDte=33,
                ambiente=0
            )
        )
        try:
            timbre_response = await client_api.Facturacion.obtener_timbre(solicitud)
            timbre_data = json.loads(timbre_response.data)
            with open("timbre.png", "wb") as f:
                f.write(base64.b64decode(timbre_data["data"]))
            print("Timbre guardado en timbre.png")
        except Exception as err:
            print(f"Error: {err}")
if __name__ == "__main__":
    asyncio.run(main())
Facturacion_individualV2_Boletas

Este ejemplo muestra cómo utilizar el SDK SimpleFacturaSdk para emitir una boleta electrónica mediante el servicio SimpleFactura. El proceso incluye:

  1. Configuración de Credenciales: Las credenciales se obtienen de un archivo .env para autenticar al usuario.
  2. Creación de Solicitud: Se configura una solicitud detallada con información del documento, encabezado, emisor, receptor, totales, y los productos o servicios incluidos.
  3. Llamada al Servicio: Se utiliza el cliente del SDK para llamar al endpoint de facturación de boletas, enviando los datos configurados.
  4. Respuesta del Servicio: Se procesa la respuesta del servicio, mostrando detalles como el tipo de documento, RUT del emisor y receptor, folio, fecha de emisión y el total del documento.

El código utiliza programación asincrónica para manejar eficientemente las solicitudes hacia la API y captura errores para un manejo robusto en caso de fallos.

import asyncio
from client_simple_factura import ClientSimpleFactura
import base64
import json
from models.GetFactura.Documento import Documento
from models.GetFactura.Encabezado import Encabezado
from models.GetFactura.IdentificacionDTE import IdDoc
from models.GetFactura.Emisor import Emisor
from models.GetFactura.Receptor import Receptor
from models.GetFactura.Totales import Totales
from models.GetFactura.Detalle import Detalle
from models.GetFactura.CodigoItem import CdgItem
from enumeracion.TipoDTE import DTEType
from enumeracion.IndicadorServicio import IndicadorServicioEnum
from models.GetFactura.RequestDTE import RequestDTE
import requests
from models.ResponseDTE import Response
import os
from dotenv import load_dotenv
load_dotenv()

username = os.getenv("SF_USERNAME")
password = os.getenv("SF_PASSWORD") 
async def main():
   async with ClientSimpleFactura(username, password) as client_api:
        solicitud = RequestDTE(
            Documento=Documento(
                Encabezado=Encabezado(
                    IdDoc=IdDoc(
                        TipoDTE=DTEType.BoletaElectronica,
                        FchEmis="2024-09-03",
                        FchVenc="2024-09-03",
                        IndServicio=IndicadorServicioEnum.BoletaVentasYServicios,
                    ),
                    Emisor=Emisor(
                        RUTEmisor="76269769-6",
                        RznSocEmisor="Chilesystems",
                        GiroEmisor="Desarrollo de software",
                        DirOrigen="Calle 7 numero 3",
                        CmnaOrigen="Santiago"
                    ),
                    Receptor=Receptor(
                        RUTRecep="17096073-4",
                        RznSocRecep="Proveedor Test",
                        DirRecep="calle 12",
                        CmnaRecep="Paine",
                        CiudadRecep="Santiago",
                        CorreoRecep="mercocha13@gmail.com",
                    ),
                    Totales=Totales(
                        MntNeto="8320",
                        IVA="1580",
                        MntTotal="9900"
                    )
                ),
                Detalle=[
                    Detalle(
                        NroLinDet="1",
                        DscItem="Desc1",
                        NmbItem="Producto Test",
                        QtyItem="1",
                        UnmdItem="un",
                        PrcItem="100",
                        MontoItem="100",
                        CdgItem=[]
                    ),
                    Detalle(
                        NroLinDet="2",
                        CdgItem=[
                            CdgItem(
                                TpoCodigo="ALFA",
                                VlrCodigo="123"
                            )
                        ],
                        DscItem="Desc2",
                        NmbItem="Producto Test",
                        QtyItem="1",
                        UnmdItem="un",
                        PrcItem="100",
                        MontoItem="100"
                        
                    )
                ]
            ),
            Observaciones="NOTA AL PIE DE PAGINA",
            Cajero="CAJERO",
            TipoPago="CONTADO"
        )
        try:
            Boleta = await client_api.Facturacion.facturacion_individualV2_Boletas(solicitud, "Casa Matriz")
            print("\nDatos de la Respuesta:")
            print(f"Status: {Boleta.status}")
            print(f"Message: {Boleta.message}")
            print(f"TipoDTE: {Boleta.data.tipoDTE}")
            print(f"RUT Emisor: {Boleta.data.rutEmisor}")
            print(f"RUT Receptor: {Boleta.data.rutReceptor}")
            print(f"Folio: {Boleta.data.folio}")
            print(f"Fecha Emision: {Boleta.data.fechaEmision}")
            print(f"Total: {Boleta.data.total}")
            print(Boleta.data)
        except requests.exceptions.HTTPError as http_err:
            print(f"Error HTTP: {http_err}")
            print("Detalle del error:", http_err.response.text)
        except Exception as err:
            print(f"Error: {err}")
  
if __name__ == "__main__":
    asyncio.run(main())

Documentación

La documentación relevante para usar este SDK es:

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

simplefacturasdk-1.0.1.tar.gz (48.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

SimpleFacturaSDK-1.0.1-py3-none-any.whl (78.5 kB view details)

Uploaded Python 3

File details

Details for the file simplefacturasdk-1.0.1.tar.gz.

File metadata

  • Download URL: simplefacturasdk-1.0.1.tar.gz
  • Upload date:
  • Size: 48.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.6

File hashes

Hashes for simplefacturasdk-1.0.1.tar.gz
Algorithm Hash digest
SHA256 237b781e5f4d917e8710db488b96817b6a8a0838e001dde62e6cf2c66981df6a
MD5 05408e6a2ca60224f7f6806dffe38232
BLAKE2b-256 21fc3a2e5217ca491a27d3b502dbf8392739a984038cdd9eeb8015e4e97a29ea

See more details on using hashes here.

File details

Details for the file SimpleFacturaSDK-1.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for SimpleFacturaSDK-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 176f7b50cf28359b61c735e30ee1185a1330cbcebaaf8794d5a4ffc99f95cafc
MD5 fd836f57e6af7c0b8de4630e9aa71686
BLAKE2b-256 34763e96390b267c8e4147130e245579a6c888334b8533bfa697f5420f940ba7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page