# Set Basico v1 - EVENTSUD - SOK

**Identificador del Set SII:** `4841000`
**Tipo de Set:** SET BASICO - Version 1
**RUT Emisor:** `78073481-7` (EVENTSUD PRODUCCIONES LIMITADA)
**RUT Firmante:** `16658678-K`
**Track ID:** `0249675518`
**NUM_ATENCION:** `126661`
**Fecha emision/envio:** 2026-05-26
**Estado SII envio:** `EPR - Envio Procesado` (8/8 aceptados, 0 reparos, 0 rechazados)
**Estado SII revision del set:** `SOK - SET DE PRUEBA CORRECTO`

## DTEs incluidos

| # | Caso | Tipo | Folio | Monto Total | Descripcion |
|---|---|---|---|---|---|
| 1 | 4841000-1 | 33 | 13 | 1.719.855 | Factura 2 items afectos |
| 2 | 4841000-2 | 33 | 14 | 12.743.671 | Factura 2 items afectos con descuento por linea 12% y 30% |
| 3 | 4841000-3 | 33 | 25 | 2.506.406 | Factura 2 items afectos + 1 servicio exento |
| 4 | 4841000-4 | 33 | 26 | 5.485.873 | Factura 2 items afectos + 1 exento + descuento global 29% afectos |
| 5 | 4841000-5 | 61 | 11 | 0 | NC fe-de-erratas corrige giro receptor (ref factura f13) |
| 6 | 4841000-6 | 61 | 18 | 6.250.543 | NC devolucion parcial (ref factura f14, hereda dsc 12% y 30%) |
| 7 | 4841000-7 | 61 | 19 | 2.506.406 | NC anula completa factura f25 |
| 8 | 4841000-8 | 56 | 6 | 0 | ND fe-de-erratas anula NC f11 |

## Receptor

Comun para los 8 DTEs:

- RUT: `78014612-5`
- Razon Social: INVERSIONES RIVER AND LAKE SPA
- Giro: INVERSIONES
- Direccion: ALC CARLOS ALARCON #113 LOS ALCALDES, PANGUIPULLI

## Historial de intentos antes de SOK

| Intento | TrackID | Fecha | Resultado envio | Resultado revision | Diagnostico |
|---|---|---|---|---|---|
| v2 | 0249672270 | 2026-05-26 14:00 | EPR 7/8 + 1 reparo | (no se declaro) | Folio 31 (caso 2) RPR `DET L[n] -2-200`: MontoItem confiaba en `total` del JSON sin restar descuento por linea |
| v3 | 0249673566 | 2026-05-26 14:18 | EPR 8/8 aceptados | SRH | Casos 5, 6, 8: items con `QtyItem=1 PrcItem=0` cuando deberian omitirse; caso 6 NC sin DescuentoPct heredado de factura |
| v4 | 0249674956 | 2026-05-26 14:34 | EPR 5/8 (3 rechazados) | (no se declaro) | REF-3-750 "DTE Referenciado no recibido": folios zombi en estado `reservado` bloquearon asignacion, refs del JSON apuntaban a folios distintos a los reales |
| **v5** | **0249675518** | **2026-05-26 14:40** | **EPR 8/8 aceptados** | **SOK** | OK |

## Fixes incorporados al motor para este caso

1. **fix(dte): cURL Expect:'' + TLS 1.2 forzados en transporte SII** (commit `ebede91`)
   - cURL 56 en `/cgi_dte/UPL/DTEUpload` se debia a `Expect: 100-continue` no respondido por SII y cierre TLS 1.3 abrupto. Se agrega `Expect: ''` y `CURLOPT_SSLVERSION = TLSv1.2`.

2. **fix(dte): recalcular MontoItem cuando hay descuento por linea** (commit `6ae968d`)
   - `DteXmlBuilder` ahora siempre recalcula `MontoItem = PrcItem*QtyItem - DescuentoMonto` si hay descuento por linea. Antes confiaba en el `MontoItem` del input (que el ERP suele mandar como bruto).

3. **fix(dte): items NC/ND fe-de-erratas sin QtyItem/PrcItem + NC hereda DescuentoPct** (commit `419845b`)
   - `itemPosToErp` ya no fuerza `cantidad: 1` ni `precio: null` por defecto. Si el JSON no trae esas claves, el XML del DTE tampoco las lleva (igual que fuente-verdad DTEengine que certifico).
   - JSON casos 5/8: items reducidos a `{nombre, descripcion, total: 0}`.
   - JSON caso 6: items heredan `descuento_pct` 12% y 30% de la factura referenciada.

## Como reproducir

```bash
php artisan dte:emitir-set-pruebas tests/Fixtures/SetPruebasSII/casos_exito/set_basico_v1_eventsud_input.json
```

Requiere CAF tipo 33, 56, 61 activos en `dte_cafs`, y certificado vigente en
`dte_certificados` (par_empresa_id=1, ruta_pfx valido, password descifrable
con Crypt). Los folios reales asignados dependen del estado de `dte_folio_usages`
y de los folios consumidos en el SII al momento de ejecutar.

## Notas operacionales

- **El SII consume folios incluso en rechazos.** Si un envio sale con DTEs
  rechazados, el SII registra esos folios como ocupados. Para reemitir un set
  con reparos hay que **reemitir el set completo con folios nuevos**, no
  reemitir DTEs sueltos (ver memoria `feedback-set-pruebas-reemision`).
- **EPR no es aprobacion final.** Tras un envio EPR limpio, el usuario debe
  **declarar el avance** en el portal del SII. Solo despues llega el correo
  con estado `SOK` (set correcto) o `SRH` (set rechazado con detalle).
- **Las referencias cross-internas del envelope funcionan.** Los DTEs del mismo
  batch pueden referenciarse entre si (NC -> factura del mismo set, ND -> NC
  del mismo set). Requisito: que los folios del JSON refs coincidan exactamente
  con los folios que reservara `CafService::siguienteFolio`.
- **Cuidar folios zombi.** Folios en estado `reservado` (sin transicion a
  `emitido`/`enviado`) bloquean la asignacion futura. Despues de cualquier
  emision fallida, reconciliar `dte_folio_usages` contra la lista real del SII.
