¿Cómo realizar una integración a través de la API de factura de compra?

AcademiaFinnegans
Tue, 21 May 2024 20:33:55 +0000
API

Esta entrada posee información técnica sobre la API especificada y está dirigido a clientes que busquen integrar Facturas de Compra con otro sistema.

Pasos a seguir:

1. Obtención de token

Antes de cada solicitud se debe obtener el token de autorización, en función de las credenciales de un usuario API creado en el maestro Usuarios.

Se utiliza para generar un token de autenticación que permite poder consumir una API de Finnegans.

2. Métodos de recuperación y envío de datos a un servidor:

GET

URL:

https://api.finneg.com/api/facturaCompra/{codigo}?ACCESS_TOKEN={$access_token}

Parámetros:

ACCESS_TOKEN: Requerido. Ejemplo: “a0e172d4-e070-4346-96fa-c02a97230384”.

{codigo} Es la identificacion externa de la transacción.

Códigos de respuesta:

200 Ok: Se devuelve la información de la transacción Factura de Compra.

404 Solicitud incorrecta: { “error”: "Not Found: ", “status”: 404 }.

500 Error interno de servidor: { “error”: “Internal Server Error: null”,“status”: 500}.

JSON facturaCompra

{
   "IdentificacionExterna": "FC - 174",
   "EmpresaCodigo": "334",
   "Fecha": "2024-05-17",
   "FechaComprobante": "2024-05-17",
   "Proveedor": "1598Kev",
   "CondicionPagoCodigo": "10",
   "TransaccionTipoCodigo": "OPER",
   "TransaccionSubtipoCodigo": "FC",
   "WorkflowCodigo": "compraskev",
   "Nombre": "FC - 174",
   "Descripcion": "",
   "NumeroComprobante": "A-15511-15919819",
   "MonedaCodigo": "PES",
   "ProvinciaOrigenCodigo": null,
   "ProvinciaDestinoCodigo": null,
   "ComprobanteTipoImpositivoCodigo": "001",
   "CAE": "",
   "CAEFechaVto": null,
   "Productos": [
       {
           "ProductoCodigo": "1254",
           "Cantidad": 10.000000,
           "Precio": 1500.000000,
           "UnidadIDPresentacion": null,
           "CantidadPresentacion": 0.000000,
           "PrecioTipo": 0,
           "PrecioBase": 1500.000000,
           "Descripcion": null,
           "ImporteExento": 10000.0000,
           "vinculacionOrigen": null,
           "DimensionDistribucion": [
               {
                   "dimensionCodigo": "DIMCTC",
                   "distribucionCodigo": "",
                   "tipoCalculo": "0",
                   "distribucionItems": [
                       {
                           "codigo": "CC1",
                           "porcentaje": 100.000000,
                           "importe": 15000.0000
                       }
                   ]
               }
           ]
       }
   ],
   "Conceptos": [
       {
           "ConceptoCodigo": "COMPRA_IVA_21",
           "ImporteEditable": false,
           "ConceptoImporte": 1050.0000,
           "ConceptoImporteGravado": 5000.0000
       },
       {
           "ConceptoCodigo": "COMPRA_IVA_10.5",
           "ImporteEditable": false,
           "ConceptoImporte": 0.0000,
           "ConceptoImporteGravado": 0.0000
       },
       {
           "ConceptoCodigo": "COMPRA_IVA_27",
           "ImporteEditable": false,
           "ConceptoImporte": 0.0000,
           "ConceptoImporteGravado": 0.0000
       },
       {
           "ConceptoCodigo": "COMPRA_IVA_2.5",
           "ImporteEditable": false,
           "ConceptoImporte": 0.0000,
           "ConceptoImporteGravado": 0.0000
       },
       {
           "ConceptoCodigo": "COMPRA_IVA_5",
           "ImporteEditable": false,
           "ConceptoImporte": 0.0000,
           "ConceptoImporteGravado": 0.0000
       },
       {
           "ConceptoCodigo": "COMPRA_IVA_22",
           "ImporteEditable": false,
           "ConceptoImporte": 0.0000,
           "ConceptoImporteGravado": 0.0000
       }
   ],
   "Retenciones": [
       {
           "RetencionImporte": 10.0000,
           "Comprobante": "",
           "ISAR": 0.0000,
           "RetencionCodigo": "PIVA1",
           "TipoRetencionCodigo": "PERIVA"
       },
       {
           "RetencionImporte": 100.0000,
           "Comprobante": "",
           "ISAR": 0.0000,
           "RetencionCodigo": "PIBSL2",
           "TipoRetencionCodigo": "PERIIBB"
       }
   ],
   "Cotizaciones": [
       {
           "MonedaCodigo": "PES",
           "Cotizacion": 1.000000
       },
       {
           "MonedaCodigo": "DOL",
           "Cotizacion": 905.000000
       }
   ],
     "ImporteTotalControl": 0.0000
}

POST

URL:
https://api.finneg.com/api/facturaCompra?ACCESS_TOKEN={$access_token}

Parámetros:

ACCESS_TOKEN: Requerido. Ejemplo: “a0e172d4-e070-4346-96fa-c02a97230384”.

Se detalla la estructura donde se desglosa cada campo del JSON, proporcionando una descripción clara de su propósito, el tipo de dato esperado y si su envío es obligatorio.

Códigos de respuesta:

200 Ok: Devuelve el id de la factura de compra con un mensaje informando que se creó correctamente y el código de estado de la respuesta. Ejemplo: {
“id”: “358e63c1cf9a0a36161aec8c49a341e3d031e34d”,
“message”: “created”,
“status”: 200
}

404 Solicitud incorrecta: { “error”: "Not Found: ", “status”: 404 }.

500 Error interno de servidor: { “error”: “Internal Server Error: null”,“status”: 500}.

PUT

URL:
https://api.finneg.com/api/facturaCompra/{codigo}?ACCESS_TOKEN={$access_token}

Parámetros:

ACCESS_TOKEN: Requerido. Ejemplo: “a0e172d4-e070-4346-96fa-c02a97230384”.

{codigo} Es la identificación externa de transacción. Ejemplo: “FC - 174”.

Códigos de respuesta:

200 Ok: Se devuelve un mensaje informando que se actualizó correctamente y el código de estado de respuesta. Ejemplo: {
“message”: “updated”,
“status”: 200
}

404 Solicitud incorrecta: { “error”: "Not Found: ", “status”: 404 }.

500 Error interno de servidor: { “error”: “Internal Server Error: null”,“status”: 500}.

DELETE

URL:
https://api.finneg.com/api/facturaCompra/{codigo}?ACCESS_TOKEN={$access_token}

Parámetros:

ACCESS_TOKEN: Requerido. Ejemplo: “a0e172d4-e070-4346-96fa-c02a97230384”.

{codigo} Es la identificación externa de la transacción. Ejemplo “FC - 174”.

Códigos de respuesta:

200 Ok: Se devuelve un mensaje informando que se eliminó correctamente y código de estado de respuesta. Ejemplo: {
“message”: “deleted”,
“status”: 200
}

404 Solicitud incorrecta: { “error”: "Not Found: ", “status”: 404 }.

500 Error interno de servidor: { “error”: “Internal Server Error: null”,“status”: 500}

Antes de empezar

Antes de utilizar esta API, se deben considerar algunas cuestiones que se detallan a continuación.

Definición de API

Antes de utilizar esta API, se deben considerar algunas cuestiones que se detallan a continuación.

En la solapa Definición debe indicarse todos los campos que tiene el JSON indicado más arriba.

En el campo Tipo debe estar el valor Entidad.

En el campo Entidad debe indicarse OperacionVO.

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <entidad id="main">
       <atributo nombre="IdentificacionExterna" alias="IdentificacionExterna" descripcion="Tipo: String, Obligatorio: No, Descripción: Identificación externa"/>
       <atributo nombre="EmpresaID" alias="EmpresaCodigo" descripcion="Tipo: String, Obligatorio: Si, Consulte la API /Empresa/list,Aca se pone el codigo de la sucursal a usar"/>
       <atributo nombre="Fecha" alias="Fecha" descripcion="Tipo: Date, Obligatorio: Si, Descripción: aaaa-mm-dd"/>
       <atributo nombre="FechaComprobante" alias="FechaComprobante" descripcion="Tipo: Date, Obligatorio: Si, Descripción: aaaa-mm-dd"/>
       <atributo nombre="OrganizacionID" alias="Proveedor" descripcion="Tipo: String, Obligatorio: Si, Consulte la API /Proveedor/list"/>
       <atributo nombre="CondicionPagoID" alias="CondicionPagoCodigo" descripcion="Tipo: String, Obligatorio: Si, Consulte la API /CondicionPago/list"/>
       <atributo nombre="TransaccionTipoID" alias="TransaccionTipoCodigo" descripcion="(String) Obligatorio. Valor a completar: OPER "/>
       <atributo nombre="TransaccionSubtipoID" alias="TransaccionSubtipoCodigo" descripcion="(String) Obligatorio. Consulte la API /TransaccionSubtipo/list"/>
       <atributo nombre="WorkflowID" alias="WorkflowCodigo" descripcion="Tipo: String, Obligatorio: Si, Descripción:CPRA-PROD "/>
       <atributo nombre="Nombre" alias="Nombre" descripcion="Tipo: String. Sólo para GET"/>
       <atributo nombre="Descripcion" alias="Descripcion" descripcion="Tipo: String, Obligatorio: No"/>
       <atributo nombre="NumeroDocumento" alias="NumeroComprobante" descripcion="Tipo: String, Obligatorio: Si, Descripción: Numero de documento"/>
       <atributo nombre="MonedaID" alias="MonedaCodigo" descripcion="Tipo: String, Obligatorio: Si, Consulte la API /Moneda/list"/>
       <atributo nombre="ProvinciaIDOrigen" alias="ProvinciaOrigenCodigo" descripcion="Tipo: String, Obligatorio: No, Consulte la API /Provincia/list"/>
       <atributo nombre="ProvinciaIDDestino" alias="ProvinciaDestinoCodigo" descripcion="Tipo: String, Obligatorio: No, Consulte la API /Provincia/list"/>
       <atributo nombre="ComprobanteTipoImpositivoID" alias="ComprobanteTipoImpositivoCodigo" descripcion="Tipo: String, Obligatorio: Si, Consulte la API /ComprobanteTipoImpositivo/list"/>
       <atributo nombre="CAINumero" alias="CAE" descripcion="Tipo: Int, Obligatorio: Si, Descripción: ##############"/>
       <atributo nombre="CAIFechaVto" alias="CAEFechaVto" descripcion="Tipo: Date, Obligatorio: Si, Descripción: aaaa-mm-dd"/>
       <atributo nombre="OperacionItems" alias="Productos" descripcion=""/>
       <atributo nombre="OperacionConceptos" alias="Conceptos" descripcion=""/>
       <atributo nombre="ItemsRetencion" alias="Retenciones" descripcion=""/>
       <atributo nombre="OperacionCotizaciones" alias="Cotizaciones" descripcion=""/>
       <atributo nombre="ImporteTotalControl" alias="ImporteTotalControl" descripcion="" requerido="false"/>
       <atributo nombre="IdentificacionExternaPadre" alias="IdentificacionExternaPadre" descripcion="Tipo: String, Obligatorio: No, Descripción: Identificación externa Padre"/>
   </entidad>
   <entidad id="OperacionItems">
       <atributo nombre="ProductoID" alias="ProductoCodigo" descripcion="Tipo: String, Obligatorio: Si, Consulte la API /Producto/list"/>
       <atributo nombre="CantidadWorkflow" alias="Cantidad" descripcion="Tipo: Int, Obligatorio: Si, Descripción: ####"/>
       <atributo nombre="Precio" alias="Precio" descripcion="Tipo: Decimal, Obligatorio: Si, Descripción: ##.###"/>
       <atributo nombre="UnidadIDPresentacion" alias="UnidadIDPresentacion" descripcion="" requerido="false"/>
       <atributo nombre="CantidadPresentacion" alias="CantidadPresentacion" descripcion="" requerido="false"/>
       <atributo nombre="DimensionDistribucion" alias="DimensionDistribucion" descripcion=""/>
       <atributo nombre="ImporteExento" alias="ImporteExento" descripcion="Tipo:Integer, Obligatorio:NO"/>
       <atributo nombre="vinculacionOrigen" alias="vinculacionOrigen" descripcion="(String), No Obligatorio. Identificacion Externa de la transaccion origen a vincular"/>
       <atributo nombre="PrecioTipo" alias="PrecioTipo"/>
       <atributo nombre="PrecioBase" alias="PrecioBase" descripcion="" requerido="false"/>
       <atributo nombre="Descripcion" alias="Descripcion" descripcion="Tipo: String, Obligatorio: No"/>
   </entidad>
   <entidad id="OperacionConceptos">
       <atributo nombre="ConceptoID" alias="ConceptoCodigo" descripcion="(String) Obligatorio. Consulte la API /Concepto/list"/>
       <atributo nombre="Control1" alias="ImporteEditable" descripcion="(Boolean) Indique 1 para que tome en cuenta el ConceptoImporte y el ConceptoImporteGravado. Indique 0 para que se calcule automáticamente según la tasa"/>
       <atributo nombre="Importe" alias="ConceptoImporte" descripcion="(Decimal) Obligatorio si indicó 1 en ImporteEditable. Con formato ##.###"/>
       <atributo nombre="ImporteGravado" alias="ConceptoImporteGravado" descripcion="(Decimal) Obligatorio si indicó 1 en ImporteEditable. Con formato ##.###"/>
   </entidad>
   <entidad id="ItemsRetencion">
       <atributo nombre="TipoRetencion" alias="TipoRetencionCodigo" descripcion=" PADRE Tipo: String, Obligatorio: Si"/>
       <atributo nombre="Retencion" alias="RetencionCodigo" descripcion="Tipo: String, Obligatorio: Si, Consulte la API /Retencion/list"/>
       <atributo nombre="Importe" alias="RetencionImporte" descripcion="Tipo: Decimal, Obligatorio: Si, Descripción: ##.###"/>
       <atributo nombre="Comprobante" alias="Comprobante" descripcion="Tipo: String, Obligatorio: Si"/>
       <atributo nombre="ISAR" alias="ISAR" descripcion="Tipo: Decimal, Obligatorio: No, Descripción: ##.###"/>
   </entidad>
   <entidad id="OperacionCotizaciones">
       <atributo nombre="MonedaID" alias="MonedaCodigo" descripcion="(Tipo) String"/>
       <atributo nombre="Cotizacion" alias="Cotizacion" descripcion="(Tipo) Float" requerido="false"/>