Skip to main content

Conceptos Clave

El cierre de caja es el proceso de:
  1. Conteo físico del efectivo en la caja (arqueo)
  2. Comparación entre el efectivo real vs. el teórico (calculado del sistema)
  3. Registro de diferencias (faltantes o sobrantes)
  4. Generación del arqueo diario para auditoría
Nota: En la versión actual de Santo Domingo, el cierre de caja está simplificado. El endpoint POST /api/cajas/{id}/cierre retorna “Operación no disponible” (ver CajaController.php:102-105). Esta guía documenta el flujo esperado basado en la estructura del código.

Proceso de Cierre

1

Acceder a la caja abierta

Vaya a Finanzas → Caja. Si tiene una caja abierta, verá la sección Caja Abierta mostrando:
  • Nombre de la caja
  • Saldo inicial
  • Total de ingresos (ventas + movimientos manuales)
  • Total de egresos
  • Saldo teórico calculado: saldo_inicial + ingresos - egresos
2

Realizar el conteo físico (arqueo)

Antes de cerrar en el sistema, cuente el efectivo físico presente en la caja.

Método 1: Contar por denominaciones

Complete la tabla de billetes y monedas:
DenominaciónCantidadSubtotal
Billete S/. 2003600.00
Billete S/. 1005500.00
Billete S/. 508400.00
Billete S/. 2012240.00
Billete S/. 1015150.00
Moneda S/. 51050.00
Moneda S/. 2816.00
Moneda S/. 11212.00
Total RealS/. 1,968.00

Método 2: Monto total directo

Si ya tiene el total contado: 1968.00
3

Registrar cierre en el sistema

Haga clic en Cerrar Caja. El modal solicitará:
  • Total real contado: El monto físico del arqueo
  • Billetes (opcional): Desglose por denominaciones
  • Observaciones: Notas sobre la jornada
El sistema calculará automáticamente:
Saldo teórico: S/. 2,000.00
Total real:    S/. 1,968.00
───────────────────────────
Diferencia:    S/. -32.00  (FALTANTE)
4

Clasificación de diferencias

El sistema clasifica automáticamente:
  • Faltante (diferencia < 0): Hay menos efectivo del esperado
    • Posibles causas: error en vueltos, dinero no registrado como egreso
  • Sobrante (diferencia > 0): Hay más efectivo del esperado
    • Posibles causas: error en registro de ventas, dinero extra no contabilizado
  • Cuadrado (diferencia = 0): El efectivo coincide exactamente
Diferencias mayores a S/. 100 deben investigarse antes de confirmar el cierre. Revise el detalle de movimientos del día para identificar discrepancias.
5

Confirmación y arqueo diario

Al confirmar el cierre:
  1. Se actualiza la caja:
    • estado → vuelve a “Cerrada”
    • fecha_cierre → timestamp actual
    • id_usuario_cierre → usuario actual
    • total_teorico → calculado del sistema
    • total_real → ingresado en el arqueo
    • diferenciatotal_real - total_teorico
    • tipo_diferencia → “faltante”/“sobrante”/“cuadrado”
  2. Se crea un registro en arqueos_diarios con:
    • Saldo inicial
    • Total ventas por método de pago (JSON)
    • Total ingresos manuales
    • Total egresos
    • Totales teórico y real
    • Diferencia y tipo
    • Usuario de cierre y validación
  3. Si hay desglose de billetes, se guarda en cierre_caja_billetes
  4. Se registra auditoría con acción “Cierre”

Resumen de Ventas por Método de Pago

El arqueo incluye un desglose automático de ingresos por método:
{
  "ventas_por_metodo": [
    {
      "id_metodo_pago": 1,
      "nombre": "Efectivo",
      "total": 1850.50,
      "cantidad_ventas": 23
    },
    {
      "id_metodo_pago": 2,
      "nombre": "Tarjeta Visa",
      "total": 420.00,
      "cantidad_ventas": 5
    },
    {
      "id_metodo_pago": 3,
      "nombre": "Yape",
      "total": 180.00,
      "cantidad_ventas": 8
    }
  ]
}
Este detalle se genera en CajaArqueoService::resumen() (línea 16-58) agrupando los movimientos de tipo “Ingreso” con referencia_tipo = 'venta'.

Flujo Técnico

Endpoint de Cierre

POST /api/cajas/{id_caja}/cierre
Authorization: Bearer {token}
Content-Type: application/json

{
  "total_real": 1968.00,
  "billetes": [
    { "id_denominacion": 1, "cantidad": 3 },
    { "id_denominacion": 2, "cantidad": 5 }
  ],
  "observaciones": "Faltante de S/. 32.00 identificado en vueltos"
}

Cálculo de Totales

El servicio CajaArqueoService::resumen() calcula:
$totalIngresos = $caja->movimientos()
    ->where('tipo', 'Ingreso')
    ->sum('monto');

$totalEgresos = $caja->movimientos()
    ->where('tipo', 'Egreso')
    ->sum('monto');

$totalTeorico = $caja->saldo_inicial + $totalIngresos - $totalEgresos;

$diferencia = $totalReal - $totalTeorico;
$tipoDiferencia = $diferencia < 0 ? 'faltante' 
                : ($diferencia > 0 ? 'sobrante' : 'cuadrado');

Consulta del Arqueo

Endpoint para obtener el arqueo

GET /api/cajas/{id_caja}/arqueo
Authorization: Bearer {token}
Respuesta:
{
  "success": true,
  "data": {
    "id_arqueo": 45,
    "id_caja": 3,
    "fecha_arqueo": "2026-03-06",
    "saldo_inicial": 500.00,
    "total_ventas": 2450.50,
    "total_ingresos_manuales": 100.00,
    "total_egresos": 50.00,
    "total_teorico": 3000.50,
    "total_real": 2968.50,
    "diferencia": -32.00,
    "tipo_diferencia": "faltante",
    "estado": "cerrada",
    "fecha_cierre": "2026-03-06T18:30:00",
    "usuario_cierre": "Juan Pérez",
    "ventas_por_metodo": [
      { "nombre": "Efectivo", "total": 1850.50, "cantidad_ventas": 23 },
      { "nombre": "Tarjeta Visa", "total": 420.00, "cantidad_ventas": 5 },
      { "nombre": "Yape", "total": 180.00, "cantidad_ventas": 8 }
    ]
  }
}

Permisos Requeridos

  • Cerrar caja: Requiere el permiso puede_cerrar_caja en permisos_caja
  • Autorizar cierre: Requiere puede_autorizar_cierre (para diferencias significativas)
  • Ver reportes: Requiere puede_ver_reportes para consultar arqueos históricos

Historial de Arqueos

Para consultar arqueos de días anteriores:
GET /api/cajas/{id_caja}/auditorias
Authorization: Bearer {token}
Esto devuelve el listado de todos los arqueós realizados con detalles de cada cierre.

Solución de Problemas

Antes de confirmar el cierre:
  1. Vaya a Movimientos de Caja y revise todas las transacciones del día
  2. Verifique que todas las ventas en efectivo estén registradas
  3. Revise los egresos manuales (retiros, gastos)
  4. Cuente nuevamente el efectivo físico
  5. Si persiste, documente en observaciones y solicite autorización de supervisor
Un usuario con puede_autorizar_cierre puede aprobar cierres con diferencias documentadas.
Esta respuesta indica que el endpoint de cierre está deshabilitado en esta versión. Consulte con el administrador del sistema si el flujo de cierre está implementado o si se usa un proceso manual externo.
No. Una vez cerrada, la caja genera un arqueo diario inmutable. Para operar nuevamente, debe realizar una nueva apertura con un nuevo saldo inicial.
Use el botón Registrar Movimiento en la caja abierta:
  • Tipo: Egreso
  • Concepto: Descripción del gasto (ej: “Compra de insumos”, “Viáticos”)
  • Monto: Cantidad retirada
Este monto se restará automáticamente del saldo teórico.

Próximos Pasos

Build docs developers (and LLMs) love