# Changelog of Sii Chile Pre IVA (`joan.sevenscale/sii-chile-pre-iva`) Actor

- **URL**: https://apify.com/joan.sevenscale/sii-chile-pre-iva/changelog.md
- **Full Actor documentation**: https://apify.com/joan.sevenscale/sii-chile-pre-iva.md

## Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

### \[1.1.1] - 2025-11-28

#### Fixed

- 🐛 **Código 504 (REMANENTE)**: Corregida búsqueda priorizando Línea 36, Código 504, retornando 0 si no se encuentra
- 🐛 **Código 48 (Impuesto Único)**: Corregida búsqueda priorizando Línea 60, Código 48 para obtener valor correcto
- 🐛 **Precisión de búsqueda**: Mejorada usando línea y código directamente en lugar de solo texto genérico

#### Technical Details

- Refactorización del servicio F29 para mejorar mantenibilidad
- Reducción de código duplicado en búsquedas de códigos tributarios

### \[1.1.0] - 2025-11-28

#### Changed

- 🔄 **Mapeo F29 actualizado** según especificaciones del Excel oficial:
  - Código 504 (REMANENTE): Línea 50, Código 77 (antes Línea 36, Código 504)
  - Código 756 (IVA Postergado): Línea 50, Código 756
  - Código 49 (Retención 3%): Línea 63, Código 49
  - Código 48 (Impuesto Único): Línea 60, Código 48
- 🔄 **Búsqueda por texto mejorada**: Prioriza textos específicos y busca valor más cercano al texto encontrado
- 🔄 **Apertura de formulario**: Asegura que se abre 'Ver Datos' en lugar de 'Formulario Compacto' para obtener formulario HTML completo

#### Technical Details

- Mejoras significativas en el algoritmo de extracción del Formulario 29
- Búsqueda más precisa usando combinación de línea y código tributario
- Mejor manejo de formularios HTML dinámicos generados por GWT

### \[1.0.73] - 2024-11-13

#### Added

- ✨ **Generación completa del Formulario 29** con todos los códigos tributarios
- ✨ **Arquitectura modular** con servicios independientes:
  - `RCVService`: Extracción de Registro de Compras y Ventas
  - `F29Service`: Códigos 048, 049, 756 del Formulario 29
  - `BoletasService`: Código 151 de Retención de Honorarios
- ✨ **Código 151** - Retención de Honorarios desde Boletas Electrónicas ✅
- ✨ **Código 756** - IVA Postergado desde F29 ✅
- ✨ **Código 62** - PPM calculado al 2% de ventas ✅
- ✨ **Código 50** - Remanente Acumulado con persistencia en Key-Value Store ✅
- ✨ **Código 91** - Total a Pagar calculado automáticamente ✅
- ✨ **Cálculo automático de Remanente** del período N-1
- ✨ **Formato "PRE IVA"** con estructura completa para declaración
- ✨ **Protección anti-modales** para evitar bloqueos del SII
- ✨ **Sesiones independientes** por servicio para mayor robustez
- ✨ **Logging detallado** con timestamps en todos los procesos

#### Changed

- 🔄 **Input simplificado**: Solo requiere `rut`, `password` y `periodo`
  - Eliminado `tipoRegistro` (siempre extrae todo)
  - Eliminado `remanente` manual (se calcula automáticamente)
- 🔄 **Output enriquecido**: Incluye `f29Completo` y `datosOriginales`
- 🔄 **Refactorización completa** siguiendo Clean Architecture
- 🔄 **Manejo de errores mejorado** con códigos específicos
- 🔄 **Validación de inputs** con Zod actualizada

#### Fixed

- 🐛 Cálculo correcto de Notas de Crédito (valor negativo)
- 🐛 Aplicación correcta del Remanente en IVA Determinado
- 🐛 Manejo de modales de "cargando" del SII
- 🐛 Extracción de DIN solo en compras
- 🐛 Cálculo de período anterior (N-1 vs N-2)
- 🐛 Parsing de valores monetarios con JavaScript dinámico

#### In Progress

- ⚠️ **Código 048** - Impuesto Único 2da Categoría (90% funcional, en standby)
- ⚠️ **Código 049** - Retención 3% (90% funcional, en standby)

#### Technical Details

- TypeScript 5.3+ con strict mode
- Playwright para automatización
- Apify SDK 3.x
- Zod para validación
- Retry loops con esperas progresivas
- Búsqueda en iframes y frames dinámicos
- Manejo de contenido JavaScript generado

### \[1.0.0] - 2024-11-10

#### Added

- ✨ **Autenticación automática** en el SII con RUT y Clave Tributaria
- ✨ **Extracción de Registro de Compras**
- ✨ **Extracción de Registro de Ventas**
- ✨ **Cálculo automático de resúmenes** de IVA (débito, crédito, diferencia)
- ✨ **Validación de RUT chileno** con dígito verificador
- ✨ **Soporte para selección de período** tributario (formato YYYYMM)
- ✨ **Manejo robusto de errores** con códigos específicos
- ✨ **Screenshots automáticos** en caso de error para debugging
- ✨ **Soporte para proxies** (especialmente chilenos)
- ✨ **Logging detallado** con timestamps
- ✨ **Tipos TypeScript completos** para toda la estructura de datos
- ✨ **Validación de inputs** con Zod
- 📝 **Documentación completa** (README, QUICKSTART, INTEGRATION, DEPLOYMENT)
- 🧪 **Ejemplos de integración** con NestJS, React y API pura
- 🐳 **Dockerfile optimizado** para Apify
- ⚙️ **Configuración de Actor** con input schema

#### Technical Details

- TypeScript 5.3+ con modo strict
- Playwright para automatización del navegador
- Apify SDK 3.x para integración con la plataforma
- Zod para validación de schemas
- Clean Architecture y principios SOLID
- Error handling comprehensivo
- Locale configurado a es-CL y timezone America/Santiago

#### Documentation

- README principal con guía completa
- QUICKSTART para empezar en 5 minutos
- INTEGRATION con ejemplos de NestJS, React, Python
- DEPLOYMENT con 3 métodos diferentes
- PROJECT_STRUCTURE con arquitectura detallada
- 7 ejemplos de código listos para usar

### \[Unreleased]

#### Planned Features

##### Corto Plazo (Q1 2025)

- \[ ] Completar Código 048 (Impuesto Único 2da Categoría)
- \[ ] Completar Código 049 (Retención 3%)
- \[ ] Exportación directa a PDF del Formulario 29
- \[ ] Tests automatizados (unit + e2e)
- \[ ] CI/CD con GitHub Actions

##### Mediano Plazo (Q2 2025)

- \[ ] Dashboard web de visualización de resultados
- \[ ] Comparación de períodos múltiples
- \[ ] Gráficos de evolución de IVA
- \[ ] Alertas cuando IVA supera cierto monto
- \[ ] Exportación a Excel con formato SII oficial

##### Largo Plazo (Q3-Q4 2025)

- \[ ] Integración con sistemas contables (Contabilium, Defontana, etc.)
- \[ ] Integración con Telegram/WhatsApp para notificaciones
- \[ ] Soporte para múltiples RUTs en una sola ejecución
- \[ ] API REST standalone (sin depender de Apify)
- \[ ] Soporte para Formulario 50 (Declaración Anual de Renta)
- \[ ] Soporte para CAPTCHA resolution automática
- \[ ] Cache de resultados con Redis
- \[ ] Retry automático con backoff exponencial
- \[ ] Webhooks para notificaciones de completitud
- \[ ] Machine Learning para detectar anomalías en IVA

#### Known Issues

- ⚠️ Código 048: El link del folio puede tardar hasta 90s en aparecer (en investigación)
- ⚠️ Código 049: Mismo issue que 048
- ⚠️ Proxies: Los proxies gratuitos a veces son bloqueados por el SII

#### Breaking Changes (None in 1.x)

- La versión 1.x mantendrá compatibilidad retroactiva
- Cualquier breaking change será versionado como 2.0.0

***

### Versioning Strategy

Este proyecto sigue [Semantic Versioning](https://semver.org/):

- **MAJOR** (X.0.0): Cambios incompatibles en la API
- **MINOR** (0.X.0): Nueva funcionalidad compatible hacia atrás
- **PATCH** (0.0.X): Correcciones de bugs compatibles

#### Version Tags

- `latest`: Última versión estable
- `beta`: Versión en pruebas
- `dev`: Rama de desarrollo

### Migration Guides

#### From 1.0.0 to 1.0.73

**Input Changes:**

```diff
{
  "rut": "76515462-6",
  "password": "tu_clave",
  "periodo": "202510",
- "tipoRegistro": "ambos",  // Ya no necesario
- "remanente": 0            // Ya no necesario (se calcula auto)
}
```

**Output Changes:**

```diff
{
+ "f29Completo": {          // Nuevo: Formulario 29 completo
+   "periodo": "10-2025",
+   "Ventas": { ... },
+   "Compras": { ... }
+ },
  "datosOriginales": {       // Renombrado de resultado anterior
    "periodo": "202510",
    "compras": [...],
    "ventas": [...]
  }
}
```

**Code Migration:**

```typescript
// Before (1.0.0)
const resultado = items[0];
const totalVentas = resultado.resumen.totalVentas;

// After (1.0.73)
const resultado = items[0];
const totalVentas = resultado.f29Completo.Ventas['Codigo 538'].valor;
const totalAPagar = resultado.f29Completo.Compras['Codigo 91'].valor;
```

***

Para ver el detalle de cada versión, visita [GitHub Releases](https://github.com/yourusername/apify-sii-scraper/releases).

**¿Encontraste un bug?** [Reporta un issue](https://github.com/yourusername/apify-sii-scraper/issues/new)
