---
audiencia: usuario
screen_key: contabilidad
aliases: [contabilidad, contable, asiento, asientos, libro diario, libro mayor, balance, balance general, balance comprobacion, balance de comprobación, estado de resultados, plan de cuentas, ejercicio, periodo, período, centro de costo, centros de costo, tipo de cambio, mapeo de cuentas, partida doble, cierre de mes, cierre de ejercicio]
titulo: Contabilidad
---

# Contabilidad — Guía para el Usuario

Esta guía cubre el módulo **Contabilidad**: plan de cuentas, ejercicios y períodos, asientos manuales y automáticos, mapeo de cuentas para integrar ventas/compras/cobros/pagos, centros de costo, tipo de cambio multi-moneda, reportes (Libro Diario, Mayor, Balance de Comprobación, Estado de Resultados, Balance General) y cierre de período / ejercicio.

---

## ¿Dónde encuentro esto en el menú?

- **Contabilidad** (módulo propio): tabs internas
  - **Asientos** (manuales + auditoría de los automáticos)
  - **Reportes** (Diario, Mayor, Balance de Comprobación, Estado de Resultados, Balance General)
  - **Conciliación** — detecta movimientos operativos sin asiento y permite regenerarlos en lote. Ver sección abajo y `guia-conciliacion-contable.md`.
  - **Plan de Cuentas**
  - **Ejercicios** (ejercicios y períodos contables)
  - **Mapeo de Cuentas**
  - **Centros de Costo**
  - **Tipo de Cambio**
- **Reportes → Fiscal e Impuestos**:
  - **Libro IVA Ventas**, **Libro IVA Compras**, **Liquidación de IVA** (basados en SIFEN, no en el plan contable).

---

## Conceptos generales

### Partida doble

Cada asiento contable es una lista de líneas con **DEBE** o **HABER**. **Regla inviolable**: `SUM(debe) = SUM(haber)` en PYG. Si no cuadra, el sistema lo rechaza.

### Tipos de cuenta

| Tipo | Naturaleza | Ejemplos |
|------|-----------|----------|
| **ACTIVO** | Deudora | Caja, Banco, Clientes, Mercaderías. |
| **PASIVO** | Acreedora | Proveedores, IVA Débito, Préstamos. |
| **PATRIMONIO** | Acreedora | Capital, Resultados Acumulados. |
| **INGRESO** | Acreedora | Ventas, Intereses Ganados. |
| **COSTO** | Deudora | Costo de Mercaderías Vendidas. |
| **GASTO** | Deudora | Sueldos, Alquileres, Comisiones Bancarias. |

### Estados de un asiento

```
BORRADOR  ──▶  CONFIRMADO  ──▶  REVERTIDO
```

- **BORRADOR**: no impacta libros ni reportes. Editable.
- **CONFIRMADO**: valida partida doble + período abierto + cuentas hoja. Inmutable.
- **REVERTIDO**: queda en su estado pero **se genera asiento espejo** con DEBE↔HABER invertidos. Nunca se borra un asiento confirmado.

### Estados de período / ejercicio

| Estado | Significa |
|--------|-----------|
| **ABIERTO** | Se pueden registrar asientos normalmente. |
| **AJUSTE** | Cerrado al público, pero **admin** puede aún asentar durante N días de gracia configurados al cerrar. |
| **CERRADO** | Bloqueado para asientos normales. Solo admin puede reabrir. |
| **BLOQUEADO** | Cerrado definitivo. |

### Permisos del módulo (`CONTABILIDAD`)

Códigos reales (2 niveles, por submódulo — no existe un permiso único `CONTABILIDAD_*` genérico):

| Submódulo | Códigos | Para qué |
|-----------|---------|----------|
| Plan de Cuentas | `CONT_PC_CUENTA_VER` / `_CREAR` / `_EDITAR` / `_ELIMINAR` / `_IMPORTAR` / `_EXPORTAR` | Ver / crear / editar / eliminar cuentas; importar o exportar el plan. |
| Asientos | `CONT_ASI_ASIENTO_VER` / `_CREAR` / `_EDITAR` / `_CONFIRMAR` / `_REVERTIR` / `_APROBAR` / `_ELIMINAR` / `_EXPORTAR` | Ciclo completo de asientos manuales. |
| Períodos | `CONT_PER_PERIODO_VER` / `_CERRAR` / `_REABRIR` / `_BLOQUEAR` | Abrir / cerrar / bloquear / reabrir períodos. |
| Ejercicios | `CONT_EJE_EJERCICIO_VER` / `_CREAR` / `_EDITAR` / `_CERRAR` | ABM y cierre de ejercicios. |
| Reportes | `CONT_REP_REPORTE_VER` / `_EXPORTAR` | Emitir libros y balances. |
| Mapeo de Cuentas | `CONT_MAP_MAPEO_VER` / `_EDITAR` | Mapeo de cuentas: conceptos → cuentas del plan. |
| Centros de Costo | `CONT_CC_CENTRO_COSTO_VER` / `_CREAR` / `_EDITAR` / `_ELIMINAR` | ABM de centros de costo. |
| Tipo de Cambio | `CONT_TC_TIPO_CAMBIO_VER` / `_CREAR` / `_EDITAR` / `_ELIMINAR` | ABM de tipo de cambio. |
| Conciliación Contable | `CONT_CONC_PENDIENTES_VER` / `CONT_CONC_REGENERAR` | Ver y regenerar en lote asientos pendientes. |

---

## Onboarding: lo que cada empresa nueva tiene que hacer (1 sola vez)

Cuando se entra al módulo, si faltan prerequisitos, aparecen banners de aviso:

1. **⚠️ No hay plan de cuentas cargado** → botón **"Cargar Plan de Cuentas Estándar"** (NIIF Paraguay, ~100 cuentas precargadas).
2. **⚠️ No hay período contable abierto para la fecha actual** → botón **"Crear Ejercicio"** (genera 12 períodos mensuales automáticamente si la configuración lo permite).
3. **⚠️ Hay conceptos del sistema sin cuenta mapeada** (CLIENTES, PROVEEDORES, VENTAS_10, etc.) → botón **"Configurar Mapeo de Cuentas"**.

Hasta no completar los 3 pasos, las facturas / cobros / pagos **se siguen registrando normalmente** pero **no generan asiento** (se omite en silencio).

---

## Plan de Cuentas

Árbol jerárquico de 4 niveles:

```
1        ACTIVO                     (nivel 1 - grupo)
1.1      Activo Corriente            (nivel 2)
1.1.1    Caja y Bancos               (nivel 3)
1.1.1.01 Caja General                (nivel 4 - hoja, acepta movimientos)
```

### Estructura precargada (NIIF Paraguay)

| Grupo | Contiene |
|-------|----------|
| **1 ACTIVO** | Caja, Bancos PYG/USD, Clientes, IVA Crédito 10/5, Mercaderías, Activo Fijo. |
| **2 PASIVO** | Proveedores, IVA Débito 10/5, IPS a Pagar, Retenciones, Préstamos. |
| **3 PATRIMONIO** | Capital Integrado, Resultados del Ejercicio, Resultados Acumulados. |
| **4 INGRESOS** | Ventas Gravadas 10/5, Ventas Exentas, Intereses Ganados, Diferencia de Cambio Ganada. |
| **5 COSTOS** | Costo de Mercaderías Vendidas. |
| **6 GASTOS** | Sueldos, Cargas Sociales (IPS), Alquileres, Servicios, Depreciaciones, Comisiones Vendedores, Publicidad, Fletes, Intereses Bancarios, Comisiones Bancarias, Diferencia de Cambio Perdida. |

### Campos de una cuenta

| Campo | Notas |
|-------|-------|
| **Código** | Jerárquico: `1.1.1.01`. |
| **Descripción** | Nombre de la cuenta. |
| **Tipo / Naturaleza** | ACTIVO/PASIVO/… + DEUDORA/ACREEDORA. |
| **Nivel** | 1 a 4. |
| **Cuenta padre** | Define la jerarquía. |
| **Acepta movimientos** | Solo las **hojas** (`true`) pueden recibir asientos. Los grupos (no hojas) no. |
| **Acepta CC** | Si está prendido, toda línea de asiento que use esta cuenta exige `centro_costo_id`. Típicamente activado para cuentas de gasto. |
| **Moneda fija** | Si la cuenta opera en una moneda extranjera fija (ej. "Banco USD"). |
| **Es del sistema** | Las del seed traen `is_sistema=true`: no se pueden eliminar. |

### Reglas

- No se puede eliminar una cuenta **con asientos** asociados.
- No se puede eliminar una cuenta **del sistema** (las del seed).
- Solo las hojas (`acepta_movimientos = true`) aparecen en el selector de líneas de asiento.

---

## Ejercicios y Períodos

### Ejercicio

Período anual (típicamente Enero–Diciembre).

- Al crearlo, **se generan automáticamente los 12 períodos mensuales** si la configuración está en "auto".
- Estado: ABIERTO / CERRADO / BLOQUEADO.

### Período

Mes contable individual.

- **Cierre con período de ajuste**: al cerrar un período se puede indicar `dias_ajuste` (ej. 5 días). Durante esa ventana solo el admin puede asentar (estado AJUSTE). Pasados esos días, el período pasa a CERRADO automáticamente.
- **Reapertura**: solo admin con `CONT_PER_PERIODO_REABRIR`.
- **Bloqueo**: cierre definitivo, no se reabre sin intervención técnica.

### Por qué importa

Toda operación que dispare asiento (facturar, cobrar, pagar, manual) **necesita un período ABIERTO o AJUSTE** para la fecha del documento. Si no hay → asiento no se genera y queda registrado el aviso.

---

## Mapeo de Cuentas (cómo se vincula el ERP con la contabilidad)

Tabla `cont_mapeo_cuentas` que dice: **"este concepto del sistema corresponde a esta cuenta del plan"**.

| Concepto | Cuenta default | Cuándo se usa |
|----------|----------------|---------------|
| CLIENTES | 1.1.2.01 | Toda factura de venta (DEBE) y cobro (HABER). |
| PROVEEDORES | 2.1.1.01 | Toda factura de compra (HABER), pago (DEBE), y contraparte de **Gastos** con forma de pago Crédito sin proveedor con cuenta propia. |
| VENTAS_10 / VENTAS_5 / VENTAS_EXENTAS | 4.1.1.01 / 02 / 03 | Por base gravada al facturar. |
| IVA_DEBITO_10 / IVA_DEBITO_5 | 2.1.2.01 / 02 | IVA de ventas. |
| IVA_CREDITO_10 / IVA_CREDITO_5 | 1.1.3.01 / 02 | IVA de compras y de **Gastos** deducibles. |
| COSTO_VENTAS | 5.1.1.01 | Si se usa costeo de venta. |
| INVENTARIO | 1.1.4.01 | Compras de mercadería. |
| CAJA_GENERAL | 1.1.1.01 | Cobros / pagos en efectivo, y contraparte de **Gastos** con forma de pago Contado. |
| GASTOS_GENERALES | 6.1.2.99 | Fallback en **Gastos** cuando el tipo de gasto no tiene cuenta contable propia asignada. |
| **BANCOS_DEFAULT** | 1.1.1.03 | Contraparte de **Gastos** (`gasto_cab`) con forma de pago **Transferencia**. Solo lo usa `ContabilidadIntegracionService.integrarGasto`. |
| ANTICIPO_PERSONAL | 1.01.03.03.04 | Contraparte de **Gastos** con forma de pago Anticipo personal (rendición de viáticos). Ver `guia-rendicion-viaticos.md`. |
| BANCO_PYG / BANCO_USD | 1.1.1.03 / 04 | Fallback si una **cuenta de tesorería** no tiene cuenta contable propia asignada. Sin consumidores en el código actual más allá de ese fallback — no confundir con `BANCOS_DEFAULT` (ver nota abajo). |

> Las **cuentas de tesorería** y las **categorías de movimiento** tienen su propia cuenta contable asignada (en Configuración → Tesorería y Bancos). Esa **prevalece** sobre el mapeo global de CAJA / BANCO.

> ⚠️ **Hay varios conceptos "banco" con nombre parecido y cada uno lo consume un módulo distinto — es fácil actualizar uno y olvidarse del resto al reestructurar el plan de cuentas:**
> - `BANCO` → lo usa **Rendición de Viáticos** (`RendicionViaticosContabilidadService`).
> - `BANCOS_DEFAULT` → lo usa **Gastos** con forma de pago Transferencia (`ContabilidadIntegracionService.integrarGasto`).
> - `BANCO_PYG` / `BANCO_USD` → fallback de **cuentas de tesorería** sin cuenta contable propia.
>
> Si un cliente reclama que un asiento de **Gastos** por transferencia usa una cuenta de banco vieja/inactiva, revisar puntualmente **`BANCOS_DEFAULT`** — no alcanza con revisar `BANCO`, aunque el nombre sugiera que es el mismo concepto. Detalle completo del diagnóstico y la corrección en `guia-gastos.md`, sección *"Corregir un gasto contabilizado contra la cuenta equivocada"*.

---

## Asientos

### Asiento manual

Para registros que no nacen de una factura, cobro o pago — por ejemplo: depreciaciones, provisión de aguinaldo, ajuste de inventario, asiento de apertura, asientos de cierre.

Campos:

- **Fecha** (dentro de un período ABIERTO o AJUSTE).
- **Glosa** general.
- **Moneda origen** + **tipo de cambio** (si difiere de PYG).
- **Líneas**: cuenta + (opcional) centro de costo + descripción + DEBE / HABER en moneda origen. El sistema calcula `debe_pyg` y `haber_pyg` aplicando el TC.

Botones: `Guardar como borrador` / `Guardar y confirmar`.

### Asientos automáticos (integración)

| Evento del ERP | Servicio | Asiento |
|----------------|----------|---------|
| **Factura de venta APROBADA por SIFEN** | `integrarFacturaVenta` | DEBE Clientes / HABER Ventas 10/5/Exentas + IVA Débito 10/5. **No se crea al emitir la factura ni al enviarla a SIFEN** — solo cuando el middleware sincroniza el estado y detecta `estado_sifen='Aprobado'`. Si SIFEN rechaza, el asiento no se crea. |
| **Factura de compra confirmada** | `integrarFacturaCompra` | DEBE Inventario (o gasto) + IVA Crédito / HABER Proveedores. |
| **Cobro registrado** | `integrarCobro` | DEBE Caja / Banco / Cheques en Cartera / Retenciones / NC Aplicada / Anticipos / Intereses Cobrados … / HABER Clientes. Detalle completo en `guia-cobros-finanzas.md`. |
| **Pago a proveedor** | `integrarPago` | DEBE Proveedores / HABER Caja / Banco / Cheques a Pagar. |
| **Anulación de cualquiera** | `revertirDocumento` | Asiento espejo con DEBE↔HABER invertidos. El original queda en estado `REVERTIDO` (nunca se borra). |
| **Movimiento de Tesorería** | `integrarMovimientoTesoreria` | Según categoría + cuenta de la tesorería. |
| **Transferencia mismo-moneda** | `integrarTransferenciaTes` | DEBE cuenta destino / HABER cuenta origen. |
| **Transferencia multi-moneda** | `integrarTransferenciaTes` | Asiento de 3 patas con Diferencia de Cambio Ganada (4.2.1.02) o Perdida (6.3.1.03). |

> Cada asiento automático crea **un `cont_documentos`** con `origen_tipo` (ej. `facturas`, `compra_cab`, `recibos_cobro`, `tes_movimientos`) + `origen_id`. **Índice único** sobre estos dos campos → **idempotencia**: confirmar dos veces el mismo documento NO crea dos asientos.

### Validaciones que aplican antes de confirmar

1. **Partida doble**: `SUM(debe_pyg) = SUM(haber_pyg)`.
2. **Período abierto** (o AJUSTE para admin).
3. **Cuenta acepta movimientos**: las hojas, no los grupos.
4. **Centro de costo** obligatorio si `cuenta.acepta_cc = true`.
5. **Idempotencia**: si ya hay un asiento para ese `origen_tipo + origen_id`, se rechaza el segundo.
6. **No se borra**: confirmados solo se revierten.

---

## Asientos en moneda extranjera

Cada asiento tiene `moneda_origen` + `tipo_cambio_id`. Cada línea guarda:

- `debe_moneda` / `haber_moneda` → en la moneda original (USD, BRL, …).
- `debe_pyg` / `haber_pyg` → convertido con el TC al asentar.

La **partida doble se valida en PYG**, no en moneda origen — para que asientos multi-moneda cuadren después de aplicar el TC.

> Si una operación involucra dos monedas (típico en transferencias bancarias), el asiento incluye una **tercera pata de diferencia de cambio** que captura el ajuste cuando el TC efectivo difiere del TC del sistema.

---

## Tipo de Cambio

Tabla `cont_tipo_cambio` con clave única `(empresa_id, moneda, fecha)`.

- ABM por **moneda + fecha** + **tasa** (Gs. por 1 unidad de la moneda).
- Endpoint `GET /contabilidad/tipo-cambio/vigente?moneda=USD` devuelve la tasa más reciente.
- Es la **única fuente de verdad** del TC para todos los módulos del ERP (Ventas, Compras, Tesorería, Cobros).
- Si no hay TC cargado para la fecha de una operación → la operación puede igual generar asiento pero **sin diferencia de cambio** (asiento de 2 patas en transferencias multi-moneda, por ejemplo), y la glosa lo aclara.

---

## Centros de Costo

Catálogo libre por empresa (ej. "Casa Central", "Sucursal Norte", "Proyecto X").

- ABM en Configuración / Contabilidad.
- Toda línea de asiento que use una cuenta con `acepta_cc = true` **exige** un centro de costo.
- Permite filtrar reportes por centro: Estado de Resultados por sucursal, Mayor por proyecto, etc.

---

## Reportes contables

Todos exportables a PDF (msv-kude) y Excel.

### Libro Diario

- Lista cronológica de asientos confirmados del período seleccionado.
- Para cada asiento: fecha, número, glosa, líneas con cuenta, DEBE, HABER (en PYG).
- Validación implícita: total DEBE = total HABER del libro.

### Libro Mayor

- Por **cuenta**, muestra saldo inicial + movimientos + saldo final del rango.
- Selector de cuenta con búsqueda (Autocomplete sobre el plan de cuentas).
- Filtro por **rango de fechas** y opcional por **centro de costo**.

### Balance de Comprobación (sumas y saldos)

- Tabla por cuenta con: Saldo anterior | DEBE período | HABER período | Saldo final.
- **Totales al pie**: `SUM DEBE = SUM HABER` debe coincidir; si no, hay error de carga.
- Por período o por rango.

### Estado de Resultados (Pérdidas y Ganancias)

- Ingresos (4.x) − Costos (5.x) − Gastos (6.x) = **Resultado del Ejercicio**.
- Por ejercicio o rango de fechas.
- Filtro por centro de costo (para ver rentabilidad por sucursal).

### Balance General (Situación Patrimonial)

- A una **fecha** dada.
- ACTIVO = PASIVO + PATRIMONIO (+ Resultado del período actual).
- Saldo de cuentas patrimoniales = saldo acumulado desde apertura.

### Reportes fiscales (separados — basados en SIFEN, no en plan contable)

| Reporte | Para qué |
|---------|----------|
| **Libro IVA Ventas** | Detalle de facturas emitidas con timbrado, gravado 10/5/exento, IVA Débito. Insumo Formulario 120. |
| **Libro IVA Compras** | Mismo pero de compras recibidas → IVA Crédito. |
| **Liquidación de IVA** | `SALDO = IVA Débito − IVA Crédito − Retenciones`. |

> Estos reportes filtran por `estado_sifen = APROBADO`, no por estado app-level. Las **NC electrónicas** restan del débito fiscal en el mismo período.

---

## Cierre de período y de ejercicio

### Cierre de período (mensual)

1. Verificar que **Balance de Comprobación cuadra**.
2. Cargar asientos de ajuste pendientes (provisiones, depreciaciones, diferencias de cambio).
3. **Cerrar el período** desde la pestaña **Ejercicios**: expandir el ejercicio y usar el botón **Cerrar** junto al período correspondiente. Opcional: definir `dias_ajuste` (ej. 5 días de gracia para que admin termine retoques).
4. Pasado el período de ajuste, el período pasa a CERRADO automáticamente.

### Cierre de ejercicio (anual)

1. Cerrar los 12 períodos.
2. Asiento de **cierre de resultados**: cancelar saldos de cuentas 4/5/6 contra `Resultado del Ejercicio` (3.2.1.01).
3. Asiento de **apertura del siguiente ejercicio**: saldos de cuentas 1/2/3 al primer día.
4. Cerrar el ejercicio.

### Reapertura (excepcional)

- Admin con `CONT_PER_PERIODO_REABRIR` puede reabrir un período cerrado.
- Queda registrado en auditoría (`cont_periodos` action `REOPEN`).

---

## Conciliación Contable (regeneración de asientos pendientes)

**Contabilidad → Conciliación** (pestaña dedicada).

Cuando el módulo Contabilidad se **activa después** de haber operado (facturas, cobros, gastos, tesorería…), o cuando por errores de configuración algunos movimientos no generaron asiento en su momento (falta mapeo, período cerrado, cuenta OLD-), esta pantalla:

1. **Detecta** en vivo los registros operativos que deberían tener asiento y no lo tienen (busca `cont_documentos` en estado `CONFIRMADO` con match por `origen_tipo` + `origen_id`).
2. **Diagnostica** por qué cada uno no se contabilizó — 6 motivos catalogados: `MODULO_INACTIVO`, `SIN_MAPEO`, `PERIODO_CERRADO`, `CUENTA_OLD`, `CATEGORIA_SIN_CUENTA` (específico de movimientos de tesorería), `DATOS_FALTANTES`, `SIN_MOTIVO`.
3. **Regenera** los asientos faltantes en lote — reusa los mismos integradores que se ejecutan en tiempo real (`ContabilidadIntegracionService`, `RendicionViaticosContabilidadService`), es **idempotente**.

Orígenes cubiertos por el registry (`cont_origen_registry`, 15 orígenes activos):
- Ventas: `factura_cab`, `nota_credito_cab`, `recibos_cobro`, `recibos_multi`
- Compras: `gasto_cab`, `compra_cab`, `pagos_proveedor`, `orden_pago_proveedor_cab`
- Tesorería: `tes_movimientos`
- RRHH: `rrhh_liquidacion`, `rendicion_adelanto`, `rendicion_devolucion`, `liquidacion_comisiones_deveng`, `liquidacion_comisiones_pago`, `comision_supervisor`

Cada intento (exitoso o fallido) queda en `AuditService` con acciones `CONT_CONC_REGENERAR_OK`, `CONT_CONC_REGENERAR_FALLA`, `CONT_CONC_REGENERAR_ERROR` o `CONT_CONC_REGENERAR_TODOS`.

**Privilegios:**
- `CONT_CONC_PENDIENTES_VER` — ver el listado y diagnóstico.
- `CONT_CONC_REGENERAR` — ejecutar regeneración individual, por origen o total.

Ver `guia-conciliacion-contable.md` para el detalle completo del flujo y motivos.

---

## Auditoría

Todas las operaciones críticas quedan en `audit_log`:

| Operación | Acción |
|-----------|--------|
| Crear / confirmar / revertir asiento manual | `CREATE` / `CONFIRM` / `REVERT` |
| Cerrar / reabrir / bloquear período | `CLOSE` / `REOPEN` / `BLOCK` |
| Crear / cerrar ejercicio | `CREATE` / `CLOSE` |
| Crear / editar / eliminar cuenta | `CREATE` / `UPDATE` / `DELETE` |
| Regenerar asiento pendiente (individual) | `CONT_CONC_REGENERAR_OK` / `CONT_CONC_REGENERAR_FALLA` / `CONT_CONC_REGENERAR_ERROR` |
| Regenerar todos los orígenes en lote | `CONT_CONC_REGENERAR_TODOS` |

Los asientos **automáticos** no generan audit propio: su origen se trazea con `cont_documentos.origen_tipo` + `cont_documentos.origen_id`.

Consulta: `GET /audit?entity_type=cont_asientos`.

---

## Validaciones del backend (mensajes que pueden aparecer)

### Asientos

- **"El asiento no cuadra: total Debe ≠ total Haber"**.
- **"El período de la fecha indicada no está abierto"**.
- **"La cuenta {código} no acepta movimientos (es un grupo)"**.
- **"La cuenta {código} exige centro de costo en cada línea"**.
- **"Ya existe un asiento para este documento (origen_tipo + origen_id)"** — idempotencia.
- **"No se puede eliminar un asiento confirmado: solo se puede revertir"**.
- **"Tipo de cambio no encontrado para la moneda {X} en la fecha {Y}"** (al asentar manual multi-moneda sin TC).

### Plan de cuentas

- **"No se puede eliminar una cuenta del sistema"**.
- **"La cuenta tiene movimientos asociados, no se puede eliminar"**.
- **"El código ya existe"** / **"El código debe respetar la jerarquía del padre"**.
- **"Solo cuentas hoja pueden aceptar movimientos"**.

### Períodos / Ejercicios

- **"No se puede cerrar un período con asientos en borrador"**.
- **"El ejercicio ya existe para ese año"**.
- **"Solo el admin puede asentar durante el período de ajuste"**.

### Mapeo

- **"Falta mapear el concepto {X} a una cuenta contable"** — bloquea el asiento automático.

---

## Lo que NO se puede hacer

- Borrar un asiento confirmado (solo se revierte).
- Asentar en un período cerrado sin permiso de admin (y aun así, solo durante AJUSTE).
- Confirmar un asiento desbalanceado (DEBE ≠ HABER en PYG).
- Usar una cuenta de grupo (no hoja) en una línea.
- Eliminar cuentas del sistema o cuentas con histórico.
- Crear dos veces el asiento del mismo documento origen (idempotencia).
- Cambiar moneda funcional (PYG es fija para todo el ejercicio).
- Editar un asiento automático: si está mal, hay que anular el documento que lo generó (factura, cobro, pago…) y volver a confirmar.

---

## Problemas frecuentes

- **"Emití una factura pero no me crea el asiento automáticamente"** / **"Factura emitida sin asiento contable"**: el asiento se genera **únicamente cuando SIFEN aprueba la factura** (estado `Aprobado`). No se crea al emitir, ni al enviarla a SIFEN, ni al cobrarla. Pasos para resolver: (1) ir a **Menú principal › Ventas** → pestaña **Facturas**, verificar la columna **SIFEN**. Si está en **Pendiente**, usar **Sincronizar estado SIFEN** o esperar la respuesta de la SET. Cuando pase a **Aprobado**, el middleware crea el asiento automáticamente en el siguiente sync. (2) Si SIFEN la **Rechazó**, no hay asiento (es lo correcto, no es una factura válida). (3) Si está **Aprobado** y aun así no apareció el asiento, recién ahí revisar Mapeo de Cuentas (CLIENTES, VENTAS_10, IVA_DEBITO_10, VENTAS_5, VENTAS_EXENTAS, IVA_DEBITO_5) y que haya un período contable abierto para la fecha del documento.
- **"Balance de Comprobación no cuadra"**: revisar asientos manuales recientes (lo más común). Si todo el período cuadra excepto al sumar varios meses → diferencia de cambio sin asentar.
- **"Estado de resultados sale en cero"**: ningún asiento llegó a cuentas 4/5/6. Suele pasar si la factura quedó en BORRADOR o si CLIENTES no está mapeada (rompe la integración antes de las cuentas de ingreso).
- **"Al anular una factura el asiento original no cambió"**: es por diseño. Se genera un **asiento espejo** con la reversión. El original queda con estado `REVERTIDO` pero sus líneas se preservan para el histórico.
- **"No me deja asentar con fecha del mes pasado"**: el período del mes anterior está CERRADO. Pedir reapertura al admin o usar `AJUSTE` si todavía está dentro de los días de gracia.
- **"Movimiento de Tesorería en USD generó asiento con valores raros en Gs."**: limitación conocida — la integración no convierte USD → PYG. Workaround: no mapear cuenta contable a cuentas no-PYG hasta el rediseño multi-moneda (ver `guia-tesoreria-bancos.md`).
- **"El sistema dice 'falta mapear concepto X'"**: ir a Mapeo de Cuentas y completar. Sin eso, los documentos pasan pero no contabilizan.

- **"Un asiento automático quedó contra una cuenta que ya no debería usarse" (sin ningún mensaje de error)**: el mapeo de cuentas **no valida que la cuenta esté activa** al resolver la contraparte de un asiento — si el concepto sigue apuntando a una cuenta con `active=false` o código `OLD-` (típico tras reestructurar el plan de cuentas), el asiento se genera igual, silenciosamente. Diagnóstico: Mapeo de Cuentas → ver a qué cuenta apunta el concepto en cuestión → Plan de Cuentas → confirmar si esa cuenta está inactiva o tiene prefijo `OLD-`. Corrección: reasignar el concepto a la cuenta vigente (esto **no** corrige los asientos ya generados — hay que revertirlos y regenerarlos, ver `guia-gastos.md`). **Conciliación Contable no detecta este caso**: solo encuentra documentos que nunca generaron asiento (diagnóstico `CUENTA_OLD` de Conciliación corre *antes* de crear el asiento, no audita los ya confirmados).

---

## Limitaciones actuales

- **Multi-moneda en movimientos de Tesorería**: no convierte USD → PYG en el asiento. Pendiente rediseño (ver plan).
- **Estado de Resultados / Balance General por sucursal** (no solo por centro de costo): planificado.
- **Asiento de cierre / apertura anuales automático**: hoy se hace manual, planificado un wizard.
- **Cierre con cálculo automático de Resultado del Ejercicio**: pendiente.
- **Conciliación bancaria** está en módulo Tesorería, no integrada a un reporte contable de partidas en tránsito.
- **Diferencia de cambio por revaluación de saldos al cierre** (saldos USD valorizados al TC de cierre): pendiente.
- **El mapeo de cuentas no valida que la cuenta esté activa** al momento de generar un asiento automático — un concepto mapeado a una cuenta `OLD-`/inactiva genera igual el asiento, sin error. No hay pantalla que audite retroactivamente asientos ya confirmados contra una cuenta equivocada (Conciliación solo cubre documentos sin asiento). Revisar el Mapeo de Cuentas completo manualmente después de cualquier reestructuración del plan de cuentas.

---

## Documentos relacionados

- `guia-facturacion.md` — qué asiento se genera al facturar, NC y reportes fiscales (IVA).
- `guia-compras.md` — asiento de compra + IVA Crédito.
- `guia-cobros-finanzas.md` — asiento de cobro (simple vs multi) con todas las cuentas en juego.
- `guia-tesoreria-bancos.md` — asientos de movimientos, transferencias multi-moneda con diferencia de cambio.
- `plan-contabilidad.md` — modelo de datos, integración, reglas y plan de cuentas Paraguay completo.
- `plan-prueba-usuario-contable.md` — guion paso a paso de pruebas (plan, ejercicios, mapeo, asientos, integración, reportes, cierre, permisos).
