Skip to content

Services - Logica de Negocio

Estado: Planificado

Servicios que implementan la logica de negocio del Portal de Clientes. Los servicios nuevos se ubican en sus respectivos sub-modulos bajo Modules/Portal/. Los servicios reutilizados pertenecen a modulos existentes del ERP.

Principios

Los services son la capa de logica de negocio:

  • Implementan reglas de negocio y validaciones de dominio
  • Orquestan operaciones entre modelos y servicios existentes
  • Manejan transacciones de base de datos
  • NO manejan HTTP (responsabilidad del Controller)
  • NO acceden directamente a la base de datos (usan Models/Repositories)

Servicios del Portal

PortalAuthService

Ubicacion: Modules/Portal/Auth/Service/PortalAuthService.php

Responsabilidad: Registro, autenticacion y gestion de credenciales de usuarios del portal.

Funcionalidad:

  • Registro de usuario (auto-registro validando contra ordcon existente)
  • Login con DNI/CUIT + password, generacion de JWT
  • Forgot-password (generar codigo, enviar email)
  • Reset-password (validar codigo, actualizar password_hash)
  • Refresh-token (renovar JWT)
  • Bloqueo por intentos fallidos

PortalCtaCteService

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

Responsabilidad: Consultar cuenta corriente del cliente autenticado.

Funcionalidad:

  • Obtener deudas pendientes con campos calculados (dias_vencido, esta_vencido)
  • Generar resumen de cuenta (saldo total, facturas vencidas, ultimo pago)
  • Reutiliza modelo CuentaCorriente existente del ERP

PaymentGatewayService

Ubicacion: Modules/Portal/Payment/Service/PaymentGatewayService.php

Responsabilidad: Orquestar pagos online con multiples gateways y acreditacion automatica.

Funcionalidad:

  • Iniciar pagos con gateways (MercadoPago, PagoTIC)
  • Procesar webhooks de confirmacion
  • Acreditacion AUTOMATICA: webhook aprobado -> crear recibo en ctacte via ReciboRelationsService
  • Patron Adapter + Factory para multiples gateways
  • Idempotencia con external_id

CuponPagoService y CuponValidacionService (reutilizados)

Documentacion: cupon-pago-service.md

Ubicacion: Servicios existentes del modulo CtaCte

Responsabilidad: Generacion y validacion de cupones de pago.

Estos servicios NO son nuevos. El portal los reutiliza tal cual, exponiendolos a traves de endpoints autenticados con JWT. No existe tabla portal_cupones.

Funcionalidad expuesta al portal:

  • Generar cupones con codigo ITF de 19 digitos
  • Listar cupones por cliente
  • Validar cupones por codigo de barras

Diagrama de Dependencias

mermaid
graph TD
    A[PortalAuthService] --> B[portal_users table]
    A --> C[ordcon table]

    D[PortalCtaCteService] --> E[CuentaCorriente model]
    D --> F[Cliente model]

    G[PaymentGatewayService] --> H[PaymentGatewayFactory]
    H --> I[MercadoPagoAdapter]
    H --> J[PagoTicAdapter]
    G --> K[portal_payments table]
    G --> L[ReciboRelationsService]

    M[PortalCuponesController] --> N[CuponPagoService]
    M --> O[CuponValidacionService]

    style A fill:#e1f5fe
    style D fill:#e1f5fe
    style G fill:#e1f5fe
    style M fill:#fff3e0
    style N fill:#e8f5e9
    style O fill:#e8f5e9
    style L fill:#e8f5e9

Leyenda:

  • Azul: Servicios nuevos del portal
  • Naranja: Controller del portal (sin servicio propio)
  • Verde: Servicios reutilizados del ERP

Multi-Tenant

La resolucion de tenant se hace via JWT:

  1. El JWT contiene tenant_id y sucursal_id
  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. El middleware configura la conexion ANTES de llegar a los servicios
  5. Los servicios trabajan contra la conexion ya configurada

Patrones de Diseno

  • DDD Sub-modules: Cada sub-modulo encapsula su servicio, controller y modelos
  • Dependency Injection: Inyeccion via container de Slim
  • Factory + Adapter: Seleccion de gateways de pago
  • Reutilizacion: Servicios existentes del ERP se usan directamente, sin wrappers innecesarios