# Diagramas de Flujo — Casos de Uso Importaciones

> Cada diagrama corresponde a un caso de uso en [`imports_cu_comprensibles.md`](./imports_cu_comprensibles.md).
> Formato: Mermaid — compatible con Notion, GitHub y VSCode.
> **Cómo usar en Notion:** bloque `/code` → lenguaje `mermaid` → pegar el contenido.

---

## CU-IMP-001 · Procesar TEM (Importación Temporal)

```mermaid
flowchart TD
    START([Usuario presiona\nActualizar Factura - TEM]) --> CHK1{¿La factura\nestá Pendiente?}
    CHK1 -- No --> E1([❌ Error\nYa fue procesada])
    CHK1 -- Sí --> V1[Validar encabezado\nfecha · proveedor · destinatario\nTC · moneda · pedimento]
    V1 --> TC{¿Existe el TC\ndel día en el catálogo?}
    TC -- No --> E2([❌ Error\nTC obligatorio para TEM\nno es opcional como en exports])
    TC -- Sí --> TC2{¿TC de la factura\n== TC del catálogo?}
    TC2 -- No --> E3([❌ Error\nTipo de cambio\nno coincide])
    TC2 -- Sí --> V2[Validar clases · fracciones\nnúmeros de parte · Regla 3.1.21\nrevisión física si aplica]
    V2 --> V3{¿Errores en\nclases o fracciones?}
    V3 -- Sí --> E4([❌ Error\nClase o fracción inválida])
    V3 -- No --> V4[Validar pesos por partida\nKGS o LBS según configuración]
    V4 --> CALC[Calcular valores sin IVA\nCosto x Cantidad x TC\npesos · dólares · moneda cuenta]
    CALC --> VL[Validar por cada partida\ncosto > 0 · clase activa\nparte activa · series · UMA]
    VL --> VL2{¿Errores en\npartidas?}
    VL2 -- Sí --> E5([❌ Error\nCosto cero · clase desactivada\nparte desactivada · series faltantes])
    VL2 -- No --> OCT{¿Alguna partida\ntiene permiso PROSEC?}
    OCT -- Sí --> OCTVAL[Validar permisos\nde Regla Octava\nver CU-IMP-004]
    OCT -- No --> TOTALS
    OCTVAL --> OCTCHK{¿Permisos\nválidos y con cupo?}
    OCTCHK -- No --> E6([❌ Error\nPermiso vencido\no cupo agotado])
    OCTCHK -- Sí --> TOTALS[Calcular totales de la factura\nsumar IVA si fecha ≥ 2014-12-31\nagregar incrementables]
    TOTALS --> LEDGER[Generar entrada en el ledger\nun movimiento ENTRADA por partida principal\nbase del inventario futuro]
    LEDGER --> FIN([✅ Factura PROCESADA\nSaldos de inventario creados\nListos para ser exportados])

    style FIN fill:#1D6B3C,color:#fff,rx:16
    style START fill:#1F4E79,color:#fff,rx:16
    style E1 fill:#C55A11,color:#fff,rx:16
    style E2 fill:#C55A11,color:#fff,rx:16
    style E3 fill:#C55A11,color:#fff,rx:16
    style E4 fill:#C55A11,color:#fff,rx:16
    style E5 fill:#C55A11,color:#fff,rx:16
    style E6 fill:#C55A11,color:#fff,rx:16
```

---

## CU-IMP-002 · Procesar DEF (Importación Definitiva)

```mermaid
flowchart TD
    START([Usuario presiona\nActualizar Factura - DEF]) --> V1[Validaciones de encabezado\nigual que TEM]
    V1 --> CALC[Calcular valores CON IVA\nSubtotal + IVA = Total\npor cada partida\nen pesos · dólares · moneda cuenta]
    CALC --> VL[Validar partidas\ncosto · clase · parte · series · UMA]
    VL --> CHK{¿Errores?}
    CHK -- Sí --> E1([❌ Error\nCorregir partidas])
    CHK -- No --> TOTALS[Calcular totales incluyendo\ntotales de IVA]
    TOTALS --> NOTE[No se generan saldos\nen el ledger de inventario\neste material llegó para\nquedarse en México]
    NOTE --> FIN([✅ Factura PROCESADA\nSin movimientos en inventario])

    style FIN fill:#1D6B3C,color:#fff,rx:16
    style START fill:#1F4E79,color:#fff,rx:16
    style E1 fill:#C55A11,color:#fff,rx:16
    style NOTE fill:#FFF3E0,rx:8
```

---

## CU-IMP-003 · Procesar MEX (Compra Mexicana)

```mermaid
flowchart TD
    START([Usuario presiona\nActualizar Factura - MEX]) --> NOTE[Compra a proveedor mexicano\nNo hay trámite aduanero real\ndocument_type no es obligatorio]
    NOTE --> V1[Validaciones de encabezado\nigual que DEF]
    V1 --> CALC[Calcular valores CON IVA\nidéntico a DEF]
    CALC --> TOTALS[Calcular totales con IVA]
    TOTALS --> FIN([✅ Factura PROCESADA\nSin movimientos en inventario])

    style FIN fill:#1D6B3C,color:#fff,rx:16
    style START fill:#1F4E79,color:#fff,rx:16
    style NOTE fill:#FFF3E0,rx:8
```

---

## CU-IMP-004 · Procesar TEM con Regla Octava (PROSEC)

```mermaid
flowchart TD
    START([Partida con permiso\nde Regla Octava detectada]) --> PROSEC{¿La empresa\ntiene PROSEC activo?}
    PROSEC -- No --> E1([❌ Error\nNo se puede usar Regla Octava\nsin programa PROSEC])
    PROSEC -- Sí --> P1[Buscar el permiso\nen el catálogo]
    P1 --> P2{¿Permiso\nexiste?}
    P2 -- No --> E2([❌ Error\nPermiso no dado de alta])
    P2 -- Sí --> P3{¿Fecha de la factura\ndentro del rango\ndel permiso?}
    P3 -- No --> E3([❌ Error\nFecha fuera del\nrango del permiso])
    P3 -- Sí --> P4{¿Fracción de la partida\ncoincide con la del permiso?}
    P4 -- No --> P4B{¿Permiso anterior\na mayo 2010 y fracción\nen historial?}
    P4B -- No --> E4([❌ Error\nFracción no corresponde\nal permiso])
    P4B -- Sí --> P5
    P4 -- Sí --> P5{¿Cupo del permiso\n> 0?}
    P5 -- No --> E5([❌ Error\nCupo agotado])
    P5 -- Sí --> P6{¿País de origen\nen el permiso?}
    P6 -- No --> E6([❌ Error\nPaís de origen no\nampara el permiso])
    P6 -- Sí --> P7[Calcular cantidad y valor\na descontar del cupo\ncon equivalencia de unidades si aplica]
    P7 --> P8[Verificar que el cupo\nalcance para todas\nlas partidas del lote]
    P8 --> P9{¿Cupo\nsuficiente?}
    P9 -- No --> E7([❌ Error\nCupo insuficiente para\ncubrir la importación])
    P9 -- Sí --> SAVE[Descontar cupo del permiso\nRegistrar saldo PROSEC\nvinculado a esta factura]
    SAVE --> FIN([✅ Permisos PROSEC descontados\nContinúa con flujo TEM normal\nver CU-IMP-001])

    style FIN fill:#1D6B3C,color:#fff,rx:16
    style START fill:#2E75B6,color:#fff,rx:16
    style E1 fill:#C55A11,color:#fff,rx:16
    style E2 fill:#C55A11,color:#fff,rx:16
    style E3 fill:#C55A11,color:#fff,rx:16
    style E4 fill:#C55A11,color:#fff,rx:16
    style E5 fill:#C55A11,color:#fff,rx:16
    style E6 fill:#C55A11,color:#fff,rx:16
    style E7 fill:#C55A11,color:#fff,rx:16
```

---

## CU-IMP-005 · Revertir TEM

```mermaid
flowchart TD
    START([Usuario presiona\nDesactualizar Factura - TEM]) --> CHK1{¿La factura\nestá Procesada?}
    CHK1 -- No --> E1([❌ Error\nNo se puede revertir])
    CHK1 -- Sí --> BLOCK[Verificar si alguna partida\nestá siendo consumida por\nuna exportación activa]
    BLOCK --> CHK2{¿Hay exportaciones\nactivas usando\nestos saldos?}
    CHK2 -- Sí --> E2([❌ Bloqueado\nver CU-IMP-007\nRevertir exportaciones primero])
    CHK2 -- No --> R1[1 · Revertir Regla Octava si aplica\nDevolver cupos a los permisos\nEliminar registros de saldo PROSEC]
    R1 --> R2[2 · Reiniciar totales del encabezado\ntodos los valores a cero\nstatus a Pendiente]
    R2 --> R3[3 · Reiniciar contadores\nde cada partida a cero]
    R3 --> R4[4 · Anular saldos en el ledger\ninsertar movimientos ANULACIÓN DE ENTRADA\nque neutralizan las ENTRADAS originales]
    R4 --> FIN([✅ Factura REVERTIDA\nInventario neutralizado\nHistorial completo y auditable])

    style FIN fill:#1D6B3C,color:#fff,rx:16
    style START fill:#1F4E79,color:#fff,rx:16
    style E1 fill:#C55A11,color:#fff,rx:16
    style E2 fill:#C55A11,color:#fff,rx:16
```

---

## CU-IMP-006 · Revertir DEF o MEX

```mermaid
flowchart TD
    START([Usuario presiona\nDesactualizar Factura - DEF o MEX]) --> CHK1{¿La factura\nestá Procesada?}
    CHK1 -- No --> E1([❌ Error\nNo se puede revertir])
    CHK1 -- Sí --> NOTE[DEF y MEX nunca generaron\nsaldos en el ledger\nni cupos de Regla Octava]
    NOTE --> CLEAN[Reiniciar todos los valores\ndel encabezado a cero\nstatus a Pendiente]
    CLEAN --> FIN([✅ Factura REVERTIDA\nSin efectos adicionales])

    style FIN fill:#1D6B3C,color:#fff,rx:16
    style START fill:#1F4E79,color:#fff,rx:16
    style E1 fill:#C55A11,color:#fff,rx:16
    style NOTE fill:#FFF3E0,rx:8
```

---

## CU-IMP-007 · Reversión bloqueada por exportaciones activas

```mermaid
flowchart TD
    START([Usuario intenta\nDesactualizar Factura TEM]) --> SCAN[Recorrer cada partida\nde la factura]
    SCAN --> FIND[Buscar registros de descarga\ncon estado APLICADO\nvinculados a exportaciones procesadas]
    FIND --> CHK{¿Hay descargas\nactivas?}
    CHK -- No --> OK([Reversión permitida\ncontinúa con CU-IMP-005])
    CHK -- Sí --> MSG[Mostrar un mensaje por cada\nexportación activa involucrada\nfactura · línea · cantidad descargada]
    MSG --> BLOCK([❌ Reversión BLOQUEADA\nEl usuario debe revertir primero\ncada exportación indicada])

    style OK fill:#1D6B3C,color:#fff,rx:16
    style BLOCK fill:#C55A11,color:#fff,rx:16
    style START fill:#1F4E79,color:#fff,rx:16
```

---

## Visión general — todos los tipos de importación

```mermaid
flowchart LR
    subgraph PROCESAR ["⬆️ PROCESAR"]
        TEM[TEM\nGenera saldos PEPS\nsin IVA]
        TEMO[TEM + PROSEC\nGenera saldos\ndescuenta cupo RO]
        DEF[DEF\nSin saldos\ncon IVA]
        MEX[MEX\nSin saldos\ncon IVA]
    end

    subgraph REVERTIR ["⬇️ REVERTIR"]
        RTEM[Revertir TEM\nAnula saldos · restaura cupo\nledger ANULACIÓN]
        RDEF[Revertir DEF o MEX\nSolo limpia totales]
    end

    subgraph BLOQUEOS ["🚫 BLOQUEOS"]
        BEXP[Bloqueada por\nexportaciones activas\nque usan los saldos]
    end

    subgraph RELACION ["🔗 Relación con Exports"]
        EXP[Exportaciones AFIJO\nDONAC · SCRAP · REEXP · VEMEX\nconsumen saldos generados por TEM]
    end

    TEM -->|crea saldos| EXP
    TEMO -->|crea saldos| EXP
    TEM --> RTEM
    TEMO --> RTEM
    DEF --> RDEF
    MEX --> RDEF
    RTEM --> BEXP
    EXP -->|si está activa bloquea| BEXP

    style PROCESAR fill:#E2EFDA,rx:8
    style REVERTIR fill:#DEEAF1,rx:8
    style BLOQUEOS fill:#FCE4D6,rx:8
    style RELACION fill:#EAE3F0,rx:8
```
