diff --git a/source/app/controllers/util.py b/source/app/controllers/util.py index 38bb216..8ac98bb 100644 --- a/source/app/controllers/util.py +++ b/source/app/controllers/util.py @@ -260,6 +260,14 @@ def get_file(path): return open(path, 'rb') +def get_files(path, ext='xml'): + docs = [] + for folder, _, files in os.walk(path): + pattern = re.compile('\.{}'.format(ext), re.IGNORECASE) + docs += [os.path.join(folder,f) for f in files if pattern.search(f)] + return tuple(docs) + + def read_file(path, mode='rb'): return open(path, mode).read() @@ -308,6 +316,10 @@ def loads(data): return json.loads(data) +def import_json(path): + return loads(read_file(path, 'r')) + + def clean(values): for k, v in values.items(): if isinstance(v, str): diff --git a/source/app/models/main.py b/source/app/models/main.py index 74d6bbd..1699698 100644 --- a/source/app/models/main.py +++ b/source/app/models/main.py @@ -17,7 +17,8 @@ if __name__ == '__main__': from controllers import util from settings import log, VERSION, PATH_CP, COMPANIES, PRE, CURRENT_CFDI, \ INIT_VALUES, DEFAULT_PASSWORD, DECIMALES, IMPUESTOS, DEFAULT_SAT_PRODUCTO, \ - CANCEL_SIGNATURE, PUBLIC, DEFAULT_SERIE_TICKET, DECIMALES_TAX, TITLE_APP + CANCEL_SIGNATURE, PUBLIC, DEFAULT_SERIE_TICKET, CURRENT_CFDI_NOMINA, \ + DEFAULT_SAT_NOMINA, DECIMALES_TAX, TITLE_APP FORMAT = '{0:.2f}' @@ -650,6 +651,7 @@ class SATRegimenes(BaseModel): class Emisor(BaseModel): rfc = TextField(unique=True) + curp = TextField(unique=True) nombre = TextField(default='') nombre_comercial = TextField(default='') calle = TextField(default='') @@ -675,6 +677,7 @@ class Emisor(BaseModel): token_timbrado = TextField(default='') token_soporte = TextField(default='') logo = TextField(default='') + registro_patronal = TextField(default='') regimenes = ManyToManyField(SATRegimenes, related_name='emisores') def __str__(self): @@ -1843,6 +1846,208 @@ class SATUsoCfdi(BaseModel): return tuple(rows) +class SATEstados(BaseModel): + key = TextField(index=True, unique=True) + name = TextField(default='', index=True) + pais = TextField(default='') + activo = BooleanField(default=True) + + class Meta: + order_by = ('name',) + indexes = ( + (('key', 'name', 'pais'), True), + ) + + def __str__(self): + return 'Estado: {} ({})'.format(self.name, self.key) + + +class SATOrigenRecurso(BaseModel): + key = TextField(index=True, unique=True) + name = TextField(default='', index=True) + activo = BooleanField(default=True) + + class Meta: + order_by = ('name',) + indexes = ( + (('key', 'name'), True), + ) + + def __str__(self): + return 'Origen Recurso: {} ({})'.format(self.name, self.key) + + +class SATPeriodicidadPago(BaseModel): + key = TextField(index=True, unique=True) + name = TextField(default='', index=True) + activo = BooleanField(default=True) + + class Meta: + order_by = ('name',) + indexes = ( + (('key', 'name'), True), + ) + + def __str__(self): + return 'Periodicidad de Pago: {} ({})'.format(self.name, self.key) + + +class SATTipoContrato(BaseModel): + key = TextField(index=True, unique=True) + name = TextField(default='', index=True) + activo = BooleanField(default=True) + + class Meta: + order_by = ('name',) + indexes = ( + (('key', 'name'), True), + ) + + def __str__(self): + return 'Tipo de Contrato: {} ({})'.format(self.name, self.key) + + +class SATTipoDeduccion(BaseModel): + key = TextField(index=True, unique=True) + name = TextField(default='', index=True) + clave = TextField(default='') + nombre = TextField(default='') + activo = BooleanField(default=True) + + class Meta: + order_by = ('name',) + indexes = ( + (('key', 'name'), True), + ) + + def __str__(self): + return 'Tipo de Deducción: {} ({})'.format(self.name, self.key) + + +class SATTipoHoras(BaseModel): + key = TextField(index=True, unique=True) + name = TextField(default='', index=True) + activo = BooleanField(default=True) + + class Meta: + order_by = ('name',) + indexes = ( + (('key', 'name'), True), + ) + + def __str__(self): + return 'Tipo de Horas: {} ({})'.format(self.name, self.key) + + +class SATTipoIncapacidad(BaseModel): + key = TextField(index=True, unique=True) + name = TextField(default='', index=True) + activo = BooleanField(default=True) + + class Meta: + order_by = ('name',) + indexes = ( + (('key', 'name'), True), + ) + + def __str__(self): + return 'Tipo de Incapacidad: {} ({})'.format(self.name, self.key) + + +class SATTipoJornada(BaseModel): + key = TextField(index=True, unique=True) + name = TextField(default='', index=True) + activo = BooleanField(default=True) + + class Meta: + order_by = ('name',) + indexes = ( + (('key', 'name'), True), + ) + + def __str__(self): + return 'Tipo de Jornada: {} ({})'.format(self.name, self.key) + + +class SATTipoNomina(BaseModel): + key = TextField(index=True, unique=True) + name = TextField(default='', index=True) + activo = BooleanField(default=True) + + class Meta: + order_by = ('name',) + indexes = ( + (('key', 'name'), True), + ) + + def __str__(self): + return 'Tipo de Nómina: {} ({})'.format(self.name, self.key) + + +class SATTipoOtroPago(BaseModel): + key = TextField(index=True, unique=True) + name = TextField(default='', index=True) + clave = TextField(default='') + nombre = TextField(default='') + activo = BooleanField(default=True) + + class Meta: + order_by = ('name',) + indexes = ( + (('key', 'name'), True), + ) + + def __str__(self): + return 'Tipo de Otro Pago: {} ({})'.format(self.name, self.key) + + +class SATTipoPercepcion(BaseModel): + key = TextField(index=True, unique=True) + name = TextField(default='', index=True) + clave = TextField(default='') + nombre = TextField(default='') + activo = BooleanField(default=True) + + class Meta: + order_by = ('name',) + indexes = ( + (('key', 'name'), True), + ) + + def __str__(self): + return 'Tipo de Percepción: {} ({})'.format(self.name, self.key) + + +class SATTipoRegimen(BaseModel): + key = TextField(index=True, unique=True) + name = TextField(default='', index=True) + activo = BooleanField(default=True) + + class Meta: + order_by = ('name',) + indexes = ( + (('key', 'name'), True), + ) + + def __str__(self): + return 'Regimen de contratación: {} ({})'.format(self.name, self.key) + + +class SATRiesgoPuesto(BaseModel): + key = TextField(index=True, unique=True) + name = TextField(default='', index=True) + activo = BooleanField(default=True) + + class Meta: + order_by = ('name',) + indexes = ( + (('key', 'name'), True), + ) + + def __str__(self): + return 'Riesgo Puesto: {} ({})'.format(self.name, self.key) + + class TipoCambio(BaseModel): dia = DateField(default=util.now) moneda = ForeignKeyField(SATMonedas) @@ -4975,6 +5180,275 @@ class SeriesProductos(BaseModel): order_by = ('serie',) +class Departamentos(BaseModel): + nombre = TextField(default='') + descripcion = TextField(default='') + + class Meta: + order_by = ('nombre',) + + +class Puestos(BaseModel): + nombre = TextField(default='') + descripcion = TextField(default='') + departamento = ForeignKeyField(Departamentos) + + class Meta: + order_by = ('nombre',) + indexes = ( + (('nombre', 'departamento'), True), + ) + + +class Empleados(BaseModel): + num_empleado = TextField(default='') + rfc = TextField(default='', unique=True) + curp = TextField(default='', unique=True) + nombre = TextField(default='') + paterno = TextField(default='') + materno = TextField(default='') + nombre_completo = TextField(default='') + es_activo = BooleanField(default=True) + es_extranjero = BooleanField(default=False) + fecha_alta = DateField(default=util.now) + fecha_ingreso = DateField(default=util.now) + imss = TextField(default='') + tipo_contrato = ForeignKeyField(SATTipoContrato) + es_sindicalizado = BooleanField(default=False) + tipo_jornada = ForeignKeyField(SATTipoJornada, null=True) + tipo_regimen = ForeignKeyField(SATTipoRegimen) + puesto = ForeignKeyField(Puestos, null=True) + riesgo_puesto = ForeignKeyField(SATRiesgoPuesto, null=True) + periodicidad_pago = ForeignKeyField(SATPeriodicidadPago) + banco = ForeignKeyField(SATBancos, null=True) + cuenta_bancaria = TextField(default='') + clabe = TextField(default='') + salario_base = DecimalField(default=0.0, max_digits=18, decimal_places=6, + auto_round=True) + salario_diario = DecimalField(default=0.0, max_digits=18, decimal_places=6, + auto_round=True) + estado = ForeignKeyField(SATEstados) + codigo_postal = TextField(default='') + notas = TextField(default='') + + class Meta: + order_by = ('nombre_completo',) + indexes = ( + (('num_empleado', 'rfc'), True), + ) + + +class CfdiNomina(BaseModel): + empleado = ForeignKeyField(Empleados) + version = TextField(default=CURRENT_CFDI) + serie = TextField(default='') + folio = IntegerField(default=0) + fecha = DateTimeField(default=util.now, formats=['%Y-%m-%d %H:%M:%S']) + fecha_timbrado = DateTimeField(null=True) + forma_pago = TextField(default='') + condiciones_pago = TextField(default='') + subtotal = DecimalField(default=0.0, max_digits=20, decimal_places=6, + auto_round=True) + descuento = DecimalField(default=0.0, max_digits=20, decimal_places=6, + auto_round=True) + moneda = TextField(default='MXN') + tipo_cambio = DecimalField(default=1.0, max_digits=15, decimal_places=6, + auto_round=True) + total = DecimalField(default=0.0, max_digits=20, decimal_places=6, + auto_round=True) + total_mn = DecimalField(default=0.0, max_digits=20, decimal_places=6, + auto_round=True) + tipo_comprobante = TextField(default='I') + metodo_pago = TextField(default='PUE') + lugar_expedicion = TextField(default='') + confirmacion = TextField(default='') + uso_cfdi = TextField(default='') + total_retenciones = DecimalField( + max_digits=20, decimal_places=6, auto_round=True, null=True) + total_trasladados = DecimalField( + max_digits=20, decimal_places=6, auto_round=True, null=True) + xml = TextField(default='') + uuid = UUIDField(null=True) + estatus = TextField(default='Guardada') + estatus_sat = TextField(default='Vigente') + regimen_fiscal = TextField(default='') + notas = TextField(default='') + saldo = DecimalField(default=0.0, max_digits=20, decimal_places=6, + auto_round=True) + pagada = BooleanField(default=False) + cancelada = BooleanField(default=False) + fecha_cancelacion = DateTimeField(null=True) + acuse = TextField(default='') + tipo_relacion = TextField(default='') + error = TextField(default='') + version = TextField(default=CURRENT_CFDI_NOMINA) + registro_patronal = TextField(default='') + rfc_patron_origen = TextField(default='') + tipo_nomina = ForeignKeyField(SATTipoNomina) + fecha_pago = DateField() + fecha_inicial_pago = DateField() + fecha_final_pago = DateField() + dias_pagados = DecimalField(default=0.0, max_digits=12, decimal_places=2, + auto_round=True) + origen_recurso = ForeignKeyField(SATOrigenRecurso, null=True) + monto_recurso_propio = DecimalField(default=0.0, max_digits=20, + decimal_places=6, auto_round=True) + + class Meta: + order_by = ('fecha',) + + +class CfdiNominaDetalle(BaseModel): + cfdi = ForeignKeyField(CfdiNomina) + clave_sat = TextField(default=DEFAULT_SAT_NOMINA['CLAVE']) + cantidad = DecimalField(default=1.0, max_digits=18, decimal_places=6, + auto_round=True) + clave_unidad = TextField(default=DEFAULT_SAT_NOMINA['UNIDAD']) + descripcion = TextField(default=DEFAULT_SAT_NOMINA['DESCRIPCION']) + valor_unitario = DecimalField(default=0.0, max_digits=18, decimal_places=6, + auto_round=True) + importe = DecimalField(default=0.0, max_digits=20, decimal_places=6, + auto_round=True) + descuento = DecimalField(default=0.0, max_digits=18, decimal_places=6, + auto_round=True) + + class Meta: + order_by = ('cfdi',) + + +class CfdiNominaTotales(BaseModel): + cfdi = ForeignKeyField(CfdiNomina) + subtotal = DecimalField(default=0.0, max_digits=20, decimal_places=6, + auto_round=True) + descuento = DecimalField(default=0.0, max_digits=20, decimal_places=6, + auto_round=True) + total_percepciones = DecimalField(default=0.0, max_digits=20, + decimal_places=6, auto_round=True) + total_gravado = DecimalField(default=0.0, max_digits=20, decimal_places=6, + auto_round=True) + total_exento = DecimalField(default=0.0, max_digits=20, decimal_places=6, + auto_round=True) + total_deducciones = DecimalField(default=0.0, max_digits=20, decimal_places=6, + auto_round=True) + total_otros_pagos = DecimalField(default=0.0, max_digits=20, decimal_places=6, + auto_round=True) + total_sueldos = DecimalField(default=0.0, max_digits=20, decimal_places=6, + auto_round=True) + total_separacion = DecimalField(default=0.0, max_digits=20, decimal_places=6, + auto_round=True) + total_jubilacion = DecimalField(default=0.0, max_digits=20, decimal_places=6, + auto_round=True) + total_retenciones = DecimalField(default=0.0, max_digits=20, decimal_places=6, + auto_round=True) + total_otras_deducciones = DecimalField(default=0.0, max_digits=20, + decimal_places=6, auto_round=True) + total = DecimalField(default=0.0, max_digits=20, decimal_places=6, + auto_round=True) + + +class CfdiNominaJubilacion(BaseModel): + cfdi = ForeignKeyField(CfdiNomina) + total_una_exhibicion = DecimalField(default=0.0, max_digits=20, + decimal_places=6, auto_round=True) + total_parcialidad = DecimalField(default=0.0, max_digits=20, + decimal_places=6, auto_round=True) + monto_diario = DecimalField(default=0.0, max_digits=20, + decimal_places=6, auto_round=True) + ingreso_acumulable = DecimalField(default=0.0, max_digits=20, + decimal_places=6, auto_round=True) + ingreso_no_acumulable = DecimalField(default=0.0, max_digits=20, + decimal_places=6, auto_round=True) + + +class CfdiNominaSeparacion(BaseModel): + cfdi = ForeignKeyField(CfdiNomina) + total_pagado = DecimalField(default=0.0, max_digits=20, + decimal_places=6, auto_round=True) + years_servicio = IntegerField(default=0) + ultimo_sueldo = DecimalField(default=0.0, max_digits=20, + decimal_places=6, auto_round=True) + ingreso_acumulable = DecimalField(default=0.0, max_digits=20, + decimal_places=6, auto_round=True) + ingreso_no_acumulable = DecimalField(default=0.0, max_digits=20, + decimal_places=6, auto_round=True) + + +class CfdiNominaPercepciones(BaseModel): + cfdi = ForeignKeyField(CfdiNomina) + tipo_percepcion = ForeignKeyField(SATTipoPercepcion) + importe_gravado = DecimalField(default=0.0, max_digits=20, decimal_places=6, + auto_round=True) + importe_exento = DecimalField(default=0.0, max_digits=20, decimal_places=6, + auto_round=True) + valor_mercado = DecimalField(default=0.0, max_digits=20, decimal_places=6, + auto_round=True) + precio_al_ortorgarse = DecimalField(default=0.0, max_digits=20, + decimal_places=6, auto_round=True) + + +class CfdiNominaDeducciones(BaseModel): + cfdi = ForeignKeyField(CfdiNomina) + tipo_deduccion = ForeignKeyField(SATTipoDeduccion) + importe = DecimalField(default=0.0, max_digits=20, decimal_places=6, + auto_round=True) + + +class CfdiNominaOtroPago(BaseModel): + cfdi = ForeignKeyField(CfdiNomina) + tipo_otro_pago = ForeignKeyField(SATTipoOtroPago) + importe = DecimalField(default=0.0, max_digits=20, decimal_places=6, + auto_round=True) + subsidio_causado = DecimalField(default=0.0, max_digits=20, decimal_places=6, + auto_round=True) + saldo_a_favor = DecimalField(default=0.0, max_digits=20, decimal_places=6, + auto_round=True) + year = IntegerField(default=0) + remanente_saldo = DecimalField(default=0.0, max_digits=20, decimal_places=6, + auto_round=True) + + +class CfdiNominaIncapacidad(BaseModel): + cfdi = ForeignKeyField(CfdiNomina) + dias = IntegerField(default=0) + tipo = ForeignKeyField(SATTipoIncapacidad) + importe = DecimalField(default=0.0, max_digits=20, + decimal_places=6, auto_round=True) + + +class CfdiNominaHorasExtra(BaseModel): + cfdi = ForeignKeyField(CfdiNomina) + dias = IntegerField(default=0) + tipos_horas = ForeignKeyField(SATTipoHoras) + horas_extra = IntegerField(default=0) + importe_pagado = DecimalField(default=0.0, max_digits=20, + decimal_places=6, auto_round=True) + + +class CfdiNominaSubcontratos(BaseModel): + cfdi = ForeignKeyField(CfdiNomina) + rfc = TextField(default='') + porcentaje = DecimalField(default=0.0, max_digits=12, decimal_places=2, + auto_round=True) + + class Meta: + order_by = ('cfdi',) + + +class CfdiNominaOtros(BaseModel): + cfdi = ForeignKeyField(CfdiNomina) + node = TextField(default='') + key = TextField(default='') + value = TextField(default='') + + +class CfdiNominaRelacionados(BaseModel): + cfdi = ForeignKeyField(CfdiNomina, related_name='original') + cfdi_origen = ForeignKeyField(CfdiNomina, related_name='relacion') + + class Meta: + order_by = ('cfdi',) + + def authenticate(args): respuesta = {'login': False, 'msg': 'No Autorizado', 'user': ''} values = util.get_con(args['rfc']) @@ -5114,14 +5588,22 @@ def _crear_tablas(rfc): PreFacturasRelacionadas, Tickets, TicketsDetalle, TicketsImpuestos, SATAduanas, SATFormaPago, SATImpuestos, SATMonedas, SATRegimenes, SATTipoRelacion, SATUnidades, SATUsoCfdi, SATBancos, - SATNivelesEducativos, - Socios, Contactos, ContactoCorreos, ContactoDirecciones, - ContactoTelefonos, + SATNivelesEducativos, SATEstados, SATRiesgoPuesto, SATPeriodicidadPago, + SATOrigenRecurso, SATTipoContrato, SATTipoDeduccion, SATTipoHoras, + SATTipoIncapacidad, SATTipoJornada, SATTipoNomina, SATTipoOtroPago, + SATTipoPercepcion, SATTipoRegimen, + Socios, Contactos, ContactoCorreos, ContactoDirecciones, Empleados, + ContactoTelefonos, Departamentos, Puestos, Tags, Usuarios, CuentasBanco, TipoCambio, MovimientosBanco, TipoCorreo, TipoDireccion, TipoPariente, TipoResponsable, TipoTelefono, TipoTitulo, TipoMovimientoAlumno, TipoMovimientoAlmacen, CfdiPagos, NivelesEducativos, Alumnos, AlumnosParientes, Grupos, ParienteDirecciones, ParienteTelefonos, ParienteCorreos, + CfdiNomina, CfdiNominaDeducciones, CfdiNominaDetalle, + CfdiNominaHorasExtra, CfdiNominaIncapacidad, CfdiNominaJubilacion, + CfdiNominaOtroPago, CfdiNominaOtros, CfdiNominaPercepciones, + CfdiNominaRelacionados, CfdiNominaSeparacion, CfdiNominaSubcontratos, + CfdiNominaTotales, Emisor.regimenes.get_through_model(), Socios.tags.get_through_model(), Productos.impuestos.get_through_model(), @@ -5166,7 +5648,16 @@ def _migrate_tables(): conectar(args) - tablas = [Sucursales] + tablas = [Sucursales, SATEstados, SATRiesgoPuesto, SATPeriodicidadPago, + SATOrigenRecurso, SATTipoContrato, SATTipoDeduccion, SATTipoHoras, + SATTipoIncapacidad, SATTipoJornada, SATTipoNomina, SATTipoOtroPago, + SATTipoPercepcion, SATTipoRegimen, Departamentos, Puestos, Empleados, + CfdiNomina, CfdiNominaDeducciones, CfdiNominaDetalle, + CfdiNominaHorasExtra, CfdiNominaIncapacidad, CfdiNominaJubilacion, + CfdiNominaOtroPago, CfdiNominaOtros, CfdiNominaPercepciones, + CfdiNominaRelacionados, CfdiNominaSeparacion, CfdiNominaSubcontratos, + CfdiNominaTotales, + ] log.info('Creando nuevas tablas...') database_proxy.create_tables(tablas, True) log.info('Tablas creadas correctamente...') @@ -5175,12 +5666,23 @@ def _migrate_tables(): migrations = [] migrator = PostgresqlMigrator(database_proxy) - sucursal = ForeignKeyField(Sucursales, null=True, to_field=Sucursales.id) columns = [c.name for c in database_proxy.get_columns('usuarios')] if not 'sucursal_id' in columns: + sucursal = ForeignKeyField(Sucursales, null=True, to_field=Sucursales.id) migrations.append( migrator.add_column('usuarios', 'sucursal_id', sucursal)) + columns = [c.name for c in database_proxy.get_columns('emisor')] + if not 'registro_patronal' in columns: + registro_patronal = TextField(default='') + migrations.append( + migrator.add_column( + 'emisor', 'registro_patronal', registro_patronal)) + if not 'curp' in columns: + curp = TextField(default='') + migrations.append( + migrator.add_column('emisor', 'curp', curp)) + if migrations: with database_proxy.atomic() as txn: migrate(*migrations) @@ -5732,7 +6234,7 @@ def _importar_factura_libre_gambas(conexion): _importar_socios(data['Socios']) _importar_facturas(data['Facturas']) _importar_categorias(data['Categorias']) - # ~ _importar_productos_gambas(data['Productos']) + _importar_productos_gambas(data['Productos']) _import_tickets(data['Tickets']) log.info('Importación terminada...') @@ -5907,6 +6409,41 @@ def _importar_productos(archivo): return +def _import_from_folder(path): + files = util.get_files(path, 'json') + if not files: + msg = 'No se encontraron archivos para importar' + log.error(msg) + return + + rfc = input('Introduce el RFC: ').strip().upper() + if not rfc: + msg = 'El RFC es requerido' + log.error(msg) + return + + args = util.get_con(rfc) + if not args: + return + + conectar(args) + log.info('Importando valores...') + for p in files: + msg = '\tImportando tabla: {}' + data = util.import_json(p) + log.info(msg.format(data['tabla'])) + table = globals()[data['tabla']] + for r in data['datos']: + try: + with database_proxy.atomic() as txn: + table.create(**r) + except IntegrityError: + pass + + log.info('Valores importados...') + return + + def _test(): rfc = input('Introduce el RFC: ').strip().upper() if not rfc: @@ -5957,10 +6494,12 @@ help_lr = 'Listar RFCs' @click.option('-a', '--alta', is_flag=True, default=False) @click.option('-r', '--rfc') @click.option('-d', '--detalle', is_flag=True, default=False) +@click.option('-id', '--importar-directorio') def main(iniciar_bd, migrar_bd, nuevo_superusuario, cambiar_contraseña, agregar_rfc, borrar_rfc, listar_rfc, importar_valores, archivo, conexion, factura_libre, factura_libre_gambas, test, generar_archivo_productos, - importar_productos, backup_dbs, no_bd, alta, rfc, detalle): + importar_productos, backup_dbs, no_bd, alta, rfc, detalle, + importar_directorio): opt = locals() @@ -6066,6 +6605,9 @@ def main(iniciar_bd, migrar_bd, nuevo_superusuario, cambiar_contraseña, _importar_productos(opt['archivo']) sys.exit(0) + if opt['importar_directorio']: + _import_from_folder(opt['importar_directorio']) + if opt['backup_dbs']: util.backup_dbs() diff --git a/source/app/settings.py b/source/app/settings.py index f27a2dc..4f2dcb4 100644 --- a/source/app/settings.py +++ b/source/app/settings.py @@ -115,6 +115,7 @@ PRE = { } CURRENT_CFDI = '3.3' +CURRENT_CFDI_NOMINA = '1.2' DECIMALES = 2 DECIMALES_TAX = 4 IMPUESTOS = { @@ -134,4 +135,9 @@ DEFAULT_SERIE_TICKET = 'T' DIR_FACTURAS = 'facturas' USAR_TOKEN = False CANCEL_SIGNATURE = False -PUBLIC = 'Público en general' \ No newline at end of file +PUBLIC = 'Público en general' +DEFAULT_SAT_NOMINA = { + 'CLAVE': '84111505', + 'UNIDAD': 'ACT', + 'DESCRIPCION': 'Pago de nómina', +} \ No newline at end of file diff --git a/source/db/valores_iniciales.json b/source/db/valores_iniciales.json index 28e6252..b7c4274 100644 --- a/source/db/valores_iniciales.json +++ b/source/db/valores_iniciales.json @@ -240,5 +240,1857 @@ {"key": "D10", "name": "Pagos por servicios educativos (colegiaturas)", "activo": true}, {"key": "P01", "name": "Por definir", "moral": true, "activo": true} ] +}, +{ + "datos": [ + { + "key": "AGU", + "name": "Aguascalientes", + "pais": "MEX" + }, + { + "key": "BCN", + "name": "Baja California", + "pais": "MEX" + }, + { + "key": "BCS", + "name": "Baja California Sur", + "pais": "MEX" + }, + { + "key": "CAM", + "name": "Campeche", + "pais": "MEX" + }, + { + "key": "CHP", + "name": "Chiapas", + "pais": "MEX" + }, + { + "key": "CHH", + "name": "Chihuahua", + "pais": "MEX" + }, + { + "key": "COA", + "name": "Coahuila", + "pais": "MEX" + }, + { + "key": "COL", + "name": "Colima", + "pais": "MEX" + }, + { + "key": "DIF", + "name": "Ciudad de M\u00e9xico", + "pais": "MEX" + }, + { + "key": "DUR", + "name": "Durango", + "pais": "MEX" + }, + { + "key": "GUA", + "name": "Guanajuato", + "pais": "MEX" + }, + { + "key": "GRO", + "name": "Guerrero", + "pais": "MEX" + }, + { + "key": "HID", + "name": "Hidalgo", + "pais": "MEX" + }, + { + "key": "JAL", + "name": "Jalisco", + "pais": "MEX" + }, + { + "key": "MEX", + "name": "Estado de M\u00e9xico", + "pais": "MEX" + }, + { + "key": "MIC", + "name": "Michoac\u00e1n", + "pais": "MEX" + }, + { + "key": "MOR", + "name": "Morelos", + "pais": "MEX" + }, + { + "key": "NAY", + "name": "Nayarit", + "pais": "MEX" + }, + { + "key": "NLE", + "name": "Nuevo Le\u00f3n", + "pais": "MEX" + }, + { + "key": "OAX", + "name": "Oaxaca", + "pais": "MEX" + }, + { + "key": "PUE", + "name": "Puebla", + "pais": "MEX" + }, + { + "key": "QUE", + "name": "Quer\u00e9taro", + "pais": "MEX" + }, + { + "key": "ROO", + "name": "Quintana Roo", + "pais": "MEX" + }, + { + "key": "SLP", + "name": "San Luis Potos\u00ed", + "pais": "MEX" + }, + { + "key": "SIN", + "name": "Sinaloa", + "pais": "MEX" + }, + { + "key": "SON", + "name": "Sonora", + "pais": "MEX" + }, + { + "key": "TAB", + "name": "Tabasco", + "pais": "MEX" + }, + { + "key": "TAM", + "name": "Tamaulipas", + "pais": "MEX" + }, + { + "key": "TLA", + "name": "Tlaxcala", + "pais": "MEX" + }, + { + "key": "VER", + "name": "Veracruz", + "pais": "MEX" + }, + { + "key": "YUC", + "name": "Yucat\u00e1n", + "pais": "MEX" + }, + { + "key": "ZAC", + "name": "Zacatecas", + "pais": "MEX" + }, + { + "key": "AL", + "name": "Alabama", + "pais": "USA" + }, + { + "key": "AK", + "name": "Alaska", + "pais": "USA" + }, + { + "key": "AZ", + "name": "Arizona", + "pais": "USA" + }, + { + "key": "AR", + "name": "Arkansas", + "pais": "USA" + }, + { + "key": "CA", + "name": "California", + "pais": "USA" + }, + { + "key": "NC", + "name": "Carolina del Norte", + "pais": "USA" + }, + { + "key": "SC", + "name": "Carolina del Sur", + "pais": "USA" + }, + { + "key": "CO", + "name": "Colorado", + "pais": "USA" + }, + { + "key": "CT", + "name": "Connecticut", + "pais": "USA" + }, + { + "key": "ND", + "name": "Dakota del Norte", + "pais": "USA" + }, + { + "key": "SD", + "name": "Dakota del Sur", + "pais": "USA" + }, + { + "key": "DE", + "name": "Delaware", + "pais": "USA" + }, + { + "key": "FL", + "name": "Florida", + "pais": "USA" + }, + { + "key": "GA", + "name": "Georgia", + "pais": "USA" + }, + { + "key": "HI", + "name": "Haw\u00e1i", + "pais": "USA" + }, + { + "key": "ID", + "name": "Idaho", + "pais": "USA" + }, + { + "key": "IL", + "name": "Illinois", + "pais": "USA" + }, + { + "key": "IN", + "name": "Indiana", + "pais": "USA" + }, + { + "key": "IA", + "name": "Iowa", + "pais": "USA" + }, + { + "key": "KS", + "name": "Kansas", + "pais": "USA" + }, + { + "key": "KY", + "name": "Kentucky", + "pais": "USA" + }, + { + "key": "LA", + "name": "Luisiana", + "pais": "USA" + }, + { + "key": "ME", + "name": "Maine", + "pais": "USA" + }, + { + "key": "MD", + "name": "Maryland", + "pais": "USA" + }, + { + "key": "MA", + "name": "Massachusetts", + "pais": "USA" + }, + { + "key": "MI", + "name": "M\u00edchigan", + "pais": "USA" + }, + { + "key": "MN", + "name": "Minnesota", + "pais": "USA" + }, + { + "key": "MS", + "name": "Misisipi", + "pais": "USA" + }, + { + "key": "MO", + "name": "Misuri", + "pais": "USA" + }, + { + "key": "MT", + "name": "Montana", + "pais": "USA" + }, + { + "key": "NE", + "name": "Nebraska", + "pais": "USA" + }, + { + "key": "NV", + "name": "Nevada", + "pais": "USA" + }, + { + "key": "NJ", + "name": "Nueva Jersey", + "pais": "USA" + }, + { + "key": "NY", + "name": "Nueva York", + "pais": "USA" + }, + { + "key": "NH", + "name": "Nuevo Hampshire", + "pais": "USA" + }, + { + "key": "NM", + "name": "Nuevo M\u00e9xico", + "pais": "USA" + }, + { + "key": "OH", + "name": "Ohio", + "pais": "USA" + }, + { + "key": "OK", + "name": "Oklahoma", + "pais": "USA" + }, + { + "key": "OR", + "name": "Oreg\u00f3n", + "pais": "USA" + }, + { + "key": "PA", + "name": "Pensilvania", + "pais": "USA" + }, + { + "key": "RI", + "name": "Rhode Island", + "pais": "USA" + }, + { + "key": "TN", + "name": "Tennessee", + "pais": "USA" + }, + { + "key": "TX", + "name": "Texas", + "pais": "USA" + }, + { + "key": "UT", + "name": "Utah", + "pais": "USA" + }, + { + "key": "VT", + "name": "Vermont", + "pais": "USA" + }, + { + "key": "VA", + "name": "Virginia", + "pais": "USA" + }, + { + "key": "WV", + "name": "Virginia Occidental", + "pais": "USA" + }, + { + "key": "WA", + "name": "Washington", + "pais": "USA" + }, + { + "key": "WI", + "name": "Wisconsin", + "pais": "USA" + }, + { + "key": "WY", + "name": "Wyoming", + "pais": "USA" + }, + { + "key": "ON", + "name": "Ontario\u00a0", + "pais": "CAN" + }, + { + "key": "QC", + "name": "Quebec\u00a0", + "pais": "CAN" + }, + { + "key": "NS", + "name": "Nueva Escocia", + "pais": "CAN" + }, + { + "key": "NB", + "name": "Nuevo Brunswick\u00a0", + "pais": "CAN" + }, + { + "key": "MB", + "name": "Manitoba", + "pais": "CAN" + }, + { + "key": "BC", + "name": "Columbia Brit\u00e1nica", + "pais": "CAN" + }, + { + "key": "PE", + "name": "Isla del Pr\u00edncipe Eduardo", + "pais": "CAN" + }, + { + "key": "SK", + "name": "Saskatchewan", + "pais": "CAN" + }, + { + "key": "AB", + "name": "Alberta", + "pais": "CAN" + }, + { + "key": "NL", + "name": "Terranova y Labrador", + "pais": "CAN" + }, + { + "key": "NT", + "name": "Territorios del Noroeste", + "pais": "CAN" + }, + { + "key": "YT", + "name": "Yuk\u00f3n", + "pais": "CAN" + }, + { + "key": "UN", + "name": "Nunavut", + "pais": "CAN" + } + ], + "tabla": "SATEstados" +}, +{ + "datos": [ + { + "key": "AGU", + "name": "Aguascalientes", + "pais": "MEX" + }, + { + "key": "BCN", + "name": "Baja California", + "pais": "MEX" + }, + { + "key": "BCS", + "name": "Baja California Sur", + "pais": "MEX" + }, + { + "key": "CAM", + "name": "Campeche", + "pais": "MEX" + }, + { + "key": "CHP", + "name": "Chiapas", + "pais": "MEX" + }, + { + "key": "CHH", + "name": "Chihuahua", + "pais": "MEX" + }, + { + "key": "COA", + "name": "Coahuila", + "pais": "MEX" + }, + { + "key": "COL", + "name": "Colima", + "pais": "MEX" + }, + { + "key": "DIF", + "name": "Ciudad de M\u00e9xico", + "pais": "MEX" + }, + { + "key": "DUR", + "name": "Durango", + "pais": "MEX" + }, + { + "key": "GUA", + "name": "Guanajuato", + "pais": "MEX" + }, + { + "key": "GRO", + "name": "Guerrero", + "pais": "MEX" + }, + { + "key": "HID", + "name": "Hidalgo", + "pais": "MEX" + }, + { + "key": "JAL", + "name": "Jalisco", + "pais": "MEX" + }, + { + "key": "MEX", + "name": "Estado de M\u00e9xico", + "pais": "MEX" + }, + { + "key": "MIC", + "name": "Michoac\u00e1n", + "pais": "MEX" + }, + { + "key": "MOR", + "name": "Morelos", + "pais": "MEX" + }, + { + "key": "NAY", + "name": "Nayarit", + "pais": "MEX" + }, + { + "key": "NLE", + "name": "Nuevo Le\u00f3n", + "pais": "MEX" + }, + { + "key": "OAX", + "name": "Oaxaca", + "pais": "MEX" + }, + { + "key": "PUE", + "name": "Puebla", + "pais": "MEX" + }, + { + "key": "QUE", + "name": "Quer\u00e9taro", + "pais": "MEX" + }, + { + "key": "ROO", + "name": "Quintana Roo", + "pais": "MEX" + }, + { + "key": "SLP", + "name": "San Luis Potos\u00ed", + "pais": "MEX" + }, + { + "key": "SIN", + "name": "Sinaloa", + "pais": "MEX" + }, + { + "key": "SON", + "name": "Sonora", + "pais": "MEX" + }, + { + "key": "TAB", + "name": "Tabasco", + "pais": "MEX" + }, + { + "key": "TAM", + "name": "Tamaulipas", + "pais": "MEX" + }, + { + "key": "TLA", + "name": "Tlaxcala", + "pais": "MEX" + }, + { + "key": "VER", + "name": "Veracruz", + "pais": "MEX" + }, + { + "key": "YUC", + "name": "Yucat\u00e1n", + "pais": "MEX" + }, + { + "key": "ZAC", + "name": "Zacatecas", + "pais": "MEX" + }, + { + "key": "AL", + "name": "Alabama", + "pais": "USA" + }, + { + "key": "AK", + "name": "Alaska", + "pais": "USA" + }, + { + "key": "AZ", + "name": "Arizona", + "pais": "USA" + }, + { + "key": "AR", + "name": "Arkansas", + "pais": "USA" + }, + { + "key": "CA", + "name": "California", + "pais": "USA" + }, + { + "key": "NC", + "name": "Carolina del Norte", + "pais": "USA" + }, + { + "key": "SC", + "name": "Carolina del Sur", + "pais": "USA" + }, + { + "key": "CO", + "name": "Colorado", + "pais": "USA" + }, + { + "key": "CT", + "name": "Connecticut", + "pais": "USA" + }, + { + "key": "ND", + "name": "Dakota del Norte", + "pais": "USA" + }, + { + "key": "SD", + "name": "Dakota del Sur", + "pais": "USA" + }, + { + "key": "DE", + "name": "Delaware", + "pais": "USA" + }, + { + "key": "FL", + "name": "Florida", + "pais": "USA" + }, + { + "key": "GA", + "name": "Georgia", + "pais": "USA" + }, + { + "key": "HI", + "name": "Haw\u00e1i", + "pais": "USA" + }, + { + "key": "ID", + "name": "Idaho", + "pais": "USA" + }, + { + "key": "IL", + "name": "Illinois", + "pais": "USA" + }, + { + "key": "IN", + "name": "Indiana", + "pais": "USA" + }, + { + "key": "IA", + "name": "Iowa", + "pais": "USA" + }, + { + "key": "KS", + "name": "Kansas", + "pais": "USA" + }, + { + "key": "KY", + "name": "Kentucky", + "pais": "USA" + }, + { + "key": "LA", + "name": "Luisiana", + "pais": "USA" + }, + { + "key": "ME", + "name": "Maine", + "pais": "USA" + }, + { + "key": "MD", + "name": "Maryland", + "pais": "USA" + }, + { + "key": "MA", + "name": "Massachusetts", + "pais": "USA" + }, + { + "key": "MI", + "name": "M\u00edchigan", + "pais": "USA" + }, + { + "key": "MN", + "name": "Minnesota", + "pais": "USA" + }, + { + "key": "MS", + "name": "Misisipi", + "pais": "USA" + }, + { + "key": "MO", + "name": "Misuri", + "pais": "USA" + }, + { + "key": "MT", + "name": "Montana", + "pais": "USA" + }, + { + "key": "NE", + "name": "Nebraska", + "pais": "USA" + }, + { + "key": "NV", + "name": "Nevada", + "pais": "USA" + }, + { + "key": "NJ", + "name": "Nueva Jersey", + "pais": "USA" + }, + { + "key": "NY", + "name": "Nueva York", + "pais": "USA" + }, + { + "key": "NH", + "name": "Nuevo Hampshire", + "pais": "USA" + }, + { + "key": "NM", + "name": "Nuevo M\u00e9xico", + "pais": "USA" + }, + { + "key": "OH", + "name": "Ohio", + "pais": "USA" + }, + { + "key": "OK", + "name": "Oklahoma", + "pais": "USA" + }, + { + "key": "OR", + "name": "Oreg\u00f3n", + "pais": "USA" + }, + { + "key": "PA", + "name": "Pensilvania", + "pais": "USA" + }, + { + "key": "RI", + "name": "Rhode Island", + "pais": "USA" + }, + { + "key": "TN", + "name": "Tennessee", + "pais": "USA" + }, + { + "key": "TX", + "name": "Texas", + "pais": "USA" + }, + { + "key": "UT", + "name": "Utah", + "pais": "USA" + }, + { + "key": "VT", + "name": "Vermont", + "pais": "USA" + }, + { + "key": "VA", + "name": "Virginia", + "pais": "USA" + }, + { + "key": "WV", + "name": "Virginia Occidental", + "pais": "USA" + }, + { + "key": "WA", + "name": "Washington", + "pais": "USA" + }, + { + "key": "WI", + "name": "Wisconsin", + "pais": "USA" + }, + { + "key": "WY", + "name": "Wyoming", + "pais": "USA" + }, + { + "key": "ON", + "name": "Ontario\u00a0", + "pais": "CAN" + }, + { + "key": "QC", + "name": "Quebec\u00a0", + "pais": "CAN" + }, + { + "key": "NS", + "name": "Nueva Escocia", + "pais": "CAN" + }, + { + "key": "NB", + "name": "Nuevo Brunswick\u00a0", + "pais": "CAN" + }, + { + "key": "MB", + "name": "Manitoba", + "pais": "CAN" + }, + { + "key": "BC", + "name": "Columbia Brit\u00e1nica", + "pais": "CAN" + }, + { + "key": "PE", + "name": "Isla del Pr\u00edncipe Eduardo", + "pais": "CAN" + }, + { + "key": "SK", + "name": "Saskatchewan", + "pais": "CAN" + }, + { + "key": "AB", + "name": "Alberta", + "pais": "CAN" + }, + { + "key": "NL", + "name": "Terranova y Labrador", + "pais": "CAN" + }, + { + "key": "NT", + "name": "Territorios del Noroeste", + "pais": "CAN" + }, + { + "key": "YT", + "name": "Yuk\u00f3n", + "pais": "CAN" + }, + { + "key": "UN", + "name": "Nunavut", + "pais": "CAN" + } + ], + "tabla": "SATEstados" +}, +{ + "datos": [ + { + "key": "IP", + "name": "Ingresos propios." + }, + { + "key": "IF", + "name": "Ingreso federales." + }, + { + "key": "IM", + "name": "Ingresos mixtos." + } + ], + "tabla": "SATOrigenRecurso" +}, +{ + "datos": [ + { + "key": "01", + "name": "Diario" + }, + { + "key": "02", + "name": "Semanal" + }, + { + "key": "03", + "name": "Catorcenal" + }, + { + "key": "04", + "name": "Quincenal" + }, + { + "key": "05", + "name": "Mensual" + }, + { + "key": "06", + "name": "Bimestral" + }, + { + "key": "07", + "name": "Unidad obra" + }, + { + "key": "08", + "name": "Comisi\u00f3n" + }, + { + "key": "09", + "name": "Precio alzado" + }, + { + "key": "10", + "name": "Decenal" + }, + { + "key": "99", + "name": "Otra Periodicidad" + } + ], + "tabla": "SATPeriodicidadPago" +}, +{ + "datos": [ + { + "key": "1", + "name": "Clase I" + }, + { + "key": "2", + "name": "Clase II" + }, + { + "key": "3", + "name": "Clase III" + }, + { + "key": "4", + "name": "Clase IV" + }, + { + "key": "5", + "name": "Clase V" + }, + { + "key": "99", + "name": "No aplica" + } + ], + "tabla": "SATRiesgoPuesto" +}, +{ + "datos": [ + { + "key": "01", + "name": "Contrato de trabajo por tiempo indeterminado" + }, + { + "key": "02", + "name": "Contrato de trabajo para obra determinada" + }, + { + "key": "03", + "name": "Contrato de trabajo por tiempo determinado" + }, + { + "key": "04", + "name": "Contrato de trabajo por temporada" + }, + { + "key": "05", + "name": "Contrato de trabajo sujeto a prueba" + }, + { + "key": "06", + "name": "Contrato de trabajo con capacitaci\u00f3n inicial" + }, + { + "key": "07", + "name": "Modalidad de contrataci\u00f3n por pago de hora laborada" + }, + { + "key": "08", + "name": "Modalidad de trabajo por comisi\u00f3n laboral" + }, + { + "key": "09", + "name": "Modalidades de contrataci\u00f3n donde no existe relaci\u00f3n de trabajo" + }, + { + "key": "10", + "name": "Jubilaci\u00f3n, pensi\u00f3n, retiro." + }, + { + "key": "99", + "name": "Otro contrato" + } + ], + "tabla": "SATTipoContrato" +}, +{ + "datos": [ + { + "key": "001", + "name": "Seguridad social" + }, + { + "key": "002", + "name": "ISR" + }, + { + "key": "003", + "name": "Aportaciones a retiro, cesant\u00eda en edad avanzada y vejez." + }, + { + "key": "004", + "name": "Otros" + }, + { + "key": "005", + "name": "Aportaciones a Fondo de vivienda" + }, + { + "key": "006", + "name": "Descuento por incapacidad" + }, + { + "key": "007", + "name": "Pensi\u00f3n alimenticia" + }, + { + "key": "008", + "name": "Renta" + }, + { + "key": "009", + "name": "Pr\u00e9stamos provenientes del Fondo Nacional de la Vivienda para los Trabajadores" + }, + { + "key": "010", + "name": "Pago por cr\u00e9dito de vivienda" + }, + { + "key": "011", + "name": "Pago de abonos INFONACOT" + }, + { + "key": "012", + "name": "Anticipo de salarios" + }, + { + "key": "013", + "name": "Pagos hechos con exceso al trabajador" + }, + { + "key": "014", + "name": "Errores" + }, + { + "key": "015", + "name": "P\u00e9rdidas" + }, + { + "key": "016", + "name": "Aver\u00edas" + }, + { + "key": "017", + "name": "Adquisici\u00f3n de art\u00edculos producidos por la empresa o establecimiento" + }, + { + "key": "018", + "name": "Cuotas para la constituci\u00f3n y fomento de sociedades cooperativas y de cajas de ahorro" + }, + { + "key": "019", + "name": "Cuotas sindicales" + }, + { + "key": "020", + "name": "Ausencia (Ausentismo)" + }, + { + "key": "021", + "name": "Cuotas obrero patronales" + }, + { + "key": "022", + "name": "Impuestos Locales" + }, + { + "key": "023", + "name": "Aportaciones voluntarias" + }, + { + "key": "024", + "name": "Ajuste en Gratificaci\u00f3n Anual (Aguinaldo) Exento" + }, + { + "key": "025", + "name": "Ajuste en Gratificaci\u00f3n Anual (Aguinaldo) Gravado" + }, + { + "key": "026", + "name": "Ajuste en Participaci\u00f3n de los Trabajadores en las Utilidades PTU Exento" + }, + { + "key": "027", + "name": "Ajuste en Participaci\u00f3n de los Trabajadores en las Utilidades PTU Gravado" + }, + { + "key": "028", + "name": "Ajuste en Reembolso de Gastos M\u00e9dicos Dentales y Hospitalarios Exento" + }, + { + "key": "029", + "name": "Ajuste en Fondo de ahorro Exento" + }, + { + "key": "030", + "name": "Ajuste en Caja de ahorro Exento" + }, + { + "key": "031", + "name": "Ajuste en Contribuciones a Cargo del Trabajador Pagadas por el Patr\u00f3n Exento" + }, + { + "key": "032", + "name": "Ajuste en Premios por puntualidad Gravado" + }, + { + "key": "033", + "name": "Ajuste en Prima de Seguro de vida Exento" + }, + { + "key": "034", + "name": "Ajuste en Seguro de Gastos M\u00e9dicos Mayores Exento" + }, + { + "key": "035", + "name": "Ajuste en Cuotas Sindicales Pagadas por el Patr\u00f3n Exento" + }, + { + "key": "036", + "name": "Ajuste en Subsidios por incapacidad Exento" + }, + { + "key": "037", + "name": "Ajuste en Becas para trabajadores y/o hijos Exento" + }, + { + "key": "038", + "name": "Ajuste en Horas extra Exento" + }, + { + "key": "039", + "name": "Ajuste en Horas extra Gravado" + }, + { + "key": "040", + "name": "Ajuste en Prima dominical Exento" + }, + { + "key": "041", + "name": "Ajuste en Prima dominical Gravado" + }, + { + "key": "042", + "name": "Ajuste en Prima vacacional Exento" + }, + { + "key": "043", + "name": "Ajuste en Prima vacacional Gravado" + }, + { + "key": "044", + "name": "Ajuste en Prima por antig\u00fcedad Exento" + }, + { + "key": "045", + "name": "Ajuste en Prima por antig\u00fcedad Gravado" + }, + { + "key": "046", + "name": "Ajuste en Pagos por separaci\u00f3n Exento" + }, + { + "key": "047", + "name": "Ajuste en Pagos por separaci\u00f3n Gravado" + }, + { + "key": "048", + "name": "Ajuste en Seguro de retiro Exento" + }, + { + "key": "049", + "name": "Ajuste en Indemnizaciones Exento" + }, + { + "key": "050", + "name": "Ajuste en Indemnizaciones Gravado" + }, + { + "key": "051", + "name": "Ajuste en Reembolso por funeral Exento" + }, + { + "key": "052", + "name": "Ajuste en Cuotas de seguridad social pagadas por el patr\u00f3n Exento" + }, + { + "key": "053", + "name": "Ajuste en Comisiones Gravado" + }, + { + "key": "054", + "name": "Ajuste en Vales de despensa Exento" + }, + { + "key": "055", + "name": "Ajuste en Vales de restaurante Exento" + }, + { + "key": "056", + "name": "Ajuste en Vales de gasolina Exento" + }, + { + "key": "057", + "name": "Ajuste en Vales de ropa Exento" + }, + { + "key": "058", + "name": "Ajuste en Ayuda para renta Exento" + }, + { + "key": "059", + "name": "Ajuste en Ayuda para art\u00edculos escolares Exento" + }, + { + "key": "060", + "name": "Ajuste en Ayuda para anteojos Exento" + }, + { + "key": "061", + "name": "Ajuste en Ayuda para transporte Exento" + }, + { + "key": "062", + "name": "Ajuste en Ayuda para gastos de funeral Exento" + }, + { + "key": "063", + "name": "Ajuste en Otros ingresos por salarios Exento" + }, + { + "key": "064", + "name": "Ajuste en Otros ingresos por salarios Gravado" + }, + { + "key": "065", + "name": "Ajuste en Jubilaciones, pensiones o haberes de retiro Exento" + }, + { + "key": "066", + "name": "Ajuste en Jubilaciones, pensiones o haberes de retiro Gravado" + }, + { + "key": "067", + "name": "Ajuste en Pagos por separaci\u00f3n Acumulable" + }, + { + "key": "068", + "name": "Ajuste en Pagos por separaci\u00f3n No acumulable" + }, + { + "key": "069", + "name": "Ajuste en Jubilaciones, pensiones o haberes de retiro Acumulable" + }, + { + "key": "070", + "name": "Ajuste en Jubilaciones, pensiones o haberes de retiro No acumulable" + }, + { + "key": "071", + "name": "Ajuste en Subsidio para el empleo (efectivamente entregado al trabajador)" + }, + { + "key": "072", + "name": "Ajuste en Ingresos en acciones o t\u00edtulos valor que representan bienes Exento" + }, + { + "key": "073", + "name": "Ajuste en Ingresos en acciones o t\u00edtulos valor que representan bienes Gravado" + }, + { + "key": "074", + "name": "Ajuste en Alimentaci\u00f3n Exento" + }, + { + "key": "075", + "name": "Ajuste en Alimentaci\u00f3n Gravado" + }, + { + "key": "076", + "name": "Ajuste en Habitaci\u00f3n Exento" + }, + { + "key": "077", + "name": "Ajuste en Habitaci\u00f3n Gravado" + }, + { + "key": "078", + "name": "Ajuste en Premios por asistencia" + }, + { + "key": "079", + "name": "Ajuste en Pagos distintos a los listados y que no deben considerarse como ingreso por sueldos, salarios o ingresos asimilados." + }, + { + "key": "080", + "name": "Ajuste en Vi\u00e1ticos gravados" + }, + { + "key": "081", + "name": "Ajuste en Vi\u00e1ticos (entregados al trabajador)" + }, + { + "key": "082", + "name": "Ajuste en Fondo de ahorro Gravado" + }, + { + "key": "083", + "name": "Ajuste en Caja de ahorro Gravado" + }, + { + "key": "084", + "name": "Ajuste en Prima de Seguro de vida Gravado" + }, + { + "key": "085", + "name": "Ajuste en Seguro de Gastos M\u00e9dicos Mayores Gravado" + }, + { + "key": "086", + "name": "Ajuste en Subsidios por incapacidad Gravado" + }, + { + "key": "087", + "name": "Ajuste en Becas para trabajadores y/o hijos Gravado" + }, + { + "key": "088", + "name": "Ajuste en Seguro de retiro Gravado" + }, + { + "key": "089", + "name": "Ajuste en Vales de despensa Gravado" + }, + { + "key": "090", + "name": "Ajuste en Vales de restaurante Gravado" + }, + { + "key": "091", + "name": "Ajuste en Vales de gasolina Gravado" + }, + { + "key": "092", + "name": "Ajuste en Vales de ropa Gravado" + }, + { + "key": "093", + "name": "Ajuste en Ayuda para renta Gravado" + }, + { + "key": "094", + "name": "Ajuste en Ayuda para art\u00edculos escolares Gravado" + }, + { + "key": "095", + "name": "Ajuste en Ayuda para anteojos Gravado" + }, + { + "key": "096", + "name": "Ajuste en Ayuda para transporte Gravado" + }, + { + "key": "097", + "name": "Ajuste en Ayuda para gastos de funeral Gravado" + }, + { + "key": "098", + "name": "Ajuste a ingresos asimilados a salarios gravados" + }, + { + "key": "099", + "name": "Ajuste a ingresos por sueldos y salarios gravados" + }, + { + "key": "100", + "name": "Ajuste en Vi\u00e1ticos exentos" + }, + { + "key": "101", + "name": "ISR Retenido de ejercicio anterior" + } + ], + "tabla": "SATTipoDeduccion" +}, +{ + "datos": [ + { + "key": "01", + "name": "Dobles" + }, + { + "key": "02", + "name": "Triples" + }, + { + "key": "03", + "name": "Simples" + } + ], + "tabla": "SATTipoHoras" +}, +{ + "datos": [ + { + "key": "01", + "name": "Riesgo de trabajo." + }, + { + "key": "02", + "name": "Enfermedad en general." + }, + { + "key": "03", + "name": "Maternidad." + } + ], + "tabla": "SATTipoIncapacidad" +}, +{ + "datos": [ + { + "key": "01", + "name": "Diurna" + }, + { + "key": "02", + "name": "Nocturna" + }, + { + "key": "03", + "name": "Mixta" + }, + { + "key": "04", + "name": "Por hora" + }, + { + "key": "05", + "name": "Reducida" + }, + { + "key": "06", + "name": "Continuada" + }, + { + "key": "07", + "name": "Partida" + }, + { + "key": "08", + "name": "Por turnos" + }, + { + "key": "99", + "name": "Otra Jornada" + } + ], + "tabla": "SATTipoJornada" +}, +{ + "datos": [ + { + "key": "O", + "name": "N\u00f3mina ordinaria" + }, + { + "key": "E", + "name": "N\u00f3mina extraordinaria" + } + ], + "tabla": "SATTipoNomina" +}, +{ + "datos": [ + { + "key": "001", + "name": "Reintegro de ISR pagado en exceso (siempre que no haya sido enterado al SAT)." + }, + { + "key": "002", + "name": "Subsidio para el empleo (efectivamente entregado al trabajador)." + }, + { + "key": "003", + "name": "Vi\u00e1ticos (entregados al trabajador)." + }, + { + "key": "004", + "name": "Aplicaci\u00f3n de saldo a favor por compensaci\u00f3n anual." + }, + { + "key": "005", + "name": "Reintegro de ISR retenido en exceso de ejercicio anterior (siempre que no haya sido enterado al SAT)." + }, + { + "key": "999", + "name": "Pagos distintos a los listados y que no deben considerarse como ingreso por sueldos, salarios o ingresos asimilados." + } + ], + "tabla": "SATTipoOtroPago" +}, +{ + "datos": [ + { + "key": "001", + "name": "Sueldos, Salarios Rayas y Jornales" + }, + { + "key": "002", + "name": "Gratificaci\u00f3n Anual (Aguinaldo)" + }, + { + "key": "003", + "name": "Participaci\u00f3n de los Trabajadores en las Utilidades PTU" + }, + { + "key": "004", + "name": "Reembolso de Gastos M\u00e9dicos Dentales y Hospitalarios" + }, + { + "key": "005", + "name": "Fondo de Ahorro" + }, + { + "key": "006", + "name": "Caja de ahorro" + }, + { + "key": "009", + "name": "Contribuciones a Cargo del Trabajador Pagadas por el Patr\u00f3n" + }, + { + "key": "010", + "name": "Premios por puntualidad" + }, + { + "key": "011", + "name": "Prima de Seguro de vida" + }, + { + "key": "012", + "name": "Seguro de Gastos M\u00e9dicos Mayores" + }, + { + "key": "013", + "name": "Cuotas Sindicales Pagadas por el Patr\u00f3n" + }, + { + "key": "014", + "name": "Subsidios por incapacidad" + }, + { + "key": "015", + "name": "Becas para trabajadores y/o hijos" + }, + { + "key": "019", + "name": "Horas extra" + }, + { + "key": "020", + "name": "Prima dominical" + }, + { + "key": "021", + "name": "Prima vacacional" + }, + { + "key": "022", + "name": "Prima por antig\u00fcedad" + }, + { + "key": "023", + "name": "Pagos por separaci\u00f3n" + }, + { + "key": "024", + "name": "Seguro de retiro" + }, + { + "key": "025", + "name": "Indemnizaciones" + }, + { + "key": "026", + "name": "Reembolso por funeral" + }, + { + "key": "027", + "name": "Cuotas de seguridad social pagadas por el patr\u00f3n" + }, + { + "key": "028", + "name": "Comisiones" + }, + { + "key": "029", + "name": "Vales de despensa" + }, + { + "key": "030", + "name": "Vales de restaurante" + }, + { + "key": "031", + "name": "Vales de gasolina" + }, + { + "key": "032", + "name": "Vales de ropa" + }, + { + "key": "033", + "name": "Ayuda para renta" + }, + { + "key": "034", + "name": "Ayuda para art\u00edculos escolares" + }, + { + "key": "035", + "name": "Ayuda para anteojos" + }, + { + "key": "036", + "name": "Ayuda para transporte" + }, + { + "key": "037", + "name": "Ayuda para gastos de funeral" + }, + { + "key": "038", + "name": "Otros ingresos por salarios" + }, + { + "key": "039", + "name": "Jubilaciones, pensiones o haberes de retiro" + }, + { + "key": "044", + "name": "Jubilaciones, pensiones o haberes de retiro en parcialidades" + }, + { + "key": "045", + "name": "Ingresos en acciones o t\u00edtulos valor que representan bienes" + }, + { + "key": "046", + "name": "Ingresos asimilados a salarios" + }, + { + "key": "047", + "name": "Alimentaci\u00f3n" + }, + { + "key": "048", + "name": "Habitaci\u00f3n" + }, + { + "key": "049", + "name": "Premios por asistencia" + }, + { + "key": "050", + "name": "Vi\u00e1ticos" + } + ], + "tabla": "SATTipoPercepcion" +}, +{ + "datos": [ + { + "key": "02", + "name": "Sueldos" + }, + { + "key": "03", + "name": "Jubilados" + }, + { + "key": "04", + "name": "Pensionados" + }, + { + "key": "05", + "name": "Asimilados Miembros Sociedades Cooperativas Produccion" + }, + { + "key": "06", + "name": "Asimilados Integrantes Sociedades Asociaciones Civiles" + }, + { + "key": "07", + "name": "Asimilados Miembros consejos" + }, + { + "key": "08", + "name": "Asimilados comisionistas" + }, + { + "key": "09", + "name": "Asimilados Honorarios" + }, + { + "key": "10", + "name": "Asimilados acciones" + }, + { + "key": "11", + "name": "Asimilados otros" + }, + { + "key": "12", + "name": "Jubilados o Pensionados" + }, + { + "key": "99", + "name": "Otro Regimen" + } + ], + "tabla": "SATTipoRegimen" } ]