👥 JERARQUÍA DE USUARIOS Y APROBACIÓN ESCALONADA
📊 5 NIVELES JERÁRQUICOS
👑
NIVEL 5: KENDI ADMIN
Quién: Equipo KENDI
Aprueba a: Supervisores MEC, Directores, Coordinadores
Permisos: Control total del sistema, configuración global, aprobaciones máximas
↓
🏛️
NIVEL 4: SUPERVISOR (Director, Coordinador, MEC)
Quién: Director de colegio, Coordinador académico, Funcionario MEC
Aprueba a: Educadores/Docentes
Permisos: Gestión de institución, ver todos los educadores, crear competencias por nivel, mapa de calor nacional/institucional
↓
👨🏫
NIVEL 3: EDUCADOR / DOCENTE
Quién: Profesor, Maestro
Aprueba a: Estudiantes/Alumnos
Permisos: Crear menús/submenús, crear bancos, asignar contenido, crear competencias de clase, ver avance de sus alumnos
↓
🎒
NIVEL 2: ESTUDIANTE / ALUMNO
Quién: Alumno del colegio
Aprueba a: Nadie
Permisos: Acceder a contenidos asignados, jugar, ganar puntos, participar en competencias, ver sus logros
↓
🌍
NIVEL 1: USUARIO PÚBLICO
Quién: Cualquier persona (sin institución)
Aprueba a: Nadie
Permisos: Aprender por idioma, acceso libre a contenido público, sin niveles educativos
🔄 Flujo de Aprobación Escalonada
PASO 1: Estudiante descarga app
• Completa datos: nombre, apellido, email, teléfono, institución
• Estado: PENDIENTE
• No puede acceder hasta aprobación
↓
PASO 2: Educador recibe notificación
• Ve solicitud del estudiante en su dashboard
• Verifica que sea su alumno
• APRUEBA o RECHAZA
• Si aprueba → Estudiante estado: ACTIVO
↓
PASO 3: Educador descarga app
• Completa datos: nombre, institución, materia, nivel que enseña
• Estado: PENDIENTE
• No puede crear contenido hasta aprobación
↓
PASO 4: Supervisor (Coordinador/Director) recibe notificación
• Ve solicitud del educador
• Verifica que trabaje en la institución
• APRUEBA o RECHAZA
• Si aprueba → Educador estado: ACTIVO
↓
PASO 5: Supervisor descarga app
• Completa datos: nombre, cargo, institución
• Estado: PENDIENTE
• No puede acceder hasta aprobación
↓
PASO 6: KENDI ADMIN recibe notificación
• Ve solicitud del supervisor
• Verifica institución y cargo
• APRUEBA o RECHAZA
• Si aprueba → Supervisor estado: ACTIVO
✅ TODA LA CADENA VERIFICADA Y ACTIVA
🔐 SEGURIDAD: Este sistema escalonado garantiza que:
- Solo personas verificadas acceden
- No hay suplantación de identidad
- Cada nivel controla al nivel inferior
- KENDI tiene control final
🌎 SISTEMA POR PAÍS (JSON Dinámico)
💡 CONCEPTO: Al descargar la app, el usuario selecciona su país. El sistema carga el JSON de configuración específico de ese país con sus niveles educativos oficiales.
📍 Flujo de Selección de País
1. Usuario abre la app por primera vez
• Sistema detecta ubicación automáticamente (GPS/IP)
• Sugiere país detectado: "¿Estás en Paraguay?"
• Usuario confirma o cambia manualmente
↓
2. Sistema carga JSON del país
• Firebase: /config/paises/paraguay.json
• Contiene: niveles educativos, materias, idiomas oficiales
• Cache local para offline
↓
3. Usuario selecciona modo
• Opción A: "Soy Educador/Alumno" → Modo Educativo
• Opción B: "Aprender por mi cuenta" → Modo Público (Idiomas)
↓
4. Sistema personaliza experiencia
• Modo Educativo: Muestra niveles del país (Ej: Paraguay: Maternal, Preescolar, 1ro-6to, etc.)
• Modo Público: Muestra idiomas (Guaraní, Español, Portugués, Inglés)
🗂️ Estructura de JSON por País
| PAÍS |
NIVELES EDUCATIVOS |
IDIOMAS OFICIALES |
ARCHIVO |
| 🇵🇾 Paraguay |
Maternal, Prejardín, Jardín, Preescolar, 1ro-6to, 7mo-9no, Media |
Español, Guaraní |
paraguay.json |
| 🇧🇴 Bolivia |
Inicial, Primaria (1ro-6to), Secundaria (1ro-6to) |
Español, Quechua, Aymara |
bolivia.json |
| 🇦🇷 Argentina |
Inicial, Primaria (1ro-7mo), Secundaria (1ro-6to) |
Español |
argentina.json |
| 🇧🇷 Brasil |
Educação Infantil, Fundamental I (1o-5o), Fundamental II (6o-9o), Médio |
Portugués |
brasil.json |
| 🇺🇾 Uruguay |
Inicial, Primaria (1ro-6to), Secundaria (1ro-6to) |
Español |
uruguay.json |
📋 Ejemplo: paraguay.json
{
"pais": "Paraguay",
"codigo": "PY",
"idiomasOficiales": ["español", "guarani"],
"moneda": "PYG",
"modoEducativo": {
"niveles": {
"maternal": {
"nombre": "Maternal (0-2 años)",
"edadMin": 0,
"edadMax": 2,
"materias": ["Estimulación Temprana", "Motricidad", "Lenguaje"],
"tiposContenido": ["slider", "trivia_ruleta_2caras", "colorear"],
"configuracion": { /* configuración específica */ }
},
"prejardin": {
"nombre": "Prejardín (2-3 años)",
"edadMin": 2,
"edadMax": 3,
"materias": ["Números", "Colores", "Formas", "Lenguaje"],
"tiposContenido": ["slider", "trivia_ruleta_3caras", "colorear", "trazar"],
"configuracion": { /* configuración específica */ }
},
"primer_grado": {
"nombre": "Primer Grado (6-7 años)",
"edadMin": 6,
"edadMax": 7,
"materias": [
"Matemáticas",
"Comunicación",
"Ciencias Naturales",
"Ciencias Sociales",
"Guaraní"
],
"tiposContenido": [
"trivia_ruleta_6caras",
"slider",
"drag_drop",
"memoria",
"trivia_simple",
"informativo",
"video"
],
"configuracion": { /* configuración específica */ }
}
// ... más niveles
}
},
"modoPublico": {
"idiomas": [
{
"codigo": "guarani",
"nombre": "Guaraní",
"nativo": "Avañe'ẽ",
"icono": "🇵🇾"
},
{
"codigo": "español",
"nombre": "Español",
"nativo": "Español",
"icono": "🇪🇸"
},
{
"codigo": "portugues",
"nombre": "Portugués",
"nativo": "Português",
"icono": "🇧🇷"
},
{
"codigo": "ingles",
"nombre": "Inglés",
"nativo": "English",
"icono": "🇬🇧"
}
]
}
}
✅ VENTAJAS DEL SISTEMA POR PAÍS:
- Escalabilidad: Agregar nuevo país = agregar un JSON
- Personalización: Cada país tiene su estructura educativa real
- Flexibilidad: Fácil actualizar niveles o materias por país
- Offline: JSON en cache, funciona sin internet
🏆 SISTEMA DE COMPETENCIAS
| TIPO |
QUIÉN CREA |
PARTICIPANTES |
ALCANCE |
| 🎯 Competencia de Clase |
Educador |
Alumnos de su clase (parejas) |
Solo su clase |
| 🏫 Competencia Institucional |
Director/Coordinador |
Alumnos de la institución (por nivel) |
Toda la institución |
| 🌎 Competencia Nacional |
MEC/KENDI Admin |
Alumnos de todo el país (por nivel) |
Nacional |
| 🌍 Competencia Regional |
KENDI Admin |
Alumnos de varios países |
Regional/Continental |
🎮 Competencia de Clase (Educador)
1. Educador crea competencia
• Selecciona materia: "Matemáticas"
• Selecciona tema: "Sumas Básicas"
• Selecciona banco de preguntas
• Define duración: 7 días
↓
2. Educador hace las parejas
• Alumno A vs Alumno B
• Alumno C vs Alumno D
• ... todos los alumnos
• Sistema puede sugerir parejas por nivel similar
↓
3. Competencia inicia
• Alumnos reciben notificación
• Ven a su rival en dashboard
• Juegan y ganan puntos
• Tabla de posiciones en vivo
↓
4. Competencia termina
• Sistema calcula ganador de cada pareja
• Ganadores reciben insignia
• Educador ve resultados completos
• Estadísticas guardadas
🏆 Competencia Nacional (Supervisor)
💡 EJEMPLO: MEC crea "Olimpiada Nacional de Matemáticas - Primer Grado"
Participantes: TODOS los alumnos de Primer Grado de Paraguay
Duración: 1 mes
Banco: 50 preguntas de matemáticas oficiales
Premio: Top 10 reciben certificado digital del MEC
Impacto: 100,000+ alumnos compitiendo al mismo tiempo = VIRAL 🔥
🗄️ ESTRUCTURA FIRESTORE COMPLETA
FIRESTORE DATABASE
│
├── users/
│ ├── {userId}
│ │ ├── role: "alumno" | "educador" | "supervisor" | "kendi_admin"
│ │ ├── status: "pendiente" | "activo" | "rechazado" | "suspendido"
│ │ ├── pais: "paraguay"
│ │ ├── institucionId: "inst_001"
│ │ ├── nivel: "primer_grado" (si es alumno)
│ │ ├── materias: ["matematicas", "lenguaje"] (si es educador)
│ │ ├── aprobadoPor: "userId_educador" (si es alumno)
│ │ ├── fechaAprobacion: timestamp
│ │ ├── puntosTotales: 1500
│ │ └── logros: []
│
├── instituciones/
│ ├── {institucionId}
│ │ ├── nombre: "Colegio San José"
│ │ ├── tipo: "publico" | "privado"
│ │ ├── pais: "paraguay"
│ │ ├── ciudad: "Asunción"
│ │ ├── modeloPago: "gratuito" | "por_alumno" | "licencia"
│ │ ├── patrocinador: "itaipu" (si aplica)
│ │ ├── cantidadAlumnos: 350
│ │ └── supervisorId: "userId"
│
├── config_paises/
│ ├── {paisId} (ej: "paraguay")
│ │ ├── nombre: "Paraguay"
│ │ ├── codigo: "PY"
│ │ ├── nivelesEducativos: { /* JSON completo */ }
│ │ ├── idiomas: ["español", "guarani"]
│ │ └── ultimaActualizacion: timestamp
│
├── menus/
│ ├── {menuId}
│ │ ├── nombre: "Matemáticas"
│ │ ├── nivel: "primer_grado"
│ │ ├── pais: "paraguay"
│ │ ├── isPublico: false
│ │ ├── createdBy: "userId_educador"
│ │ └── order: 1
│
├── submenus/
│ ├── {submenuId}
│ │ ├── menuId: "menu_001"
│ │ ├── nombre: "Sumas Básicas"
│ │ └── order: 1
│
├── content_banks/
│ ├── {bankId}
│ │ ├── nombre: "Sumas del 1 al 5"
│ │ ├── nivel: "primer_grado"
│ │ ├── pais: "paraguay"
│ │ ├── contentType: "trivia_ruleta"
│ │ ├── tipoRuleta: "6_caras"
│ │ ├── data: { /* preguntas, slides, etc */ }
│ │ ├── createdBy: "userId_educador"
│ │ └── asociado: true | false
│
├── content_associations/
│ ├── {associationId}
│ │ ├── submenuId: "submenu_001"
│ │ ├── bankIds: ["bank_001", "bank_002"]
│ │ └── order: [1, 2]
│
├── competencias/
│ ├── {competenciaId}
│ │ ├── tipo: "clase" | "institucional" | "nacional"
│ │ ├── nombre: "Olimpiada de Matemáticas"
│ │ ├── nivel: "primer_grado"
│ │ ├── materia: "matematicas"
│ │ ├── bankId: "bank_001"
│ │ ├── fechaInicio: timestamp
│ │ ├── fechaFin: timestamp
│ │ ├── createdBy: "userId_supervisor"
│ │ ├── alcance: "nacional" | "institucional" | "clase"
│ │ ├── participantes: ["userId1", "userId2", ...]
│ │ ├── parejas: [
│ │ │ { alumno1: "userId1", alumno2: "userId2" },
│ │ │ ...
│ │ │ ]
│ │ └── resultados: {
│ │ "userId1": { puntos: 150, posicion: 1 },
│ │ "userId2": { puntos: 140, posicion: 2 }
│ │ }
│
├── aprobaciones/
│ ├── {aprobacionId}
│ │ ├── usuarioId: "userId_pendiente"
│ │ ├── tipo: "alumno" | "educador" | "supervisor"
│ │ ├── status: "pendiente" | "aprobado" | "rechazado"
│ │ ├── aprobadorId: "userId_aprobador"
│ │ ├── fechaSolicitud: timestamp
│ │ └── fechaRespuesta: timestamp
│
└── estadisticas/
├── global/
│ ├── totalUsuarios: 1000000
│ ├── totalAlumnos: 800000
│ ├── totalEducadores: 50000
│ └── puntosPromedioNacional: 1200
│
└── por_usuario/
├── {userId}
│ ├── puntosGanados: 1500
│ ├── actividadesCompletadas: 45
│ ├── tiempoTotal: 15000 (segundos)
│ ├── mejorMateria: "matematicas"
│ └── rachaActual: 7 (días)