Visión General
El módulo de Bancos permite gestionar la información de bancos peruanos y sus cuentas asociadas, incluyendo movimientos bancarios y conciliación.
El sistema incluye los principales bancos peruanos precargados con sus códigos SUNAT para facturación electrónica.
Modelo de Datos
Tabla bancos
protected $fillable = [
'nombre' , // Ej: "Banco de Crédito del Perú"
'codigo_sunat' , // Código oficial SUNAT (003 para BCP)
'codigo_swift' , // Código internacional SWIFT/BIC
'telefono' ,
'email' ,
'website' ,
'activo' , // true/false
];
Tabla cuentas_bancarias
protected $fillable = [
'id_empresa' ,
'id_banco' ,
'numero_cuenta' , // Número de cuenta
'tipo_cuenta' , // ahorros, corriente, cta_sueldo
'moneda' , // PEN, USD
'saldo_actual' , // Saldo en el sistema
'saldo_banco' , // Último saldo según banco (para conciliación)
'cci' , // Código de Cuenta Interbancaria (20 dígitos)
'activa' , // true/false
];
API Endpoints
Listar Bancos
Parámetros opcionales:
Filtrar solo bancos activos
Buscar por nombre o código SUNAT
Ejemplo de respuesta:
{
"success" : true ,
"data" : [
{
"id_banco" : 1 ,
"nombre" : "Banco de Crédito del Perú" ,
"codigo_sunat" : "003" ,
"codigo_swift" : "BCPLPEPL" ,
"telefono" : "311-9898" ,
"website" : "https://www.viabcp.com" ,
"activo" : true
},
{
"id_banco" : 2 ,
"nombre" : "BBVA Perú" ,
"codigo_sunat" : "011" ,
"codigo_swift" : "BCONPEPL" ,
"activo" : true
}
]
}
Crear Banco
Request:
{
"nombre" : "Banco Interbank" ,
"codigo_sunat" : "002" ,
"codigo_swift" : "BINPPEPL" ,
"telefono" : "611-9000" ,
"email" : "[email protected] " ,
"website" : "https://interbank.pe" ,
"activo" : true
}
Actualizar Banco
Eliminar Banco
No se puede eliminar un banco que tiene cuentas bancarias asociadas. El sistema valida esta restricción.
Validación:
if ( $banco -> cuentasBancarias () -> exists ()) {
return response () -> json ([
'success' => false ,
'message' => 'No se puede eliminar el banco porque tiene cuentas bancarias asociadas.' ,
], 409 );
}
Cuentas Bancarias
Listar Cuentas de la Empresa
GET / api / cuentas - bancarias
Filtros automáticos:
Solo cuentas de la empresa del usuario autenticado (id_empresa)
Incluye relación con banco y titulares
Respuesta:
{
"success" : true ,
"data" : [
{
"id_cuenta" : 15 ,
"id_empresa" : 1 ,
"numero_cuenta" : "191-2345678-0-12" ,
"tipo_cuenta" : "corriente" ,
"moneda" : "PEN" ,
"saldo_actual" : "45000.50" ,
"saldo_banco" : "45200.00" ,
"cci" : "00219100234567801212" ,
"activa" : true ,
"banco" : {
"id_banco" : 1 ,
"nombre" : "Banco de Crédito del Perú" ,
"codigo_sunat" : "003"
}
}
]
}
Crear Cuenta Bancaria
POST / api / cuentas - bancarias
Request:
{
"id_banco" : 1 ,
"numero_cuenta" : "191-2345678-0-12" ,
"tipo_cuenta" : "corriente" ,
"moneda" : "PEN" ,
"saldo_actual" : 0 ,
"cci" : "00219100234567801212" ,
"titulares" : [
{
"nombre" : "EMPRESA SAC" ,
"tipo_documento" : "6" ,
"documento" : "20612706702"
}
]
}
Tipos de Cuenta
Ahorros Cuenta de ahorros personal o empresarial
Corriente Cuenta corriente para operaciones empresariales
Cuenta Sueldo Cuenta para pago de planillas
Movimientos Bancarios
La tabla movimientos_bancarios registra todos los ingresos y egresos:
protected $fillable = [
'id_cuenta' ,
'id_empresa' ,
'tipo' , // ingreso, egreso
'monto' ,
'fecha_movimiento' ,
'fecha_valor' ,
'concepto' ,
'referencia' , // Número de operación
'descripcion' ,
'id_venta' , // Si es un cobro de venta
'id_compra' , // Si es un pago de compra
'conciliado' , // true/false
'fecha_conciliacion' ,
];
Registrar Movimiento
POST / api / cuentas - bancarias / { id } / movimientos
Request:
{
"tipo" : "ingreso" ,
"monto" : 1500.00 ,
"fecha_movimiento" : "2026-03-06" ,
"concepto" : "Cobro de factura" ,
"referencia" : "OP-123456789" ,
"id_venta" : 234
}
Conciliación Bancaria
Proceso de comparar los movimientos del sistema con el extracto bancario:
GET / api / cuentas - bancarias / { id } / conciliacion
Respuesta:
{
"success" : true ,
"data" : {
"saldo_sistema" : "45000.50" ,
"saldo_banco" : "45200.00" ,
"diferencia" : "199.50" ,
"movimientos_sin_conciliar" : [
{
"id_movimiento" : 567 ,
"fecha" : "2026-03-05" ,
"concepto" : "Transferencia recibida" ,
"monto" : "200.00" ,
"conciliado" : false
}
]
}
}
Conciliar Movimiento
POST / api / movimientos - bancarios / { id } / conciliar
{
"fecha_conciliacion" : "2026-03-06" ,
"observaciones" : "Verificado con extracto bancario"
}
Relaciones de Base de Datos
Scopes de Consulta
public function scopeActivo ( $query )
{
return $query -> where ( 'activo' , true );
}
public function scopeActiva ( $query )
{
return $query -> where ( 'activa' , true );
}
public function scopeByEmpresa ( $query , $empresaId )
{
return $query -> where ( 'id_empresa' , $empresaId );
}
Ejemplos de uso:
// Solo bancos activos
$bancosActivos = Banco :: activo () -> get ();
// Cuentas activas de una empresa
$cuentas = CuentaBancaria :: activa ()
-> byEmpresa ( 1 )
-> with ( 'banco' )
-> get ();
Integración con Métodos de Pago
Los métodos de pago digitales (Yape, POS, Transferencias) están vinculados a cuentas bancarias:
public function metodosPago ()
{
return $this -> hasMany ( MetodoPago :: class , 'id_cuenta' , 'id_cuenta' );
}
Cuando se registra una venta con Yape o POS, el monto se acredita automáticamente a la cuenta bancaria configurada.
Configure una cuenta bancaria por cada método de pago digital para facilitar la conciliación.
Códigos SUNAT de Bancos Peruanos
Código Banco 002 Interbank 003 Banco de Crédito del Perú (BCP) 011 BBVA Perú 009 Scotiabank Perú 035 Banco Pichincha 038 Banco GNB Perú 055 Banco Santander Perú
Los códigos SUNAT son obligatorios para la facturación electrónica cuando se especifica el método de pago.
Integración con Frontend
Componentes ubicados en:
resources/js/components/Finanzas/Bancos/
├── page.jsx # Lista de bancos
├── BancoForm.jsx # Formulario crear/editar
├── CuentasBancarias/ # Gestión de cuentas
└── hooks/
├── useBancos.js
└── useCuentasBancarias.js
Ejemplo de uso:
import { useBancos } from './hooks' ;
const { data : bancos , isLoading } = useBancos ({ solo_activos: true });
const crearBanco = useMutation ({
mutationFn : ( datos ) => api . post ( '/bancos' , datos ),
onSuccess : () => {
toast . success ( 'Banco creado' );
queryClient . invalidateQueries ([ 'bancos' ]);
},
});
Reportes Disponibles
Estado de cuenta : Movimientos por cuenta con saldos
Flujo de caja bancario : Ingresos vs egresos por periodo
Conciliación pendiente : Movimientos sin conciliar
Saldos consolidados : Todos los bancos y cuentas
// Obtener saldo total en todos los bancos
$saldoTotal = CuentaBancaria :: where ( 'id_empresa' , 1 )
-> where ( 'activa' , true )
-> sum ( 'saldo_actual' );