/**
 * Catálogo de los asientos que el sistema genera solo.
 *
 * DESCRIBE lo que hace `integracion.service.ts`; no lo ejecuta. Sirve para que el
 * contador vea, en la pantalla de Mapeo de Cuentas, cómo va a quedar el debe y el
 * haber de cada situación con las cuentas que él mismo mapeó.
 *
 * ⚠️ Si cambiás un `integrar*` de `integracion.service.ts`, actualizá la situación
 * correspondiente acá. `catalogo-asientos.spec.ts` verifica que los conceptos
 * existan y que cada situación cuadre, pero no puede detectar que el código real
 * haya empezado a usar otra cuenta.
 *
 * Los montos son un ejemplo fijo y coherente (una venta de Gs. 1.100.000 con IVA
 * incluido), elegidos para que se vea la aritmética y los dos lados cierren.
 */

export type LadoAsiento = 'DEBE' | 'HABER';

export interface LineaCatalogo {
  lado: LadoAsiento;
  /** Concepto del mapeo (`cont_mapeo_cuentas.concepto`). */
  concepto?: string;
  /** Cuando la cuenta NO sale del mapeo: de dónde sale realmente. */
  cuentaDinamica?: string;
  /**
   * La cuenta se resuelve con datos de la empresa, no con el mapeo. La pantalla
   * usa esto para mostrar las cuentas y categorías reales en vez de un texto.
   */
  fuente?:
    | 'CUENTA_TESORERIA'
    | 'CATEGORIA_TESORERIA'
    | 'CUENTA_TES_ORIGEN'
    | 'CUENTA_TES_DESTINO'
    /** La cuenta la elige la empresa por medio de pago (`cont_mapeo_medio_pago`). */
    | 'MEDIO_PAGO_COBRO'
    | 'MEDIO_PAGO_PAGO'
    /**
     * La cuenta del proveedor: la propia si la tiene; si no, el concepto según su
     * tipo (PROVEEDORES_EXTERIOR, ACREEDORES_VARIOS); si falta la del tipo, no hay asiento.
     * Ver `resolverCuentaPasivo`.
     */
    | 'CUENTA_PROVEEDOR';
  etiqueta: string;
  monto: number;
  /** Por qué la línea puede no aparecer en un asiento real. */
  condicion?: string;
}

export interface SituacionCatalogo {
  clave: string;
  grupo: string;
  titulo: string;
  /** Cuándo se dispara. */
  cuando: string;
  /** Documento del ERP que lo genera. */
  documento: string;
  lineas: LineaCatalogo[];
  nota?: string;
  /**
   * La situación solo existe si la empresa mapeó este concepto: el integrador no
   * genera el asiento sin él (p. ej. el cierre de la importación sin cuenta puente).
   */
  soloSiMapeado?: string;
  /**
   * Formas alternativas del asiento. El integrador cambia de cuentas —no solo de
   * cuenta dentro de una línea— según lo que la empresa tenga mapeado; la primera
   * variante cuyo concepto esté mapeado reemplaza `lineas` (y `nota`, si trae).
   * Sin esto el catálogo mostraría un asiento que la empresa ya no genera.
   */
  variantes?: VarianteCatalogo[];
}

export interface VarianteCatalogo {
  siMapeado: string;
  lineas: LineaCatalogo[];
  nota?: string;
}

const IVA_10 = 100_000;
const BASE_10 = 1_000_000;
const TOTAL = BASE_10 + IVA_10;

export const CATALOGO_ASIENTOS: SituacionCatalogo[] = [
  // ── Ventas ────────────────────────────────────────────────────────────────
  {
    clave: 'VENTA_CONTADO',
    grupo: 'Ventas',
    titulo: 'Venta al contado',
    cuando: 'Al aprobarse una factura de venta con condición contado',
    documento: 'Factura de venta',
    lineas: [
      { lado: 'DEBE', concepto: 'CAJA_GENERAL', fuente: 'MEDIO_PAGO_COBRO', etiqueta: 'Cobro en el acto', monto: TOTAL },
      { lado: 'DEBE', concepto: 'CHEQUES_EN_CARTERA', etiqueta: 'Parte cobrada con cheque', monto: 0, condicion: 'Solo si parte se cobró con cheque' },
      { lado: 'HABER', concepto: 'VENTAS_10', etiqueta: 'Venta gravada 10% (sin IVA)', monto: BASE_10 },
      { lado: 'HABER', concepto: 'VENTAS_5', etiqueta: 'Venta gravada 5% (sin IVA)', monto: 0, condicion: 'Solo si la factura tiene ítems al 5%' },
      { lado: 'HABER', concepto: 'VENTAS_EXENTAS', etiqueta: 'Venta exenta', monto: 0, condicion: 'Solo si la factura tiene ítems exentos' },
      { lado: 'HABER', concepto: 'IVA_DEBITO_10', etiqueta: 'IVA débito 10%', monto: IVA_10 },
      { lado: 'HABER', concepto: 'IVA_DEBITO_5', etiqueta: 'IVA débito 5%', monto: 0, condicion: 'Solo si hay IVA al 5%' },
    ],
    nota: 'La cuenta del debe depende del medio de pago de la factura: si configuraste una cuenta para efectivo o transferencia, entra ahí en vez de la caja general. El cheque no se configura por medio: va a "Cheques en cartera", porque la factura no guarda el vencimiento. Una factura contado marcada como cobro diferido se asienta como crédito: la plata entra después, con el recibo.',
  },
  {
    clave: 'VENTA_CREDITO',
    grupo: 'Ventas',
    titulo: 'Venta a crédito',
    cuando: 'Al aprobarse una factura de venta a crédito',
    documento: 'Factura de venta',
    lineas: [
      { lado: 'DEBE', concepto: 'CLIENTES', etiqueta: 'Deuda del cliente', monto: TOTAL },
      { lado: 'HABER', concepto: 'VENTAS_10', etiqueta: 'Venta gravada 10% (sin IVA)', monto: BASE_10 },
      { lado: 'HABER', concepto: 'VENTAS_5', etiqueta: 'Venta gravada 5% (sin IVA)', monto: 0, condicion: 'Solo si la factura tiene ítems al 5%' },
      { lado: 'HABER', concepto: 'VENTAS_EXENTAS', etiqueta: 'Venta exenta', monto: 0, condicion: 'Solo si la factura tiene ítems exentos' },
      { lado: 'HABER', concepto: 'IVA_DEBITO_10', etiqueta: 'IVA débito 10%', monto: IVA_10 },
      { lado: 'HABER', concepto: 'IVA_DEBITO_5', etiqueta: 'IVA débito 5%', monto: 0, condicion: 'Solo si hay IVA al 5%' },
    ],
  },
  {
    clave: 'NOTA_CREDITO_VENTA',
    grupo: 'Ventas',
    titulo: 'Nota de crédito emitida',
    cuando: 'Al aprobarse una nota de crédito de venta (devolución o descuento)',
    documento: 'Nota de crédito de venta',
    lineas: [
      { lado: 'DEBE', concepto: 'VENTAS_10', etiqueta: 'Reversión venta 10%', monto: BASE_10 },
      { lado: 'DEBE', concepto: 'VENTAS_5', etiqueta: 'Reversión venta 5%', monto: 0, condicion: 'Solo si la NC tiene ítems al 5%' },
      { lado: 'DEBE', concepto: 'VENTAS_EXENTAS', etiqueta: 'Reversión venta exenta', monto: 0, condicion: 'Solo si la NC tiene ítems exentos' },
      { lado: 'DEBE', concepto: 'IVA_DEBITO_10', etiqueta: 'Reversión IVA débito 10%', monto: IVA_10 },
      { lado: 'DEBE', concepto: 'IVA_DEBITO_5', etiqueta: 'Reversión IVA débito 5%', monto: 0, condicion: 'Solo si hay IVA al 5%' },
      { lado: 'HABER', concepto: 'CLIENTES', etiqueta: 'Baja de la deuda del cliente', monto: TOTAL },
    ],
  },
  {
    clave: 'COBRO',
    grupo: 'Cobranzas',
    titulo: 'Cobro a un cliente',
    cuando: 'Al registrarse un cobro simple de una factura a crédito',
    documento: 'Recibo de cobro',
    lineas: [
      { lado: 'DEBE', concepto: 'CAJA_GENERAL', fuente: 'MEDIO_PAGO_COBRO', etiqueta: 'Entrada por cobranza', monto: TOTAL },
      { lado: 'DEBE', concepto: 'CHEQUES_EN_CARTERA', etiqueta: 'Parte cobrada con cheque', monto: 0, condicion: 'Solo si parte se cobró con cheque' },
      { lado: 'HABER', concepto: 'CLIENTES', etiqueta: 'Baja de la deuda del cliente', monto: TOTAL },
    ],
    nota: 'La venta ya se asentó al facturar: el cobro no vuelve a tocar ventas ni IVA. Si el recibo mezcla medios, se abre una línea de debe por cuenta. El cheque entra por "Cheques en cartera": este recibo no guarda el vencimiento, así que no puede saber si es diferido.',
  },
  {
    clave: 'RECIBO_MULTI',
    grupo: 'Cobranzas',
    titulo: 'Recibo con varios medios de pago',
    cuando: 'Al confirmarse un recibo que mezcla efectivo, cheques, retenciones o notas de crédito',
    documento: 'Recibo de cobro (multi)',
    lineas: [
      { lado: 'DEBE', concepto: 'CAJA_GENERAL', fuente: 'MEDIO_PAGO_COBRO', etiqueta: 'Parte cobrada en efectivo', monto: 600_000 },
      { lado: 'DEBE', concepto: 'CHEQUES_EN_CARTERA', etiqueta: 'Cheques recibidos al día', monto: 300_000, condicion: 'Solo si el recibo incluye cheques' },
      { lado: 'DEBE', concepto: 'CHEQUES_EN_TRANSITO', etiqueta: 'Cheques diferidos', monto: 0, condicion: 'Solo si el cheque es diferido' },
      { lado: 'DEBE', concepto: 'RETENCION_IVA_FAVOR', etiqueta: 'Retención de IVA que nos hicieron', monto: 100_000, condicion: 'Solo si el cliente retuvo IVA' },
      { lado: 'DEBE', concepto: 'RETENCION_RENTA_FAVOR', etiqueta: 'Retención de renta que nos hicieron', monto: 0, condicion: 'Solo si el cliente retuvo renta' },
      { lado: 'DEBE', concepto: 'DIFERENCIA_CAMBIO_PERDIDA', etiqueta: 'Diferencia de cambio perdida', monto: 0, condicion: 'Solo en recibos en otra moneda, si se cobró a una cotización menor que la de la factura' },
      { lado: 'HABER', concepto: 'CLIENTES', etiqueta: 'Baja de la deuda del cliente', monto: 1_000_000 },
      { lado: 'HABER', concepto: 'INTERESES_MORATORIOS_COBRADOS', etiqueta: 'Intereses por mora cobrados', monto: 0, condicion: 'Solo si el recibo cobra intereses' },
      { lado: 'HABER', concepto: 'ANTICIPOS_CLIENTES', etiqueta: 'Excedente que queda a favor del cliente', monto: 0, condicion: 'Solo si se cobró de más' },
      { lado: 'HABER', concepto: 'DIFERENCIA_CAMBIO_GANADA', etiqueta: 'Diferencia de cambio ganada', monto: 0, condicion: 'Solo en recibos en otra moneda, si se cobró a una cotización mayor que la de la factura' },
    ],
    nota: 'Cada medio entra en su propia cuenta: si el cobro se registró en una cuenta de tesorería (un banco), en la cuenta contable de ese banco; si no, en la configurada para el medio, o en Caja general. Los cheques diferidos van separados de los que están al día. Una nota de crédito aplicada no agrega líneas: su propio asiento ya bajó la deuda del cliente al emitirse.',
  },
  {
    clave: 'COBRO_BANCARD',
    grupo: 'Cobranzas',
    titulo: 'Cobro con tarjeta (Bancard)',
    cuando: 'Al confirmarse un pago con tarjeta procesado por Bancard',
    documento: 'Pago Bancard',
    lineas: [
      { lado: 'DEBE', cuentaDinamica: 'Cuenta "Bancard por liquidar" de la configuración de Bancard', etiqueta: 'Pendiente de liquidación', monto: TOTAL },
      { lado: 'HABER', concepto: 'CLIENTES', etiqueta: 'Baja de la deuda del cliente', monto: TOTAL },
    ],
    nota: 'Sin las cuentas de Bancard configuradas, este asiento no se genera.',
  },

  // ── Compras ───────────────────────────────────────────────────────────────
  {
    clave: 'COMPRA_CONTADO',
    grupo: 'Compras',
    titulo: 'Compra al contado',
    cuando: 'Al confirmarse una compra con condición contado',
    documento: 'Factura de compra',
    lineas: [
      { lado: 'DEBE', concepto: 'INVENTARIO', etiqueta: 'Mercadería o gasto (sin IVA)', monto: BASE_10 },
      { lado: 'DEBE', concepto: 'IVA_CREDITO_10', etiqueta: 'IVA crédito 10%', monto: IVA_10 },
      { lado: 'DEBE', concepto: 'IVA_CREDITO_5', etiqueta: 'IVA crédito 5%', monto: 0, condicion: 'Solo si la compra tiene ítems al 5%' },
      { lado: 'HABER', concepto: 'CAJA_GENERAL', fuente: 'MEDIO_PAGO_PAGO', etiqueta: 'Salida de fondos, según con qué se pagó', monto: TOTAL },
    ],
  },
  {
    clave: 'COMPRA_CREDITO',
    grupo: 'Compras',
    titulo: 'Compra a crédito',
    cuando: 'Al confirmarse una compra a crédito',
    documento: 'Factura de compra',
    lineas: [
      { lado: 'DEBE', concepto: 'INVENTARIO', etiqueta: 'Mercadería o gasto (sin IVA)', monto: BASE_10 },
      { lado: 'DEBE', concepto: 'IVA_CREDITO_10', etiqueta: 'IVA crédito 10%', monto: IVA_10 },
      { lado: 'DEBE', concepto: 'IVA_CREDITO_5', etiqueta: 'IVA crédito 5%', monto: 0, condicion: 'Solo si la compra tiene ítems al 5%' },
      { lado: 'HABER', fuente: 'CUENTA_PROVEEDOR', cuentaDinamica: 'Cuenta del proveedor; si no tiene una propia, la de su tipo', etiqueta: 'Deuda con el proveedor', monto: TOTAL },
    ],
  },
  {
    clave: 'NOTA_CREDITO_COMPRA',
    grupo: 'Compras',
    titulo: 'Nota de crédito recibida',
    cuando: 'Al registrarse una nota de crédito del proveedor (si la compra está cargada a una importación, ver la situación siguiente)',
    documento: 'Nota de crédito de compra',
    lineas: [
      { lado: 'DEBE', fuente: 'CUENTA_PROVEEDOR', cuentaDinamica: 'Cuenta del proveedor; si no tiene una propia, la de su tipo', etiqueta: 'Baja de la deuda con el proveedor', monto: TOTAL },
      { lado: 'HABER', concepto: 'INVENTARIO', etiqueta: 'Reversión de mercadería o gasto', monto: BASE_10 },
      { lado: 'HABER', concepto: 'IVA_CREDITO_10', etiqueta: 'Reversión IVA crédito 10%', monto: IVA_10 },
      { lado: 'HABER', concepto: 'IVA_CREDITO_5', etiqueta: 'Reversión IVA crédito 5%', monto: 0, condicion: 'Solo si la NC tiene ítems al 5%' },
    ],
  },
  {
    clave: 'NOTA_CREDITO_COMPRA_IMPORTACION',
    grupo: 'Compras',
    titulo: 'Nota de crédito de una compra cargada a una importación',
    cuando: 'Al registrarse una nota de crédito del proveedor sobre una compra que es componente de costo de una importación',
    documento: 'Nota de crédito de compra',
    lineas: [
      { lado: 'DEBE', fuente: 'CUENTA_PROVEEDOR', cuentaDinamica: 'Cuenta del proveedor; si no tiene una propia, la de su tipo', etiqueta: 'Baja de la deuda con el proveedor', monto: TOTAL },
      { lado: 'HABER', concepto: 'IMPORTACION_COMPRA', etiqueta: 'Reversión del costo de la importación (la misma cuenta que la compra)', monto: BASE_10 },
      { lado: 'HABER', concepto: 'IVA_CREDITO_10', etiqueta: 'Reversión IVA crédito 10%', monto: IVA_10 },
      { lado: 'HABER', concepto: 'IVA_CREDITO_5', etiqueta: 'Reversión IVA crédito 5%', monto: 0, condicion: 'Solo si la NC tiene ítems al 5%' },
    ],
  },
  {
    clave: 'PAGO_PROVEEDOR',
    grupo: 'Compras',
    titulo: 'Pago a un proveedor',
    cuando: 'Al registrarse un pago de una compra a crédito',
    documento: 'Pago a proveedor',
    lineas: [
      { lado: 'DEBE', concepto: 'PROVEEDORES', etiqueta: 'Baja de la deuda', monto: TOTAL },
      { lado: 'HABER', concepto: 'CAJA_GENERAL', fuente: 'MEDIO_PAGO_PAGO', etiqueta: 'Salida de fondos', monto: TOTAL },
    ],
  },
  {
    clave: 'COMPRA_IMPORTACION_CONTADO',
    grupo: 'Compras',
    titulo: 'Compra al contado cargada a una importación',
    cuando: 'Al confirmarse una compra al contado que es componente de costo de una importación',
    documento: 'Factura de compra',
    lineas: [
      { lado: 'DEBE', concepto: 'IMPORTACION_COMPRA', etiqueta: 'Costo de la importación (sin IVA)', monto: BASE_10 },
      { lado: 'DEBE', concepto: 'IVA_CREDITO_10', etiqueta: 'IVA crédito 10%', monto: IVA_10, condicion: 'Solo si la factura tiene IVA' },
      { lado: 'DEBE', concepto: 'IVA_CREDITO_5', etiqueta: 'IVA crédito 5%', monto: 0, condicion: 'Solo si la compra tiene ítems al 5%' },
      { lado: 'HABER', concepto: 'CAJA_GENERAL', fuente: 'MEDIO_PAGO_PAGO', etiqueta: 'Salida de fondos, según con qué se pagó', monto: TOTAL },
    ],
    nota: 'Si esta cuenta y la del pago al proveedor de la importación son la misma, el costo del proveedor entra dos veces: elegí un esquema (ver Mapeo).',
  },
  {
    clave: 'COMPRA_IMPORTACION_CREDITO',
    grupo: 'Compras',
    titulo: 'Compra a crédito cargada a una importación',
    cuando: 'Al confirmarse una compra a crédito que es componente de costo de una importación (p. ej. la factura del exterior)',
    documento: 'Factura de compra',
    lineas: [
      { lado: 'DEBE', concepto: 'IMPORTACION_COMPRA', etiqueta: 'Costo de la importación (sin IVA)', monto: BASE_10 },
      { lado: 'DEBE', concepto: 'IVA_CREDITO_10', etiqueta: 'IVA crédito 10%', monto: IVA_10, condicion: 'Solo si la factura tiene IVA' },
      { lado: 'DEBE', concepto: 'IVA_CREDITO_5', etiqueta: 'IVA crédito 5%', monto: 0, condicion: 'Solo si la compra tiene ítems al 5%' },
      { lado: 'HABER', fuente: 'CUENTA_PROVEEDOR', cuentaDinamica: 'Cuenta del proveedor; si no tiene una propia, la de su tipo', etiqueta: 'Deuda con el proveedor', monto: TOTAL },
    ],
    nota: 'Si esta cuenta y la del pago al proveedor de la importación son la misma, el costo del proveedor entra dos veces: elegí un esquema (ver Mapeo).',
  },
  {
    clave: 'ORDEN_PAGO',
    grupo: 'Compras',
    titulo: 'Orden de pago',
    cuando: 'Al confirmarse una orden que paga varias facturas juntas',
    documento: 'Orden de pago a proveedor',
    lineas: [
      { lado: 'DEBE', fuente: 'CUENTA_PROVEEDOR', cuentaDinamica: 'Cuenta del proveedor de cada factura incluida', etiqueta: 'Baja de las deudas pagadas', monto: TOTAL },
      { lado: 'HABER', cuentaDinamica: 'Cuenta contable de la cuenta de tesorería usada (o la de la regla de tesorería del medio); si no hay, la configurada para el medio, o CAJA_GENERAL', etiqueta: 'Salida de banco o caja', monto: TOTAL },
      { lado: 'HABER', concepto: 'CHEQUES_A_PAGAR', etiqueta: 'Cheques emitidos que el banco todavía no debitó', monto: 0, condicion: 'Solo si se pagó con cheque' },
      { lado: 'DEBE', concepto: 'DIFERENCIA_CAMBIO_PERDIDA', etiqueta: 'Diferencia de cambio perdida', monto: 0, condicion: 'Solo en órdenes en otra moneda, si se pagó a una cotización mayor que la de la compra' },
      { lado: 'HABER', concepto: 'DIFERENCIA_CAMBIO_GANADA', etiqueta: 'Diferencia de cambio ganada', monto: 0, condicion: 'Solo en órdenes en otra moneda, si se pagó a una cotización menor que la de la compra' },
    ],
    nota: 'Una orden puede pagar varias facturas y usar varios medios: el asiento lleva una línea por cada uno. El cheque no toca el banco hasta que se debita: ahí tesorería mueve Cheques a pagar contra el banco (la categoría "Cheque Debitado" tiene que apuntar a la misma cuenta que CHEQUES_A_PAGAR).',
  },
  {
    clave: 'DESPACHO_IMPORTACION',
    grupo: 'Compras',
    titulo: 'Cierre de despacho de importación',
    cuando: 'Al cerrarse un despacho, con todos los costos prorrateados',
    documento: 'Despacho de importación',
    lineas: [
      { lado: 'DEBE', concepto: 'IMPORTACION_TRIBUTOS', etiqueta: 'Costo de la mercadería importada', monto: BASE_10 },
      { lado: 'DEBE', concepto: 'IVA_CREDITO_10', etiqueta: 'IVA de importación', monto: IVA_10, condicion: 'Solo si el despacho tiene IVA' },
      { lado: 'DEBE', concepto: 'IMPORTACION_ANTICIPO_IRE', etiqueta: 'Anticipo de IRE (no es costo)', monto: 0, condicion: 'Solo si el despacho tiene anticipo de IRE' },
      { lado: 'HABER', fuente: 'CUENTA_PROVEEDOR', cuentaDinamica: 'Cuenta del proveedor del embarque', etiqueta: 'Deuda por la importación', monto: TOTAL },
    ],
    nota: 'El costo va a donde mapeaste IMPORTACION_TRIBUTOS. Si además mapeás IMPORTACIONES_EN_CURSO, el anticipo de despacho se aplica y el cierre de la importación pasa el costo a mercaderías.',
    variantes: [
      {
        siMapeado: 'IMPORTACIONES_EN_CURSO',
        lineas: [
          { lado: 'DEBE', concepto: 'IMPORTACION_TRIBUTOS', etiqueta: 'Tributos y gastos del despacho', monto: BASE_10 },
          { lado: 'DEBE', concepto: 'IVA_CREDITO_10', etiqueta: 'IVA de importación', monto: IVA_10, condicion: 'Solo si el despacho tiene IVA' },
          { lado: 'DEBE', concepto: 'IMPORTACION_ANTICIPO_IRE', etiqueta: 'Anticipo de IRE (no es costo)', monto: 0, condicion: 'Solo si el despacho tiene anticipo de IRE' },
          { lado: 'HABER', concepto: 'ANTICIPO_DESPACHO', etiqueta: 'Se aplica el anticipo de despacho', monto: TOTAL, condicion: 'Si no hay anticipo de despacho pagado, va a la cuenta del proveedor del embarque' },
        ],
        nota: 'Con la cuenta puente el despacho no toca mercaderías: el costo va a donde mapeaste IMPORTACION_TRIBUTOS (y pasa a mercaderías en el "Cierre de la importación" si esa cuenta es la puente). Con IMPORTACIONES_EN_CURSO mapeado, además, el anticipo de despacho pagado se aplica contra el despacho. Los costos que ya tienen su propio comprobante (factura del exterior, gastos de compras) no se vuelven a sumar acá.',
      },
    ],
  },
  {
    clave: 'CIERRE_IMPORTACION',
    grupo: 'Compras',
    titulo: 'Cierre de la importación',
    cuando: 'Al cerrar la importación, después del despacho',
    documento: 'Importación',
    soloSiMapeado: 'IMPORTACIONES_EN_CURSO',
    lineas: [
      { lado: 'DEBE', concepto: 'INVENTARIO', etiqueta: 'La mercadería entra al inventario', monto: BASE_10 },
      { lado: 'HABER', concepto: 'IMPORTACIONES_EN_CURSO', etiqueta: 'Se descarga la cuenta puente', monto: BASE_10 },
    ],
    nota: 'Por lo que efectivamente entró a la cuenta puente por esta importación (despacho, compras, gastos y pagos ya asentados, menos sus reversiones y notas de crédito), no por el costo total del costeo: si mandaste algo directo a mercaderías no se vuelve a sumar. Si la puente no tiene saldo de esta importación, no hay asiento. La diferencia contra el costeo la informa Salud contable.',
  },

  // ── Gastos ────────────────────────────────────────────────────────────────
  {
    clave: 'GASTO',
    grupo: 'Gastos',
    titulo: 'Gasto',
    cuando: 'Al confirmarse un gasto',
    documento: 'Gasto',
    lineas: [
      { lado: 'DEBE', concepto: 'GASTOS_GENERALES', etiqueta: 'Cuenta del tipo de gasto (alquiler, servicios, combustible…)', monto: BASE_10 },
      { lado: 'DEBE', concepto: 'IVA_CREDITO_10', etiqueta: 'IVA crédito 10%', monto: IVA_10, condicion: 'Solo si el gasto tiene comprobante con IVA' },
      { lado: 'DEBE', concepto: 'IVA_CREDITO_5', etiqueta: 'IVA crédito 5%', monto: 0, condicion: 'Solo si el gasto tiene IVA al 5%' },
      { lado: 'DEBE', concepto: 'IVA_NO_DEDUCIBLE', etiqueta: 'IVA no deducible (o sumado al gasto, si así se eligió)', monto: 0, condicion: 'Solo si el gasto no es deducible' },
      { lado: 'HABER', concepto: 'CAJA_GENERAL', etiqueta: 'Contrapartida según cómo se pagó', monto: TOTAL },
    ],
    nota: 'La contrapartida cambia con la forma de pago. Pagado en el momento: la cuenta de tesorería elegida (o la de la regla "Pago de gasto"), si no la configurada para el medio, o CAJA_GENERAL / BANCOS_DEFAULT. PROVEEDORES si quedó a crédito, o ANTICIPO_PERSONAL si lo puso un empleado.',
  },
  {
    clave: 'GASTO_IMPORTACION',
    grupo: 'Gastos',
    titulo: 'Gasto cargado a una importación',
    cuando: 'Al confirmarse un gasto que es componente de costo de una importación (flete, despachante…)',
    documento: 'Gasto',
    lineas: [
      { lado: 'DEBE', concepto: 'IMPORTACION_GASTO', etiqueta: 'Costo de la importación (o la cuenta del tipo de gasto, si así se eligió)', monto: BASE_10 },
      { lado: 'DEBE', concepto: 'IVA_CREDITO_10', etiqueta: 'IVA crédito 10%', monto: IVA_10, condicion: 'Solo si el gasto tiene comprobante con IVA' },
      { lado: 'DEBE', concepto: 'IVA_CREDITO_5', etiqueta: 'IVA crédito 5%', monto: 0, condicion: 'Solo si el gasto tiene IVA al 5%' },
      { lado: 'DEBE', concepto: 'IVA_NO_DEDUCIBLE', etiqueta: 'IVA no deducible (o sumado al gasto, si así se eligió)', monto: 0, condicion: 'Solo si el gasto no es deducible' },
      { lado: 'HABER', concepto: 'CAJA_GENERAL', etiqueta: 'Contrapartida según cómo se pagó', monto: TOTAL },
    ],
    nota: 'La contrapartida cambia con la forma de pago, igual que en el gasto común: la cuenta de tesorería si se pagó en el momento, PROVEEDORES si quedó a crédito, o ANTICIPO_PERSONAL si lo puso un empleado.',
  },

  // ── Tesorería ─────────────────────────────────────────────────────────────
  {
    clave: 'MOVIMIENTO_TES_INGRESO',
    grupo: 'Tesorería',
    titulo: 'Ingreso de tesorería',
    cuando: 'Al confirmarse un movimiento de ingreso en una cuenta o caja',
    documento: 'Movimiento de tesorería',
    lineas: [
      { lado: 'DEBE', fuente: 'CUENTA_TESORERIA', cuentaDinamica: 'Cuenta contable de la cuenta de tesorería que recibe', etiqueta: 'Entrada de dinero', monto: TOTAL },
      { lado: 'HABER', fuente: 'CATEGORIA_TESORERIA', cuentaDinamica: 'Cuenta contable de la categoría del movimiento', etiqueta: 'Origen del ingreso', monto: TOTAL },
    ],
    nota: 'Sin cuenta contable en la cuenta de tesorería el asiento no se genera: se configura en Tesorería › Cuentas.',
  },
  {
    clave: 'MOVIMIENTO_TES_EGRESO',
    grupo: 'Tesorería',
    titulo: 'Egreso de tesorería',
    cuando: 'Al confirmarse un movimiento de egreso en una cuenta o caja',
    documento: 'Movimiento de tesorería',
    lineas: [
      { lado: 'DEBE', fuente: 'CATEGORIA_TESORERIA', cuentaDinamica: 'Cuenta contable de la categoría del movimiento', etiqueta: 'Destino del egreso', monto: TOTAL },
      { lado: 'HABER', fuente: 'CUENTA_TESORERIA', cuentaDinamica: 'Cuenta contable de la cuenta de tesorería que paga', etiqueta: 'Salida de dinero', monto: TOTAL },
    ],
  },
  {
    clave: 'PAGO_IMPORTACION_PROVEEDOR',
    grupo: 'Tesorería',
    titulo: 'Pago al proveedor del exterior de una importación',
    cuando: 'Al confirmarse un egreso imputado a una importación como pago o anticipo al proveedor',
    documento: 'Movimiento de tesorería',
    lineas: [
      { lado: 'DEBE', concepto: 'IMPORTACION_PAGO_PROVEEDOR', etiqueta: 'El pago es costo de la importación', monto: TOTAL },
      { lado: 'HABER', fuente: 'CUENTA_TESORERIA', cuentaDinamica: 'Cuenta contable de la cuenta de tesorería que paga', etiqueta: 'Salida de dinero', monto: TOTAL },
    ],
    nota: 'Va directo a la cuenta de la importación, sin pasar por la deuda con el proveedor ni por anticipos. La categoría del movimiento no se usa.',
  },
  {
    clave: 'PAGO_IMPORTACION_DESPACHO',
    grupo: 'Tesorería',
    titulo: 'Anticipo de despacho de una importación',
    cuando: 'Al confirmarse un egreso imputado a una importación como anticipo de despacho',
    documento: 'Movimiento de tesorería',
    lineas: [
      { lado: 'DEBE', concepto: 'ANTICIPO_DESPACHO', etiqueta: 'Anticipo entregado al despachante', monto: TOTAL },
      { lado: 'HABER', fuente: 'CUENTA_TESORERIA', cuentaDinamica: 'Cuenta contable de la cuenta de tesorería que paga', etiqueta: 'Salida de dinero', monto: TOTAL },
    ],
    nota: 'Se aplica al cerrar el despacho. Lo que sobre queda como saldo en la cuenta de anticipos: no es costo.',
  },
  {
    clave: 'TRANSFERENCIA_TES',
    grupo: 'Tesorería',
    titulo: 'Transferencia entre cuentas propias',
    cuando: 'Al confirmarse una transferencia de una cuenta a otra',
    documento: 'Transferencia de tesorería',
    lineas: [
      { lado: 'DEBE', fuente: 'CUENTA_TES_DESTINO', cuentaDinamica: 'Cuenta contable de la cuenta destino', etiqueta: 'Entra en la cuenta destino', monto: TOTAL },
      { lado: 'HABER', fuente: 'CUENTA_TES_ORIGEN', cuentaDinamica: 'Cuenta contable de la cuenta origen', etiqueta: 'Sale de la cuenta origen', monto: TOTAL },
      { lado: 'DEBE', concepto: 'DIFERENCIA_CAMBIO_PERDIDA', etiqueta: 'Diferencia de cambio perdida', monto: 0, condicion: 'Solo en transferencias en otra moneda, si el tipo de cambio del banco es peor que el del sistema' },
      { lado: 'HABER', concepto: 'DIFERENCIA_CAMBIO_GANADA', etiqueta: 'Diferencia de cambio ganada', monto: 0, condicion: 'Solo en transferencias en otra moneda, si el tipo de cambio del banco es mejor' },
    ],
  },

  // ── Sueldos y comisiones ──────────────────────────────────────────────────
  {
    clave: 'LIQUIDACION_SUELDOS',
    grupo: 'Sueldos y comisiones',
    titulo: 'Liquidación de sueldos',
    cuando: 'Al confirmarse la liquidación del mes',
    documento: 'Liquidación de RRHH',
    lineas: [
      { lado: 'DEBE', concepto: 'SUELDOS_JORNALES', etiqueta: 'Sueldos y jornales del período', monto: 1_000_000 },
      { lado: 'DEBE', concepto: 'APORTE_PATRONAL_IPS', etiqueta: 'Aporte patronal IPS (16,5%)', monto: 165_000 },
      { lado: 'DEBE', concepto: 'APORTE_ADMIN_IPS', etiqueta: 'Aporte administrativo IPS (1%)', monto: 10_000 },
      { lado: 'HABER', concepto: 'SUELDOS_A_PAGAR', etiqueta: 'Neto a pagar al personal', monto: 815_000 },
      { lado: 'HABER', concepto: 'IPS_A_DEPOSITAR', etiqueta: 'IPS a depositar (obrero + patronal + administrativo)', monto: 260_000 },
      { lado: 'HABER', concepto: 'DESCUENTOS_VARIOS_RRHH', etiqueta: 'Descuentos al personal', monto: 100_000, condicion: 'Solo si hay anticipos o descuentos' },
    ],
    nota: 'El debe se reparte por centro de costo según a dónde pertenece cada empleado.',
  },
  {
    clave: 'DEVENGAMIENTO_COMISIONES',
    grupo: 'Sueldos y comisiones',
    titulo: 'Comisiones devengadas — comisionista empleado',
    cuando: 'Al cerrarse la liquidación de un vendedor cuyo régimen es "empleado"',
    documento: 'Liquidación de comisiones',
    lineas: [
      { lado: 'DEBE', concepto: 'GASTO_COMISIONES_VENTAS', etiqueta: 'Gasto por comisiones', monto: TOTAL },
      { lado: 'HABER', concepto: 'COMISIONES_A_PAGAR', etiqueta: 'Comisiones a pagar', monto: TOTAL },
    ],
    nota: 'La comisión de un empleado es remuneración: no lleva IVA ni comprobante. Es también lo que se asienta mientras el vendedor no tenga régimen declarado.',
  },
  {
    clave: 'DEVENGAMIENTO_COMISIONES_IVA_INCLUIDO',
    grupo: 'Sueldos y comisiones',
    titulo: 'Comisiones devengadas — el comisionista factura, IVA incluido',
    cuando: 'Al cerrarse la liquidación de un vendedor externo cuyo porcentaje ya incluye el IVA',
    documento: 'Liquidación de comisiones',
    lineas: [
      { lado: 'DEBE', concepto: 'GASTO_COMISIONES_VENTAS', etiqueta: 'Gasto por comisiones (sin IVA)', monto: 1_000_000 },
      { lado: 'DEBE', concepto: 'IVA_CREDITO_10', etiqueta: 'IVA crédito 10% de la comisión', monto: 100_000 },
      { lado: 'HABER', concepto: 'COMISIONES_A_PAGAR', etiqueta: 'Comisiones a pagar (lo que él factura)', monto: TOTAL },
    ],
    nota: 'El crédito fiscal lo respalda la factura del comisionista, no esta liquidación: el importe liquidado tiene que coincidir con lo que él factura.',
  },
  {
    clave: 'DEVENGAMIENTO_COMISIONES_IVA_ADICIONAL',
    grupo: 'Sueldos y comisiones',
    titulo: 'Comisiones devengadas — el comisionista factura, IVA aparte',
    cuando: 'Al cerrarse la liquidación de un vendedor externo cuyo porcentaje es el honorario neto',
    documento: 'Liquidación de comisiones',
    lineas: [
      { lado: 'DEBE', concepto: 'GASTO_COMISIONES_VENTAS', etiqueta: 'Gasto por comisiones (neto calculado)', monto: TOTAL },
      { lado: 'DEBE', concepto: 'IVA_CREDITO_10', etiqueta: 'IVA crédito 10% sumado encima', monto: 110_000 },
      { lado: 'HABER', concepto: 'COMISIONES_A_PAGAR', etiqueta: 'Comisiones a pagar (neto + IVA)', monto: 1_210_000 },
    ],
    nota: 'Acá se le termina pagando más que el porcentaje calculado, porque el IVA se suma encima.',
  },
  {
    clave: 'PAGO_COMISIONES',
    grupo: 'Sueldos y comisiones',
    titulo: 'Pago de comisiones',
    cuando: 'Al pagarse una liquidación de comisiones',
    documento: 'Liquidación de comisiones',
    lineas: [
      { lado: 'DEBE', concepto: 'COMISIONES_A_PAGAR', etiqueta: 'Cancelación de la deuda', monto: TOTAL },
      { lado: 'HABER', concepto: 'PAGO_COMISIONES_FONDOS', etiqueta: 'Salida de fondos', monto: TOTAL },
    ],
  },
  {
    clave: 'COMISION_SUPERVISOR',
    grupo: 'Sueldos y comisiones',
    titulo: 'Comisión de supervisor',
    cuando: 'Al aprobarse y pagarse una comisión de supervisor',
    documento: 'Comisión de supervisor',
    lineas: [
      { lado: 'DEBE', concepto: 'GASTO_COMISIONES_VENTAS', etiqueta: 'Gasto por comisión', monto: TOTAL },
      { lado: 'HABER', concepto: 'PAGO_COMISIONES_FONDOS', etiqueta: 'Salida de fondos', monto: TOTAL },
    ],
  },
];
