# Guardar documento (1) - [saveInternalDocuments]

## 🧾 Descripción

*Registra internamente un documento aceptado o gestionado por un usuario dentro de una terminal específica.*

Este servicio guarda un log en la tabla **documentos\_internos**, permitiendo rastrear:

- Qué usuario aceptó o gestionó un documento.
- Desde qué terminal lo realizó.
- Qué tipo de documento fue.
- En qué fecha y hora se registró.

Es utilizado para auditoría y trazabilidad dentro del sistema.

---

# 🚀 Endpoint

**POST** `/save-internal-documents`

---

# 📥 Parámetros (Request Body)

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22usuario%22%3A-%22string"><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"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"usuario"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"terminal"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"tipo"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"string"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>### Campos:

<div class="_tableContainer_1rjym_1" id="bkmrk-campo-tipo-requerido"><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="1216" data-start="864"><thead data-end="914" data-start="864"><tr data-end="914" data-start="864"><th data-col-size="sm" data-end="876" data-start="864">Campo</th><th data-col-size="sm" data-end="887" data-start="876">Tipo</th><th data-col-size="sm" data-end="899" data-start="887">Requerido</th><th data-col-size="md" data-end="914" data-start="899">Descripción</th></tr></thead><tbody data-end="1216" data-start="966"><tr data-end="1052" data-start="966"><td data-col-size="sm" data-end="978" data-start="966">usuario</td><td data-col-size="sm" data-end="989" data-start="978">string</td><td data-col-size="sm" data-end="1001" data-start="989">✔️ Sí</td><td data-col-size="md" data-end="1052" data-start="1001">ID o username del usuario que realiza la acción</td></tr><tr data-end="1140" data-start="1053"><td data-col-size="sm" data-end="1065" data-start="1053">terminal</td><td data-col-size="sm" data-end="1076" data-start="1065">string</td><td data-col-size="sm" data-end="1088" data-start="1076">✔️ Sí</td><td data-col-size="md" data-end="1140" data-start="1088">Código de la terminal donde se ejecuta la acción</td></tr><tr data-end="1216" data-start="1141"><td data-col-size="sm" data-end="1153" data-start="1141">tipo</td><td data-col-size="sm" data-end="1164" data-start="1153">string</td><td data-col-size="sm" data-end="1175" data-start="1164">❌ No</td><td data-col-size="md" data-end="1216" data-start="1175">Tipo de documento o acción registrada</td></tr></tbody></table>

</div></div>---

# 🔐 Seguridad

No requiere token de ERP.  
Acceso interno del backend usando conexión directa a la base de datos **mysql2**.

---

# 🧠 Flujo del Servicio (resumen)

1. Valida que **usuario** y **terminal** existan en la solicitud.
2. Establece zona horaria **America/Lima**.
3. Inserta un registro en la tabla `documentos_internos` con:
    
    
    - usuario
    - terminal
    - tipo
    - fecha actual
4. Si el registro falla, retorna un error.
5. Si todo es exitoso, responde confirmación de inserción.

---

# 🗃 Base de Datos Utilizada

**Tabla:** `documentos_internos` (BD: mysql2)

<div class="_tableContainer_1rjym_1" id="bkmrk-campo-tipo-descripci"><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="2104" data-start="1800"><thead data-end="1842" data-start="1800"><tr data-end="1842" data-start="1800"><th data-col-size="sm" data-end="1811" data-start="1800">Campo</th><th data-col-size="sm" data-end="1827" data-start="1811">Tipo</th><th data-col-size="sm" data-end="1842" data-start="1827">Descripción</th></tr></thead><tbody data-end="2104" data-start="1886"><tr data-end="1937" data-start="1886"><td data-col-size="sm" data-end="1897" data-start="1886">usuario</td><td data-col-size="sm" data-end="1913" data-start="1897">varchar</td><td data-col-size="sm" data-end="1937" data-start="1913">Usuario que registra</td></tr><tr data-end="1998" data-start="1938"><td data-col-size="sm" data-end="1949" data-start="1938">terminal</td><td data-col-size="sm" data-end="1965" data-start="1949">varchar</td><td data-col-size="sm" data-end="1998" data-start="1965">Terminal desde donde registra</td></tr><tr data-end="2047" data-start="1999"><td data-col-size="sm" data-end="2010" data-start="1999">tipo</td><td data-col-size="sm" data-end="2026" data-start="2010">varchar</td><td data-col-size="sm" data-end="2047" data-start="2026">Tipo de documento</td></tr><tr data-end="2104" data-start="2048"><td data-col-size="sm" data-end="2059" data-start="2048">fecha</td><td data-col-size="sm" data-end="2075" data-start="2059">datetime</td><td data-col-size="sm" data-end="2104" data-start="2075">Fecha y hora del registro</td></tr></tbody></table>

</div></div>---

# 🔎 Pseudocódigo

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-if-usuario-vac%C3%ADo-%E2%86%92-r"><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"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-keyword">if</span> usuario vacío → retornar <span class="hljs-built_in">error</span> “te olvidaste el usuario”<span class="hljs-keyword">if</span> terminal vacío → retornar <span class="hljs-built_in">error</span> <span class="hljs-string">"te olvidaste la terminal"</span>fecha = now()<span class="hljs-built_in">insert</span> into documentos_internos (usuario, terminal, tipo, fecha)<span class="hljs-keyword">if</span> <span class="hljs-built_in">insert</span> falla → retornar <span class="hljs-string">"Ocurrió un error"</span><span class="hljs-keyword">else</span> → retornar <span class="hljs-string">"Insertado con éxito"</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>---

# 📤 Respuestas del Servicio

### ✅ **200 – Inserción exitosa**

<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"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<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">"msg"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Insertado con éxito"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>---

### ❗ Error: Falta usuario

<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"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<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">"msg"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"te olvidaste el usuario"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>---

### ❗ Error: Falta terminal

<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"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<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">"msg"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"te olvidaste la terminal"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>---

### ❗ Error al insertar

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22valor%22%3A-false%2C-%22m-2"><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"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<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">"msg"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Ocurrio un error"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>---

# 📚 Ejemplo completo de Request

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22usuario%22%3A-%22user%40e"><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"><table border="1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>`<span class="hljs-punctuation">{</span>  <span class="hljs-attr">"usuario"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"user@example.com"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"terminal"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"236"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"tipo"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"descarga_politicas"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr"></div></div>