Appearance
ClientIdentificationService
Responsabilidad
Identificar y autenticar clientes del portal mediante DNI/CUIT/Nro Cliente.
Métodos
identifyClient()
Parámetros:
identifier: DNI, CUIT o ID de clienteidentifierType: '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 encontradoSeguridad
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_untila 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:
- Cliente existente en portal_clients: Debe actualizar last_login y retornar datos
- Primer login (existe en ordcon): Debe crear registro en portal_clients automáticamente
- Cliente inexistente: Debe fallar con "Cliente no encontrado"
- Cliente bloqueado: Debe fallar con "bloqueado temporalmente"
Uso en Controller
El controller llama a este servicio y:
Si la identificación es exitosa:
- Crea session PHP o JWT con los datos del cliente
- Retorna response 200 con datos del cliente
Si la identificación falla:
- Registra el intento fallido
- Retorna response 401 con mensaje de error
Próximos Pasos
- Ver portal-ctacte-service.md para consulta de deudas
- Revisar ../models/portal-models.md
- Implementar rate limiting y logging de auditoría