# HANDOVER: Sesión Myristica - 24 marzo 2026

## Contexto del Proyecto

**Myristica** es una webapp familiar para trackear el alquiler del local comercial en **Arcos 1836, CABA**. Los inquilinos no han aplicado los ajustes trimestrales por IPC y pagan tarde. La app calcula alquiler correcto según IPC, diferencias, y penalidades (0.30% diario con cap de 30 días).

**Stack**: Next.js 16.2.1 (App Router), TypeScript, Tailwind CSS 4, Drizzle ORM, PostgreSQL (Supabase), NextAuth v5, Vercel

**URL producción**: https://myristica-eight.vercel.app
**Repo**: https://github.com/ignaciolagosruiz/myristica (privado)
**Path proyecto**: `C:/Users/ignac/OneDrive/Documents/claude/myristica/app`

**Login**: `ignacio` / `myristica2026!` (ojo: tiene `!` al final)
**Edit mode password**: `myristica2026!` (misma clave)

---

## Lo que沟 HICIMOS HOY (24 marzo 2026)

### Problemas identificados y corregidos:

#### 1. Penalidades SIN CAP de 30 días
**Archivo**: `src/lib/penalties.ts` línea 89-97

**Problema**: Las penalidades se acumulaban por días illimités desde el vencimiento. El usuario confirmó que quería un cap de 30 días.

**Solución**:
```typescript
// ANTES:
diasMora = diasEntreFechas(desdeMora, hoy);

// DESPUÉS:
diasMora = Math.min(diasEntreFechas(desdeMora, hoy), 30);
```

---

#### 2. Dashboard usando lógica hardcodeada en lugar de la DB
**Archivo**: `src/app/dashboard/page.tsx`

**Problema**: `calcularResumen()` usaba su propia lógica interna para asumir pagos ($3,500,000 por mes, marzo 2026 impago) en lugar de leer los pagos reales de la tabla `pagos` en la base de datos.

**Solución**: Ahora carga los pagos de la DB y los pasa a `calcularResumen()`:
```typescript
const rows = await db.select().from(pagos).orderBy(desc(pagos.periodo));
const pagosMap = new Map<string, { monto: number; fechaPago: string | null }>();
for (const r of rows) {
  pagosMap.set(r.periodo, { monto: r.monto, fechaPago: r.fechaPago });
}
const resumen = calcularResumen(hoy, pagosMap);
```

---

#### 3. No se podían AGREGAR pagos nuevos (solo PUT, no POST)
**Archivo**: `src/app/api/admin/pagos/route.ts`

**Problema**: Solo existía GET y PUT. No había forma de agregar pagos nuevos desde la UI.

**Solución**: Añadido POST:
```typescript
export async function POST(req: Request) {
  const body = await req.json();
  const { periodo, monto, fechaPago, notas, usuario } = body;

  const [created] = await db.insert(pagos).values({
    contratoId: 1,
    periodo,
    monto,
    fechaPago: fechaPago || null,
    notas: notas || null,
    creadoPor: usuario || 'admin',
    confirmado: 1,
  }).returning();

  return Response.json(created, { status: 201 });
}
```

---

#### 4. Tabla de pagos sin formulario para agregar nuevos
**Archivo**: `src/app/pagos/PagosClient.tsx`

**Problema**: No había forma de agregar pagos desde la UI.

**Solución**: Añadido formulario con campos: período, monto, fecha pago, notas. Botón "+ Agregar pago" visible solo en edit mode.

---

#### 5. Porcentaje de servicios (45%) no era editable
**Archivo**: `src/app/servicios/ServiciosClient.tsx`

**Problema**: El porcentaje del inquilino sobre los servicios (ABL, AYSA, Edenor) estaba hardcodeado en el seed como 45% y no se podía cambiar desde la UI.

**Solución**: El porcentaje ahora es inline-editable en edit mode. Añadidos:
- Estado local `dirtyServicios` para trackear cambios
- Función `updateServicioPorcentaje()` 
- Función `saveServicioPorcentaje()` que hace PUT a `/api/admin/servicios/[id]`
- La API ya soportaba `porcentaje` en el PUT (no hizo falta cambiarla)

---

## Resumen de archivos modificados (commit `abff1c0`)

| Archivo | Cambio |
|---------|--------|
| `src/lib/penalties.ts` | Cap 30 días en días de mora |
| `src/app/dashboard/page.tsx` | Lee pagos de DB en lugar de hardcoded |
| `src/app/api/admin/pagos/route.ts` | Añadido POST para nuevos pagos |
| `src/app/pagos/PagosClient.tsx` | Formulario para agregar pagos |
| `src/app/servicios/ServiciosClient.tsx` | Porcentaje editable inline |

**Build**: EXITOSO ✅
**Push**: EXITOSO ✅ (auto-deploy a Vercel debería haber corrido)

---

## Instrucciones para Claude Code (AUDITORÍA COMPLETA)

### Prompt inicial para Claude Code:

---

```
# AUDITORÍA COMPLETA: Myristica

## Proyecto
Webapp Next.js 16.2.1 para trackear alquiler de local comercial en Arcos 1836, CABA. Calcula alquiler por IPC (INDEC), diferencias impagas, y penalidades (0.30% diario, cap 30 días).

**Path**: `C:/Users/ignac/OneDrive/Documents/claude/myristica/app`
**Repo**: https://github.com/ignaciolagosruiz/myristica
**Producción**: https://myristica-eight.vercel.app

## Lo que沟 HICIMOS HOY (24 marzo 2026)

Sesión de trabajo donde corregimos varios problemas:

1. **Cap 30 días en penalidades** - `penalties.ts` ahora usa `Math.min(diasEntreFechas(desdeMora, hoy), 30)`

2. **Dashboard ahora lee de DB** - `dashboard/page.tsx` carga pagos de la tabla `pagos` en lugar de usar lógica hardcodeada

3. **POST para pagos** - `api/admin/pagos/route.ts` ahora tiene POST para agregar pagos nuevos

4. **Formulario agregar pagos** - `pagos/PagosClient.tsx` tiene botón "+ Agregar pago" en edit mode con formulario

5. **Porcentaje editable** - `servicios/ServiciosClient.tsx` permite editar el porcentaje (45%) inline en edit mode

## Tu tarea: AUDITORÍA COMPLETA + CORRECCIONES

Por favor hacé una auditoría exhaustiva del proyecto completo. Usá agentes autónomos para revisar lo que hicimos hoy Y las recomendaciones pendientes. No infles el contexto de la conversación principal - usá Task agents para las revisiones detalladas.

### Pasos:

1. **Explorá el codebase completo** - Leé todos los archivos relevantes del proyecto

2. **Revisá lo que沟 HICIMOS HOY**:
   - Launch un agente para auditar `penalties.ts` - verificar que el cap 30 días está bien implementado
   - Launch un agente para auditar `dashboard/page.tsx` - verificar que ahora sí lee de la DB correctamente
   - Launch un agente para auditar `pagos/PagosClient.tsx` y `api/admin/pagos/route.ts` - verificar POST funciona
   - Launch un agente para auditar `servicios/ServiciosClient.tsx` - verificar porcentaje editable

3. **Revisá las RECOMENDACIONES PENDIENTES** (del PROYECTO_MYRISTICA.md):
   - Formulario para registrar pagos reales (¿ya está completo o falta algo?)
   - Agregar sección de gastos/expensas (¿ya está `/servicios` completo?)
   - Página de historial de cambios (existe `historial_cambios` table y API pero ¿hay UI?)
   - Notifications/alertas (¿se necesita?)

4. **Verificá que el stack completo funcione**:
   - Auth (NextAuth v5 con Credentials)
   - DB (Supabase PostgreSQL con Drizzle ORM)
   - Deploy (Vercel con auto-deploy)
   - Edit mode (password protection con clave `myristica2026!`)

5. **Ofrecé correcciones y cambios**:
   - Identificá bugs o problemas
   - Sugerí mejoras
   - Preguntame qué quiero proceder con correcciones

### Archivos clave a revisar:
- `src/lib/penalties.ts` - cálculos de deuda y penalidades
- `src/lib/ipc.ts` - ajustes IPC
- `src/lib/contract.ts` - constantes del contrato
- `src/lib/schema.ts` - esquema de DB
- `src/lib/auth.ts` - NextAuth config
- `src/app/dashboard/page.tsx` - dashboard principal
- `src/app/pagos/page.tsx` y `PagosClient.tsx` - tabla de pagos
- `src/app/servicios/page.tsx` y `ServiciosClient.tsx` - servicios
- `src/app/api/admin/*` - todas las rutas API

### Información del contrato:
- Inicio: 1 marzo 2025, duración 36 meses
- Monto base: $3,500,000/mes
- Ajuste: trimestral por IPC (INDEC)
- Penalidad: 0.30% diario, cap 30 días
- Acuerdo verbal: $4,500,000/mes desde mar 2026

### IMPORTANTE sobre Next.js 16.2.1:
- `cookies()` y `headers()` son **async**
- `params` en page components es una **Promise**
- Middleware está deprecated (funciona con warning)

Respondé con:
1. Resumen de qué está bien y qué no
2. Lista de bugs o problemas encontrados
3. Mejoras recomendadas
4. Preguntas sobre qué corregir

No escribas código hasta que yo te lo indique. Hacé la auditoría primero.
```

---

## Notas adicionales para Claude Code

### Datos de seeding actuales:
- **3 servicios**: ABL, AYSA, Edenor (todos con 45% de porcentaje)
- **13 meses de gastos**: desde mar 2025 hasta mar 2026
- **Pagos**: todos los meses excepto mar 2026 con $3,500,000

### Cosas que sabemos que FALTAN (según historial):
- Página de historial de cambios (`historial_cambios` table existe pero no hay UI)
- Agregar/eliminar servicios desde UI
- Eliminar entries de gastos desde UI
- Editar el campo "acordado" ($4,500,000) desde UI

### Posibles bugs conocidos:
- El `historial/route.ts` tiene variables no usadas (warning de linter)
- `penalties.ts` línea 83 tiene `fechaPagoReal` no usado (warning)

---

## Para copiar y pegar en Claude Code

El prompt completo está arriba en la sección "Prompt inicial para Claude Code".
