Facturas

Crear nueva factura

Crea una nueva factura a partir de pedidos existentes u órdenes específicas.

Autenticación requerida: Este endpoint requiere autenticación Bearer Token. Usar el campo tokenCurrent obtenido del servicio de login (/login) en el header: Authorization: Bearer {tokenCurrent}

Proceso de facturación:

  • Convierte pedidos en factura oficial
  • Calcula impuestos y totales automáticamente
  • Soporta facturación electrónica (DIAN)
  • Integra con sistemas contables (Siigo, Loggro)
  • Actualiza inventario y caja registradora

Requisitos de caja: Requiere caja registradora activa para el usuario.

Descuentos

Una factura puede combinar tres tipos de descuento, que se aplican en este orden sobre cada línea:

  1. Descuento de promoción (por producto, monto fijo): proviene del objeto promo del pedido/producto (promo.discount). Se resta del subtotal de la línea (cantidad × precio − promo.discount).
  2. Descuento de línea (por producto, porcentaje): porcentaje configurado en el producto/pedido.
  3. Descuento adicional de factura (porcentaje): el campo discount del cuerpo de la petición, que aplica a toda la factura.

Los porcentajes de línea y de factura se suman y se aplican sobre el subtotal ya rebajado por la promoción. El impuesto se calcula después de todos los descuentos. Resultados:

  • discountAdditional: porcentaje adicional almacenado (igual al discount enviado).
  • discountAdditionalTotal: monto total descontado, calculado por el servidor.
  • products[].totalDiscount: descuento calculado por línea; products[].subTotal/subTotal: base ya rebajada.

Nota: no existe un límite máximo de descuento ni una validación de permiso específica para aplicar descuentos; el control queda a cargo del cliente que consume la API.

Casos de Uso y Ejemplos

Caso de Uso: Facturar mesa de restaurante

Escenario: Un mesero ha tomado varios pedidos en una mesa y necesita generar la factura final.

Proceso:

  1. Los pedidos se han creado previamente con estado "Espera" o "Entregado"
  2. Se seleccionan todos los pedidos de la mesa para facturar
  3. Se especifica método de pago y cliente (opcional)
  4. Se genera factura con cálculo automático de impuestos

1. Factura básica de mesa

{
  "_id": "507f1f77bcf86cd799439020",
  "orderProducts": [
    { "order": "507f1f77bcf86cd799439011" },
    { "order": "507f1f77bcf86cd799439012" }
  ],
  "table": "507f1f77bcf86cd799439014",
  "client": {
    "name": "Juan Pérez",
    "phone": "+57 300 123 4567",
    "email": "juan@email.com"
  },
  "paymentMethod": "507f1f77bcf86cd799439018",
  "isPaid": true,
  "total": 45000,
  "discountAdditionalTotal": 5000
}

2. Factura electrónica con DIAN

{
  "_id": "507f1f77bcf86cd799439021",
  "isEInvoice": true,
  "orderProducts": [
    { "order": "507f1f77bcf86cd799439013" }
  ],
  "client": {
    "name": "María González",
    "idType": "CC",
    "idNumber": "123456789",
    "email": "maria@empresa.com"
  },
  "isPaid": true,
  "total": 30000,
  "sendInvoiceEmail": true
}

3. Factura a crédito

{
  "_id": "507f1f77bcf86cd799439022",
  "orderProducts": [
    { "order": "507f1f77bcf86cd799439014" },
    { "order": "507f1f77bcf86cd799439015" }
  ],
  "client": {
    "name": "Empresa ABC",
    "idType": "NIT",
    "idNumber": "900123456-1"
  },
  "isCredit": true,
  "creditDays": 30,
  "total": 75000,
  "status": "Pendiente"
}

4. Factura con entrega a domicilio

{
  "_id": "507f1f77bcf86cd799439023",
  "orderProducts": [
    { "order": "507f1f77bcf86cd799439016" }
  ],
  "delivery": {
    "isDelivery": true,
    "deliveryProvider": "507f1f77bcf86cd799439017",
    "deliveryGuy": {
      "internalId": "507f1f77bcf86cd799439025"
    },
    "address": "Calle 123 #45-67, Bogotá"
  },
  "deliveryCost": 8000,
  "isPaid": true,
  "total": 38000
}
post/invoices

Request

  • Base URL
    https://api.pirpos.com
  • URL
    https://api.pirpos.com/invoices
  • Auth
    HTTP bearer

Request body

_idstring required

ID único de la factura (generado por el cliente)

tablestring

ID de la mesa (para facturas de mesa)

paymentMethodstring

ID del método de pago

isPaidboolean

Si la factura está pagada

isCreditboolean

Si la factura es a crédito

creditDaysnumber

Días de crédito (solo si isCredit es true)

totalnumber required

Total de la factura

discountnumber

Descuento adicional en porcentaje (0-100) aplicado a toda la factura. Se almacena en discountAdditional y se aplica a cada línea sobre su subtotal (después del descuento de promoción del ítem y antes de impuestos). Es el principal campo de entrada para aplicar un descuento al facturar. Ver la sección "Descuentos" en la descripción.

discountAdditionalTotalnumber

Monto total de descuento adicional. Calculado por el servidor a partir de discount y los descuentos de línea; el valor enviado por el cliente es recalculado.

status'Facturada' | 'Pagada' | 'Pendiente' | 'Anulada'

Estado de la factura

isEInvoiceboolean

Si es factura electrónica (DIAN)

sendInvoiceEmailboolean

Enviar factura por email al cliente

deliveryCostnumber

Costo de entrega

Example request

{
  "_id": "507f1f77bcf86cd799439020",
  "orderProducts": [
    {
      "order": "507f1f77bcf86cd799439011"
    }
  ],
  "table": "507f1f77bcf86cd799439014",
  "client": {
    "name": "Juan Pérez",
    "phone": "+57 300 123 4567",
    "email": "juan@email.com",
    "idType": "CC",
    "idNumber": "123456789"
  },
  "paymentMethod": "507f1f77bcf86cd799439018",
  "isPaid": true,
  "creditDays": 30,
  "total": 45000,
  "discount": 10,
  "discountAdditionalTotal": 5000,
  "status": "Facturada"
}

Response

Factura creada exitosamente

_idstring

ID único de la factura

businessIdstring

ID del negocio al que pertenece la factura

numberstring

Número de la factura

invoicePrefixstring

Prefijo de la factura

seqnumber

Número secuencial de la factura

totalnumber

Total de la factura

totalPaidnumber

Total pagado

status'Pendiente' | 'Pagada' | 'Anulada'

Estado de la factura

type'Normal' | 'FacturaElectronica'

Tipo de factura

deliveryCostnumber

Costo de entrega

createdOnstring date-time

Fecha de creación

modifiedOnstring date-time

Fecha de última modificación

Example response

{
  "_id": "507f1f77bcf86cd799439011",
  "businessId": "507f1f77bcf86cd799439012",
  "business": {
    "name": "Restaurante El Buen Sabor",
    "nit": "123456789-1",
    "address": "Calle 123 #45-67"
  },
  "number": "FAC-001",
  "invoicePrefix": "FAC",
  "seq": 1,
  "products": [
    {
      "name": "Hamburguesa Clásica",
      "quantity": 2,
      "price": 15000
    }
  ],
  "total": 35000,
  "totalPaid": 35000,
  "status": "Pagada",
  "type": "Normal",
  "table": {
    "name": "Mesa 5"
  },
  "client": {
    "name": "Juan Pérez",
    "phone": "+57 300 123 4567"
  },
  "cashier": {
    "name": "María González"
  },
  "paid": {
    "paymentMethodValue": {
      "paymentMethod": "Efectivo"
    }
  },
  "eInvoice": {
    "DIAN": {
      "dianState": "00"
    }
  },
  "externalIntegration": {
    "siigo": {
      "statusCode": 200
    },
    "loggro": {
      "statusCode": 200
    }
  },
  "createdOn": "2025-08-05T10:30:00.000Z",
  "modifiedOn": "2025-08-05T10:30:00.000Z"
}

Changes

No recorded changes to this operation across all 1 revision of this API.