# Gestión de Mantenimiento y Penalización de Proyectos Activos (Fin de Trimestre)

Este plan revisado describe las modificaciones necesarias en el código para permitir que los usuarios paguen el mantenimiento de proyectos activos o los desechen (pagando la penalización correspondiente) **únicamente en las quincenas de fin de trimestre (6, 12, 18 y 24)**.

## Revisión del Usuario Requerida

> [!IMPORTANT]
> **Lógica de Visibilidad del Proyecto:**
> - Cuando un proyecto activo paga su mantenimiento en el fin de un trimestre (por ejemplo, en la quincena 6, que es el fin del Trimestre 1), el proyecto se marca con `mantenimientoPagadoEnTrimestre = 1`.
> - Durante el resto del trimestre actual (mientras sigan en la quincena 6), el proyecto **se ocultará tanto del resumen como del tablero**.
> - En cuanto la quincena avance al siguiente trimestre (quincena 7, Trimestre 2), el proyecto **reaparecerá automáticamente en el tablero** para continuar trabajando en él.
>
> **Lógica de Desecho:**
> - Si se decide no pagar el mantenimiento, el usuario puede desechar el proyecto pagando la penalización (que se resta del acumulado general del trimestre actual). El estatus del proyecto cambiará a `'descartado'` y desaparecerá permanentemente.

## Cambios Propuestos

### Componente Frontend y Lógica del Juego

---

#### [MODIFY] [resumen.php](file:///c:/CHV/ludotecaLocal/Colaborando/resumen.php)

1. **Modificar `crearTarjetaProyecto`**:
   - Agregar botones de acción **solo si** el proyecto está activo (`!esCompletado`), tiene costo de mantenimiento (`proyecto.mantenimiento !== 'N/A'`) y la quincena actual es un fin de trimestre (`quincena % 6 === 0`).
   - Botón **Pagar Manto**: Llama a `pagarMantenimientoProyecto(proyecto.id)`.
   - Botón **Desechar**: Llama a `desecharProyecto(proyecto.id)`.

2. **Actualizar `actualizarResumenUI`**:
   - Filtrar los proyectos activos para mostrar solo aquellos cuyo mantenimiento **no ha sido pagado** en el trimestre actual:
     `proyecto.mantenimientoPagadoEnTrimestre !== trimestreActual`
   - Ocultar los proyectos que tengan mantenimiento `'N/A'` de la lista de pagos pendientes, o mostrarlos sin botones de acción (ya que no requieren pago).

3. **Funciones de Control**:
   - `parseMantenimiento(mantenimientoStr)`: Parsea el formato `'1T 1P 1C'` en un objeto `{ t, p, c }`.
   - `pagarMantenimientoProyecto(projectId)`:
     - Valida la selección de departamento y que este cuente con los recursos necesarios.
     - Deduce los recursos y actualiza la tarjeta del departamento.
     - Guarda el trimestre actual en el proyecto: `proyecto.mantenimientoPagadoEnTrimestre = trimestreActual`.
     - Guarda la sesión y refresca la UI del resumen.
   - `desecharProyecto(projectId)`:
     - Solicita confirmación al usuario.
     - Deduce la penalización de `arregloGeneral['trimestre' + trimestreActual]`.
     - Cambia el estatus del proyecto a `'descartado'`.
     - Guarda la sesión y refresca la UI del resumen.

4. **Event Listeners**:
   - Registrar delegación de clics con jQuery para `.btn-pagar-mantenimiento` y `.btn-desechar-proyecto`.

---

#### [MODIFY] [jsCode.js](file:///c:/CHV/ludotecaLocal/Colaborando/jsCode.js)

1. **Definir `limpiaProyectoGrande()`**:
   - Función helper para limpiar visualmente el contenedor del proyecto grande en el tablero cuando este está en espera del pago de mantenimiento.

2. **Modificar `continuamos()`**:
   - Calcular el trimestre actual de la quincena cargada:
     `const trimestreActual = Math.floor((parseInt(arregloGeneral.quincena) - 1) / 6) + 1;`
   - Modificar el filtro de proyectos para el tablero (tablero chico):
     Un proyecto se muestra solo si está en proceso y no se ha pagado su mantenimiento en el trimestre actual (o no requiere mantenimiento):
     ```javascript
     const proyectosEnTablero = proyectos.filter(
       (p) =>
         p.estatus === 'En proceso' &&
         (!proyectoGde || p.id !== proyectoGde.id) &&
         (p.mantenimiento === 'N/A' || p.mantenimientoPagadoEnTrimestre !== trimestreActual)
     )
     ```
   - Modificar la asignación de `proyectoGde`:
     Si el proyecto grande actual está en proceso pero ya pagó su mantenimiento para el siguiente trimestre, no se muestra en el tablero actual. Se llama a `limpiaProyectoGrande()`.

## Plan de Verificación

### Verificación Manual
1. Iniciar o cargar una sesión en la quincena 6 (fin del Trimestre 1).
2. Ir a **Resumen** y verificar que los proyectos activos que requieren mantenimiento muestren los botones "Pagar Manto" y "Desechar".
3. Seleccionar un departamento y hacer clic en **Pagar Manto**:
   - Verificar que se deduzcan los recursos del departamento.
   - Verificar que el proyecto desaparezca de la lista en el resumen.
   - Ir al tablero y comprobar que **no aparece** en la quincena 6.
   - Avanzar a la quincena 7 (Trimestre 2) y comprobar que el proyecto **reaparece en el tablero**.
4. Volver a la quincena 6, seleccionar otro proyecto activo y hacer clic en **Desechar**:
   - Confirmar y verificar que la penalización se reste del acumulado general de T1.
   - Verificar que el proyecto cambie su estatus a `'descartado'` en el JSON de sesión y no vuelva a aparecer en ningún lado.
