docs: estado del proyecto 11 junio 2026
This commit is contained in:
@@ -1,114 +0,0 @@
|
|||||||
# ESTADO DEL PROYECTO — Datos País sobre el Cuidado
|
|
||||||
## Documento de continuidad — junio 2026 (actualización)
|
|
||||||
|
|
||||||
> Director: Marcos · Metodología: Maria Mersan · Contacto Fundación: Valeria Arce
|
|
||||||
> Última actualización: 10 junio 2026
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 1. URLs operativas
|
|
||||||
|
|
||||||
| Encuesta | URL |
|
|
||||||
|---|---|
|
|
||||||
| Demo (Empresa Demo) | https://economia-cuidado.inqualityhq.com/?s=30000000-0000-0000-0000-000000000001 |
|
|
||||||
| InQuality | https://economia-cuidado.inqualityhq.com/?s=30000000-0000-0000-0000-000000000002 |
|
|
||||||
| Fundación Solidaridad | https://economia-cuidado.inqualityhq.com/?s=30000000-0000-0000-0000-000000000003 |
|
|
||||||
| Control de respuestas | https://economia-cuidado.inqualityhq.com/admin/responses |
|
|
||||||
| Dashboard | https://economia-cuidado.inqualityhq.com/dashboard |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 2. Infraestructura — OPERATIVA ✅
|
|
||||||
|
|
||||||
- **App:** Next.js 15.3.3 + TypeScript + Tailwind CSS (⚠️ CVE-2025-66478 pendiente)
|
|
||||||
- **DB:** Supabase self-hosted en Dokploy v0.29.4
|
|
||||||
- **VPS:** inq-mart-2, IP VPN: 172.20.5.11
|
|
||||||
- **Repos:**
|
|
||||||
- App: `git.inquality.com.py/marcos/motor-de-encuestas` (rama main)
|
|
||||||
- Supabase stack: `git.inquality.com.py/marcos/supabase-motor-fomularios` (rama master)
|
|
||||||
- **API Supabase:** https://db.inqualityhq.com (Kong + SSL)
|
|
||||||
- **Backups:** `/var/backups/supabase-prod/`, cron 3AM, retención GFS (3 días diarios + domingos 14 días)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 3. Instrumento — v2.1 ACTIVO
|
|
||||||
|
|
||||||
- **44 preguntas**, 8 secciones
|
|
||||||
- **Salto triple:** 1.1=No AND 1.6=No AND 1.13=No → salta a 6.4
|
|
||||||
- **Nueva pregunta 6.6:** "¿Estarías dispuesto/a a ser voluntario/a en iniciativas y/o redes de apoyo?"
|
|
||||||
- **2.4 eliminada** (similar a 2.1)
|
|
||||||
- **2.1 → multiple_choice** (TECH-DEBT: falta ranking de prioridad)
|
|
||||||
- "Prefiero no decir" eliminado de todas las preguntas
|
|
||||||
- Hint "Podés marcar más de una opción" en todas las multiple_choice
|
|
||||||
- "Tecnología asistiva" agregada en 1.3 y 1.10 (penúltima posición)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 4. DB — estado actual
|
|
||||||
|
|
||||||
| Tabla | Filas |
|
|
||||||
|---|---|
|
|
||||||
| organizations | 3 (Empresa Demo, InQuality, Fundación Solidaridad) |
|
|
||||||
| surveys | 3 (una por organización) |
|
|
||||||
| questions | 132 (44 × 3 surveys) |
|
|
||||||
| responses | 3 (todas de prueba) |
|
|
||||||
| answers | 97 (de prueba) |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 5. Vista de control /admin/responses
|
|
||||||
|
|
||||||
- Tabla plana: una fila por answer, agrupada por submission
|
|
||||||
- Excluye: `text_long`, `is_sensitive=true`, `3.4` (salary)
|
|
||||||
- Sin auth — URL no publicada (TECH-DEBT-008)
|
|
||||||
- **Pendiente:** contraer/expandir por submission + eliminar columna Tipo
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 6. Deuda técnica abierta
|
|
||||||
|
|
||||||
| ID | Descripción | Bloqueante |
|
|
||||||
|---|---|---|
|
|
||||||
| TECH-DEBT-006 | Backup remoto S3 | **SÍ — antes del primer dato real** |
|
|
||||||
| TECH-DEBT-007 | auth.jwt() deprecado en GoTrue v2.189+ | No (piloto) |
|
|
||||||
| TECH-DEBT-008 | /admin/responses sin auth | No (URL no publicada) |
|
|
||||||
| CVE-2025-66478 | Next.js 15.3.3 con vulnerabilidad crítica | **SÍ — antes del primer dato real** |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 7. Pendientes inmediatos (en orden)
|
|
||||||
|
|
||||||
1. **CVE-2025-66478** — actualizar Next.js (bloqueante antes del primer dato real)
|
|
||||||
2. **TECH-DEBT-006** — backup remoto S3 (bloqueante antes del primer dato real)
|
|
||||||
3. **Etapa 2G** — cierre Sprint 2: C.8, AP.10, AP.11 en el método
|
|
||||||
4. **Admin/responses** — contraer/expandir + eliminar columna Tipo
|
|
||||||
5. **RE Index** — confirmar mapeo G1/G2/G4/G5 → códigos seed antes de implementar
|
|
||||||
6. **Informe descargable** — prometido en deck comercial
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 8. Decisiones tomadas — no reabrir
|
|
||||||
|
|
||||||
1. Supabase en Dokploy siempre via modo Git (no docker raw)
|
|
||||||
2. POSTGRES_PASSWORD siempre con `openssl rand -hex`
|
|
||||||
3. kong.yml: una sola entrada por bloque keyauth_credentials
|
|
||||||
4. SMTP_PORT=587 siempre explícito aunque SMTP esté desactivado
|
|
||||||
5. GOTRUE_EXTERNAL_ANONYMOUS_USERS_ENABLED=false siempre explícito
|
|
||||||
6. LUA_AUTH_EXPR con prefijo "Bearer " en kong-entrypoint.sh rama legacy
|
|
||||||
7. NEXT_PUBLIC_SUPABASE_URL via Build Argument en Dokploy
|
|
||||||
8. App Next.js conecta a https://db.inqualityhq.com (URL pública)
|
|
||||||
9. /admin/responses no muestra is_sensitive=true hasta tener auth (TECH-DEBT-008)
|
|
||||||
10. brand_config.org_name es el campo que alimenta el nombre de empresa en el formulario
|
|
||||||
11. Organizaciones separadas para cada encuesta (InQuality y Fundación Solidaridad)
|
|
||||||
12. conditional_rules referencian códigos de pregunta, no UUIDs
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 9. Contexto comercial
|
|
||||||
|
|
||||||
- 2 empresas comprometidas para piloto
|
|
||||||
- Cronograma: JUN inicio · JUL-AGO relevamiento · SEP análisis · OCT informe + evento
|
|
||||||
- Meta: 20 empresas pioneras
|
|
||||||
- Precios: Gs. 4.5M (≤50) · 7.5M (≤200) · 12M (≤400)
|
|
||||||
- GAPs deck vs producto: RE Index no implementado, informe descargable no existe
|
|
||||||
- Contacto Fundación: Valeria Arce — ddff@fundacionsolidaridad.org.py · +595 991 854333
|
|
||||||
155
docs/estado/ESTADO_PROYECTO_JUNIO_2026.md
Normal file
155
docs/estado/ESTADO_PROYECTO_JUNIO_2026.md
Normal file
@@ -0,0 +1,155 @@
|
|||||||
|
# ESTADO DEL PROYECTO — Datos País sobre el Cuidado
|
||||||
|
## Documento de continuidad — 11 junio 2026
|
||||||
|
|
||||||
|
> Director: Marcos · Metodología: Maria Mersan · Contacto Fundación: Valeria Arce
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. URLs operativas
|
||||||
|
|
||||||
|
| Recurso | URL |
|
||||||
|
|---|---|
|
||||||
|
| Formulario Demo | https://economia-cuidado.inqualityhq.com/?s=30000000-0000-0000-0000-000000000001 |
|
||||||
|
| Formulario InQuality | https://economia-cuidado.inqualityhq.com/?s=30000000-0000-0000-0000-000000000002 |
|
||||||
|
| Formulario Fundación Solidaridad | https://economia-cuidado.inqualityhq.com/?s=30000000-0000-0000-0000-000000000003 |
|
||||||
|
| Dashboard — Todos | https://economia-cuidado.inqualityhq.com/dashboard?survey_id=00000000-0000-0000-0000-000000000000 |
|
||||||
|
| Dashboard — InQuality | https://economia-cuidado.inqualityhq.com/dashboard?survey_id=30000000-0000-0000-0000-000000000002 |
|
||||||
|
| Dashboard — Fundación Solidaridad | https://economia-cuidado.inqualityhq.com/dashboard?survey_id=30000000-0000-0000-0000-000000000003 |
|
||||||
|
| Dashboard — Demo | https://economia-cuidado.inqualityhq.com/dashboard?survey_id=30000000-0000-0000-0000-000000000001 |
|
||||||
|
| Control de respuestas | https://economia-cuidado.inqualityhq.com/admin/responses |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Infraestructura — OPERATIVA ✅
|
||||||
|
|
||||||
|
- **App:** Next.js 15.3.8 (CVE-2025-66478 resuelto ✅)
|
||||||
|
- **DB:** Supabase self-hosted en Dokploy v0.29.4
|
||||||
|
- **VPS:** inq-mart-2, IP VPN: 172.20.5.11
|
||||||
|
- **Repos:**
|
||||||
|
- App: `git.inquality.com.py/marcos/motor-de-encuestas` (rama main)
|
||||||
|
- Supabase stack: `git.inquality.com.py/marcos/supabase-motor-fomularios` (rama master)
|
||||||
|
- **API Supabase:** https://db.inqualityhq.com (Kong + SSL)
|
||||||
|
- **Backups:** `/var/backups/supabase-prod/`, cron 3AM, GFS (3 días diarios + domingos 14 días)
|
||||||
|
- **Studio:** solo vía SSH tunnel → `ssh -L 3001:localhost:3001 administrator@172.20.5.11`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Instrumento — v2.1 ACTIVO
|
||||||
|
|
||||||
|
- **44 preguntas**, 8 secciones
|
||||||
|
- **Salto triple:** 1.1=No AND 1.6=No AND 1.13=No → salta a 6.4 (validado con datos reales ✅)
|
||||||
|
- **Nueva pregunta 6.6:** voluntariado en redes de apoyo (Sí/No/Tal vez)
|
||||||
|
- **2.4 eliminada**, **2.1 → multiple_choice**
|
||||||
|
- "Prefiero no decir" eliminado de todas las preguntas
|
||||||
|
- Hint "Podés marcar más de una opción" en todas las multiple_choice
|
||||||
|
- "Tecnología asistiva" en 1.3 y 1.10
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. DB — estado actual
|
||||||
|
|
||||||
|
| Tabla | Filas |
|
||||||
|
|---|---|
|
||||||
|
| organizations | 3 (Empresa Demo, InQuality, Fundación Solidaridad) |
|
||||||
|
| surveys | 3 (una por organización) |
|
||||||
|
| questions | 132 (44 × 3 surveys) |
|
||||||
|
| responses | 15 (8 InQuality + 7 Demo — todas de prueba) |
|
||||||
|
| answers | ~500 (estimado) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Dashboard — multitenante operativo ✅
|
||||||
|
|
||||||
|
- Selector de empresa en el header: Todos / InQuality / Fundación Solidaridad / Demo
|
||||||
|
- "Todos" usa UUID especial `00000000-0000-0000-0000-000000000000` → pool agregado
|
||||||
|
- Implementado via flag en `_dash_responses` (migración `20260611000001`)
|
||||||
|
- Validado visualmente con n=15: KPIs, heatmap departamental, perfil población ✅
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Vista de control /admin/responses
|
||||||
|
|
||||||
|
- Tabla plana: una fila por answer, agrupada por submission
|
||||||
|
- Colapsar/expandir por submission (Client Component island)
|
||||||
|
- Excluye: `text_long`, `is_sensitive=true` (TECH-DEBT-008 — sin auth)
|
||||||
|
- Sin columna "Tipo"
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Método — Sprint 2 cerrado ✅
|
||||||
|
|
||||||
|
- `method/PATTERNS.md` y `method/ANTI_PATTERNS.md` creados en el repo
|
||||||
|
- C.8 promovido a estable con casos reales del proyecto
|
||||||
|
- AP.10 y AP.11 documentados con casos reales
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. Deuda técnica abierta
|
||||||
|
|
||||||
|
| ID | Descripción | Bloqueante |
|
||||||
|
|---|---|---|
|
||||||
|
| TECH-DEBT-006 | Backup remoto S3 | SÍ — antes del primer dato real |
|
||||||
|
| TECH-DEBT-007 | auth.jwt() deprecado en GoTrue v2.189+ | No (piloto) |
|
||||||
|
| TECH-DEBT-008 | /admin/responses sin auth | No (URL no publicada) |
|
||||||
|
| TECH-DEBT-009 | Rotar secrets Supabase post-CVE-2025-66478 | SÍ — antes del primer dato real |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. Pendientes próxima sesión
|
||||||
|
|
||||||
|
1. TECH-DEBT-006 — backup remoto S3
|
||||||
|
2. TECH-DEBT-009 — rotar secrets Supabase
|
||||||
|
3. RE Index — confirmar mapeo G1/G2/G4/G5 → códigos seed con Marcos
|
||||||
|
4. Informe descargable — prometido en deck comercial
|
||||||
|
5. Onboarding empresas reales — cuando validación esté lista
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 10. Decisiones tomadas — no reabrir
|
||||||
|
|
||||||
|
1. Supabase en Dokploy siempre via modo Git
|
||||||
|
2. POSTGRES_PASSWORD siempre con `openssl rand -hex`
|
||||||
|
3. kong.yml: una sola entrada por bloque keyauth_credentials
|
||||||
|
4. SMTP_PORT=587 siempre explícito aunque SMTP esté desactivado
|
||||||
|
5. GOTRUE_EXTERNAL_ANONYMOUS_USERS_ENABLED=false siempre explícito
|
||||||
|
6. LUA_AUTH_EXPR con prefijo "Bearer " en kong-entrypoint.sh
|
||||||
|
7. NEXT_PUBLIC_SUPABASE_URL via Build Argument en Dokploy
|
||||||
|
8. App conecta a https://db.inqualityhq.com
|
||||||
|
9. /admin/responses no muestra is_sensitive=true sin auth (TECH-DEBT-008)
|
||||||
|
10. brand_config.org_name alimenta el nombre de empresa en el formulario
|
||||||
|
11. Organizaciones separadas para cada encuesta
|
||||||
|
12. conditional_rules referencian códigos de pregunta, no UUIDs
|
||||||
|
13. UUID cero `00000000-...` es el flag p_all del dashboard
|
||||||
|
14. Next.js pinneado a versión exacta `15.3.8` (sin caret)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 11. Contexto comercial
|
||||||
|
|
||||||
|
- 2 empresas comprometidas para piloto (InQuality y Fundación Solidaridad en espacio de pruebas)
|
||||||
|
- Cronograma: JUN inicio · JUL-AGO relevamiento · SEP análisis · OCT informe + evento
|
||||||
|
- Meta: 20 empresas pioneras
|
||||||
|
- Precios: Gs. 4.5M (≤50) · 7.5M (≤200) · 12M (≤400)
|
||||||
|
- GAPs deck vs producto: RE Index no implementado, informe descargable no existe
|
||||||
|
- Contacto Fundación: Valeria Arce — ddff@fundacionsolidaridad.org.py · +595 991 854333
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 12. Prompt para nueva sesión
|
||||||
|
|
||||||
|
Pegá al inicio de la nueva conversación:
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Sos el copiloto técnico del proyecto "Datos País sobre el Cuidado" — plataforma soberana
|
||||||
|
de encuestas sobre economía del cuidado en Paraguay. Tenemos múltiples sesiones de trabajo.
|
||||||
|
|
||||||
|
Stack: Next.js 15.3.8 + Supabase self-hosted + Dokploy v0.29.4.
|
||||||
|
URL: https://economia-cuidado.inqualityhq.com
|
||||||
|
Repos en Gitea: git.inquality.com.py/marcos/
|
||||||
|
|
||||||
|
El estado completo está en `docs/estado/ESTADO_PROYECTO_JUNIO_2026.md` en el repo.
|
||||||
|
Los prompts de etapas pasadas están en `sprints/`.
|
||||||
|
Las reglas no negociables están en `CLAUDE.md`.
|
||||||
|
|
||||||
|
Próximos pasos: [COMPLETAR CON LO QUE VAS A HACER]
|
||||||
124
sprints/sprint-3-instrumento/ETAPA_3ALL_PROMPT.md
Normal file
124
sprints/sprint-3-instrumento/ETAPA_3ALL_PROMPT.md
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
# ETAPA 3ALL — Flag p_all en el dashboard (vista agregada de todos los surveys)
|
||||||
|
|
||||||
|
## 1. Objetivo
|
||||||
|
Permitir que el dashboard muestre datos de TODOS los surveys mezclados, usando un
|
||||||
|
UUID especial como flag. Cambio mínimo — solo toca `_dash_responses` y el frontend.
|
||||||
|
Las 11 RPCs no se modifican.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Contexto previo
|
||||||
|
- `_dash_responses(p_survey_id uuid, ...)` es la función base que usan las 11 RPCs.
|
||||||
|
- Todas las RPCs pasan `p_survey_id` a `_dash_responses`.
|
||||||
|
- El dashboard lee `?survey_id=UUID` de la URL y lo pasa a `/api/dashboard/[widget]`.
|
||||||
|
- `route.ts` requiere `survey_id` en la query string (400 si falta).
|
||||||
|
|
||||||
|
## 3. DECISIONES YA TOMADAS — no consultar de nuevo
|
||||||
|
- UUID especial para "todos": `00000000-0000-0000-0000-000000000000` (UUID cero).
|
||||||
|
No puede existir como survey real. Es el flag `p_all`.
|
||||||
|
- Implementación en `_dash_responses`: una sola línea cambia.
|
||||||
|
- Las 11 RPCs NO se tocan — el cambio es transparente para ellas.
|
||||||
|
- El cambio va en una NUEVA migración, no modifica las existentes.
|
||||||
|
- El k-anonimato sigue aplicando — el pool más grande solo beneficia la protección.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Cambios requeridos
|
||||||
|
|
||||||
|
### 4.1 Nueva migración SQL
|
||||||
|
Crear `supabase/migrations/20260611000001_dash_responses_all.sql`:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
-- Migración: agregar flag p_all a _dash_responses
|
||||||
|
-- UUID especial '00000000-0000-0000-0000-000000000000' = todos los surveys
|
||||||
|
CREATE OR REPLACE FUNCTION public._dash_responses(
|
||||||
|
p_survey_id uuid,
|
||||||
|
p_depto text DEFAULT NULL,
|
||||||
|
p_genero text[] DEFAULT NULL,
|
||||||
|
p_etario text[] DEFAULT NULL,
|
||||||
|
p_modalidad text[] DEFAULT NULL
|
||||||
|
)
|
||||||
|
RETURNS TABLE(response_id uuid)
|
||||||
|
LANGUAGE sql STABLE SECURITY DEFINER
|
||||||
|
SET search_path = public
|
||||||
|
AS $$
|
||||||
|
SELECT r.id
|
||||||
|
FROM public.responses r
|
||||||
|
WHERE (p_survey_id = '00000000-0000-0000-0000-000000000000'
|
||||||
|
OR r.survey_id = p_survey_id)
|
||||||
|
AND (p_depto IS NULL OR r.qi_zone = p_depto)
|
||||||
|
AND (p_genero IS NULL OR cardinality(p_genero) = 0 OR EXISTS (
|
||||||
|
SELECT 1 FROM public.answers a
|
||||||
|
JOIN public.questions q ON q.id = a.question_id
|
||||||
|
WHERE a.response_id = r.id AND q.code = 'A6'
|
||||||
|
AND a.value #>> '{}' = ANY(p_genero)
|
||||||
|
))
|
||||||
|
AND (p_etario IS NULL OR cardinality(p_etario) = 0
|
||||||
|
OR r.qi_age_bucket = ANY(p_etario))
|
||||||
|
AND (p_modalidad IS NULL OR cardinality(p_modalidad) = 0 OR EXISTS (
|
||||||
|
SELECT 1 FROM public.answers a
|
||||||
|
JOIN public.questions q ON q.id = a.question_id
|
||||||
|
WHERE a.response_id = r.id AND q.code = 'A7'
|
||||||
|
AND a.value #>> '{}' = ANY(p_modalidad)
|
||||||
|
));
|
||||||
|
$$;
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.2 route.ts — permitir el UUID especial
|
||||||
|
En `app/api/dashboard/[widget]/route.ts`, donde se valida `survey_id`:
|
||||||
|
El UUID cero debe pasar la validación existente — verificar si hay algún check
|
||||||
|
adicional que lo rechazaría (ej. validación de formato UUID o lookup en DB).
|
||||||
|
Si `route.ts` solo verifica presencia del parámetro (400 si falta), no hay
|
||||||
|
nada que cambiar. Reportar cuál es el caso.
|
||||||
|
|
||||||
|
### 4.3 dashboard/page.tsx — agregar link/selector "Todos"
|
||||||
|
Agregar en el header del dashboard un selector o links de navegación mínimo:
|
||||||
|
|
||||||
|
```
|
||||||
|
[ Todos ] [ InQuality ] [ Fundación Solidaridad ] [ Demo ]
|
||||||
|
```
|
||||||
|
|
||||||
|
Implementación sugerida: links `<a>` simples que navegan a:
|
||||||
|
- Todos: `/dashboard?survey_id=00000000-0000-0000-0000-000000000000`
|
||||||
|
- InQuality: `/dashboard?survey_id=30000000-0000-0000-0000-000000000002`
|
||||||
|
- Fundación Solidaridad: `/dashboard?survey_id=30000000-0000-0000-0000-000000000003`
|
||||||
|
- Demo: `/dashboard?survey_id=30000000-0000-0000-0000-000000000001`
|
||||||
|
|
||||||
|
El survey activo se destaca visualmente (comparar `surveyId` del searchParam
|
||||||
|
con el UUID de cada link). Estilo `.admin-*` no aplica acá — usar clases
|
||||||
|
`.db-*` o tokens CSS existentes del dashboard.
|
||||||
|
|
||||||
|
El label de cada opción puede ser hardcodeado por ahora — no hacer fetch
|
||||||
|
a `surveys` para obtener los nombres (Nivel 3, fuera de scope).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Entregables (DoD)
|
||||||
|
|
||||||
|
- [ ] Nueva migración `20260611000001_dash_responses_all.sql` creada.
|
||||||
|
- [ ] `_dash_responses` actualizada con el flag de UUID cero.
|
||||||
|
- [ ] `route.ts` permite el UUID especial (verificar y reportar).
|
||||||
|
- [ ] Dashboard muestra selector de empresa con "Todos" + las 3 empresas.
|
||||||
|
- [ ] Build exitoso.
|
||||||
|
- [ ] `git diff --name-only HEAD` en scope.
|
||||||
|
|
||||||
|
## 6. Qué reportar
|
||||||
|
```
|
||||||
|
Verificado:
|
||||||
|
- Migración creada ✓
|
||||||
|
- route.ts: [necesitó cambio / no necesitó cambio — explicar]
|
||||||
|
- Selector visible en dashboard ✓
|
||||||
|
- Build exitoso ✓
|
||||||
|
- Diff en scope ✓
|
||||||
|
|
||||||
|
URL de validación:
|
||||||
|
- Todos: /dashboard?survey_id=00000000-0000-0000-0000-000000000000
|
||||||
|
- InQuality: /dashboard?survey_id=30000000-0000-0000-0000-000000000002
|
||||||
|
```
|
||||||
|
|
||||||
|
## 7. Qué NO hacer
|
||||||
|
- ❌ No modificar las migraciones existentes — solo agregar una nueva.
|
||||||
|
- ❌ No tocar las 11 RPCs directamente.
|
||||||
|
- ❌ No hacer fetch a `surveys` para obtener nombres de empresa.
|
||||||
|
- ❌ No agregar dependencias npm.
|
||||||
|
- ❌ No tocar el formulario ni `/admin/responses`.
|
||||||
Reference in New Issue
Block a user