# 🆘 Instructivo: Fix de Inventario + Rollback de Emergencia

## Archivos relacionados

| Archivo | Proposito |
|---------|-----------|
| `fix_inventory_flow_complete.sql` | Aplica el fix completo de flujo de inventario |
| `rollback_inventory_flow_complete.sql` | Revierte el fix completo (restaura funciones originales) |
| `emergency_rollback_inventory.sh` | Script bash interactivo para ejecutar el rollback facilmente |

---

## ⚠️ Antes de aplicar el fix

1. **Hacer backup de la base de datos:**
   ```bash
   pg_dump -U postgres -d hotel_hacienda > backup_antes_fix_inventario.sql
   ```

2. **Asegurarse de que nadie este usando el sistema** (idealmente en horario de bajo trafico).

---

## 🚀 Aplicar el fix

### Opcion 1: Con psql
```bash
cd /ruta/al/proyecto
psql -U postgres -d hotel_hacienda -f scripts_sql/fix_inventory_flow_complete.sql
```

### Opcion 2: Desde dentro de psql
```bash
psql -U postgres -d hotel_hacienda
```
```sql
\i scripts_sql/fix_inventory_flow_complete.sql
```

---

## ✅ Validar despues del fix

1. Crear un expense con productos
2. Aprobarlo
3. Ir a **Purchase Entries** y registrar la recepcion fisica
4. Verificar que el stock subio correctamente
5. Ir a **Payments** y pagar el expense
6. Verificar que el stock **NO** cambio
7. Rechazar el pago (cancelar el expense)
8. Verificar que el stock bajo correctamente

---

## 🆘 Revertir el cambio (Rollback)

### Opcion 1: Script interactivo de emergencia (recomendado)
```bash
cd /ruta/al/proyecto
./scripts_sql/emergency_rollback_inventory.sh
```
El script pedira confirmacion escribiendo `SI`.

### Opcion 2: Con psql manualmente
```bash
cd /ruta/al/proyecto
psql -U postgres -d hotel_hacienda -f scripts_sql/rollback_inventory_flow_complete.sql
```

### Opcion 3: Desde dentro de psql
```bash
psql -U postgres -d hotel_hacienda
```
```sql
\i scripts_sql/rollback_inventory_flow_complete.sql
```

---

## 📋 Que hace el rollback exactamente

Restaura estas funciones a su estado anterior al fix:

| Funcion | Comportamiento despues del rollback |
|---------|-------------------------------------|
| `setpaymentstatusv2(status = 1)` | Vuelve a sumar stock al pagar |
| `setpaymentstatusv2(status = 3)` | No revierte stock al rechazar |
| `newexpensev2` | Vuelve a crear movimientos de stock al crear expense |
| `updateexpensev4` | Vuelve a crear/actualizar movimientos al editar expense |
| `purchaseentry` | Version original sin actualizar `purchase_detail.id_stock_mov` |

---

## ⚠️ Nota importante

El rollback **NO elimina** el tipo de movimiento `Cancellation` que se creo en `movement_type`, ni borra los movimientos de stock generados con ese tipo. Si ya se usaron esos movimientos, quedaran en la base de datos. Esto no afecta el funcionamiento del sistema anterior.
