Extiende questions con instance_generator/instance_of/hint. Instrumento v3 completo (10 secciones, 50 preguntas) como datos declarativos. Operadores de flujo para multiple_choice: contains, eq_sole. Flujo del formulario en el esquema, no en presentación (ADR-005). Seed solo reemplaza catálogo; no toca evidencia de consentimiento (ADR-003).
482 lines
40 KiB
HTML
482 lines
40 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="es">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>Wizard Mapeo de Cuidadores v3 — Mockup</title>
|
||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@tabler/icons-webfont@2.44.0/tabler-icons.min.css">
|
||
<style>
|
||
* { box-sizing: border-box; margin: 0; padding: 0; }
|
||
body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; background: #f5f5f0; min-height: 100vh; padding: 1rem; }
|
||
.wz { max-width: 640px; margin: 0 auto; }
|
||
.wz-header { background: #43BBC8; border-radius: 12px; padding: 12px 20px; display: flex; align-items: center; justify-content: space-between; margin-bottom: 1rem; }
|
||
.wz-header-left { display: flex; align-items: center; gap: 10px; }
|
||
.wz-logo { width: 32px; height: 32px; background: white; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: 600; font-size: 11px; color: #43BBC8; }
|
||
.wz-title { color: white; font-size: 13px; font-weight: 500; }
|
||
.wz-org { color: rgba(255,255,255,0.8); font-size: 11px; }
|
||
.wz-progress-bar { background: rgba(255,255,255,0.3); border-radius: 4px; height: 4px; width: 140px; overflow: hidden; }
|
||
.wz-progress-fill { background: white; height: 100%; border-radius: 4px; transition: width 0.3s; }
|
||
.wz-progress-label { color: rgba(255,255,255,0.9); font-size: 11px; margin-top: 3px; text-align: right; }
|
||
.wz-nav { display: flex; flex-wrap: wrap; gap: 5px; margin-bottom: 1rem; }
|
||
.wz-nav-btn { font-size: 11px; padding: 4px 10px; border-radius: 20px; border: 1px solid #ddd; background: #f9f9f7; cursor: pointer; color: #666; transition: all 0.15s; }
|
||
.wz-nav-btn:hover { border-color: #43BBC8; color: #43BBC8; }
|
||
.wz-nav-btn.active { background: #43BBC8; color: white; border-color: #43BBC8; font-weight: 500; }
|
||
.wz-nav-btn.visited { background: #f9f9f7; color: #0F6E56; border-color: #5DCAA5; }
|
||
.wz-screen { background: white; border: 1px solid #e8e8e4; border-radius: 12px; padding: 1.5rem; min-height: 320px; display: flex; flex-direction: column; }
|
||
.wz-section-header { border-left: 3px solid #43BBC8; padding: 8px 12px; margin-bottom: 1.25rem; background: #f5fdfb; border-radius: 0 8px 8px 0; }
|
||
.wz-section-name { font-size: 11px; font-weight: 600; color: #43BBC8; text-transform: uppercase; letter-spacing: 0.06em; }
|
||
.wz-section-desc { font-size: 13px; color: #666; margin-top: 3px; line-height: 1.5; }
|
||
.wz-q-code { font-size: 11px; font-weight: 600; color: #aaa; text-transform: uppercase; letter-spacing: 0.08em; margin-bottom: 6px; }
|
||
.wz-q-text { font-size: 17px; font-weight: 500; color: #222; line-height: 1.45; margin-bottom: 6px; }
|
||
.wz-q-hint { font-size: 13px; color: #888; margin-bottom: 1.25rem; font-style: italic; }
|
||
.wz-options { display: flex; flex-direction: column; gap: 8px; flex: 1; }
|
||
.wz-option { display: flex; align-items: flex-start; gap: 10px; padding: 10px 12px; border: 1px solid #e0e0e0; border-radius: 8px; cursor: pointer; transition: border-color 0.15s, background 0.15s; }
|
||
.wz-option:hover { border-color: #43BBC8; background: #f5fdfb; }
|
||
.wz-option.selected { border-color: #43BBC8; background: #edfaf8; }
|
||
.wz-option input { margin-top: 2px; accent-color: #43BBC8; flex-shrink: 0; pointer-events: none; }
|
||
.wz-option label { font-size: 14px; color: #333; cursor: pointer; line-height: 1.4; pointer-events: none; }
|
||
.wz-instance-badge { display: inline-flex; align-items: center; gap: 6px; background: #e1f5ee; color: #0F6E56; font-size: 12px; font-weight: 500; padding: 5px 12px; border-radius: 20px; margin-bottom: 1rem; border: 1px solid #9FE1CB; }
|
||
.wz-footer { display: flex; align-items: center; justify-content: space-between; margin-top: 1.25rem; padding-top: 1rem; border-top: 1px solid #eee; }
|
||
.wz-btn { display: inline-flex; align-items: center; gap: 6px; padding: 9px 18px; border-radius: 8px; font-size: 14px; font-weight: 500; cursor: pointer; border: 1px solid #ddd; background: white; color: #333; transition: background 0.15s; }
|
||
.wz-btn:hover { background: #f5f5f0; }
|
||
.wz-btn.primary { background: #43BBC8; color: white; border-color: #43BBC8; }
|
||
.wz-btn.primary:hover { background: #38a8b4; }
|
||
.wz-btn:disabled { opacity: 0.4; cursor: not-allowed; }
|
||
.wz-pagination { font-size: 12px; color: #aaa; }
|
||
.wz-consent-intro { font-size: 13px; color: #555; line-height: 1.6; margin-bottom: 1rem; background: #f9f9f7; padding: 12px; border-radius: 8px; }
|
||
.wz-consent-box { border: 1px solid #e0e0e0; border-radius: 8px; padding: 12px; margin-bottom: 10px; }
|
||
.wz-consent-box.required { border-left: 3px solid #43BBC8; }
|
||
.wz-consent-label { font-size: 13px; color: #333; line-height: 1.5; display: flex; align-items: flex-start; gap: 8px; cursor: pointer; }
|
||
.wz-consent-label input { margin-top: 3px; accent-color: #43BBC8; flex-shrink: 0; }
|
||
.wz-badge { font-size: 11px; font-weight: 600; padding: 2px 8px; border-radius: 20px; display: inline-block; margin-bottom: 4px; }
|
||
.wz-badge.req { background: #e1f5ee; color: #0F6E56; }
|
||
.wz-badge.opt { background: #f0f0ec; color: #888; }
|
||
.wz-no-part { width: 100%; margin-top: 8px; padding: 9px; border: 1px dashed #ccc; border-radius: 8px; background: none; font-size: 13px; color: #888; cursor: pointer; }
|
||
.wz-no-part:hover { border-color: #aaa; color: #555; }
|
||
.wz-select { width: 100%; padding: 10px 12px; border: 1px solid #ddd; border-radius: 8px; font-size: 14px; background: white; color: #333; cursor: pointer; }
|
||
.wz-text-input { width: 100%; padding: 10px 12px; border: 1px solid #ddd; border-radius: 8px; font-size: 14px; background: white; color: #333; }
|
||
.wz-vinculo-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
|
||
.wz-vinculo-card { border: 1px solid #e0e0e0; border-radius: 8px; padding: 12px; cursor: pointer; transition: all 0.15s; }
|
||
.wz-vinculo-card:hover { border-color: #43BBC8; }
|
||
.wz-vinculo-card.selected { border-color: #43BBC8; background: #edfaf8; }
|
||
.wz-vinculo-num { font-size: 20px; font-weight: 600; color: #43BBC8; display: block; margin-bottom: 3px; pointer-events: none; }
|
||
.wz-vinculo-label { font-size: 13px; color: #333; line-height: 1.3; pointer-events: none; }
|
||
.wz-section-intro { flex: 1; display: flex; flex-direction: column; justify-content: center; gap: 10px; padding: 1rem 0; }
|
||
.wz-si-num { font-size: 48px; font-weight: 600; color: #43BBC8; line-height: 1; }
|
||
.wz-si-name { font-size: 22px; font-weight: 500; color: #222; }
|
||
.wz-si-desc { font-size: 14px; color: #666; line-height: 1.6; max-width: 460px; }
|
||
.wz-end { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; gap: 14px; padding: 2rem; }
|
||
.wz-end-icon { width: 60px; height: 60px; background: #e1f5ee; border-radius: 50%; display: flex; align-items: center; justify-content: center; }
|
||
.wz-end h3 { font-size: 22px; font-weight: 500; color: #222; }
|
||
.wz-end p { font-size: 14px; color: #666; line-height: 1.6; max-width: 340px; }
|
||
.wz-route-tag { display: inline-flex; align-items: center; gap: 4px; background: #fff8e6; color: #854F0B; font-size: 11px; font-weight: 600; padding: 3px 8px; border-radius: 20px; border: 1px solid #EF9F27; margin-bottom: 10px; }
|
||
textarea.wz-text-input { height: 120px; resize: vertical; }
|
||
.wz-barrio-dd { display:none; position:absolute; top:100%; left:0; right:0; background:white; border:1px solid #ddd; border-radius:8px; max-height:200px; overflow-y:auto; z-index:10; box-shadow:0 4px 12px rgba(0,0,0,0.1); }
|
||
.wz-barrio-item { padding:9px 12px; cursor:pointer; font-size:14px; border-bottom:1px solid #eee; }
|
||
.wz-barrio-item:hover { background:#f5fdfb; }
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<div class="wz">
|
||
<div class="wz-header">
|
||
<div class="wz-header-left">
|
||
<div class="wz-logo">Re</div>
|
||
<div>
|
||
<div class="wz-title">Mapeo de Cuidadores 2026</div>
|
||
<div class="wz-org">InQuality · Mockup v3</div>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<div class="wz-progress-bar"><div class="wz-progress-fill" id="progress-fill" style="width:3%"></div></div>
|
||
<div class="wz-progress-label" id="progress-label">Pantalla 1</div>
|
||
</div>
|
||
</div>
|
||
<div class="wz-nav" id="wz-nav"></div>
|
||
<div id="wz-screen" class="wz-screen"></div>
|
||
</div>
|
||
|
||
<script>
|
||
const SECTIONS = [
|
||
{ num:1, name:"Consentimiento", desc:null },
|
||
{ num:2, name:"Datos generales", desc:"Esta sección releva información demográfica básica, general y anónima." },
|
||
{ num:3, name:"Prevalencia de discapacidad", desc:"Queremos conocer si vos tenés alguna condición discapacitante y cómo influye en tu independencia y desempeño laboral." },
|
||
{ num:4, name:"Vinculación familiar", desc:"Queremos conocer si estás vinculado/a con algún niño/a (con o sin discapacidad), adulto con discapacidad y/o adulto mayor dependiente." },
|
||
{ num:5, name:"Responsabilidad", desc:"Queremos conocer quién tiene la responsabilidad del cuidado desde lo económico, lo logístico y el cuidado activo." },
|
||
{ num:6, name:"Intensidad", desc:"Queremos conocer cuánto tiempo y con qué intensidad cuidás." },
|
||
{ num:7, name:"Impacto laboral", desc:"Queremos conocer cómo impacta en tu desempeño laboral el rol de cuidador/a." },
|
||
{ num:8, name:"Impacto económico", desc:"Queremos conocer el impacto económico del cuidado de las personas a tu cargo." },
|
||
{ num:9, name:"Conciencia organizacional", desc:"Queremos conocer tu percepción sobre cuánta conciencia hay en la empresa respecto al cuidado y la discapacidad." },
|
||
{ num:10, name:"Comentarios", desc:"Espacio para comentarios, sugerencias o tus datos (confidenciales) para seguir profundizando." }
|
||
];
|
||
|
||
const VINCULOS = [
|
||
{id:1,label:"Hijo/a menor sin discapacidad"},
|
||
{id:2,label:"Hijo/a menor con discapacidad"},
|
||
{id:3,label:"Hijo/a adulto/a con discapacidad"},
|
||
{id:4,label:"Familiar menor con discapacidad"},
|
||
{id:5,label:"Familiar mayor con discapacidad"},
|
||
{id:6,label:"Padre/madre dependiente"},
|
||
{id:7,label:"Otro vínculo"},
|
||
{id:8,label:"Ninguna de las anteriores"}
|
||
];
|
||
|
||
const TIPO_DISC = ["Física / motora","Visual","Auditiva","Intelectual","Mental / psicosocial","Del habla y la comunicación","Múltiple","Vejez / osteoporosis / artrosis","Amputación","Otra"];
|
||
const DISPOSITIVOS = ["Silla de ruedas","Bastón de apoyo","Bastón blanco","Andador","Muletas","Prótesis","Tecnología asistiva","Audífonos","No utiliza"];
|
||
|
||
const GEO_PY = {"Asunción (Capital)": {"Asunción": ["Banco San Miguel", "Bañado Cara Cara", "Bella Vista", "Botánico", "Cañada Del Yvyray", "Ciudad Nueva", "De La Residenta", "Dr. Gaspar Rodríguez De Francia", "General Bernardino Caballero", "General José Eduvigis Díaz", "Hipódromo", "Ita Enramada", "Ita Pyta Punta", "Jara", "Jukyty", "La Catedral", "La Encarnación", "Las Lomas", "Las Mercedes", "Loma Pyta", "Los Laureles", "Luis Alberto De Herrera", "Madame Elisa Alicia Linch", "Manora", "Mariscal Francisco Solano López", "Mariscal José Félix Estigarribia", "Mbocayaty", "Mburicao", "Mburucuya", "Nazareth", "Obrero Intendente B. Guggiari", "Pinoza", "Presidente Carlos Antonio López", "Recoleta", "Republicano", "Ricardo Brugada", "Roberto L. Petit", "Sajonia", "Salvador Del Mundo", "San Antonio", "San Blas", "San Cayetano", "San Cristóbal", "San Jorge", "San Pablo", "San Roque", "San Vicente", "Santa Ana", "Santa Librada", "Santa María", "Santa Rosa", "Santisima Trinidad", "Santo Domingo", "Tablada Nueva", "Tacumbu", "Tembetary", "Terminal", "Tte. Silvio Pettirossi", "Villa Aurelia", "Villa Morra", "Virgen De Fátima", "Virgen De La Asunción", "Virgen Del Huerto", "Vista Alegre", "Ykua Sati", "Ytay", "Zeballos Kue", "Ñu Guasu"]}, "Central": {"Luque": ["Asent Itapuami", "Asent Nueva Asunción", "Asent Tarumandy 1", "Asent Tarumandy 2", "Campo Grande", "Cañada Garay", "Cañada San Rafael", "Costa Sosa", "Cuarto Barrio", "Hugua De Seda", "Isla Bogado", "Ita Angu'A", "Itapuami 1", "Itapuami 2", "Laurelty", "Loma Merlo", "Maca'I", "Marambure", "Marin Caaguy", "Mora Kue", "Nueva Asunción", "Nueva Asunción Sub-Urbano", "Primer Barrio", "Segundo Barrio", "Tarumandy", "Tercer Barrio", "Yaguarete Cora", "Yca'A", "Ycua Caranday", "Ycua Duré", "Yukyry", "Zarate Isla"], "San Lorenzo": ["Anahi", "Barcequillo", "Capilla Del Monte", "Corazón De Jesús", "Espíritu Santo", "Florida", "Fátima", "Inmaculada", "La Encarnación", "La Victoria", "Las Mercedes", "Laurelty", "Los Nogales", "Lucerito", "Lérida", "María Auxiliadora", "Miraflores", "Mita'I - Nueva Aurora", "Nuestra Señora De La Asunción", "Reducto", "Rincón", "Sagrada Familia", "San Antonio - Ciudad", "San Blas", "San Felipe", "San Francisco", "San Isidro", "San José", "San Juan - Calle'I", "San Juan - Lucerito", "San Luis", "San Miguel", "San Pedro", "San Pedro - Ñu Pora", "San Rafael", "San Ramón", "San Roque", "Santa Ana", "Santa Cruz", "Santa Librada", "Santa Lucía", "Santa María", "Santo Rey", "Santo Tomás", "Tayazuape", "Villa Amelia", "Villa Del Agrónomo", "Villa Industrial", "Villa Laurelty", "Villa Universitaria", "Virgen De Los Remedios", "Virgen Del Rosario"], "Fernando De La Mora": ["Bernardino Caballero", "Central", "Domingo Savio", "Estanzuela", "Ita Ka'Aguy", "Kokue Guasu", "Laguna Grande", "Laguna Sati", "Orilla Del Campo Grande", "Pitiantuta", "Residentas", "San Antonio", "San Juan", "Tres Bocas", "Villa Ofelia"], "Capiatá": ["Aldana Cañada", "Aratiri", "Arrua", "Campos Verdes", "Candelaria", "Capsa", "Casco Urbano", "Cerrito", "Costa Salinares", "Costa Salinas", "Kennedy", "Laurelty", "Loma Barrero", "Loma Clavel", "Naranjaty", "Posta Ybycua", "Puerta Del Sol", "Retiro", "Roberto L Petit", "Rojas Cañada", "San Jorge", "San Lorenzo", "San Miguel", "San Roque", "Santa Librada", "Santa Rita", "Santisima Cruz", "Santo Domingo", "Toledo Cañada", "Torremolinos", "Uruguay", "Villa Militar", "Virgen Del Pilar", "Yataity", "Ybyraro"], "Lambaré": ["Cañada San Miguel", "Centro Urbano", "Cuatro Mojones", "Felicidad", "Kennedy", "La Victoria", "Mariscal López", "Mbachio I", "Mbachio Ii", "Palomar", "Panambireta", "Parques Del Yacht", "Pilar", "Puerto Pabla", "San Antonio", "San Isidro", "San Rafael", "San Roque González De Santa Cruz", "Santa Lucía", "Santa Luisa", "Santa Rosa I", "Santa Rosa Ii", "Santo Domingo", "Valle Apu'A I", "Valle Apu'A Ii", "Valle Yvate", "Villa Cerro Cora", "Villa Virginia"], "Villa Elisa": ["29 De Setiembre", "8 De Diciembre", "Arroyo Seco", "Centro", "Gloria María", "Mbokajaty", "Picada", "Remanso", "Rosedal", "San José", "San Juan", "Sol De América", "Tres Bocas", "Villa Bonita", "Villa Hermosa", "Ypati"], "Ñemby": ["3 De Mayo", "Caaguazu", "Cañadita", "Centro", "Los Naranjos", "Mbokajaty", "Pa'I Ñu", "Rincón", "Salinas", "Villa Anita", "Vista Alegre"], "Mariano Roque Alonso": ["Arekaja", "Bañado", "Caacupemi", "Central", "Central Ii", "Corumba Kue - Universo", "Defensores Del Chaco", "Ka'Aguy Kupe", "La Asunción", "La Concordia Monseñor Bogarín", "María Auxiliadora", "Remanso", "Rosa Mística", "San Blas", "San Jorge", "San Luis", "San Ramón", "Surubi'Y", "Villa Margarita"], "San Antonio": ["Achucarro", "Acosta Ñu", "Antigua Imágen", "La Merced", "María Auxiliadora", "Naranjaty", "Pueblo", "San Blas", "San Francisco", "San Jorge", "San Roque"]}, "Alto Paraná": {"Ciudad Del Este": ["11 A 13 Acaray", "11 A 13 Monday", "8 A 9 Monday", "9 A 11 Monday", "Area 1", "Area 3", "Area 4", "Area 8", "Boquerón", "Carolina - Las Mercedes - Mburucuya", "Che La Reina", "Ciudad Nueva", "Don Bosco", "General Bernardino Caballero", "Juan E O'Leary", "La Blanca", "Microcentro", "Pablo Rojas", "Remansito", "San Alfredo", "San Blas", "San Isidro", "San José", "San Juan - 7 A 9 Acaray", "San Juan - Jardín Del Este - 7 A 9 Acaray", "San Lucas", "San Miguel - Area 2", "Santa Ana", "Villa 23 De Octubre", "Villa Fanny"]}, "Itapúa": {"Encarnación": ["4 Potrero", "8 De Diciembre", "8 De Diciembre Sub-Urbano", "Arroyo Pora", "Arroyo Pora Sub-Urbano", "Asent. Nueva Esperanza", "Asent. San Antonio", "Boquerón", "Buena Vista", "Carlos Antonio López", "Cerrito", "Chaipe", "Ciudad Nueva", "Com Indig Maka(Ita Paso)", "Conavi Kilómetro 10 Sub-Urbano", "Conavi Santo Domingo Sub-Urbano", "Curupayty", "Fátima", "General Bernardino Caballero", "Hospital", "Inmaculada Concepción", "Ita Angu'A", "Ita Angu'A Sub-Urbano", "Ita Paso Sub-Urbano", "Juan León Mallorquín", "Ka'Aguy Rory", "Kennedy", "La Catedral", "La Paz", "La Victoria", "Las Delicias", "Las Delicias Sub-Urbano", "Los Arravales", "Los Arravales Sub-Urbano", "María Auxiliadora", "Mboi Ka'E", "Nueva Esperanza", "Nueva Ucrania", "Obrero", "Pacu Kua", "Padre Bolik", "Paraiso", "Paraiso Sub-Urbano", "Potiy", "Quiteria", "Sagrada Familia", "San Antonio", "San Blas", "San Isidro", "San Isidro 1", "San Isidro 2", "San Isidro 3", "San Isidro Etapa 1", "San Isidro Etapa 2", "San Isidro Etapa 3", "San Isidro Etapa 5", "San Isidro Etapa 6", "San Isidro Etapa 7", "San Isidro Etapa 8", "San José Obrero", "San Luis", "San Pedro", "San Pedro Kurupayty", "San Rafael", "San Roque González", "Santa Cruz Sub-Urbano", "Santa Elena", "Santa María Santillan", "Santa Rosa", "Santo Domingo", "Santo Domingo Sub-Urbano", "Uru Sapukai", "Villa Cándida", "Zona Alta"]}};
|
||
|
||
const SCREENS_DEF = [
|
||
{id:'S1', sec:1, type:'consent'},
|
||
{id:'S2i', sec:2, type:'intro'},
|
||
{id:'S2_1', sec:2, type:'q', code:'2.1', q:'¿En qué departamento de Paraguay vivís?', format:'select', options:['Asunción (Capital)','Central','Alto Paraná','Itapúa','Cordillera','Caaguazú','San Pedro','Amambay','Otra región']},
|
||
{id:'S2_2', sec:2, type:'q', code:'2.2', q:'¿En qué ciudad vivís?', format:'select', options:['Asunción','Luque','San Lorenzo','Fernando de la Mora','Lambaré','Capiatá','Villa Elisa','Ñemby','Mariano Roque Alonso','San Antonio','Ciudad del Este','Encarnación','Otra ciudad']},
|
||
{id:'S2_3', sec:2, type:'q', code:'2.3', q:'¿En qué barrio vivís?', hint:'Opcional', format:'barrio'},
|
||
{id:'S2_4', sec:2, type:'q', code:'2.4', q:'¿Cuál es tu rango de edad?', format:'radio', options:['Menos de 25 años','25 a 34 años','35 a 44 años','45 a 54 años','55 años o más']},
|
||
{id:'S2_5', sec:2, type:'q', code:'2.5', q:'¿Con qué género te identificás?', format:'radio', options:['Femenino','Masculino','No binario / Otro']},
|
||
{id:'S2_6', sec:2, type:'q', code:'2.6', q:'¿En qué nivel organizacional estás?', format:'radio', options:['Directivo','Gerencial','Jefatura','Operativo','Auxiliar','Otro']},
|
||
{id:'S2_7', sec:2, type:'q', code:'2.7', q:'¿Cuál es tu modalidad de trabajo actual?', format:'radio', options:['Presencial','Remoto (home office)','Híbrido']},
|
||
{id:'S3i', sec:3, type:'intro'},
|
||
{id:'S3_1', sec:3, type:'q', code:'3.1', q:'¿Vos mismo/a tenés alguna discapacidad o condición de salud que pudiera afectar tu independencia o desempeño laboral?', format:'radio', options:['No','Sí']},
|
||
{id:'S3_2', sec:3, type:'q', code:'3.2', q:'¿Qué tipo de discapacidad o condición tenés?', hint:'Podés marcar más de una opción', format:'check', options:TIPO_DISC, dependsOn:{q:'S3_1',val:'Sí'}},
|
||
{id:'S3_3', sec:3, type:'q', code:'3.3', q:'¿Usás algún elemento de apoyo para la movilidad o autonomía?', hint:'Podés marcar más de una opción', format:'check', options:DISPOSITIVOS, dependsOn:{q:'S3_1',val:'Sí'}},
|
||
{id:'S3_4', sec:3, type:'q', code:'3.4', q:'¿Contás con certificado oficial de discapacidad?', format:'radio', options:['Sí','No, pero estoy en trámite','No'], dependsOn:{q:'S3_1',val:'Sí'}},
|
||
{id:'S3_5', sec:3, type:'q', code:'3.5', q:'¿Cómo afecta tu discapacidad y/o condición limitante en tu trabajo?', hint:'Podés marcar más de una opción', format:'check', options:['No afecta mi rendimiento en absoluto','Mi desempeño está más afectado por la falta de adecuaciones','Llegar al trabajo me lleva mucho tiempo','Me cuesta participar de todas las actividades por accesibilidad'], dependsOn:{q:'S3_1',val:'Sí'}},
|
||
{id:'S4i', sec:4, type:'intro'},
|
||
{id:'S4_1', sec:4, type:'vinculo'},
|
||
{id:'S4_INST_DISC', sec:4, type:'inst_disc'},
|
||
{id:'S4_INST_DISP', sec:4, type:'inst_disp'},
|
||
{id:'S5i', sec:5, type:'intro', skipSoloNino:true},
|
||
{id:'S5_1', sec:5, type:'q', code:'5.1', q:'¿Cuál es tu rol en el cuidado de las personas a tu cargo?', hint:'Podés marcar más de una opción', format:'check', options:['Proveo financieramente los recursos','Comparto los gastos con otros familiares','Administro los recursos y organizo servicios','Al llegar del trabajo me ocupo unas horas','Me ocupo de todas las gestiones'], skipSoloNino:true},
|
||
{id:'S5_2', sec:5, type:'q', code:'5.2', q:'¿En qué momento del día te ocupás de gestionar el cuidado?', hint:'Podés marcar más de una opción', format:'check', options:['Antes del trabajo','Después del trabajo','Durante el trabajo (llamadas/emergencias)','En cualquier momento','Los fines de semana'], skipSoloNino:true},
|
||
{id:'S5_3', sec:5, type:'q', code:'5.3', q:'Durante el tiempo que estás en el trabajo, ¿quién se ocupa del cuidado?', hint:'Podés marcar más de una opción', format:'check', options:['Mi cónyuge','Otro familiar','Un/a cuidador/a contratado/a','Un centro de estudios o de cuidado','Un/a vecino/a','Otro'], skipSoloNino:true},
|
||
{id:'S5_4', sec:5, type:'q', code:'5.4', q:'¿Desde hace cuánto cumplís este rol de responsable o cuidador/a?', format:'radio', options:['Menos de 1 año','1 a 3 años','3 a 5 años','Más de 5 años'], skipSoloNino:true},
|
||
{id:'S6i', sec:6, type:'intro', skipSoloNino:true},
|
||
{id:'S6_1', sec:6, type:'q', code:'6.1', q:'¿Cuántos días por semana estás a cargo del cuidado directo, en promedio?', format:'radio', options:['1–2','3–4','5–6','Todos los días'], skipSoloNino:true},
|
||
{id:'S6_2', sec:6, type:'q', code:'6.2', q:'Cuando estás a cargo, ¿cuántas horas por día dedicás, en promedio?', format:'radio', options:['1–2','3–4','5–6','Más de 6 horas'], skipSoloNino:true},
|
||
{id:'S6_3', sec:6, type:'q', code:'6.3', q:'¿En qué momentos del día cuidás principalmente?', hint:'Podés marcar más de una opción', format:'check', options:['Antes del trabajo','Al llegar del trabajo','Durante la noche','Los fines de semana'], skipSoloNino:true},
|
||
{id:'S6_4', sec:6, type:'q', code:'6.4', q:'¿Cuántas horas al día necesitás estar disponible o de guardia?', format:'radio', options:['1–2','3–4','5–6','Más de 6 horas','De forma permanente'], skipSoloNino:true},
|
||
{id:'S7i', sec:7, type:'intro', skipSoloNino:true},
|
||
{id:'S7_1', sec:7, type:'q', code:'7.1', q:'¿Cómo describirías tu nivel de descanso cuando te ocupás del cuidado?', format:'radio', options:['Descanso bien, me siento recuperado/a','Descanso de forma irregular, pero lo manejo','Me cuesta descansar, mi desempeño se ve afectado','Descanso muy poco, el agotamiento afecta mi desempeño'], skipSoloNino:true},
|
||
{id:'S7_2', sec:7, type:'q', code:'7.2', q:'En los últimos 3 meses, ¿con qué frecuencia el cuidado afectó tu concentración o rendimiento?', format:'radio', options:['Nunca o casi nunca','Algunas veces al mes','Varias veces por semana','Casi todos los días'], skipSoloNino:true},
|
||
{id:'S7_3', sec:7, type:'q', code:'7.3', q:'En el último año, ¿faltaste al trabajo por situaciones relacionadas al cuidado?', format:'radio', options:['Nunca','Pocas veces (1–3 al año)','Varias veces (4–10 al año)','Con frecuencia (más de 10 al año)'], skipSoloNino:true},
|
||
{id:'S7_4', sec:7, type:'q', code:'7.4', q:'¿Qué aspectos de tu vida se ven más afectados por tu rol de cuidador/a?', hint:'Podés marcar más de una opción', format:'check', options:['Tiempo libre y ocio','Sueño y descanso','Vida social y amistades','Vida en pareja/familiar','Salud física personal','Salud emocional/mental','Desarrollo profesional','Situación económica'], skipSoloNino:true},
|
||
{id:'S7_5', sec:7, type:'q', code:'7.5', q:'Por tu rol de cuidado, ¿alguna vez tuviste que…?', hint:'Podés marcar más de una opción', format:'check', options:['Reducir tu jornada o pasar a medio tiempo','Rechazar un ascenso','Declinar viajes, horas extra o capacitaciones','Cambiar a un puesto menos exigente','Faltar o llegar tarde de forma reiterada','Pensar seriamente en dejar el trabajo','Dejar un trabajo anterior','Ninguna de las anteriores'], skipSoloNino:true},
|
||
{id:'S7_6', sec:7, type:'q', code:'7.6', q:'En los próximos 12 meses, ¿qué tan probable es que dejes o reduzcas tu trabajo por razones de cuidado?', format:'radio', options:['Nada probable','Poco probable','Algo probable','Muy probable'], skipSoloNino:true},
|
||
{id:'S8i', sec:8, type:'intro'},
|
||
{id:'S8_1', sec:8, type:'q', code:'8.1', q:'¿Cuánto estimás que gastás por mes en el cuidado?', format:'radio', options:['Menos de Gs. 1.000.000','1.000.001 – 3.000.000','3.000.001 – 6.000.000','6.000.001 – 9.000.000','9.000.001 – 12.000.000','12.000.001 – 15.000.000','Más de Gs. 15.000.000']},
|
||
{id:'S8_2', sec:8, type:'q', code:'8.2', q:'¿En qué conceptos gastás principalmente?', hint:'Podés marcar más de una opción', format:'check', options:['Cuidador/a particular','Centro de día / institución','Traslados a centros especializados','Equipamiento médico / tecnología asistiva','Servicios terapéuticos / rehabilitación','Medicamentos','Insumos personales','Otros']},
|
||
{id:'S8_3', sec:8, type:'q', code:'8.3', q:'¿Cómo sostenés los gastos y responsabilidades del cuidado?', hint:'Podés marcar más de una opción', format:'check', options:['Solo con mi empleo actual','Ingresos extraordinarios','Emprendimiento personal/familiar','Me ayudan mis familiares','Me ayudan organizaciones sociales','Me ayudan vecinos y amigos','Subsidios estatales']},
|
||
{id:'S8_4', sec:8, type:'q', code:'8.4', q:'¿En qué franja salarial mensual te ubicás?', format:'radio', options:['Hasta Gs. 3.000.000','3.000.001 – 5.000.000','5.000.001 – 8.000.000','8.000.001 – 12.000.000','12.000.001 – 15.000.000','15.000.001 – 18.000.000','18.000.001 – 25.000.000','25.000.001 – 50.000.000','50.000.001 o más']},
|
||
{id:'S9i', sec:9, type:'intro'},
|
||
{id:'S9_1', sec:9, type:'q', code:'9.1', q:'¿Sentís que tu empresa conoce o comprende la realidad del cuidado y la discapacidad de su gente?', format:'radio', options:['Sí, me siento acompañado/a','Parcialmente, hay cierta comprensión','No, es algo bastante invisible','Nunca hemos tocado el tema']},
|
||
{id:'S9_2', sec:9, type:'q', code:'9.2', q:'¿Qué apoyos de la empresa te ayudarían más?', hint:'Marcá hasta 3 opciones', format:'check', options:['Flexibilidad horaria o trabajo remoto','Apoyo económico o convenios/descuentos','Acceso a beneficios para terapias o salud','Contención/apoyo emocional o psicológico','Capacitación y autocuidado','Redes de apoyo / grupos de pares','Información sobre recursos y servicios']},
|
||
{id:'S9_3', sec:9, type:'q', code:'9.3', q:'¿Estarías dispuesto/a a participar en un grupo de apoyo para cuidadores dentro de la empresa?', format:'radio', options:['Sí, definitivamente','Tal vez, si hay más personas en la misma situación','No por ahora','Prefiero mantenerlo en privado']},
|
||
{id:'S9_4', sec:9, type:'q', code:'9.4', q:'¿Estarías dispuesto/a a ser voluntario/a en iniciativas y/o redes de apoyo?', format:'radio', options:['Sí','No']},
|
||
{id:'S10i', sec:10, type:'intro'},
|
||
{id:'S10_1', sec:10, type:'q', code:'10.1', q:'¿Te gustaría dejar un comentario o sugerencia especial?', hint:'Opcional', format:'textarea'},
|
||
{id:'SEND', sec:null, type:'end'}
|
||
];
|
||
|
||
const answers = {};
|
||
let currentScreenId = 'S1';
|
||
|
||
function isSoloNino() {
|
||
const v = answers['S4_1'];
|
||
return v && v.length === 1 && v[0] === 1;
|
||
}
|
||
function isNinguno() {
|
||
const v = answers['S4_1'];
|
||
return v && v.includes(8);
|
||
}
|
||
function getActiveVinculos() {
|
||
const sel = answers['S4_1'] || [];
|
||
return sel.filter(id => id !== 8 && id !== 1).map(id => VINCULOS.find(v => v.id === id)).filter(Boolean);
|
||
}
|
||
|
||
// Construye la lista de pantallas visibles según el estado actual
|
||
function buildVisible() {
|
||
const vis = [];
|
||
for (const s of SCREENS_DEF) {
|
||
if (s.skipSoloNino && isSoloNino()) continue;
|
||
if (s.dependsOn) {
|
||
if (answers[s.dependsOn.q] !== s.dependsOn.val) continue;
|
||
}
|
||
if (s.type === 'inst_disc') {
|
||
// Generar por familiar: para cada vínculo, su pantalla disc y luego su pantalla disp
|
||
const vins = getActiveVinculos();
|
||
const dispDef = SCREENS_DEF.find(d => d.type === 'inst_disp');
|
||
for (let i = 0; i < vins.length; i++) {
|
||
vis.push({ ...s, id: `inst_disc_${i}`, instanceIdx: i, vinculo: vins[i] });
|
||
vis.push({ ...dispDef, id: `inst_disp_${i}`, instanceIdx: i, vinculo: vins[i] });
|
||
}
|
||
continue;
|
||
}
|
||
if (s.type === 'inst_disp') {
|
||
// Ya generado junto con inst_disc, saltear
|
||
continue;
|
||
}
|
||
vis.push(s);
|
||
}
|
||
return vis;
|
||
}
|
||
|
||
function currentIndex(vis) {
|
||
const idx = vis.findIndex(s => s.id === currentScreenId);
|
||
return idx >= 0 ? idx : 0;
|
||
}
|
||
|
||
function renderSectionHeader(secNum) {
|
||
if (!secNum) return '';
|
||
const s = SECTIONS[secNum-1];
|
||
return `<div class="wz-section-header">
|
||
<div class="wz-section-name">Sección ${secNum} · ${s.name}</div>
|
||
${s.desc ? `<div class="wz-section-desc">${s.desc}</div>` : ''}
|
||
</div>`;
|
||
}
|
||
|
||
function renderNav(vis, curIdx) {
|
||
const seen = [];
|
||
vis.forEach(s => { if (s.sec && !seen.includes(s.sec)) seen.push(s.sec); });
|
||
const curSec = vis[curIdx] ? vis[curIdx].sec : null;
|
||
document.getElementById('wz-nav').innerHTML = seen.map(n => {
|
||
const done = vis.slice(0, curIdx).some(s => s.sec === n);
|
||
const active = curSec === n;
|
||
return `<button class="wz-nav-btn ${active?'active':done?'visited':''}" onclick="jumpToSection(${n})">${n}</button>`;
|
||
}).join('');
|
||
}
|
||
|
||
function jumpToSection(n) {
|
||
const vis = buildVisible();
|
||
const target = vis.find(s => s.sec === n);
|
||
if (target) { currentScreenId = target.id; render(); }
|
||
}
|
||
|
||
function footer(vis, curIdx, screen) {
|
||
return `<div class="wz-footer">
|
||
<button class="wz-btn" onclick="goBack()" ${curIdx===0?'disabled':''}><i class="ti ti-arrow-left"></i> Anterior</button>
|
||
<span class="wz-pagination">${curIdx+1} / ${vis.length}</span>
|
||
${screen.type !== 'end' ? `<button class="wz-btn primary" onclick="goNext()">Siguiente <i class="ti ti-arrow-right"></i></button>` : ''}
|
||
</div>`;
|
||
}
|
||
|
||
function renderOpts(screen) {
|
||
const f = screen.format;
|
||
const saved = answers[screen.id];
|
||
if (f === 'radio') {
|
||
return `<div class="wz-options">${screen.options.map(o =>
|
||
`<div class="wz-option ${saved===o?'selected':''}" onclick="selRadio('${screen.id}','${o.replace(/'/g,"\\'")}')">
|
||
<input type="radio" ${saved===o?'checked':''}><label>${o}</label>
|
||
</div>`).join('')}</div>`;
|
||
}
|
||
if (f === 'check') {
|
||
const arr = saved || [];
|
||
return `<div class="wz-options">${screen.options.map(o =>
|
||
`<div class="wz-option ${arr.includes(o)?'selected':''}" onclick="togCheck('${screen.id}','${o.replace(/'/g,"\\'")}')">
|
||
<input type="checkbox" ${arr.includes(o)?'checked':''}><label>${o}</label>
|
||
</div>`).join('')}</div>`;
|
||
}
|
||
if (f === 'select') {
|
||
return `<select class="wz-select" onchange="setSelect('${screen.id}',this.value)">
|
||
<option value="">Seleccioná…</option>
|
||
${screen.options.map(o => `<option ${saved===o?'selected':''}>${o}</option>`).join('')}
|
||
</select>`;
|
||
}
|
||
if (f === 'text') return `<input class="wz-text-input" type="text" placeholder="Escribí aquí…" value="${saved||''}" oninput="answers['${screen.id}']=this.value">`;
|
||
if (f === 'textarea') return `<textarea class="wz-text-input" placeholder="Escribí aquí… (opcional)" oninput="answers['${screen.id}']=this.value">${saved||''}</textarea>`;
|
||
if (f === 'barrio') return renderBarrio(saved);
|
||
return '';
|
||
}
|
||
|
||
function renderBarrio(saved) {
|
||
const barrios = getBarriosList();
|
||
if (barrios.length === 0) {
|
||
return `<input class="wz-text-input" type="text" placeholder="Escribí tu barrio (opcional)…" value="${saved||''}" oninput="answers['S2_3']=this.value">
|
||
<div style="font-size:12px;color:#888;margin-top:6px">Ingresá el nombre de tu barrio libremente.</div>`;
|
||
}
|
||
return `<div style="position:relative">
|
||
<input class="wz-text-input" id="barrio-input" type="text" placeholder="Escribí para buscar tu barrio…" value="${saved||''}" oninput="answers['S2_3']=this.value;filterBarrios(this.value)" autocomplete="off">
|
||
<div id="barrio-dd" class="wz-barrio-dd"></div>
|
||
<div style="font-size:12px;color:#888;margin-top:6px">${barrios.length} barrios disponibles para ${answers['S2_2']||'tu ciudad'}. Escribí para filtrar.</div>
|
||
</div>`;
|
||
}
|
||
|
||
function getBarriosList() {
|
||
const depto = answers['S2_1'] || '';
|
||
const ciudad = answers['S2_2'] || '';
|
||
if (!GEO_PY[depto] || !GEO_PY[depto][ciudad]) return [];
|
||
return GEO_PY[depto][ciudad];
|
||
}
|
||
|
||
function filterBarrios(val) {
|
||
const dd = document.getElementById('barrio-dd');
|
||
if (!dd) return;
|
||
const barrios = getBarriosList();
|
||
if (!val || val.length < 2) { dd.style.display='none'; return; }
|
||
const matches = barrios.filter(b => b.toLowerCase().includes(val.toLowerCase())).slice(0,12);
|
||
if (!matches.length) { dd.style.display='none'; return; }
|
||
dd.innerHTML = matches.map(b => `<div class="wz-barrio-item" onclick="selectBarrio('${b.replace(/'/g,"\\'")}')">${b}</div>`).join('');
|
||
dd.style.display='block';
|
||
}
|
||
|
||
function selectBarrio(val) {
|
||
answers['S2_3'] = val;
|
||
const inp = document.getElementById('barrio-input');
|
||
if (inp) inp.value = val;
|
||
const dd = document.getElementById('barrio-dd');
|
||
if (dd) dd.style.display='none';
|
||
}
|
||
|
||
function render() {
|
||
const vis = buildVisible();
|
||
let curIdx = currentIndex(vis);
|
||
// Si la pantalla actual ya no existe (cambió la lista), corregir al índice válido más cercano
|
||
if (curIdx >= vis.length) curIdx = vis.length - 1;
|
||
const screen = vis[curIdx];
|
||
if (!screen) return;
|
||
currentScreenId = screen.id;
|
||
|
||
document.getElementById('progress-fill').style.width = Math.round(curIdx/(vis.length-1)*100)+'%';
|
||
document.getElementById('progress-label').textContent = `Pantalla ${curIdx+1} de ${vis.length}`;
|
||
renderNav(vis, curIdx);
|
||
|
||
const el = document.getElementById('wz-screen');
|
||
const foot = footer(vis, curIdx, screen);
|
||
|
||
if (screen.type === 'consent') {
|
||
el.innerHTML = `<div class="wz-consent-intro"><strong>¡Hola! Gracias por tu tiempo.</strong> Esta es una encuesta sobre el cuidado de familiares con discapacidad o adultos mayores y cómo impacta en el trabajo. Tu participación es <strong>voluntaria y anónima</strong>, y no afecta tu situación laboral. Te llevará entre 3 y 10 minutos según tu situación.</div>
|
||
<div class="wz-consent-box required"><label class="wz-consent-label"><input type="checkbox" onchange="answers.c1=this.checked"><span><span class="wz-badge req">Requerido para participar</span><br>Declaro que fui informado/a sobre el propósito de esta encuesta y acepto participar de forma voluntaria en el diagnóstico interno de <strong>InQuality</strong>, junto con <strong>Fundación Solidaridad</strong>.</span></label></div>
|
||
<div class="wz-consent-box"><label class="wz-consent-label"><input type="checkbox" onchange="answers.c2=this.checked"><span><span class="wz-badge opt">Opcional</span><br>Autorizo que mis respuestas anonimizadas se utilicen para el estudio país sobre la economía del cuidado en Paraguay.</span></label></div>
|
||
<button class="wz-no-part">No deseo participar</button>${foot}`;
|
||
return;
|
||
}
|
||
|
||
if (screen.type === 'intro') {
|
||
const s = SECTIONS[screen.sec-1];
|
||
el.innerHTML = `<div class="wz-section-intro"><div class="wz-si-num">${screen.sec}</div><div class="wz-si-name">${s.name}</div>${s.desc?`<div class="wz-si-desc">${s.desc}</div>`:''}</div>${foot}`;
|
||
return;
|
||
}
|
||
|
||
if (screen.type === 'vinculo') {
|
||
const saved = answers['S4_1'] || [];
|
||
el.innerHTML = `${renderSectionHeader(4)}
|
||
<div class="wz-q-code">4.1</div>
|
||
<div class="wz-q-text">¿Cuál de las siguientes vinculaciones familiares tenés?</div>
|
||
<div class="wz-q-hint">Podés marcar más de una opción · tu recorrido se adaptará según lo que elijas</div>
|
||
<div class="wz-vinculo-grid">${VINCULOS.map(v =>
|
||
`<div class="wz-vinculo-card ${saved.includes(v.id)?'selected':''}" onclick="togVinculo(${v.id})"><span class="wz-vinculo-num">${v.id}</span><span class="wz-vinculo-label">${v.label}</span></div>`
|
||
).join('')}</div>${foot}`;
|
||
return;
|
||
}
|
||
|
||
if (screen.type === 'inst_disc') {
|
||
const vin = screen.vinculo, i = screen.instanceIdx, vins = getActiveVinculos();
|
||
const id2 = `inst_${vin.id}_disc`, s2 = answers[id2] || [];
|
||
el.innerHTML = `${renderSectionHeader(4)}
|
||
<div class="wz-instance-badge"><i class="ti ti-user"></i> ${vin.label} · familiar ${i+1} de ${vins.length}</div>
|
||
<div class="wz-q-code">4.2</div>
|
||
<div class="wz-q-text">¿Qué tipo de discapacidades o limitaciones tiene?</div>
|
||
<div class="wz-q-hint">Podés marcar más de una opción</div>
|
||
<div class="wz-options">${TIPO_DISC.map(o =>
|
||
`<div class="wz-option ${s2.includes(o)?'selected':''}" onclick="togCheck('${id2}','${o.replace(/'/g,"\\'")}')"><input type="checkbox" ${s2.includes(o)?'checked':''}><label>${o}</label></div>`
|
||
).join('')}</div>${foot}`;
|
||
return;
|
||
}
|
||
|
||
if (screen.type === 'inst_disp') {
|
||
const vin = screen.vinculo, i = screen.instanceIdx, vins = getActiveVinculos();
|
||
const id3 = `inst_${vin.id}_disp`, s3 = answers[id3] || [];
|
||
el.innerHTML = `${renderSectionHeader(4)}
|
||
<div class="wz-instance-badge"><i class="ti ti-user"></i> ${vin.label} · familiar ${i+1} de ${vins.length}</div>
|
||
<div class="wz-q-code">4.3</div>
|
||
<div class="wz-q-text">¿Qué dispositivos de apoyo utiliza?</div>
|
||
<div class="wz-q-hint">Podés marcar más de una opción</div>
|
||
<div class="wz-options">${DISPOSITIVOS.map(o =>
|
||
`<div class="wz-option ${s3.includes(o)?'selected':''}" onclick="togCheck('${id3}','${o.replace(/'/g,"\\'")}')"><input type="checkbox" ${s3.includes(o)?'checked':''}><label>${o}</label></div>`
|
||
).join('')}</div>${foot}`;
|
||
return;
|
||
}
|
||
|
||
if (screen.type === 'q') {
|
||
let routeTag = '';
|
||
if (isNinguno() && screen.sec === 10) routeTag = `<div class="wz-route-tag"><i class="ti ti-route"></i> Recorrido sin vínculo de cuidado</div>`;
|
||
else if (isSoloNino() && screen.sec === 8) routeTag = `<div class="wz-route-tag"><i class="ti ti-route"></i> Recorrido niño/a sin discapacidad</div>`;
|
||
el.innerHTML = `${routeTag}${renderSectionHeader(screen.sec)}
|
||
<div class="wz-q-code">${screen.code}</div>
|
||
<div class="wz-q-text">${screen.q}</div>
|
||
${screen.hint?`<div class="wz-q-hint">${screen.hint}</div>`:''}
|
||
${renderOpts(screen)}${foot}`;
|
||
return;
|
||
}
|
||
|
||
if (screen.type === 'end') {
|
||
el.innerHTML = `<div class="wz-end"><div class="wz-end-icon"><i class="ti ti-check" style="color:#0F6E56;font-size:30px"></i></div><h3>¡Gracias por participar!</h3><p>Tus respuestas fueron enviadas de forma anónima y contribuyen al mapeo nacional sobre economía del cuidado en Paraguay.</p></div>`;
|
||
return;
|
||
}
|
||
}
|
||
|
||
function selRadio(id, val) {
|
||
answers[id] = val;
|
||
render();
|
||
}
|
||
function setSelect(id, val) {
|
||
answers[id] = val;
|
||
// Si cambia depto o ciudad, limpiar barrio
|
||
if (id === 'S2_1' || id === 'S2_2') answers['S2_3'] = '';
|
||
}
|
||
function togCheck(id, val) {
|
||
if (!answers[id]) answers[id] = [];
|
||
const idx = answers[id].indexOf(val);
|
||
if (idx >= 0) answers[id].splice(idx,1);
|
||
else answers[id].push(val);
|
||
render();
|
||
}
|
||
function togVinculo(id) {
|
||
if (!answers['S4_1']) answers['S4_1'] = [];
|
||
if (id === 8) {
|
||
answers['S4_1'] = answers['S4_1'].includes(8) ? [] : [8];
|
||
} else {
|
||
const i8 = answers['S4_1'].indexOf(8);
|
||
if (i8 >= 0) answers['S4_1'].splice(i8,1);
|
||
const idx = answers['S4_1'].indexOf(id);
|
||
if (idx >= 0) answers['S4_1'].splice(idx,1);
|
||
else answers['S4_1'].push(id);
|
||
}
|
||
render();
|
||
}
|
||
|
||
function goNext() {
|
||
const vis = buildVisible();
|
||
const curIdx = currentIndex(vis);
|
||
const screen = vis[curIdx];
|
||
// Saltos condicionales
|
||
if (screen.id === 'S4_1' && isNinguno()) {
|
||
const t = vis.find(s => s.id === 'S10i');
|
||
if (t) { currentScreenId = t.id; render(); window.scrollTo(0,0); return; }
|
||
}
|
||
if (curIdx < vis.length - 1) {
|
||
currentScreenId = vis[curIdx+1].id;
|
||
render();
|
||
}
|
||
window.scrollTo(0,0);
|
||
}
|
||
|
||
function goBack() {
|
||
const vis = buildVisible();
|
||
const curIdx = currentIndex(vis);
|
||
if (curIdx > 0) {
|
||
currentScreenId = vis[curIdx-1].id;
|
||
render();
|
||
}
|
||
window.scrollTo(0,0);
|
||
}
|
||
|
||
document.addEventListener('click', function(e) {
|
||
const dd = document.getElementById('barrio-dd');
|
||
if (dd && !dd.contains(e.target) && e.target.id !== 'barrio-input') dd.style.display='none';
|
||
});
|
||
|
||
render();
|
||
</script>
|
||
</body>
|
||
</html>
|