from ...utils import StrEnum


class FormaPago(StrEnum):
    EFECTIVO = '01'
    CHEQUE_NOMINATIVO = '02'
    TRANSFERENCIA_ELECTRONICA_DE_FONDOS = '03'
    TARJETA_DE_CREDITO = '04'
    MONEDERO_ELECTRONICO = '05'
    DINERO_ELECTRONICO = '06'
    VALES_DE_DESPENSA = '08'
    DACION_EN_PAGO = '12'
    PAGO_POR_SUBROGACION = '13'
    PAGO_POR_CONSIGNACION = '14'
    CONDONACION = '15'
    COMPENSACION = '17'
    NOVACION = '23'
    CONFUSION = '24'
    REMISION_DE_DEUDA = '25'
    PRESCRIPCION_O_CADUCIDAD = '26'
    A_SATISFACCION_DEL_ACREEDOR = '27'
    TARJETA_DE_DEBITO = '28'
    TARJETA_DE_SERVICIOS = '29'
    APLICACION_DE_ANTICIPOS = '30'
    INTERMEDIARIO_PAGOS = '31'
    POR_DEFINIR = '99'
    TAREJTAS_DIGITALES = '07'
    BIENES = '09'
    SERVICIO = '10'
    POR_CUENTA_DE_TERCERO = '11'
    CANCELACION = '16'
    NA = '98'


class Impuesto(StrEnum):
    ISR = '001'
    IVA = '002'
    IEPS = '003'


class MetodoPago(StrEnum):
    PAGO_EN_UNA_SOLA_EXHIBICION = 'PUE'
    PAGO_EN_PARCIALIDADES_O_DIFERIDO = 'PPD'


class RegimenFiscal(StrEnum):
    GENERAL_DE_LEY_PERSONAS_MORALES = '601'
    PERSONAS_MORALES_CON_FINES_NO_LUCRATIVOS = '603'
    SUELDOS_Y_SALARIOS_E_INGRESOS_ASIMILADOS_A_SALARIOS = '605'
    ARRENDAMIENTO = '606'
    REGIMEN_DE_ENAJENACION_O_ADQUISICION_DE_BIENES = '607'
    DEMAS_INGRESOS = '608'
    CONSOLIDACION = '609'
    RESIDENTES_EN_EL_EXTRANJERO_SIN_ESTABLECIMIENTO_PERMANENTE_EN_MEXICO = '610'
    INGRESOS_POR_DIVIDENDOS_SOCIOS_Y_ACCIONISTAS = '611'
    PERSONAS_FISICAS_CON_ACTIVIDADES_EMPRESARIALES_Y_PROFESIONALES = '612'
    INGRESOS_POR_INTERESES = '614'
    REGIMEN_DE_LOS_INGRESOS_POR_OBTENCION_DE_PREMIOS = '615'
    SIN_OBLIGACIONES_FISCALES = '616'
    SOCIEDADES_COOPERATIVAS_DE_PRODUCCION_QUE_OPTAN_POR_DIFERIR_SUS_INGRESOS = '620'
    INCORPORACION_FISCAL = '621'
    ACTIVIDADES_AGRICOLAS_GANADERAS_SILVICOLAS_Y_PESQUERAS = '622'
    OPCIONAL_PARA_GRUPOS_DE_SOCIEDADES = '623'
    COORDINADOS = '624'
    REGIMEN_DE_LAS_ACTIVIDADES_EMPRESARIALES_CON_INGRESOS_A_TRAVES_DE_PLATAFORMAS_TECNOLOGICAS = '625'
    REGIMEN_SIMPLIFICADO_DE_CONFIANZA = '626'
    HIDROCARBUROS = '628'
    DE_LOS_REGIMENES_FISCALES_PREFERENTES_Y_DE_LAS_EMPRESAS_MULTINACIONALES = '629'
    ENAJENACION_DE_ACCIONES_EN_BOLSA_DE_VALORES = '630'


class TipoDeComprobante(StrEnum):
    INGRESO = 'I'
    EGRESO = 'E'
    TRASLADO = 'T'
    NOMINA = 'N'
    PAGO = 'P'


class TipoFactor(StrEnum):
    TASA = 'Tasa'
    CUOTA = 'Cuota'
    EXENTO = 'Exento'


class TipoRelacion(StrEnum):
    NOTA_DE_CREDITO_DE_LOS_DOCUMENTOS_RELACIONADOS = '01'
    NOTA_DE_DEBITO_DE_LOS_DOCUMENTOS_RELACIONADOS = '02'
    DEVOLUCION_DE_MERCANCIA_SOBRE_FACTURAS_O_TRASLADOS_PREVIOS = '03'
    SUSTITUCION_DE_LOS_CFDI_PREVIOS = '04'
    TRASLADOS_DE_MERCANCIAS_FACTURADOS_PREVIAMENTE = '05'
    FACTURA_GENERADA_POR_LOS_TRASLADOS_PREVIOS = '06'
    CFDI_POR_APLICACION_DE_ANTICIPO = '07'
    FACTURA_GENERADA_POR_PAGOS_EN_PARCIALIDADES = '08'
    FACTURA_GENERADA_POR_PAGOS_DIFERIDOS = '09'


class UsoCFDI(StrEnum):
    ADQUISICION_DE_MERCANCIAS = 'G01'
    DEVOLUCIONES_DESCUENTOS_O_BONIFICACIONES = 'G02'
    GASTOS_EN_GENERAL = 'G03'
    CONSTRUCCIONES = 'I01'
    MOBILIARIO_Y_EQUIPO_DE_OFICINA_POR_INVERSIONES = 'I02'
    EQUIPO_DE_TRANSPORTE = 'I03'
    EQUIPO_DE_COMPUTO_Y_ACCESORIOS = 'I04'
    DADOS_TROQUELES_MOLDES_MATRICES_Y_HERRAMENTAL = 'I05'
    COMUNICACIONES_TELEFONICAS = 'I06'
    COMUNICACIONES_SATELITALES = 'I07'
    OTRA_MAQUINARIA_Y_EQUIPO = 'I08'
    HONORARIOS_MEDICOS_DENTALES_Y_GASTOS_HOSPITALARIOS = 'D01'
    GASTOS_MEDICOS_POR_INCAPACIDAD_O_DISCAPACIDAD = 'D02'
    GASTOS_FUNERALES = 'D03'
    DONATIVOS = 'D04'
    INTERESES_REALES_EFECTIVAMENTE_PAGADOS_POR_CREDITOS_HIPOTECARIOS_CASA_HABITACION = 'D05'
    APORTACIONES_VOLUNTARIAS_AL_SAR = 'D06'
    PRIMAS_POR_SEGUROS_DE_GASTOS_MEDICOS = 'D07'
    GASTOS_DE_TRANSPORTACION_ESCOLAR_OBLIGATORIA = 'D08'
    DEPOSITOS_EN_CUENTAS_PARA_EL_AHORRO_PRIMAS_QUE_TENGAN_COMO_BASE_PLANES_DE_PENSIONES = 'D09'
    PAGOS_POR_SERVICIOS_EDUCATIVOS_COLEGIATURAS = 'D10'
    SIN_EFECTOS_FISCALES = 'S01'
    PAGOS = 'CP01'
    NOMINA = 'CN01'
    POR_DEFINIR = 'P01'


class Exportacion(StrEnum):
    NO_APLICA = '01'
    DEFINITIVA_CON_CLAVE_A1 = '02'
    TEMPORAL = '03'
    DEFINITIVA_CON_CLAVE_DISTINTA_A_A1_O_CUANDO_NO_EXISTE_ENAJENACION_EN_TERMINOS_DEL_CFF = '04'


class ObjetoImp(StrEnum):
    NO_OBJETO_DE_IMPUESTO = '01'
    SI_OBJETO_DE_IMPUESTO = '02'
    SI_OBJETO_DEL_IMPUESTO_Y_NO_OBLIGADO_AL_DESGLOSE = '03'
    SI_OBJETO_DEL_IMPUESTO_Y_NO_CAUSA_IMPUESTO = '04'


