Skip to content

ClientIdentificationService

Responsabilidad

Identificar y autenticar clientes del portal mediante DNI/CUIT/Nro Cliente.

Métodos

identifyClient()

Parámetros:

  • identifier: DNI, CUIT o ID de cliente
  • identifierType: 'dni', 'cuit', 'cliente_id'
  • tenantContext: Contexto del tenant (database, schema, etc.)

Retorna:

json
{
  "cliente_id": 123,
  "portal_client_id": "uuid",
  "nombre": "Juan Pérez",
  "email": "juan@example.com",
  "phone": "1234567890",
  "has_ctacte": true
}

Flujo de Identificación

1. Configurar conexión al tenant

2. Buscar en portal_clients por dni_cuit

3. Si existe:
   - Verificar no esté bloqueado (locked_until)
   - Actualizar last_login
   - Retornar datos

4. Si NO existe:
   - Buscar en ordcon (tabla clientes)
   - Si existe en ordcon:
     → Crear portal_client
     → Retornar datos
   - Si NO existe:
     → Error: Cliente no encontrado

Seguridad

Bloqueo por Intentos Fallidos

Después de 3 intentos fallidos, el cliente se bloquea temporalmente por 15 minutos.

Comportamiento:

  • Contador de intentos fallidos incrementa en cada error
  • Al llegar a 3 intentos: se establece locked_until a 15 minutos en el futuro
  • Al identificarse correctamente: se resetea el contador

Rate Limiting

  • Max 5 intentos por minuto por IP
  • Se aplica en el controller antes de llamar al servicio

Casos de Prueba

Escenarios clave a testear:

  1. Cliente existente en portal_clients: Debe actualizar last_login y retornar datos
  2. Primer login (existe en ordcon): Debe crear registro en portal_clients automáticamente
  3. Cliente inexistente: Debe fallar con "Cliente no encontrado"
  4. Cliente bloqueado: Debe fallar con "bloqueado temporalmente"

Uso en Controller

El controller llama a este servicio y:

  1. Si la identificación es exitosa:

    • Crea session PHP o JWT con los datos del cliente
    • Retorna response 200 con datos del cliente
  2. Si la identificación falla:

    • Registra el intento fallido
    • Retorna response 401 con mensaje de error

Próximos Pasos

  1. Ver portal-ctacte-service.md para consulta de deudas
  2. Revisar ../models/portal-models.md
  3. Implementar rate limiting y logging de auditoría