# Estructura General
Por defecto, la estructura general que nosotros utilizaremos para almacenar todo lo relacionado con los impuestos aplicados a los conceptos es la siguiente:

    ```json
        {
            "taxes": {
                "iva": ...,
                "ieps": ...
            },
            "withholding_taxes": { 
                "isr": { "rate": 0.0 },
                "iva": { "rate": 0.0 }
            }
        }
    ```
  
# Estructura Especifica (Impuestos en Conceptos)

Este archivo describe **todas las formas posibles** en que los campos `taxes` y `withholding_taxes` pueden ser rellenados dentro de un producto o servicio, para que puedan ser aceptados en cualquier contexto.

---

## 1. Taxes
El bloque `taxes` define los **impuestos trasladados** aplicables al concepto.

### Formato general:
```json
"taxes": {
    "iva": {
        "rate": 0.00,
        "exempt": false
    },
    "ieps": {
        "type": "porcentaje" | "cuota" | "mixto",
        "rate": 0.00,
        "percentage": 0.00,
        "quota": 0.00
    }
}
```

### Posibilidades de configuración:

#### 1.1 IVA estándar (16%)
```json
"taxes": {
    "iva": { "rate": 0.16, "exempt": false },
    "ieps": null
}
```
➡ Aplica IVA del 16% sobre el precio base del producto.

---

#### 1.2 Exento de IVA
```json
"taxes": {
    "iva": { "rate": 0, "exempt": true },
    "ieps": null
}
```
➡ El producto **sí es objeto de impuesto**, pero **exento** de IVA.

---

#### 1.3 Sin impuestos (no objeto o sin desglose)
```json
"taxes": {
    "iva": null,
    "ieps": null
}
```
➡ El concepto **no tiene impuestos trasladados**. Se usa cuando `object_tax` es `"01"` o `"03"`.

---

#### 1.4 IEPS porcentaje + IVA
```json
"taxes": {
    "iva": { "rate": 0.16, "exempt": false },
    "ieps": { "type": "porcentaje", "rate": 0.08 }
}
```
➡ Aplica IEPS del 8% y además IVA 16%.

---

#### 1.5 IEPS cuota + IVA
```json
"taxes": {
    "iva": { "rate": 0.16, "exempt": false },
    "ieps": { "type": "cuota", "rate": 1.50 }
}
```
➡ IEPS se calcula por **cuota fija por unidad** (no porcentaje).

---

#### 1.6 IEPS mixto + IVA
```json
"taxes": {
    "iva": { "rate": 0.16, "exempt": false },
    "ieps": {
        "type": "mixto",
        "percentage": 0.08,
        "quota": 0.50
    }
}
```
➡ IEPS mixto: aplica **porcentaje + cuota fija** en conjunto con IVA.

---

#### 1.7 Tasa 0%
```json
"taxes": {
    "iva": { "rate": 0, "exempt": false },
    "ieps": null
}
```
➡ Aplica **IVA tasa 0** (por ejemplo, exportaciones o alimentos).

---

## 2. Withholding Taxes
El bloque `withholding_taxes` define los **impuestos retenidos** por el receptor de la factura (cliente).

### Formato general:
```json
"withholding_taxes": {
    "isr": { "rate": 0.00 },
    "iva": { "rate": 0.00 }
}
```

### Posibilidades de configuración:

#### 2.1 Sin retenciones
```json
"withholding_taxes": {
    "isr": null,
    "iva": null
}
```
➡ El concepto **no tiene retenciones** aplicadas.

---

#### 2.2 Retención ISR únicamente
```json
"withholding_taxes": {
    "isr": { "rate": 0.10 },
    "iva": null
}
```
➡ Retención del **10% de ISR** (común en honorarios o arrendamientos).

---

#### 2.3 Retención IVA únicamente
```json
"withholding_taxes": {
    "isr": null,
    "iva": { "rate": 0.106667 }
}
```
➡ Retención de **dos tercios del IVA (10.6667%)**, típica en servicios profesionales.

---

#### 2.4 Retención mixta (ISR + IVA)
```json
"withholding_taxes": {
    "isr": { "rate": 0.10 },
    "iva": { "rate": 0.106667 }
}
```
➡ Retiene tanto ISR como IVA sobre el mismo concepto.

---

#### 2.5 Retención simbólica o nula
```json
"withholding_taxes": {
    "isr": { "rate": 0 },
    "iva": { "rate": 0 }
}
```
➡ Se declara estructura vacía sin efecto monetario (usado en pruebas o simulaciones).

---

## 3. Reglas Generales
- Los **impuestos trasladados (`taxes`)** **suman** al precio base del producto.  
- Las **retenciones (`withholding_taxes`)** **restan** al total del concepto.  
- Si un producto tiene ambos, el cálculo del total por concepto es:
  ```
  total_concepto = base + traslados - retenciones
  ```
- Los impuestos **locales (ISH, etc.)** no van aquí, sino en el bloque `local_taxes` a nivel factura.

---

**Fin del archivo**
