/**
 * Reglas de "¿esto genera asiento?" compartidas entre los integradores (tiempo
 * real) y la conciliación contable (detección + regeneración). Si viven en un
 * solo lugar, la pantalla de conciliación no puede ofrecer regenerar algo que
 * el integrador no debería asentar, ni al revés.
 */

/** Estado real que guarda factura_cab / nota_credito_cab cuando SIFEN aprueba. */
export const ESTADO_APROBADO_SIFEN = 'Aprobado';

/**
 * Una factura o NC de venta solo se contabiliza aprobada por SIFEN. Anulada,
 * rechazada, pendiente o enviada no es una venta: el asiento se genera al
 * aprobarse (lo dispara el middleware) y se revierte al anularse.
 */
export function facturaVentaContabilizable(estado: string | null | undefined): boolean {
  return String(estado ?? '') === ESTADO_APROBADO_SIFEN;
}

/**
 * Movimientos de tesorería que crea otro documento. El asiento de ese documento
 * ya lleva la línea del banco/caja (lo arma el integrador del gasto, del recibo,
 * de la OP…), así que el movimiento NO se contabiliza por sí mismo: hacerlo
 * duplica el crédito al banco.
 */
export const ORIGENES_MOVIMIENTO_CON_ASIENTO_PROPIO: readonly string[] = [
  'gasto_cab',
  'recibos_multi',
  'recibos_cobro',
  'ORDEN_PAGO_PROVEEDOR',
  'RENDICION_ADELANTO',
  'RENDICION_DEVOLUCION',
  'TRANSFERENCIA_ORIGEN',
  'TRANSFERENCIA_DESTINO',
];

export function movimientoSeContabilizaPorSuOrigen(origenTipo: string | null | undefined): boolean {
  return !!origenTipo && ORIGENES_MOVIMIENTO_CON_ASIENTO_PROPIO.includes(origenTipo);
}
