docs/02-requirements.md
02 - Requerimientos
Requerimientos funcionales
| ID | Requerimiento | Prioridad |
|---|---|---|
| RF-001 | Crear operación OTP desde backend cliente o SDK según modo autorizado | Alta |
| RF-002 | Validar licencia antes de emitir sdkToken | Crítica |
| RF-003 | Validar origen Web, package Android o bundle iOS contra licencia | Crítica |
| RF-004 | Permitir enviar OTP por WhatsApp | Alta |
| RF-005 | Permitir fallback WhatsApp a SMS si existe teléfono válido | Alta |
| RF-006 | Permitir fallback SMS a Email si existe email válido | Alta |
| RF-007 | Reportar OTP_FALLBACK_TARGET_MISSING cuando no exista destino para canal alterno |
Alta |
| RF-008 | Permitir Email como canal directo o fallback | Alta |
| RF-009 | Contabilizar cada OTP enviado como transacción facturable | Crítica |
| RF-010 | Reportar error de proveedor caído sin perder auditoría | Alta |
| RF-011 | Mostrar estados en proceso en SDK | Alta |
| RF-012 | Permitir SDK UI completa | Alta |
| RF-013 | Permitir SDK headless | Alta |
| RF-014 | Permitir inicialización con phone/email/both/none | Alta |
| RF-015 | Permitir pantalla inicial de captura cuando no haya target | Alta |
Estado Android 0.1.0: RF-015 permanece pendiente en las variantes UI. El mock devuelve
OTP_TARGET_REQUIREDy no inventa teléfono o email. | RF-016 | Bloquear operación por intentos fallidos | Alta | | RF-017 | Expirar OTP por TTL | Alta | | RF-018 | Exponer webhooks de eventos principales | Media | | RF-019 | Consultar consumo por cliente/licencia/app | Alta | | RF-020 | Suspender/reactivar licencias | Alta |
Requerimientos no funcionales
| ID | Requerimiento | Prioridad |
|---|---|---|
| RNF-001 | OTP hasheado, nunca texto plano persistente | Crítica |
| RNF-002 | Tokens SDK temporales con TTL corto | Crítica |
| RNF-003 | Rate limit por cliente, licencia, target, IP y operación | Alta |
| RNF-004 | Auditoría inmutable de eventos críticos | Alta |
| RNF-005 | Latencia p95 API menor a 500 ms excluyendo proveedor | Media |
| RNF-006 | Disponibilidad objetivo 99.5% MVP, 99.9% futuro | Media |
| RNF-007 | Compatible con multi-tenant | Alta |
| RNF-008 | Configuración sin recompilar SDK | Alta |
Requerimientos de seguridad
| ID | Requerimiento |
|---|---|
| SEC-001 | No exponer API keys privadas en SDK Web o nativo |
| SEC-002 | El backend cliente usa API key privada server-to-server |
| SEC-003 | El SDK usa sdkToken temporal emitido por Kodenix |
| SEC-004 | Cada licencia limita allowedOrigins, packageNames o bundleIds |
| SEC-005 | No permitir uso de un token/API key en URLs no autorizadas |
| SEC-006 | Enmascarar teléfono/email en logs y respuestas |
| SEC-007 | Firmar webhooks |
| SEC-008 | Retención limitada de PII |
| SEC-009 | Rotación de API keys y licencias |
| SEC-010 | Bloqueo automático por abuso o consumo anómalo |