Some checks failed
Build / Build Backend (push) Has been cancelled
Build / Build Mobile (TypeScript Check) (push) Has been cancelled
Lint / Lint Backend (push) Has been cancelled
Lint / Lint Mobile (push) Has been cancelled
Test / Backend E2E Tests (push) Has been cancelled
Test / Mobile Unit Tests (push) Has been cancelled
Build / Build Docker Image (push) Has been cancelled
- Add exports module with PDF/CSV/Excel generation - Add reports module for inventory analytics - Add POS integrations module - Add database migrations for exports, movements and integrations - Add GitHub Actions CI/CD workflow with Docker support - Add mobile export and reports screens with tests - Update epic documentation with traceability - Add deployment and security guides Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
313 lines
8.5 KiB
Markdown
313 lines
8.5 KiB
Markdown
# MII-008: Validacion Aleatoria
|
|
|
|
---
|
|
id: MII-008
|
|
type: Epic
|
|
status: Completado
|
|
priority: P1
|
|
phase: 2
|
|
story_points: 8
|
|
created_date: 2026-01-10
|
|
updated_date: 2026-01-13
|
|
simco_version: "4.0.0"
|
|
---
|
|
|
|
## Metadata
|
|
|
|
| Campo | Valor |
|
|
|-------|-------|
|
|
| **ID** | MII-008 |
|
|
| **Nombre** | Validacion Aleatoria |
|
|
| **Fase** | 2 - Retroalimentacion |
|
|
| **Prioridad** | P1 |
|
|
| **Story Points** | 8 |
|
|
| **Estado** | Completado |
|
|
|
|
---
|
|
|
|
## 1. Descripcion
|
|
|
|
Implementar un sistema de micro-auditorias aleatorias que solicite confirmacion de items seleccionados para mejorar la calidad de los datos de entrenamiento.
|
|
|
|
### Objetivo
|
|
|
|
Obtener validaciones de alta calidad de forma no intrusiva para mejorar continuamente el modelo de IA.
|
|
|
|
---
|
|
|
|
## 2. Requerimientos Relacionados
|
|
|
|
| RF | Descripcion | Prioridad |
|
|
|----|-------------|-----------|
|
|
| FR-070 | Micro-auditorias en X% de sesiones (1-3 items) | P1 |
|
|
| FR-071 | Reglas de activacion (baja calidad, confianza, usuario nuevo) | P1 |
|
|
|
|
---
|
|
|
|
## 3. Criterios de Aceptacion
|
|
|
|
### AC-001: Validacion Aleatoria Basica
|
|
```gherkin
|
|
DADO que complete una sesion de inventario
|
|
CUANDO el sistema activa una micro-auditoria
|
|
ENTONCES me muestra 1-3 items aleatorios
|
|
Y me pide confirmar si la deteccion es correcta
|
|
Y puedo confirmar o corregir cada item
|
|
```
|
|
|
|
### AC-002: Reglas de Activacion
|
|
```gherkin
|
|
DADO que complete una sesion
|
|
CUANDO se evaluan las reglas de activacion
|
|
ENTONCES la probabilidad de auditoria aumenta si:
|
|
- La calidad del video fue baja
|
|
- Hay items con baja confianza
|
|
- Soy un usuario nuevo (< 5 sesiones)
|
|
- Es un horario de bajo trafico
|
|
```
|
|
|
|
### AC-003: Items Prioritarios
|
|
```gherkin
|
|
DADO que se activo una micro-auditoria
|
|
CUANDO se seleccionan los items
|
|
ENTONCES se priorizan items con:
|
|
- Confianza media (0.60-0.85)
|
|
- Productos nuevos o poco vistos
|
|
- Productos de alto valor
|
|
```
|
|
|
|
### AC-004: Experiencia No Intrusiva
|
|
```gherkin
|
|
DADO que me muestran una micro-auditoria
|
|
CUANDO respondo
|
|
ENTONCES el proceso es rapido (< 30 segundos)
|
|
Y puedo saltar si estoy ocupado
|
|
Y no se repite en la siguiente sesion
|
|
```
|
|
|
|
### AC-005: Registro de Validaciones
|
|
```gherkin
|
|
DADO que complete una validacion
|
|
CUANDO el sistema guarda mi respuesta
|
|
ENTONCES se registra como ground truth
|
|
Y contribuye al entrenamiento del modelo
|
|
```
|
|
|
|
---
|
|
|
|
## 4. Tareas Tecnicas
|
|
|
|
| ID | Tarea | Estimacion | Estado |
|
|
|----|-------|------------|--------|
|
|
| T-001 | Implementar motor de reglas de activacion | 2 SP | Completado |
|
|
| T-002 | Crear algoritmo de seleccion de items | 1 SP | Completado |
|
|
| T-003 | Implementar pantalla de micro-auditoria | 2 SP | Completado |
|
|
| T-004 | Crear endpoints de validacion | 1 SP | Completado |
|
|
| T-005 | Integrar con ground truth | 1 SP | Completado |
|
|
| T-006 | Implementar metricas y dashboard | 1 SP | Completado |
|
|
|
|
---
|
|
|
|
## 5. Motor de Reglas
|
|
|
|
### Reglas de Activacion
|
|
|
|
| Regla | Peso | Descripcion |
|
|
|-------|------|-------------|
|
|
| BASE_RATE | 10% | Probabilidad base |
|
|
| LOW_QUALITY | +20% | Si calidad video < 70% |
|
|
| LOW_CONFIDENCE | +15% | Si confianza promedio < 80% |
|
|
| NEW_USER | +15% | Si usuario tiene < 5 sesiones |
|
|
| MANY_UNKNOWNS | +10% | Si > 20% items desconocidos |
|
|
| OFF_PEAK | +5% | Si es horario de bajo trafico |
|
|
| RECENT_SKIP | -20% | Si skipeo auditoria reciente |
|
|
|
|
### Calculo de Probabilidad
|
|
|
|
```
|
|
P(auditoria) = min(BASE_RATE + sum(weights), 60%)
|
|
```
|
|
|
|
### Ejemplo
|
|
|
|
```
|
|
Usuario nuevo (15%) + Baja confianza (15%) + Base (10%) = 40%
|
|
```
|
|
|
|
---
|
|
|
|
## 6. Algoritmo de Seleccion
|
|
|
|
```python
|
|
def select_items_for_validation(session_items, count=3):
|
|
# 1. Filtrar items elegibles
|
|
eligible = [i for i in session_items if i.status != 'UNKNOWN']
|
|
|
|
# 2. Calcular score de prioridad
|
|
for item in eligible:
|
|
item.priority_score = calculate_priority(item)
|
|
|
|
# 3. Ordenar por prioridad
|
|
sorted_items = sorted(eligible, key=lambda x: x.priority_score, reverse=True)
|
|
|
|
# 4. Seleccionar top N con algo de aleatoriedad
|
|
top_pool = sorted_items[:count * 2]
|
|
selected = random.sample(top_pool, min(count, len(top_pool)))
|
|
|
|
return selected
|
|
|
|
def calculate_priority(item):
|
|
score = 0
|
|
|
|
# Items con confianza media son mas valiosos
|
|
if 0.60 <= item.confidence < 0.85:
|
|
score += 30
|
|
|
|
# Productos poco vistos
|
|
if item.product.validation_count < 10:
|
|
score += 20
|
|
|
|
# Productos de alto valor
|
|
if item.product.is_high_value:
|
|
score += 10
|
|
|
|
# Agregar ruido aleatorio
|
|
score += random.randint(0, 15)
|
|
|
|
return score
|
|
```
|
|
|
|
---
|
|
|
|
## 7. Endpoints API
|
|
|
|
| Metodo | Endpoint | Descripcion | Auth |
|
|
|--------|----------|-------------|------|
|
|
| GET | /validations/check/:sessionId | Verificar si hay auditoria | JWT |
|
|
| GET | /validations/:sessionId/items | Obtener items a validar | JWT |
|
|
| POST | /validations/:sessionId/submit | Enviar respuestas | JWT |
|
|
| POST | /validations/:sessionId/skip | Saltar auditoria | JWT |
|
|
|
|
---
|
|
|
|
## 8. Pantallas Mobile
|
|
|
|
| Pantalla | Componentes |
|
|
|----------|-------------|
|
|
| **ValidationPromptModal** | Mensaje invitacion, botones aceptar/saltar |
|
|
| **ValidationScreen** | Card item, imagen, botones correcto/incorrecto |
|
|
| **ValidationCompleteScreen** | Agradecimiento, resumen |
|
|
|
|
---
|
|
|
|
## 9. UI de Validacion
|
|
|
|
```
|
|
┌─────────────────────────────────────────┐
|
|
│ Ayudanos a mejorar │
|
|
│ │
|
|
│ ┌─────────────────────────────────┐ │
|
|
│ │ │ │
|
|
│ │ [Imagen del producto] │ │
|
|
│ │ │ │
|
|
│ └─────────────────────────────────┘ │
|
|
│ │
|
|
│ Detectamos: │
|
|
│ Coca-Cola 600ml │
|
|
│ Cantidad: 24 │
|
|
│ │
|
|
│ ¿Es correcto? │
|
|
│ │
|
|
│ ┌─────────┐ ┌─────────────────┐ │
|
|
│ │ Si │ │ No, corregir │ │
|
|
│ └─────────┘ └─────────────────┘ │
|
|
│ │
|
|
│ [2 de 3] [Saltar todo] │
|
|
└─────────────────────────────────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## 10. Metricas
|
|
|
|
| Metrica | Objetivo |
|
|
|---------|----------|
|
|
| Tasa de respuesta | > 70% |
|
|
| Tiempo promedio | < 30 segundos |
|
|
| Tasa de confirmacion | > 80% |
|
|
| Validaciones por dia | > 100 |
|
|
|
|
---
|
|
|
|
## 11. Modelo de Datos
|
|
|
|
### Tabla: validation_requests
|
|
```sql
|
|
CREATE TABLE validation_requests (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
session_id UUID REFERENCES inventory_sessions(id),
|
|
user_id UUID REFERENCES users(id),
|
|
triggered_by VARCHAR(50), -- 'AUTO', 'MANUAL', 'ADMIN'
|
|
rules_matched JSONB,
|
|
probability_score DECIMAL(5,2),
|
|
status VARCHAR(20) DEFAULT 'PENDING', -- 'PENDING', 'COMPLETED', 'SKIPPED', 'EXPIRED'
|
|
items_count INT,
|
|
completed_at TIMESTAMP,
|
|
created_at TIMESTAMP DEFAULT NOW()
|
|
);
|
|
```
|
|
|
|
### Tabla: validation_responses
|
|
```sql
|
|
CREATE TABLE validation_responses (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
request_id UUID REFERENCES validation_requests(id),
|
|
item_id UUID REFERENCES inventory_items(id),
|
|
is_correct BOOLEAN,
|
|
corrected_value JSONB,
|
|
response_time_ms INT,
|
|
created_at TIMESTAMP DEFAULT NOW()
|
|
);
|
|
```
|
|
|
|
---
|
|
|
|
## 12. Dependencias
|
|
|
|
### Entrada (Requiere)
|
|
- MII-005: Procesamiento IA
|
|
- MII-006: Reportes de Inventario
|
|
|
|
### Salida (Bloquea)
|
|
- Pipeline de reentrenamiento (futuro)
|
|
|
|
---
|
|
|
|
## 13. Riesgos
|
|
|
|
| Riesgo | Probabilidad | Impacto | Mitigacion |
|
|
|--------|--------------|---------|------------|
|
|
| Usuario fatigue | Media | Medio | Limitar frecuencia, gamificacion |
|
|
| Respuestas apresuradas | Media | Medio | Timeout, confirmacion |
|
|
| Skip excesivo | Media | Bajo | Cooldown despues de skip |
|
|
|
|
---
|
|
|
|
## 14. Notas de Implementacion
|
|
|
|
- No mostrar auditoria si usuario skipeo en ultimas 24h
|
|
- Guardar tiempo de respuesta para detectar spam
|
|
- Considerar gamificacion (badges, leaderboard)
|
|
- A/B test diferentes frecuencias de auditoria
|
|
|
|
---
|
|
|
|
## 15. Referencias
|
|
|
|
- [REQUERIMIENTOS-FUNCIONALES.md](../00-vision-general/REQUERIMIENTOS-FUNCIONALES.md) - Seccion 5.8
|
|
- [MII-007](./MII-007-retroalimentacion.md) - Sistema de correcciones
|
|
|
|
---
|
|
|
|
**Ultima Actualizacion:** 2026-01-10
|