# Cambio de Sistema Pensionario(Enviar solicitud cambio AFP (1)) - [store]

## 🧾 Descripción

Este servicio registra una **solicitud de cambio de sistema pensionario** para un empleado, validando previamente:

- Que el empleado exista.
- Que el sistema pensionario seleccionado sea válido (ONP o AFP).
- Que el tipo de AFP sea correcto cuando corresponda.
- Que no se intente cambiar al mismo sistema actual.
- Regla especial: si el empleado está en **ONP**, solo puede migrar a **AFP Integra**.
- Que no exista un documento previo en estado “Borrador”.
- Validación de estructura del **CUSPP** cuando aplica.

El servicio crea un nuevo documento en el ERP: `<span class="hljs-attribute">Solicitud</span> de Cambio de Sistema Pensionario`

---

# 🚀 Endpoint

**POST** `/cambio-sistema-pensionario/store`

---

# 🔐 Seguridad

- Requiere autenticación interna vía `ServiceErp()`.
- Solo accesible desde el backend con credenciales del ERP.

---

# 🧠 Flujo del Servicio (resumen real)

### 1. Validación de parámetros

El servicio valida:

- `empleado` obligatorio.
- `sistema_pensionario` debe ser `AFP` u `ONP`.
- Si es AFP → validar AFP válida.
- `tipo_cambio` debe estar dentro de:
    
    
    - `"ENTRE AFP"`
    - `"DE ONP A AFP"`
    - `"DE AFP A ONP"`

### 2. Trae los datos del empleado

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-get-employee%2F%7Bemplea"><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-keyword">GET</span> Employee/{empleado}`</div></div>Si el empleado no existe → error.

### 3. Determina si el cambio es permitido

Reglas del negocio:

- No puede cambiar al mismo sistema.
- Si está en ONP, solo puede pasar a AFP Integra.
- Cuando el cambio involucra AFP, se valida el **CUSPP**:
    
    
    - Longitud 12
    - Primeros 6 caracteres numéricos
    - Último caracter numérico

### 4. Verifica si ya existe una solicitud "Borrador"

Consulta a la base ERP:

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-select-name-from-%60ta"><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">SELECT</span> <span class="hljs-type">name</span><span class="hljs-keyword">FROM</span> `tabSolicitud de Cambio de Sistema Pensionario`<span class="hljs-keyword">WHERE</span> id_empleado = <empleado> <span class="hljs-keyword">AND</span> docstatus = <span class="hljs-number">0</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>Si existe una, retorna error.

### 5. Crea la solicitud de cambio

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-post-resource%2Fsolici"><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>`POST resource/Solicitud de Cambio de Sistema Pensionario{  <span class="hljs-string">"id_empleado"</span>: <empleado>,  <span class="hljs-string">"sistema_pensionario"</span>: <span class="hljs-string">"AFP"</span>|<span class="hljs-string">"ONP"</span>,  <span class="hljs-string">"tipo_de_afp"</span>: <span class="hljs-string">"..."</span>,  <span class="hljs-string">"tipo_cambio"</span>: <span class="hljs-string">"..."</span>,  <span class="hljs-string">"cuspp"</span>: <span class="hljs-string">"..."</span> <span class="hljs-comment">// cuando aplica</span>}`</td></tr></tbody></table>

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

# 📥 Request Body (ejemplo)

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22empleado%22%3A-%22emp-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"><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">"empleado"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"EMP-0001"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"sistema_pensionario"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"AFP"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"tipo_afp"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"AFP Integra"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"cuspp"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"123456789012"</span><span class="hljs-punctuation">,</span>  <span class="hljs-attr">"tipo_cambio"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"DE ONP A AFP"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

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

# 📤 Response 200 – Ejemplo

### ✔ Cambio enviado correctamente

<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">"msn"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Solicitud de cambio de sistema pensionario enviada"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>### ❌ Tipo de cambio inválido

<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">"msn"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"La opción del tipo de cambio no es una opción valida (\"ENTRE AFP\",\"DE ONP A AFP\",\"DE AFP A ONP\")"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>### ❌ Ya existe solicitud en borrador

<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">"msn"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Ya cuenta con una solicitud en Borrador pendiente de validar"</span><span class="hljs-punctuation">}</span>`</td></tr></tbody></table>

</div></div></div><div class="overflow-y-auto p-4" dir="ltr">  
</div></div>### ❌ No puede cambiar al mismo sistema

<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">"msn"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"No puede hacer el cambio al mismo sistema pensionario"</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 crear solicitud

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-%7B-%22valor%22%3A-false%2C-%22m-3"><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">"msn"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Ocurrió un error al crear la solicitud de cambio de sistema pensionario"</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>`</td></tr></tbody></table>

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

# 📚 Validaciones importantes del servicio

### ✔ Validación de CUSPP

- Debe medir 12 caracteres.
- Primeros 6 numéricos.
- Último carácter numérico.

### ✔ Validación de sistema pensionario

- Solo **AFP** o **ONP**.
- Tipos válidos AFP:  
    `"AFP Habitat","AFP Profuturo","AFP Prima","AFP Integra"`.

### ✔ Regla especial ONP → AFP

Si el empleado está en ONP, solo puede migrar a AFP Integra:

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-if%28%24employee%5B%22respon"><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>(<span class="hljs-variable">$employee</span>[<span class="hljs-string">"response"</span>][<span class="hljs-string">"fondo_de_pensiones"</span>] == <span class="hljs-string">"ONP"</span> &&   <span class="hljs-variable">$sistema_pensionario</span> == <span class="hljs-string">"AFP"</span> &&   <span class="hljs-variable">$tipo_afp</span> != <span class="hljs-string">"AFP Integra"</span>)`</td></tr></tbody></table>

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

# 🗃 Lógica en pseudo-código

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-validar-par%C3%A1metros-e"><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>`validar parámetrosemployee = GET Employee/{empleado}<span class="hljs-built_in">si</span> no existe -> error<span class="hljs-built_in">si</span> cambio no permitido -> errorbuscar solicitudes en Borrador para el empleado<span class="hljs-built_in">si</span> existe -> errorvalidar CUSPP <span class="hljs-built_in">si</span> aplicacrear documento:POST Solicitud de Cambio de Sistema Pensionarioretornar éxito`</td></tr></tbody></table>

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