Documento técnico público

Arquitectura del Método Glocal

Visualización de toda la infraestructura de datos propuesta para el MVP: dominios, tablas, reglas de seguridad y cómo cada cláusula del contrato se mapea a la base de datos.

MVPPWAContrato Feb 202612 semanas
29
Tablas
9
Dominios
5
Roles

Línea de tiempo del contrato

3 fases · 12 semanas

Fase 1

Diseño y Onboarding

Semanas 1–4

  • ·Auth + roles
  • ·Perfiles
  • ·Consentimiento parental
  • ·TRIAGE inicial
Fase 2

Desarrollo Core

Semanas 5–9

  • ·Contenido Historia 8°
  • ·Calendario adaptativo
  • ·Geolocalización
  • ·Match grupos
  • ·Gamificación
Fase 3

Lanzamiento y IA

Semanas 10–12

  • ·Asistente IA
  • ·QR
  • ·Panel admin
  • ·Pulido y QA

Esquema completo (ER)

Diagrama entidad-relación de todas las tablas y sus llaves foráneas.

Cargando diagrama…

Identidad y consentimiento

Cuentas, perfiles y permisos parentales para menores.

profiles

Datos personales asociados a cada cuenta de auth.users.

ColumnaTipoPropósito
idPKFKuuidFK a auth.users
first_nametextNombre
last_nametextApellido
emailtextCorreo de contacto
phonetextTeléfono opcional
avatar_urltextImagen de perfil
Estudiante:SELECTUPDATE
Profesor:SELECT
Admin:SELECTUPDATE

user_roles

Asignación de roles (student / teacher / admin) — separado de profiles para evitar escalada.

ColumnaTipoPropósito
idPKuuidPK
user_idFKuuidUsuario
roleapp_roleRol asignado
Estudiante:SELECT
Profesor:SELECT
Admin:SELECTINSERTUPDATEDELETE

student_profiles

Datos académicos del estudiante: curso, colegio, fecha de nacimiento.

ColumnaTipoPropósito
user_idPKFKuuidEstudiante
gradetextCurso (ej. 8° básico)
schooltextColegio
birthdatedateFecha de nacimiento
Estudiante:SELECTUPDATE
Profesor:SELECT
Admin:SELECTUPDATE
Apoderado:SELECT

teacher_profiles

Datos profesionales del profesor / tutor.

ColumnaTipoPropósito
user_idPKFKuuidProfesor
specialtytextÁrea principal
biotextBiografía corta
Estudiante:SELECT
Profesor:SELECTUPDATE
Admin:SELECTUPDATE

guardians

Apoderados vinculados a un estudiante menor de edad.

ColumnaTipoPropósito
idPKuuidPK
guardian_user_idFKuuidApoderado
student_user_idFKuuidEstudiante
relationshiptextVínculo (madre/padre/tutor)
Admin:SELECTINSERTUPDATEDELETE
Apoderado:SELECT

parental_consents

Consentimientos firmados por el apoderado: datos, geolocalización, imagen.

ColumnaTipoPropósito
idPKuuidPK
student_user_idFKuuidEstudiante
guardian_idFKuuidApoderado que firma
scopetextdata | geo | image | ai
granted_attimestamptzFecha de firma
document_urltextPDF firmado en Storage
Admin:SELECTUPDATEDELETE
Apoderado:SELECTINSERT
  • Bloquea operaciones sensibles si el scope requerido no está activo

Onboarding TRIAGE

Diagnóstico inicial y perfil de aprendizaje personalizado.

triage_questions

Banco de preguntas del diagnóstico inicial.

ColumnaTipoPropósito
idPKuuidPK
categorytextintereses / estilo / nivel
prompttextTexto de la pregunta
optionsjsonbAlternativas
Estudiante:SELECT
Profesor:SELECT
Admin:SELECTINSERTUPDATEDELETE
Anónimo:SELECT

triage_responses

Respuestas de cada estudiante al TRIAGE.

ColumnaTipoPropósito
idPKuuidPK
student_user_idFKuuidEstudiante
question_idFKuuidPregunta
answerjsonbRespuesta seleccionada
Estudiante:SELECTINSERT
Profesor:SELECT
Admin:SELECT

learner_profiles

Perfil derivado del TRIAGE: estilo de aprendizaje, intereses, nivel.

ColumnaTipoPropósito
user_idPKFKuuidEstudiante
learning_styletextvisual / auditivo / kinestésico
intereststext[]Áreas de interés
levelintNivel inicial
Estudiante:SELECT
Profesor:SELECT
Admin:SELECTUPDATE

Contenido educativo

Asignaturas, cursos, unidades y lecciones (Historia 8°).

subjects

Asignaturas (MVP: Historia 8° básico).

ColumnaTipoPropósito
idPKuuidPK
nametextNombre
gradetextCurso objetivo
Estudiante:SELECT
Profesor:SELECT
Admin:SELECTINSERTUPDATEDELETE
Anónimo:SELECT

courses

Cursos por asignatura.

ColumnaTipoPropósito
idPKuuidPK
subject_idFKuuidAsignatura
titletextTítulo
Estudiante:SELECT
Profesor:SELECT
Admin:SELECTINSERTUPDATEDELETE

units

Unidades dentro de un curso.

ColumnaTipoPropósito
idPKuuidPK
course_idFKuuidCurso
titletextTítulo
orderintOrden
Estudiante:SELECT
Profesor:SELECT
Admin:SELECTINSERTUPDATEDELETE

lessons

Lecciones con material multimedia.

ColumnaTipoPropósito
idPKuuidPK
unit_idFKuuidUnidad
titletextTítulo
bodyjsonbContenido enriquecido
media_urltextRecurso en Storage
Estudiante:SELECT
Profesor:SELECT
Admin:SELECTINSERTUPDATEDELETE

lesson_progress

Avance por lección de cada estudiante.

ColumnaTipoPropósito
idPKuuidPK
student_user_idFKuuidEstudiante
lesson_idFKuuidLección
statustextstarted / completed
scoreintResultado
Estudiante:SELECTINSERTUPDATE
Profesor:SELECT
Admin:SELECT

Calendario adaptativo

Rutas y planificación semanal generada por la plataforma.

learning_paths

Ruta personalizada generada para cada estudiante.

ColumnaTipoPropósito
idPKuuidPK
student_user_idFKuuidEstudiante
course_idFKuuidCurso
generated_attimestamptzFecha de generación
Estudiante:SELECT
Profesor:SELECT
Admin:SELECTINSERTUPDATEDELETE

calendar_events

Bloques de estudio y actividades en el calendario semanal.

ColumnaTipoPropósito
idPKuuidPK
path_idFKuuidRuta
lesson_idFKuuidLección opcional
starts_attimestamptzInicio
ends_attimestamptzFin
kindtextstudy / activity / group
Estudiante:SELECTUPDATE
Profesor:SELECT
Admin:SELECTINSERTUPDATEDELETE

Geolocalización

Ubicación segura y actividades físicas comunitarias.

student_locations

Última ubicación conocida — solo si hay consentimiento parental activo.

ColumnaTipoPropósito
idPKuuidPK
student_user_idFKuuidEstudiante
latdoubleLatitud
lngdoubleLongitud
accuracy_mintPrecisión en metros
captured_attimestamptzCaptura
Estudiante:SELECTINSERT
Admin:SELECT
Apoderado:SELECT
  • Bloquea INSERT si no existe parental_consent con scope='geo' activo

physical_activities

Actividades comunitarias presenciales (caminatas, terreno).

ColumnaTipoPropósito
idPKuuidPK
titletextNombre
latdoubleLatitud
lngdoubleLongitud
starts_attimestamptzInicio
created_byFKuuidProfesor creador
Estudiante:SELECT
Profesor:SELECTINSERTUPDATE
Admin:SELECTINSERTUPDATEDELETE

Match y grupos

Grupos de hasta 7 estudiantes con tutor asignado.

learning_groups

Grupos de hasta 7 estudiantes con un tutor.

ColumnaTipoPropósito
idPKuuidPK
nametextNombre del grupo
tutor_user_idFKuuidTutor
course_idFKuuidCurso
Estudiante:SELECT
Profesor:SELECTINSERTUPDATE
Admin:SELECTINSERTUPDATEDELETE

group_members

Miembros del grupo (máx 7 por trigger).

ColumnaTipoPropósito
idPKuuidPK
group_idFKuuidGrupo
student_user_idFKuuidEstudiante
joined_attimestamptzIngreso
Estudiante:SELECT
Profesor:SELECTINSERTDELETE
Admin:SELECTINSERTUPDATEDELETE
  • Trigger: rechaza inserción si el grupo ya tiene 7 miembros

Gamificación

Logros, puntos y rachas para motivar el avance.

achievements

Catálogo de logros disponibles.

ColumnaTipoPropósito
idPKuuidPK
codetextIdentificador
titletextNombre
pointsintPuntos otorgados
Estudiante:SELECT
Profesor:SELECT
Admin:SELECTINSERTUPDATEDELETE

user_achievements

Logros desbloqueados por estudiante.

ColumnaTipoPropósito
idPKuuidPK
user_idFKuuidEstudiante
achievement_idFKuuidLogro
unlocked_attimestamptzFecha
Estudiante:SELECT
Profesor:SELECT
Admin:SELECTINSERT

points_ledger

Registro append-only de puntos ganados.

ColumnaTipoPropósito
idPKuuidPK
user_idFKuuidEstudiante
deltaintVariación de puntos
reasontextMotivo
Estudiante:SELECT
Profesor:SELECT
Admin:SELECTINSERT

streaks

Rachas de actividad diaria.

ColumnaTipoPropósito
user_idPKFKuuidEstudiante
currentintDías seguidos
bestintMejor racha
Estudiante:SELECT
Profesor:SELECT
Admin:SELECT

Supervisión

Vista de profesor y panel de administración.

teacher_observations

Notas de seguimiento del profesor sobre un estudiante.

ColumnaTipoPropósito
idPKuuidPK
teacher_user_idFKuuidProfesor
student_user_idFKuuidEstudiante
notetextObservación
Profesor:SELECTINSERTUPDATEDELETE
Admin:SELECT

audit_log

Bitácora de acciones sensibles para auditoría.

ColumnaTipoPropósito
idPKuuidPK
actor_user_idFKuuidQuién
actiontextAcción
targettextRecurso afectado
attimestamptzCuándo
Admin:SELECT

Herramientas

QR, asistente IA y notificaciones.

qr_codes

Códigos QR generados para acceso rápido o inscripción.

ColumnaTipoPropósito
idPKuuidPK
codetextToken único
purposetextcheckin / invite / lesson
payloadjsonbDatos asociados
Estudiante:SELECT
Profesor:SELECTINSERT
Admin:SELECTINSERTUPDATEDELETE

ai_assistant_messages

Conversaciones con el asistente IA (texto / voz).

ColumnaTipoPropósito
idPKuuidPK
user_idFKuuidUsuario
roletextuser / assistant
contenttextMensaje
created_attimestamptzFecha
Estudiante:SELECTINSERT
Profesor:SELECTINSERT
Admin:SELECT

notifications

Notificaciones in-app para usuarios.

ColumnaTipoPropósito
idPKuuidPK
user_idFKuuidDestinatario
titletextTítulo
bodytextContenido
read_attimestamptzLectura
Estudiante:SELECTUPDATE
Profesor:SELECTUPDATE
Admin:SELECTINSERT

Matriz de seguridad (RLS)

Permisos por tabla y rol. Toda la base se protege con Row-Level Security en Postgres.

TablaEstudianteProfesorAdminApoderadoAnónimo
profiles
SELECTUPDATE
SELECT
SELECTUPDATE
user_roles
SELECT
SELECT
SELECTINSERTUPDATEDELETE
student_profiles
SELECTUPDATE
SELECT
SELECTUPDATE
SELECT
teacher_profiles
SELECT
SELECTUPDATE
SELECTUPDATE
guardians
SELECTINSERTUPDATEDELETE
SELECT
parental_consents
SELECTUPDATEDELETE
SELECTINSERT
triage_questions
SELECT
SELECT
SELECTINSERTUPDATEDELETE
SELECT
triage_responses
SELECTINSERT
SELECT
SELECT
learner_profiles
SELECT
SELECT
SELECTUPDATE
subjects
SELECT
SELECT
SELECTINSERTUPDATEDELETE
SELECT
courses
SELECT
SELECT
SELECTINSERTUPDATEDELETE
units
SELECT
SELECT
SELECTINSERTUPDATEDELETE
lessons
SELECT
SELECT
SELECTINSERTUPDATEDELETE
lesson_progress
SELECTINSERTUPDATE
SELECT
SELECT
learning_paths
SELECT
SELECT
SELECTINSERTUPDATEDELETE
calendar_events
SELECTUPDATE
SELECT
SELECTINSERTUPDATEDELETE
student_locations
SELECTINSERT
SELECT
SELECT
physical_activities
SELECT
SELECTINSERTUPDATE
SELECTINSERTUPDATEDELETE
learning_groups
SELECT
SELECTINSERTUPDATE
SELECTINSERTUPDATEDELETE
group_members
SELECT
SELECTINSERTDELETE
SELECTINSERTUPDATEDELETE
achievements
SELECT
SELECT
SELECTINSERTUPDATEDELETE
user_achievements
SELECT
SELECT
SELECTINSERT
points_ledger
SELECT
SELECT
SELECTINSERT
streaks
SELECT
SELECT
SELECT
teacher_observations
SELECTINSERTUPDATEDELETE
SELECT
audit_log
SELECT
qr_codes
SELECT
SELECTINSERT
SELECTINSERTUPDATEDELETE
ai_assistant_messages
SELECTINSERT
SELECTINSERT
SELECT
notifications
SELECTUPDATE
SELECTUPDATE
SELECTINSERT

Flujos clave

Tres recorridos críticos que recorren múltiples dominios.

Onboarding + consentimiento

Calendario adaptativo

Match por geolocalización

Stack técnico

Frontend

  • ·React 19
  • ·TanStack Start
  • ·Tailwind v4
  • ·shadcn/ui
  • ·Mermaid (diagramas)

Backend

  • ·Supabase Postgres
  • ·Row-Level Security
  • ·Realtime
  • ·Storage
  • ·Edge Functions

Integraciones

  • ·IA generativa pluggable
  • ·Mapas para geolocalización
  • ·Notificaciones in-app
  • ·QR rápido

Cumplimiento del contrato

Cada cláusula del contrato y las tablas que la soportan.

Cláusula / funcionalidadTablas que la implementan
Registro de estudiantes con consentimiento parental
TRIAGE de personalización al ingresar
Contenido de Historia 8° básico
Seguimiento de avance por lección
Calendario adaptativo personal
Geolocalización con permiso del apoderado
Actividades físicas comunitarias
Match de grupos de hasta 7 con tutor
Gamificación (logros, puntos, rachas)
Seguimiento del profesor por estudiante
Panel de administración con auditoría
QR para inscripción y check-in
Asistente IA (texto/voz)
Notificaciones a estudiantes y apoderados

¿Listo para conocer Glocal?

Esta es la base sobre la que construimos. Si eres parte del equipo o cliente, ingresa para ver el producto en acción.