Skip to content

PortalCtaCteService

Estado: Planificado

Ubicacion: Modules/Portal/Account/Service/PortalCtaCteService.php

Responsabilidad

Consultar cuenta corriente y deudas de clientes autenticados en el portal. Reutiliza el modelo CuentaCorriente existente del ERP, enriqueciendo los datos con campos calculados para el frontend.

Resolucion de Contexto

El servicio recibe la conexion ya configurada por el middleware JWT:

  1. PortalJwtMiddleware extrae tenant_id y sucursal_id del JWT
  2. tenant_id resuelve la base de datos via ini.sistema
  3. sucursal_id resuelve el schema (sucXXXX, o public si ordcon a nivel empresa)
  4. ConnectionMiddleware configura la conexion
  5. El servicio trabaja contra la conexion ya establecida

No se usa resolucion por dominio (X-Client-Domain / tenant_domains).

Metodos

getDeudas()

Parametros:

  • portalUserId: ID del portal_user (extraido del JWT)

Retorna: Array de deudas pendientes con campos calculados:

json
[
  {
    "id": "uuid-1234",
    "tipo": "Factura A",
    "numero": 123,
    "fecha": "2026-01-01",
    "vencimiento": "2026-01-31",
    "monto": 10000.00,
    "saldo": 10000.00,
    "dias_vencido": 5,
    "esta_vencido": true
  }
]

Flujo:

  1. Resolver cliente_id desde portal_users.ordcon_id
  2. Obtener movimientos sin pago usando CuentaCorriente::getMovimientosSinPago(clienteId) (reutilizado)
  3. Enriquecer cada movimiento con:
    • dias_vencido: dias desde vencimiento hasta hoy (0 si no vencido)
    • esta_vencido: true si vencimiento < hoy
  4. Retornar array enriquecido

getMiCuenta()

Parametros:

  • portalUserId: ID del portal_user (extraido del JWT)

Retorna: Resumen de cuenta:

json
{
  "nombre": "Juan Perez",
  "saldo_total": 15000.00,
  "facturas_vencidas": 3,
  "facturas_pendientes": 5,
  "ultimo_pago": {
    "fecha": "2026-01-15",
    "monto": 5000.00
  }
}

Flujo:

  1. Resolver cliente_id desde portal_users.ordcon_id
  2. Obtener datos del cliente desde modelo Cliente
  3. Obtener deudas usando getDeudas(portalUserId)
  4. Calcular:
    • saldo_total: suma de todos los saldos
    • facturas_vencidas: conteo de facturas con esta_vencido = true
    • facturas_pendientes: total de facturas sin pagar
  5. Obtener ultimo pago usando CuentaCorriente::getUltimoPago(clienteId)
  6. Retornar resumen consolidado

Reutilizacion

  • NO re-implementa logica de cuenta corriente
  • USA modelos y metodos existentes (CuentaCorriente, Cliente)
  • SOLO agrega transformacion de datos para el frontend (campos calculados como dias_vencido, esta_vencido)
  • La resolucion de cliente_id desde portal_user_id es el unico paso adicional respecto al uso interno del ERP

Casos de Prueba

  1. Deudas enriquecidas: Debe incluir dias_vencido y esta_vencido calculados correctamente
  2. Resumen de cuenta: Debe calcular correctamente totales y contadores
  3. Cliente sin deudas: Debe retornar array vacio y totales en cero
  4. Resolucion portal_user -> ordcon: Debe resolver el cliente_id desde el portal_user_id del JWT