FACTESOL - Documentación

Documentacion para la elaboración y envío de comprobantes electrónicos al API de factesol.

Nota

Necesitas tener un plan de servicio para utilizar nuestra plataforma.

Factesol Logo

Indice

Archivos de Texto

Ejemplos de archivos de texto para el envio comprobantes electronicos.

Factura

Ejemplo de una factura con operaciones gravadas e inafectas.

Cabecera

Dato Valor
Identificador de Cabecera CAB
Tipo de operación  
Tipo de documento 01
Serie del documento F001
Correlativo del documento 123
Fecha de emisión 2017-12-20
Tipo de documento de identidad del adquirente 6
Número de documento de identidad del adquirente 20480048359
Razón social del adquirente EMPRESA SAC
Correo del adquiriente admin@domain.pe
Tipo de moneda en la cual se emite la factura electrónica PEN
Descuentos Globales  
Sumatoria otros Cargos  
Total descuentos  
Total valor de venta - Operaciones gravadas 50
Total valor de venta - Operaciones inafectas 50
Total valor de venta - Operaciones exoneradas 0
Total valor de venta - Operaciones gratuitas  
Sumatoria IGV 9
Sumatoria ISC  
Sumatoria otros tributos  
Importe total de la venta 109
Monto de la percepción  
Monto total incluido la percepción  
Código del tipo de Nota de Credito o Debito electrónica  
Descripción de motivo o sustento  
Tipo de documento del documento que modifica  
Serie y número del documento que modifica  
Tipo de documento relacionado  
Número de documento relacionado  
Tipo de documento guía  
Número de documento de guía  
Monto total anticipos  
Anticipo - Tipo Documento Relacionado  
Anticipo - Nro. Documento Relacionado  
Anticipo - Monto Documento Relacionado  
Anticipo - Emisor del Documento Relacionado  
Gratuito  
Tipo de Cambio  

Detalles

Dato DETALLE 1 DETALLE 2
Identificador de Detalle DET DET
Código de unidad de medida por ítem NIU MTR
Cantidad de unidades por ítem 5 2
Código de producto C0001 C0002
Codigo producto SUNAT    
Descripción PROD 1 PROD 2
Valor unitario por ítem 10 25
Descuentos por item    
Monto de IGV por ítem 1.8 0
Afectación al IGV por ítem 10 30
Monto de ISC por ítem    
Tipo de sistema ISC    
Precio de venta unitario por item 10 25
Valor de venta por ítem 50 50
Valor referencial unitario por ítem (gratuita)    

Contenido del archivo de texto.

CAB||01|F001|123|2017-12-20|6|20480048359|EMPRESA SAC|admin@domain.pe|PEN|0|0|0|50|50|0||9|0|0|109|||||||||||||||||
DET|NIU|5|C0001||PROD 1|10|0|1.8|10|||10|50||
DET|MTR|4|C0002||PROD 2|25|0|0|30|||25|50||

Boleta

Ejemplo de una Boleta con operaciones gravadas e inafectas.

Cabecera

Dato Valor
Identificador de Cabecera CAB
Tipo de operación  
Tipo de documento 03
Serie del documento B001
Correlativo del documento 123
Fecha de emisión 2017-12-20
Tipo de documento de identidad del adquirente 1
Número de documento de identidad del adquirente 22334455
Razón social del adquirente PERSONA F
Correo del adquiriente user@gmail.com
Tipo de moneda en la cual se emite la factura electrónica USD
Descuentos Globales  
Sumatoria otros Cargos  
Total descuentos  
Total valor de venta - Operaciones gravadas 50
Total valor de venta - Operaciones inafectas 0
Total valor de venta - Operaciones exoneradas 50
Total valor de venta - Operaciones gratuitas  
Sumatoria IGV 9
Sumatoria ISC  
Sumatoria otros tributos  
Importe total de la venta 109
Monto de la percepción  
Monto total incluido la percepción  
Código del tipo de Nota de Credito o Debito electrónica  
Descripción de motivo o sustento  
Tipo de documento del documento que modifica  
Serie y número del documento que modifica  
Tipo de documento relacionado  
Número de documento relacionado  
Tipo de documento guía  
Número de documento de guía  
Monto total anticipos  
Anticipo - Tipo Documento Relacionado  
Anticipo - Nro. Documento Relacionado  
Anticipo - Monto Documento Relacionado  
Anticipo - Emisor del Documento Relacionado  
Gratuito  
Tipo de Cambio 3.26

Detalles

Dato DETALLE 1 DETALLE 2
Identificador de Detalle DET DET
Código de unidad de medida por ítem NIU ZZ
Cantidad de unidades por ítem 5 2
Código de producto C0001 C0002
Codigo producto SUNAT    
Descripción PROD 1 PROD 2
Valor unitario por ítem 10 25
Descuentos por item    
Monto de IGV por ítem 1.8 0
Afectación al IGV por ítem 10 30
Monto de ISC por ítem    
Tipo de sistema ISC    
Precio de venta unitario por item 10 25
Valor de venta por ítem 50 50
Valor referencial unitario por ítem (gratuita)    

Contenido del archivo de texto.

CAB||03|B001|123|2017-12-20|1|22334455|PERSONA F|user@gmail.com|USD|0|0|0|50|0|50||9|0|0|109|||||||||||||||||3.26
DET|NIU|5|C0001||PROD 1|10|0|1.8|10|||10|50||
DET|ZZ|4|C0002||PROD 2|25|0|0|30|||25|50||

Nota de Crédito

Ejemplo de una Nota de Crédito relacionada a una factura.

Cabecera

Dato Valor
Identificador de Cabecera CAB
Tipo de operación  
Tipo de documento 07
Serie del documento F001
Correlativo del documento 111
Fecha de emisión 2017-12-20
Tipo de documento de identidad del adquirente 6
Número de documento de identidad del adquirente 20480048359
Razón social del adquirente EMPRESA SAC
Correo del adquiriente admin@domain.pe
Tipo de moneda en la cual se emite la factura electrónica PEN
Descuentos Globales  
Sumatoria otros Cargos  
Total descuentos  
Total valor de venta - Operaciones gravadas 50
Total valor de venta - Operaciones inafectas 0
Total valor de venta - Operaciones exoneradas 50
Total valor de venta - Operaciones gratuitas  
Sumatoria IGV 9
Sumatoria ISC  
Sumatoria otros tributos  
Importe total de la venta 109
Monto de la percepción  
Monto total incluido la percepción  
Código del tipo de Nota de Credito o Debito electrónica 02
Descripción de motivo o sustento Error en Ruc
Tipo de documento del documento que modifica 01
Serie y número del documento que modifica F001-123
Tipo de documento relacionado  
Número de documento relacionado  
Tipo de documento guía  
Número de documento de guía  
Monto total anticipos  
Anticipo - Tipo Documento Relacionado  
Anticipo - Nro. Documento Relacionado  
Anticipo - Monto Documento Relacionado  
Anticipo - Emisor del Documento Relacionado  
Gratuito  
Tipo de Cambio  

Detalles

Dato DETALLE 1 DETALLE 2
Identificador de Detalle DET DET
Código de unidad de medida por ítem NIU MTR
Cantidad de unidades por ítem 5 2
Código de producto C0001 C0002
Codigo producto SUNAT    
Descripción PROD 1 PROD 2
Valor unitario por ítem 10 25
Descuentos por item    
Monto de IGV por ítem 1.8 0
Afectación al IGV por ítem 10 30
Monto de ISC por ítem    
Tipo de sistema ISC    
Precio de venta unitario por item 10 25
Valor de venta por ítem 50 50
Valor referencial unitario por ítem (gratuita)    

Contenido del archivo de texto.

CAB||07|F001|111|2017-12-20|6|20480048359|EMPRESA SAC|admin@domain.pe|PEN|0|0|0|50|0|50||9|0|0|109|||02|ERROR EN RUC|01|F001-123|||||||||||
DET|NIU|5|C0001||PROD 1|10|0|1.8|10|||10|50||
DET|MTR|4|C0002||PROD 2|25|0|0|30|||25|50||

Nota de Débito

Ejemplo de una Nota de Débito relacionada a una factura.

Cabecera

Dato Valor
Identificador de Cabecera CAB
Tipo de operación  
Tipo de documento 08
Serie del documento F001
Correlativo del documento 122
Fecha de emisión 2017-12-20
Tipo de documento de identidad del adquirente 6
Número de documento de identidad del adquirente 20480048359
Razón social del adquirente EMPRESA SAC
Correo del adquiriente admin@domain.pe
Tipo de moneda en la cual se emite la factura electrónica PEN
Descuentos Globales  
Sumatoria otros Cargos  
Total descuentos  
Total valor de venta - Operaciones gravadas 50
Total valor de venta - Operaciones inafectas 0
Total valor de venta - Operaciones exoneradas 50
Total valor de venta - Operaciones gratuitas  
Sumatoria IGV 9
Sumatoria ISC  
Sumatoria otros tributos  
Importe total de la venta 109
Monto de la percepción  
Monto total incluido la percepción  
Código del tipo de Nota de Credito o Debito electrónica 01
Descripción de motivo o sustento Intereses
Tipo de documento del documento que modifica 01
Serie y número del documento que modifica F001-123
Tipo de documento relacionado  
Número de documento relacionado  
Tipo de documento guía  
Número de documento de guía  
Monto total anticipos  
Anticipo - Tipo Documento Relacionado  
Anticipo - Nro. Documento Relacionado  
Anticipo - Monto Documento Relacionado  
Anticipo - Emisor del Documento Relacionado  
Gratuito  
Tipo de Cambio  

Detalles

Dato DETALLE 1 DETALLE 2
Identificador de Detalle DET DET
Código de unidad de medida por ítem NIU MTR
Cantidad de unidades por ítem 5 2
Código de producto C0001 C0002
Codigo producto SUNAT    
Descripción PROD 1 PROD 2
Valor unitario por ítem 10 25
Descuentos por item    
Monto de IGV por ítem 1.8 0
Afectación al IGV por ítem 10 30
Monto de ISC por ítem    
Tipo de sistema ISC    
Precio de venta unitario por item 10 25
Valor de venta por ítem 50 50
Valor referencial unitario por ítem (gratuita)    

Contenido del archivo de texto.

CAB||07|F001|122|2017-12-20|6|20480048359|EMPRESA SAC|admin@domain.pe|PEN|0|0|0|50|0|50||9|0|0|109|||01|Intereses|01|F001-123|||||||||||
DET|NIU|5|C0001||PROD 1|10|0|1.8|10|||10|50||
DET|MTR|4|C0002||PROD 2|25|0|0|30|||25|50||

Endpoints

Estas son las url a las que se debe enviar los archivos de texto.

Ventas

Incluye Facturas, Boletas, Notas de Crédito y Notas de Débito.

https://factesol.net.pe/api/v1/doc/ventas

Bajas

Comunicaciones de Bajas de las ventas emitidas.

https://factesol.net.pe/api/v1/doc/bajas

Retención

Comprobante de Retenciones.

https://factesol.net.pe/api/v1/doc/retenciones

Percepción

Comprobante de Percepciones.

https://factesol.net.pe/api/v1/doc/percepciones

Reversión

Resumen de Reversiones.

https://factesol.net.pe/api/v1/doc/reversiones

POST /api/reversion/status

Retorna el estado del resumen asociado al id despues de haber sido enviado a Sunat.

Example request:

{
    "Ruc": "20123456789",
    "TipoDocumento": "20",
    "Serie": "R001",
    "Correlativo": "123"
}
JSON Parameters:
 
  • Ruc (string) – Ruc del emisor del comprobante.
  • TipoDocumento (string) – Tipo documento (20 - Retencion, 40 - Percepcion).
  • Serie (string) – Serie del comprobante.
  • Correlativo (string) – Correlativo del comprobante.

Example response:

{
    "Success": true,
    "Code": "03",
    "Description": "El Resumen de Reversion XXXX ha sido aceptado"
}

Resumen Diario

POST /api/resumen/create/(date: fecha)

Crea el resumen para la fecha indicada.

Example request:

/api/resumen/create/2019-05-17

Example response:

Retorna un array de los identificadores de los resumenes creado para la fecha indicada.

[ 12, 13]
Status Codes:
POST /api/resumen/send/(int: id)

Envia el resumen asociado al id (retornado al crear el resumen).

Example request:

/api/resumen/send/12

Example response:

{
    "Success": true,
    "Code": "06",
    "Description": "Enviado a Sunat por procesar"
}
Status Codes:
POST /api/resumen/status/(int: id)

Retorna el estado del resumen asociado al id despues de haber sido enviado a Sunat.

Example request:

/api/resumen/status/12

Example response:

{
    "Success": true,
    "Code": "03",
    "Description": "El Resumen diario XXXX ha sido aceptado"
}
Status Codes:

Ejemplos

Se proveen algunos ejemplos para el envio de comprobantes al API.

Nota

Para ejecuar los siguiente ejemplos necesita crear un token, vaya a la sección Tutoriales

C#

Usar los espacios de nombres.

using System;
using System.Net;

Emplear el siguiente codigo para el envio.

var token = "UN-TOKEN-VALIDO";
var txt = "CAB||01|F001|433|2017-12-01|6|20480048359...";

var http = (HttpWebRequest)WebRequest.Create("https://factesol.net.pe/api/v2/doc/ventas");
http.Method = "POST";
http.ContentType = "text/plain";
http.Headers.Add("Authorization", "Bearer " + token);
var content = Encoding.UTF8.GetBytes(txt);
http.ContentLength = content.Length;
using (var wr = http.GetRequestStream())
{
    wr.Write(content, 0, content.Length);
}

var resp = (HttpWebResponse)http.GetResponse();
if (resp.StatusCode == HttpStatusCode.OK)
{
    Console.WriteLine("Enviado a Factesol");
}

Java

Realizar los siguientes import.

import java.io.IOException;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

Emplear el siguiente codigo para el envio.

String endpoint = "https://factesol.net.pe/api/v2/doc/ventas";
String token = "UN-TOKEN-VALIDO";
String txtContent = "CAB||01|F001|433|2017-12-01|6|20480048359...";

URL url = new URL(endpoint);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestProperty("Authorization", "Bearer " + token);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "text/plain");

OutputStream os = conn.getOutputStream();
os.write(txtContent.getBytes());
os.flush();

if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
    System.out.println("Success");
}

conn.disconnect();

PHP

Para el siguiente ejemplo necesita tener activada la extension Curl.

<?php

$token = "UN-TOKEN-VALIDO";
$txt = "CAB||01|F001|433|2017-12-01|6|20480048359...";

$header = array();
$header[] = 'Content-type: text/plain';
$header[] = 'Authorization: Bearer ' . $token;

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "https://factesol.net.pe/api/v2/doc/ventas");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($ch, CURLOPT_POSTFIELDS, $txt);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);

$result = curl_exec ($ch);

curl_close ($ch);

var_dump($result);

Visual FoxPro

pURL_WSDL = "https://factesol.net.pe/api/v2/doc/ventas"
token = "UN-TOKEN-VALIDO"
* txt = FILETOSTR(Ruta_de_archivo)
txt = "CAB|0101|01|F591|00001235|2020-08-20|6|20600055519|TI SOLUCIONES|user@gmail.com|PEN|||||4000||||||0|4000|4000|||||||||||||||||3.31" + Chr(13) + ;
      "DET|NIU|1|C0001||CEMENTO|4000||0|30|||4000|4000||4000|0|0||" + Chr(13) + ;
      "EXT|005|Cal. Bernardo O’Higgins Nro. 899 Int. 505 Pueblo Libre"

oHTTP =  Createobject('MsXml2.XmlHttp');
oHTTP.OPEN("POST", pURL_WSDL, .F.):
oHTTP.setRequestHeader("Content-Type", "text/plain")
oHTTP.setRequestHeader("Authorization", "Bearer " + token)
oHTTP.SEND( ALLTRIM(txt) )

RespuestaWS = oHTTP.responseText
RespuestaBd = oHTTP.responseBody
RespuestaEstado = oHTTP.status

IF RespuestaEstado <> 200
    MESSAGEBOX("Error")
ELSE
    MESSAGEBOX("enviado correctamente")
ENDIF

Visual Basic 6


pURL_WSDL = «https://factesol.net.pe/api/v2/doc/ventas» token = «eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJydWMiOiIyMDEyMzQ1Njc4OSIsInR5cGUiOiJzeXMiLCJkYXRlIjoxNTQwMzMyOTg0fQ.ijQaRydA6-Ptsbn3IdXeyH272hUoa–uWM3khEAFIgc»

txt = «CAB|0101|01|F591|00001235|2020-08-20|6|20600055519|TI SOLUCIONES|user@gmail.com|PEN|||||4000||||||0|4000|4000|||||||||||||||||3.31» & Chr(13) & _
«DET|NIU|1|C0001||CEMENTO|4000||0|30|||4000|4000||4000|0|0||» & Chr(13) & _ «EXT|005|Cal. Bernardo O’Higgins Nro. 899 Int. 505 Pueblo Libre»

Set oHTTP = CreateObject(«MSXML2.XMLHTTP») oHTTP.open «POST», pURL_WSDL, False oHTTP.setRequestHeader «Content-Type», «text/plain» oHTTP.setRequestHeader «Authorization», «Bearer » + token

oHTTP.send (txt)

RespuestaWS = oHTTP.responseText RespuestaBd = oHTTP.responseBody RespuestaEstado = oHTTP.Status
If RespuestaEstado <> 200 Then
MsgBox «Error»
Else
MsgBox «enviado correctamente»

End If

Tutoriales

Lista de Tutoriales.

Como crear un token

Advertencia

Puede crear muliples tokens que no tienen fecha de expiración, puede eliminarlo o suspenderlo temporalmente en que caso sea necesario

Para crear un token dirijase a la opción de Opciones > API Tokens

Tokens Opcion

Click en el boton Agregar y en la vetana que le aparecerá podrá darle un nombre referencial al token.

Tokens Opcion

Luego podra visualizar los tokens que ha creado.

Tokens Opcion

Continuar con la sección Ejemplos

Obtener el codigo Hash

var token = "UN-TOKEN-VALIDO";
var txt = "{\"Ruc\": \"20600055519\", \"TipoDocumento\": \"01\", \"Serie\": \"F001\", \"Correlativo\": \"1\"}";

var http = (HttpWebRequest)WebRequest.Create("https://factesol.net.pe/api/venta/hash");
http.Method = "POST";
http.ContentType = "application/json";
http.Headers.Add("Authorization", "Bearer " + token);
var content = Encoding.UTF8.GetBytes(txt);
http.ContentLength = content.Length;
using (var wr = http.GetRequestStream())
{
    wr.Write(content, 0, content.Length);
}

var resp = (HttpWebResponse)http.GetResponse();
if (resp.StatusCode == HttpStatusCode.OK)
{
    using (var reader = new System.IO.StreamReader(resp.GetResponseStream()))
    {
        string hash = reader.ReadToEnd();
        Console.WriteLine("Hash: " + hash);
    }
}

Obtener el codigo Qr

var token = "UN-TOKEN-VALIDO";
var txt = "{\"Ruc\": \"20600055519\", \"TipoDocumento\": \"01\", \"Serie\": \"F001\", \"Correlativo\": \"1\"}";

var http = (HttpWebRequest)WebRequest.Create("https://factesol.net.pe/api/venta/code-qr");
http.Method = "POST";
http.ContentType = "application/json";
http.Headers.Add("Authorization", "Bearer " + token);
var content = Encoding.UTF8.GetBytes(txt);
http.ContentLength = content.Length;
using (var wr = http.GetRequestStream())
{
    wr.Write(content, 0, content.Length);
}

var resp = (HttpWebResponse)http.GetResponse();
if (resp.StatusCode == HttpStatusCode.OK)
{
    using (var stream = resp.GetResponseStream())
    {
        // imagen en la respuesta
    }
}