/**
 * CFDI Type Enum
 * Tipos de comprobante CFDI según catálogo SAT
 */

export enum CfdiType {
  /** I - Ingreso */
  INCOME = 'I',

  /** E - Egreso (Nota de crédito) */
  EXPENSE = 'E',

  /** T - Traslado */
  TRANSFER = 'T',

  /** N - Nómina */
  PAYROLL = 'N',

  /** P - Pago (Complemento de pago) */
  PAYMENT = 'P',
}

/**
 * Descripciones de los tipos de CFDI
 */
export const CfdiTypeDescriptions: Record<CfdiType, string> = {
  [CfdiType.INCOME]: 'Ingreso',
  [CfdiType.EXPENSE]: 'Egreso',
  [CfdiType.TRANSFER]: 'Traslado',
  [CfdiType.PAYROLL]: 'Nómina',
  [CfdiType.PAYMENT]: 'Pago',
};

/**
 * Tipo de relación CFDI según catálogo SAT
 */
export enum CfdiRelationType {
  /** 01 - Nota de crédito de los documentos relacionados */
  CREDIT_NOTE = '01',

  /** 02 - Nota de débito de los documentos relacionados */
  DEBIT_NOTE = '02',

  /** 03 - Devolución de mercancía sobre facturas o traslados previos */
  MERCHANDISE_RETURN = '03',

  /** 04 - Sustitución de los CFDI previos */
  SUBSTITUTION = '04',

  /** 05 - Traslados de mercancías facturadas previamente */
  TRANSFER_OF_INVOICED = '05',

  /** 06 - Factura generada por los traslados previos */
  INVOICE_FROM_TRANSFER = '06',

  /** 07 - CFDI por aplicación de anticipo */
  ADVANCE_APPLICATION = '07',

  /** 08 - Factura generada por pagos en parcialidades */
  PARTIAL_PAYMENTS = '08',

  /** 09 - Factura generada por pagos diferidos */
  DEFERRED_PAYMENTS = '09',
}

/**
 * Versión del CFDI
 */
export enum CfdiVersion {
  V3_3 = '3.3',
  V4_0 = '4.0',
}
