Skip to main content
POST
/
api
/
cotizaciones
Crear Cotización
curl --request POST \
  --url https://api.example.com/api/cotizaciones \
  --header 'Authorization: <authorization>' \
  --header 'Content-Type: <content-type>' \
  --data '
{
  "fecha": "<string>",
  "moneda": "<string>",
  "aplicar_igv": true,
  "descuento": 123,
  "id_cliente": 123,
  "cliente_documento": "<string>",
  "cliente_datos": "<string>",
  "cliente_nombre": "<string>",
  "cliente_direccion": "<string>",
  "direccion": "<string>",
  "tipo_cambio": 123,
  "dias_pago": "<string>",
  "asunto": "<string>",
  "observaciones": "<string>",
  "productos": [
    {
      "producto_id": 123,
      "cantidad": 123,
      "precio_unitario": 123,
      "precio_especial": 123,
      "codigo": "<string>",
      "nombre": "<string>",
      "descripcion": "<string>"
    }
  ],
  "cuotas": [
    {
      "monto": 123,
      "fecha_vencimiento": "<string>",
      "tipo": "<string>"
    }
  ]
}
'
{
  "422": {},
  "500": {},
  "success": true,
  "message": "<string>",
  "data": {
    "id": 123,
    "numero": 123,
    "fecha": "<string>",
    "subtotal": 123,
    "igv": 123,
    "total": 123,
    "estado": "<string>",
    "cliente": {},
    "detalles": [
      {}
    ],
    "cuotas": [
      {}
    ]
  }
}
Crea una nueva cotización con sus productos y cuotas de pago. Genera automáticamente el número correlativo y calcula los totales considerando que los precios ya incluyen IGV si aplica.

Autenticación

Requiere token Bearer y permiso cotizaciones.create.

Headers

Authorization
string
required
Token de autenticación Bearer
Content-Type
string
required
application/json

Body Parameters

Información General

fecha
string
required
Fecha de emisión (formato: YYYY-MM-DD)
moneda
string
required
Moneda: PEN (Soles) o USD (Dólares)
aplicar_igv
boolean
required
Si se aplica IGV (18%). Los precios ya deben incluir el IGV.
descuento
decimal
Descuento global aplicado al total (opcional, mínimo 0)

Cliente

Puedes especificar el cliente de tres formas (en orden de prioridad):
id_cliente
integer
ID de cliente existente en la base de datos
cliente_documento
string
Documento del cliente (RUC/DNI). Si no existe, se crea automáticamente.
  • 11 dígitos = RUC (tipo_doc: 6)
  • 8 dígitos = DNI (tipo_doc: 1)
  • Otro = Carnet de Extranjería (tipo_doc: 4)
cliente_datos
string
Nombre/Razón social del cliente (máx 245 caracteres)
cliente_nombre
string
Nombre libre del cliente si no se usa documento
cliente_direccion
string
Dirección del cliente (máx 500 caracteres)
direccion
string
Dirección de entrega (opcional, máx 255 caracteres)

Información Adicional

tipo_cambio
decimal
Tipo de cambio si la moneda es USD
dias_pago
string
Plazo de pago (ej: “30 días”, “Al contado”)
asunto
string
Asunto o título de la cotización (máx 255 caracteres)
observaciones
string
Notas adicionales o términos y condiciones

Productos

productos
array
required
Lista de productos cotizados (mínimo 1)

Cuotas (Plan de Pagos)

cuotas
array
Plan de pagos en cuotas (opcional)

Cálculo de Totales

El sistema calcula automáticamente:
  1. Monto Bruto: Suma de (precio × cantidad) de todos los productos
  2. Total: Monto Bruto - Descuento
  3. Si aplicar_igv = true:
    • Subtotal (Operaciones Gravadas): Total / 1.18
    • IGV: Total - Subtotal
  4. Si aplicar_igv = false:
    • Subtotal: Total
    • IGV: 0
IMPORTANTE: Los precios ingresados ya deben incluir el IGV si aplicar_igv = true. El sistema desglosa el IGV del total para el comprobante.

Respuesta Exitosa

success
boolean
true si la cotización se creó exitosamente
message
string
Mensaje de confirmación: “Cotización creada exitosamente”
data
object
Cotización creada con relaciones cargadas

Ejemplo de Solicitud

{
  "fecha": "2026-03-06",
  "id_cliente": 45,
  "direccion": "Av. Los Pinos 456, San Isidro",
  "moneda": "PEN",
  "tipo_cambio": null,
  "dias_pago": "30 días",
  "asunto": "Cotización para proyecto de implementación",
  "observaciones": "Precios válidos por 15 días. Incluye instalación.",
  "aplicar_igv": true,
  "descuento": 50.00,
  "productos": [
    {
      "producto_id": 123,
      "codigo": "PROD-001",
      "nombre": "Laptop HP ProBook 450 G9",
      "descripcion": "Intel Core i7, 16GB RAM, 512GB SSD",
      "cantidad": 5,
      "precio_unitario": 3540.00,
      "precio_especial": 3400.00
    },
    {
      "producto_id": 124,
      "codigo": "PROD-002",
      "nombre": "Mouse Inalámbrico Logitech",
      "cantidad": 5,
      "precio_unitario": 118.00,
      "precio_especial": null
    }
  ],
  "cuotas": [
    {
      "monto": 5000.00,
      "fecha_vencimiento": "2026-03-15",
      "tipo": "inicial"
    },
    {
      "monto": 5550.00,
      "fecha_vencimiento": "2026-04-15",
      "tipo": "cuota"
    },
    {
      "monto": 5550.00,
      "fecha_vencimiento": "2026-05-15",
      "tipo": "cuota"
    }
  ]
}

Ejemplo de Respuesta

{
  "success": true,
  "message": "Cotización creada exitosamente",
  "data": {
    "id": 16,
    "numero": 16,
    "fecha": "2026-03-06",
    "id_cliente": 45,
    "cliente_nombre": null,
    "direccion": "Av. Los Pinos 456, San Isidro",
    "subtotal": 17000.00,
    "igv": 3060.00,
    "total": 20060.00,
    "descuento": 50.00,
    "aplicar_igv": true,
    "moneda": "PEN",
    "tipo_cambio": null,
    "dias_pago": "30 días",
    "asunto": "Cotización para proyecto de implementación",
    "observaciones": "Precios válidos por 15 días. Incluye instalación.",
    "estado": "pendiente",
    "id_empresa": 1,
    "id_usuario": 3,
    "cliente": {
      "id_cliente": 45,
      "documento": "20123456789",
      "datos": "DISTRIBUIDORA COMERCIAL SAC"
    },
    "detalles": [
      {
        "id": 89,
        "producto_id": 123,
        "codigo": "PROD-001",
        "nombre": "Laptop HP ProBook 450 G9",
        "descripcion": "Intel Core i7, 16GB RAM, 512GB SSD",
        "cantidad": 5,
        "precio_unitario": 3540.00,
        "precio_especial": 3400.00,
        "subtotal": 17000.00
      },
      {
        "id": 90,
        "producto_id": 124,
        "codigo": "PROD-002",
        "nombre": "Mouse Inalámbrico Logitech",
        "cantidad": 5,
        "precio_unitario": 118.00,
        "precio_especial": null,
        "subtotal": 590.00
      }
    ],
    "cuotas": [
      {
        "id": 23,
        "numero_cuota": 1,
        "monto": 5000.00,
        "fecha_vencimiento": "2026-03-15",
        "tipo": "inicial"
      },
      {
        "id": 24,
        "numero_cuota": 2,
        "monto": 5550.00,
        "fecha_vencimiento": "2026-04-15",
        "tipo": "cuota"
      },
      {
        "id": 25,
        "numero_cuota": 3,
        "monto": 5550.00,
        "fecha_vencimiento": "2026-05-15",
        "tipo": "cuota"
      }
    ]
  }
}

Códigos de Error

422
error
Errores de validación (campos requeridos, formatos incorrectos, etc.)
500
error
Error interno al crear la cotización. Se hace rollback de la transacción.

Notas de Implementación

  • La operación se ejecuta dentro de una transacción de base de datos (DB::beginTransaction)
  • El número correlativo se genera automáticamente basado en la última cotización de la empresa
  • Si el cliente no existe y se proporciona cliente_documento, se crea automáticamente con tipo de documento inferido por la longitud
  • Los precios especiales tienen prioridad sobre los precios unitarios en el cálculo
  • El formato del número para mostrar es: COT- + número con 6 dígitos (ej: COT-000016)

Build docs developers (and LLMs) love