# Respuestas (1) - [missing_questions]

## 🧾 Descripción

Este servicio obtiene las **preguntas incompletas y completas** de una categoría específica del Doctype **“Check List del Supervisor Nacional 2”**, basándose en un registro identificado por su `name`.

El servicio:

1. Obtiene toda la estructura de campos del Doctype.
2. Identifica qué campos pertenecen a cada categoría (Section Break).
3. Filtra únicamente los campos tipo:
    
    
    - **Check**
    - **Data** *(comentado actualmente)*
    - **Attach Image** *(comentado actualmente)*
4. Consulta los valores reales del formulario (`0` o `1`).
5. Determina qué preguntas están completas o incompletas.
6. Devuelve solo la categoría solicitada.

Es un servicio orientado a auditorías y evaluación operacional.

---

# 🚀 Endpoint

**POST /missing-questions**

---

# 📥 Parámetros (Request Body)

<div class="_tableContainer_1rjym_1" id="bkmrk-campo-tipo-obligator"><div class="group _tableWrapper_1rjym_13 flex w-fit flex-col-reverse" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="1325" data-start="1046"><thead data-end="1090" data-start="1046"><tr data-end="1090" data-start="1046"><th data-col-size="sm" data-end="1054" data-start="1046">Campo</th><th data-col-size="sm" data-end="1061" data-start="1054">Tipo</th><th data-col-size="sm" data-end="1075" data-start="1061">Obligatorio</th><th data-col-size="md" data-end="1090" data-start="1075">Descripción</th></tr></thead><tbody data-end="1325" data-start="1137"><tr data-end="1243" data-start="1137"><td data-col-size="sm" data-end="1146" data-start="1137">`name`</td><td data-col-size="sm" data-end="1155" data-start="1146">string</td><td data-col-size="sm" data-end="1160" data-start="1155">✔️</td><td data-col-size="md" data-end="1243" data-start="1160">Identificador del documento del Doctype “Check List del Supervisor Nacional 2”.</td></tr><tr data-end="1325" data-start="1244"><td data-col-size="sm" data-end="1257" data-start="1244">`category`</td><td data-col-size="sm" data-end="1266" data-start="1257">string</td><td data-col-size="sm" data-end="1271" data-start="1266">✔️</td><td data-col-size="md" data-end="1325" data-start="1271">Nombre de la categoría (Section Break) a analizar.</td></tr></tbody></table>

</div></div>Ejemplo:

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22name%22%3A-%22chk-sup-0"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"name"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"CHK-SUP-00045"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"category"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Gestión Documentaria"</span><span class="hljs-punctuation">}</span>`</div></div>---

# 🔐 Seguridad

Requiere autenticación ERP válida, manejada internamente por **ServiceErp()**.

---

# 🧠 Flujo del Servicio (Resumen)

1. **Validación de parámetros**  
    Si `name` o `category` vienen vacíos → error inmediato.
2. **Obtener estructura del Doctype**  
    GET `/resource/DocType/Check List del Supervisor Nacional 2`
    
    
    - Extrae los campos agrupados por sección (Section Break).
    - Identifica solo campos tipo **Check**.
3. **Agrupar preguntas por categoría**
    
    
    - Mapea `category` → lista de campos (fieldname → label).
4. **Construir lista total de fields para consultar sus valores**  
    Ejemplo:
    
    <div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
    </div></div></div><div class="overflow-y-auto p-4" dir="ltr">`[<span class="hljs-string">"documentos_autoridades"</span>, <span class="hljs-string">"imagen_14"</span>, <span class="hljs-string">"comentario_14"</span>, ...]`</div></div>
5. **Consultar valores reales del registro**  
    GET `/resource/Check List del Supervisor Nacional 2?fields=[...]&filters=[["name","=",name]]`
6. **Clasificar por categoría**:
    
    
    - Si campo = `0` → **Incompleta**
    - Si campo = `1` → **Completa**
7. **Retornar solo la categoría solicitada.**

---

# 📤 Response 200 – Ejemplo

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22valor%22%3A-true%2C-%22ms"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"valor"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">true</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"msn"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Missing Questions"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"data"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span>    <span class="hljs-attr">"Incompletas"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span>      <span class="hljs-string">"Falta documento de autoridades"</span><span class="hljs-punctuation">,</span>      <span class="hljs-string">"Informe integrado no subido"</span>    <span class="hljs-punctuation">]</span><span class="hljs-punctuation">,</span>    <span class="hljs-attr">"Completas"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span>      <span class="hljs-string">"Imagen de fachada"</span><span class="hljs-punctuation">,</span>      <span class="hljs-string">"Checklist SST completado"</span>    <span class="hljs-punctuation">]</span>  <span class="hljs-punctuation">}</span><span class="hljs-punctuation">}</span>`</div></div>---

# ❗ Posibles Errores

### 1. Parámetro vacío

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22valor%22%3A-false%2C-%22m"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"valor"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"msn"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"El campo name es obligatorio"</span><span class="hljs-punctuation">}</span>`</div></div>### 2. Error al consultar el DocType

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22value%22%3A-false%2C-%22m"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"value"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"msn"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Ocurrio un error al consultar"</span><span class="hljs-punctuation">}</span>`</div></div>### 3. Error consultando los valores del registro

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22valor%22%3A-false%2C-%22m-1"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"valor"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"msn"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Ocurrio un error durante el proceso"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"error"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span> ... <span class="hljs-punctuation">}</span><span class="hljs-punctuation">}</span>`</div></div>---

# 📚 Estructuras utilizadas

### ✔️ Doctype: **Check List del Supervisor Nacional 2**

Campos relevantes:

<div class="_tableContainer_1rjym_1" id="bkmrk-tipo-uso-section-bre"><div class="group _tableWrapper_1rjym_13 flex w-fit flex-col-reverse" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="3466" data-start="3233"><thead data-end="3247" data-start="3233"><tr data-end="3247" data-start="3233"><th data-col-size="sm" data-end="3240" data-start="3233">Tipo</th><th data-col-size="sm" data-end="3247" data-start="3240">Uso</th></tr></thead><tbody data-end="3466" data-start="3263"><tr data-end="3314" data-start="3263"><td data-col-size="sm" data-end="3279" data-start="3263">Section Break</td><td data-col-size="sm" data-end="3314" data-start="3279">Agrupar preguntas por categoría</td></tr><tr data-end="3356" data-start="3315"><td data-col-size="sm" data-end="3323" data-start="3315">Check</td><td data-col-size="sm" data-end="3356" data-start="3323">Representa preguntas de Sí/No</td></tr><tr data-end="3407" data-start="3357"><td data-col-size="sm" data-end="3364" data-start="3357">Data</td><td data-col-size="sm" data-end="3407" data-start="3364">*(comentado, no procesado actualmente)*</td></tr><tr data-end="3466" data-start="3408"><td data-col-size="sm" data-end="3423" data-start="3408">Attach Image</td><td data-col-size="sm" data-end="3466" data-start="3423">*(comentado, no procesado actualmente)*</td></tr></tbody></table>

</div></div>Ejemplo de estructura procesada:

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%5B-%22gesti%C3%B3n-documenta"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`[  <span class="hljs-string">"Gestión Documentaria"</span> => [      <span class="hljs-string">"documentos_autoridades"</span> => <span class="hljs-string">"1. Documentos de autoridades"</span>,      <span class="hljs-string">"informativo_integrado"</span>  => <span class="hljs-string">"2. Informativo integrado"</span>,  ],  <span class="hljs-string">"Seguridad Operacional"</span> => [      <span class="hljs-string">"extintores"</span> => <span class="hljs-string">"1. Extintores en regla"</span>,  ]]`</div></div>---

# 🧠 Pseudocódigo Real

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-validate-name%2C-categ"><div class="sticky top-9"><div class="absolute end-0 bottom-0 flex h-9 items-center pe-2"><div class="bg-token-bg-elevated-secondary text-token-text-secondary flex items-center gap-4 rounded-sm px-2 font-sans text-xs">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">`validate name, categorydoctypeFields = GET DocType Check Listquestions = group fields by Section Break (only Check fields)allFields = extract all fieldnames used in questionsvalues = GET Check List record where name = request.nameFor each category:    For each field:        if value == 0 → add to Incompletas        if value == 1 → add to Completasreturn data of selected category`</div></div>