Skip to main content

GET /api/cotizaciones

Lista todas las cotizaciones de la empresa activa.

Autenticación

Requiere autenticación con token Bearer y permiso cotizaciones.view.

Respuesta

success
boolean
Indica si la operación fue exitosa
data
array
Lista de cotizaciones desde la vista view_cotizaciones

Ejemplo de Uso

curl -X GET "https://api.ejemplo.com/api/cotizaciones" \
  -H "Authorization: Bearer {token}"

POST /api/cotizaciones

Crea una nueva cotización.

Autenticación

Requiere autenticación con token Bearer y permiso cotizaciones.create.

Parámetros del Body

Datos Generales

fecha
string
required
Fecha de la cotización (formato: YYYY-MM-DD)
moneda
string
required
Moneda: PEN o USD
tipo_cambio
number
Tipo de cambio (si moneda es USD)
aplicar_igv
boolean
required
Indica si se aplica IGV a los totales
descuento
number
Descuento global (mínimo 0)
asunto
string
Asunto de la cotización
observaciones
string
Observaciones adicionales
dias_pago
string
Días de pago acordados
direccion
string
Dirección de entrega

Datos del Cliente

Puede elegir una de estas 3 opciones: Opción 1: Cliente existente
id_cliente
integer
ID del cliente existente
Opción 2: Cliente por documento (se crea si no existe)
cliente_documento
string
Documento del cliente (DNI o RUC)
cliente_datos
string
Nombre o razón social
cliente_direccion
string
Dirección del cliente
Opción 3: Cliente libre (sin guardar)
cliente_nombre
string
Nombre del cliente (texto libre, no se guarda en la tabla clientes)

Productos

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

Cuotas de Pago (opcional)

cuotas
array
Lista de cuotas de pago

Cálculo de Totales

Los precios incluyen IGV. El sistema calcula:
  1. montoBruto = Σ(precio × cantidad) de todos los productos
  2. total = montoBruto - descuento
  3. Si aplicar_igv es true:
    • subtotal = total / 1.18 (base imponible)
    • igv = total - subtotal
  4. Si aplicar_igv es false:
    • subtotal = total
    • igv = 0

Respuesta

success
boolean
Indica si la cotización fue creada exitosamente
message
string
Mensaje descriptivo
data
object
Objeto completo de la cotización con cliente, detalles y cuotas

Ejemplo de Uso

curl -X POST "https://api.ejemplo.com/api/cotizaciones" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "fecha": "2024-01-15",
    "cliente_documento": "20612706702",
    "cliente_datos": "EMPRESA EJEMPLO SAC",
    "moneda": "PEN",
    "aplicar_igv": true,
    "descuento": 0,
    "asunto": "Cotización laptops",
    "dias_pago": "30 días",
    "productos": [
      {
        "producto_id": 1,
        "codigo": "LAP001",
        "nombre": "Laptop HP",
        "cantidad": 5,
        "precio_unitario": 2500.00,
        "precio_especial": 2300.00
      }
    ],
    "cuotas": [
      {
        "tipo": "inicial",
        "monto": 5000,
        "fecha_vencimiento": "2024-01-20"
      },
      {
        "tipo": "cuota",
        "monto": 6500,
        "fecha_vencimiento": "2024-02-20"
      }
    ]
  }'

GET /api/cotizaciones/

Obtiene el detalle completo de una cotización.

Autenticación

Requiere autenticación con token Bearer y permiso cotizaciones.view.

Parámetros de Ruta

id
integer
required
ID de la cotización

Respuesta

success
boolean
Indica si la operación fue exitosa
data
object
Objeto completo de la cotización con cliente, usuario, detalles de productos y cuotas

Ejemplo de Uso

curl -X GET "https://api.ejemplo.com/api/cotizaciones/25" \
  -H "Authorization: Bearer {token}"

PUT /api/cotizaciones/

Actualiza una cotización existente.

Autenticación

Requiere autenticación con token Bearer y permiso cotizaciones.edit.

Parámetros de Ruta

id
integer
required
ID de la cotización

Parámetros del Body

Los mismos que en POST, más:
estado
string
Estado: pendiente, aprobada, rechazada, vencida

Proceso

  1. Elimina todos los detalles y cuotas anteriores
  2. Crea nuevos detalles y cuotas con los datos enviados
  3. Recalcula totales

Respuesta

success
boolean
Indica si la actualización fue exitosa
message
string
Mensaje descriptivo
data
object
Cotización actualizada con sus relaciones

Ejemplo de Uso

curl -X PUT "https://api.ejemplo.com/api/cotizaciones/25" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "fecha": "2024-01-15",
    "estado": "aprobada",
    "moneda": "PEN",
    "aplicar_igv": true,
    "productos": [...]
  }'

DELETE /api/cotizaciones/

Elimina (marca como rechazada) una cotización.

Autenticación

Requiere autenticación con token Bearer y permiso cotizaciones.delete.

Parámetros de Ruta

id
integer
required
ID de la cotización

Respuesta

success
boolean
Indica si la eliminación fue exitosa
message
string
Mensaje confirmando la eliminación

Ejemplo de Uso

curl -X DELETE "https://api.ejemplo.com/api/cotizaciones/25" \
  -H "Authorization: Bearer {token}"

POST /api/cotizaciones//estado

Cambia el estado de una cotización.

Autenticación

Requiere autenticación con token Bearer y permiso cotizaciones.edit.

Parámetros de Ruta

id
integer
required
ID de la cotización

Parámetros del Body

estado
string
required
Nuevo estado: pendiente, aprobada, rechazada, vencida

Respuesta

success
boolean
Indica si el cambio fue exitoso
message
string
Mensaje confirmando el cambio
data
object
Cotización actualizada

Ejemplo de Uso

curl -X POST "https://api.ejemplo.com/api/cotizaciones/25/estado" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{"estado": "aprobada"}'

GET /api/cotizaciones/proximo-numero

Obtiene el próximo número de cotización disponible.

Autenticación

Requiere autenticación con token Bearer.

Respuesta

success
boolean
Indica si la operación fue exitosa
numero
string
Próximo número con formato (ej: COT-000042)

Ejemplo de Uso

curl -X GET "https://api.ejemplo.com/api/cotizaciones/proximo-numero" \
  -H "Authorization: Bearer {token}"

Códigos de Error

  • 404 Not Found: Cotización no encontrada.
  • 422 Unprocessable Entity: Error de validación.
  • 500 Internal Server Error: Error en el servidor.

Notas Importantes

  • Las cotizaciones usan numeración correlativa automática por empresa.
  • Los precios de productos incluyen IGV. El sistema calcula subtotal e IGV automáticamente.
  • Si una cotización tiene id_cliente, al crear una venta se puede referenciar con cotizacion_id y su estado cambiará a “aprobada”.
  • El cliente puede ser: existente (id_cliente), nuevo por documento (se crea), o texto libre (cliente_nombre).
  • Las cuotas son opcionales y permiten definir el plan de pagos.

Build docs developers (and LLMs) love