catalogmx 0.3.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- catalogmx/__init__.py +56 -0
- catalogmx/catalogs/__init__.py +5 -0
- catalogmx/catalogs/banxico/__init__.py +24 -0
- catalogmx/catalogs/banxico/banks.py +136 -0
- catalogmx/catalogs/banxico/codigos_plaza.py +287 -0
- catalogmx/catalogs/banxico/instituciones_financieras.py +338 -0
- catalogmx/catalogs/banxico/monedas_divisas.py +386 -0
- catalogmx/catalogs/banxico/udis.py +279 -0
- catalogmx/catalogs/ift/__init__.py +15 -0
- catalogmx/catalogs/ift/codigos_lada.py +426 -0
- catalogmx/catalogs/ift/operadores_moviles.py +315 -0
- catalogmx/catalogs/inegi/__init__.py +21 -0
- catalogmx/catalogs/inegi/localidades.py +207 -0
- catalogmx/catalogs/inegi/municipios.py +73 -0
- catalogmx/catalogs/inegi/municipios_completo.py +236 -0
- catalogmx/catalogs/inegi/states.py +148 -0
- catalogmx/catalogs/mexico/__init__.py +17 -0
- catalogmx/catalogs/mexico/hoy_no_circula.py +215 -0
- catalogmx/catalogs/mexico/placas_formatos.py +184 -0
- catalogmx/catalogs/mexico/salarios_minimos.py +156 -0
- catalogmx/catalogs/mexico/uma.py +207 -0
- catalogmx/catalogs/sat/__init__.py +13 -0
- catalogmx/catalogs/sat/carta_porte/__init__.py +19 -0
- catalogmx/catalogs/sat/carta_porte/aeropuertos.py +76 -0
- catalogmx/catalogs/sat/carta_porte/carreteras.py +59 -0
- catalogmx/catalogs/sat/carta_porte/config_autotransporte.py +54 -0
- catalogmx/catalogs/sat/carta_porte/material_peligroso.py +66 -0
- catalogmx/catalogs/sat/carta_porte/puertos_maritimos.py +63 -0
- catalogmx/catalogs/sat/carta_porte/tipo_embalaje.py +48 -0
- catalogmx/catalogs/sat/carta_porte/tipo_permiso.py +54 -0
- catalogmx/catalogs/sat/cfdi_4/__init__.py +42 -0
- catalogmx/catalogs/sat/cfdi_4/clave_prod_serv.py +383 -0
- catalogmx/catalogs/sat/cfdi_4/clave_unidad.py +298 -0
- catalogmx/catalogs/sat/cfdi_4/exportacion.py +45 -0
- catalogmx/catalogs/sat/cfdi_4/forma_pago.py +45 -0
- catalogmx/catalogs/sat/cfdi_4/impuesto.py +57 -0
- catalogmx/catalogs/sat/cfdi_4/meses.py +34 -0
- catalogmx/catalogs/sat/cfdi_4/metodo_pago.py +45 -0
- catalogmx/catalogs/sat/cfdi_4/objeto_imp.py +45 -0
- catalogmx/catalogs/sat/cfdi_4/periodicidad.py +34 -0
- catalogmx/catalogs/sat/cfdi_4/regimen_fiscal.py +57 -0
- catalogmx/catalogs/sat/cfdi_4/tasa_o_cuota.py +42 -0
- catalogmx/catalogs/sat/cfdi_4/tipo_comprobante.py +45 -0
- catalogmx/catalogs/sat/cfdi_4/tipo_factor.py +34 -0
- catalogmx/catalogs/sat/cfdi_4/tipo_relacion.py +45 -0
- catalogmx/catalogs/sat/cfdi_4/uso_cfdi.py +45 -0
- catalogmx/catalogs/sat/comercio_exterior/__init__.py +39 -0
- catalogmx/catalogs/sat/comercio_exterior/claves_pedimento.py +77 -0
- catalogmx/catalogs/sat/comercio_exterior/estados.py +122 -0
- catalogmx/catalogs/sat/comercio_exterior/incoterms.py +226 -0
- catalogmx/catalogs/sat/comercio_exterior/monedas.py +107 -0
- catalogmx/catalogs/sat/comercio_exterior/motivos_traslado.py +54 -0
- catalogmx/catalogs/sat/comercio_exterior/paises.py +88 -0
- catalogmx/catalogs/sat/comercio_exterior/registro_ident_trib.py +76 -0
- catalogmx/catalogs/sat/comercio_exterior/unidades_aduana.py +54 -0
- catalogmx/catalogs/sat/comercio_exterior/validator.py +212 -0
- catalogmx/catalogs/sat/nomina/__init__.py +19 -0
- catalogmx/catalogs/sat/nomina/banco.py +50 -0
- catalogmx/catalogs/sat/nomina/periodicidad_pago.py +48 -0
- catalogmx/catalogs/sat/nomina/riesgo_puesto.py +56 -0
- catalogmx/catalogs/sat/nomina/tipo_contrato.py +47 -0
- catalogmx/catalogs/sat/nomina/tipo_jornada.py +42 -0
- catalogmx/catalogs/sat/nomina/tipo_nomina.py +52 -0
- catalogmx/catalogs/sat/nomina/tipo_regimen.py +47 -0
- catalogmx/catalogs/sepomex/__init__.py +5 -0
- catalogmx/catalogs/sepomex/codigos_postales.py +184 -0
- catalogmx/cli.py +185 -0
- catalogmx/helpers.py +324 -0
- catalogmx/utils/text.py +55 -0
- catalogmx/validators/__init__.py +0 -0
- catalogmx/validators/clabe.py +233 -0
- catalogmx/validators/curp.py +623 -0
- catalogmx/validators/nss.py +255 -0
- catalogmx/validators/rfc.py +1004 -0
- catalogmx-0.3.0.dist-info/METADATA +644 -0
- catalogmx-0.3.0.dist-info/RECORD +81 -0
- catalogmx-0.3.0.dist-info/WHEEL +5 -0
- catalogmx-0.3.0.dist-info/entry_points.txt +2 -0
- catalogmx-0.3.0.dist-info/licenses/AUTHORS.rst +5 -0
- catalogmx-0.3.0.dist-info/licenses/LICENSE +19 -0
- catalogmx-0.3.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Catálogo de tipos de instituciones financieras en México (Banxico)
|
|
3
|
+
|
|
4
|
+
Este módulo proporciona acceso al catálogo de tipos de instituciones
|
|
5
|
+
del sistema financiero mexicano supervisadas por Banxico, CNBV, CNSF,
|
|
6
|
+
CONSAR y otras entidades reguladoras.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import json
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
from typing import TypedDict
|
|
12
|
+
|
|
13
|
+
from catalogmx.utils.text import normalize_text
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class TipoInstitucionFinanciera(TypedDict):
|
|
17
|
+
"""Estructura de un tipo de institución financiera"""
|
|
18
|
+
|
|
19
|
+
codigo: str
|
|
20
|
+
tipo: str
|
|
21
|
+
descripcion: str
|
|
22
|
+
regulador: str
|
|
23
|
+
ley_aplicable: str
|
|
24
|
+
ejemplos: list[str]
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class InstitucionesFinancieras:
|
|
28
|
+
"""
|
|
29
|
+
Catálogo de tipos de instituciones del sistema financiero mexicano.
|
|
30
|
+
|
|
31
|
+
Incluye todos los tipos de instituciones reguladas y supervisadas
|
|
32
|
+
en México: bancos, casas de bolsa, SOFOMes, seguros, fianzas,
|
|
33
|
+
AFOREs, instituciones fintech, etc.
|
|
34
|
+
|
|
35
|
+
Características:
|
|
36
|
+
- 20+ tipos de instituciones financieras
|
|
37
|
+
- Información de reguladores (CNBV, CNSF, CONSAR, CONDUSEF, SHCP)
|
|
38
|
+
- Leyes aplicables para cada tipo
|
|
39
|
+
- Ejemplos de instituciones por categoría
|
|
40
|
+
|
|
41
|
+
Ejemplo:
|
|
42
|
+
>>> from catalogmx.catalogs.banxico import InstitucionesFinancieras
|
|
43
|
+
>>>
|
|
44
|
+
>>> # Obtener bancos
|
|
45
|
+
>>> bancos = InstitucionesFinancieras.get_bancos()
|
|
46
|
+
>>> for banco in bancos:
|
|
47
|
+
... print(f"{banco['codigo']}: {banco['tipo']}")
|
|
48
|
+
>>>
|
|
49
|
+
>>> # Buscar por código
|
|
50
|
+
>>> inst = InstitucionesFinancieras.get_por_codigo("01")
|
|
51
|
+
>>> print(inst['tipo']) # "Banco Múltiple"
|
|
52
|
+
>>>
|
|
53
|
+
>>> # Obtener instituciones por regulador
|
|
54
|
+
>>> cnbv = InstitucionesFinancieras.get_por_regulador("CNBV")
|
|
55
|
+
>>> print(f"Instituciones reguladas por CNBV: {len(cnbv)}")
|
|
56
|
+
"""
|
|
57
|
+
|
|
58
|
+
_data: list[TipoInstitucionFinanciera] | None = None
|
|
59
|
+
|
|
60
|
+
@classmethod
|
|
61
|
+
def _load_data(cls) -> None:
|
|
62
|
+
"""Carga lazy de datos desde JSON"""
|
|
63
|
+
if cls._data is not None:
|
|
64
|
+
return
|
|
65
|
+
|
|
66
|
+
# Path: catalogmx/packages/python/catalogmx/catalogs/banxico/instituciones_financieras.py
|
|
67
|
+
# Target: catalogmx/packages/shared-data/banxico/instituciones_financieras.json
|
|
68
|
+
data_path = (
|
|
69
|
+
Path(__file__).parent.parent.parent.parent.parent
|
|
70
|
+
/ "shared-data"
|
|
71
|
+
/ "banxico"
|
|
72
|
+
/ "instituciones_financieras.json"
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
with open(data_path, encoding="utf-8") as f:
|
|
76
|
+
json_data = json.load(f)
|
|
77
|
+
cls._data = json_data["tipos_institucion"]
|
|
78
|
+
|
|
79
|
+
@classmethod
|
|
80
|
+
def get_all(cls) -> list[TipoInstitucionFinanciera]:
|
|
81
|
+
"""
|
|
82
|
+
Obtiene todos los tipos de instituciones financieras.
|
|
83
|
+
|
|
84
|
+
Returns:
|
|
85
|
+
Lista completa de tipos de instituciones
|
|
86
|
+
|
|
87
|
+
Ejemplo:
|
|
88
|
+
>>> instituciones = InstitucionesFinancieras.get_all()
|
|
89
|
+
>>> print(f"Total tipos: {len(instituciones)}")
|
|
90
|
+
"""
|
|
91
|
+
cls._load_data()
|
|
92
|
+
return cls._data.copy() # type: ignore
|
|
93
|
+
|
|
94
|
+
@classmethod
|
|
95
|
+
def get_por_codigo(cls, codigo: str) -> TipoInstitucionFinanciera | None:
|
|
96
|
+
"""
|
|
97
|
+
Busca tipo de institución por código.
|
|
98
|
+
|
|
99
|
+
Args:
|
|
100
|
+
codigo: Código del tipo de institución (ej: "01", "02")
|
|
101
|
+
|
|
102
|
+
Returns:
|
|
103
|
+
Información del tipo de institución o None si no existe
|
|
104
|
+
|
|
105
|
+
Ejemplo:
|
|
106
|
+
>>> banco = InstitucionesFinancieras.get_por_codigo("01")
|
|
107
|
+
>>> print(banco['tipo']) # "Banco Múltiple"
|
|
108
|
+
"""
|
|
109
|
+
cls._load_data()
|
|
110
|
+
for inst in cls._data: # type: ignore
|
|
111
|
+
if inst["codigo"] == codigo:
|
|
112
|
+
return inst
|
|
113
|
+
return None
|
|
114
|
+
|
|
115
|
+
@classmethod
|
|
116
|
+
def buscar_por_tipo(cls, tipo: str) -> list[TipoInstitucionFinanciera]:
|
|
117
|
+
"""
|
|
118
|
+
Busca por tipo de institución (insensible a acentos y mayúsculas).
|
|
119
|
+
|
|
120
|
+
Args:
|
|
121
|
+
tipo: Texto a buscar en el tipo de institución
|
|
122
|
+
|
|
123
|
+
Returns:
|
|
124
|
+
Lista de tipos de instituciones que coinciden
|
|
125
|
+
|
|
126
|
+
Ejemplo:
|
|
127
|
+
>>> bancos = InstitucionesFinancieras.buscar_por_tipo("banco")
|
|
128
|
+
>>> for b in bancos:
|
|
129
|
+
... print(b['tipo'])
|
|
130
|
+
"""
|
|
131
|
+
cls._load_data()
|
|
132
|
+
tipo_normalized = normalize_text(tipo)
|
|
133
|
+
return [
|
|
134
|
+
inst
|
|
135
|
+
for inst in cls._data # type: ignore
|
|
136
|
+
if tipo_normalized in normalize_text(inst["tipo"])
|
|
137
|
+
]
|
|
138
|
+
|
|
139
|
+
@classmethod
|
|
140
|
+
def get_por_regulador(cls, regulador: str) -> list[TipoInstitucionFinanciera]:
|
|
141
|
+
"""
|
|
142
|
+
Obtiene instituciones por regulador (insensible a acentos).
|
|
143
|
+
|
|
144
|
+
Args:
|
|
145
|
+
regulador: Nombre o siglas del regulador (CNBV, CNSF, CONSAR, etc.)
|
|
146
|
+
|
|
147
|
+
Returns:
|
|
148
|
+
Lista de instituciones reguladas por esa entidad
|
|
149
|
+
|
|
150
|
+
Ejemplo:
|
|
151
|
+
>>> cnbv = InstitucionesFinancieras.get_por_regulador("CNBV")
|
|
152
|
+
>>> print(f"Instituciones reguladas por CNBV: {len(cnbv)}")
|
|
153
|
+
"""
|
|
154
|
+
cls._load_data()
|
|
155
|
+
regulador_normalized = normalize_text(regulador)
|
|
156
|
+
return [
|
|
157
|
+
inst
|
|
158
|
+
for inst in cls._data # type: ignore
|
|
159
|
+
if regulador_normalized in normalize_text(inst["regulador"])
|
|
160
|
+
]
|
|
161
|
+
|
|
162
|
+
@classmethod
|
|
163
|
+
def get_bancos(cls) -> list[TipoInstitucionFinanciera]:
|
|
164
|
+
"""
|
|
165
|
+
Obtiene bancos (múltiples y de desarrollo).
|
|
166
|
+
|
|
167
|
+
Returns:
|
|
168
|
+
Lista de tipos de bancos
|
|
169
|
+
|
|
170
|
+
Ejemplo:
|
|
171
|
+
>>> bancos = InstitucionesFinancieras.get_bancos()
|
|
172
|
+
>>> for banco in bancos:
|
|
173
|
+
... print(f"{banco['tipo']}: {', '.join(banco['ejemplos'][:3])}")
|
|
174
|
+
"""
|
|
175
|
+
cls._load_data()
|
|
176
|
+
return [inst for inst in cls._data if "banco" in inst["tipo"].lower()] # type: ignore
|
|
177
|
+
|
|
178
|
+
@classmethod
|
|
179
|
+
def get_sofomes(cls) -> list[TipoInstitucionFinanciera]:
|
|
180
|
+
"""
|
|
181
|
+
Obtiene SOFOMes (ENR y ER).
|
|
182
|
+
|
|
183
|
+
Returns:
|
|
184
|
+
Lista de tipos de SOFOMes
|
|
185
|
+
|
|
186
|
+
Ejemplo:
|
|
187
|
+
>>> sofomes = InstitucionesFinancieras.get_sofomes()
|
|
188
|
+
>>> for sofom in sofomes:
|
|
189
|
+
... print(f"{sofom['tipo']} - {sofom['regulador']}")
|
|
190
|
+
"""
|
|
191
|
+
cls._load_data()
|
|
192
|
+
return [inst for inst in cls._data if "SOFOM" in inst["tipo"]] # type: ignore
|
|
193
|
+
|
|
194
|
+
@classmethod
|
|
195
|
+
def get_sector_popular(cls) -> list[TipoInstitucionFinanciera]:
|
|
196
|
+
"""
|
|
197
|
+
Obtiene instituciones de ahorro y crédito popular.
|
|
198
|
+
|
|
199
|
+
Returns:
|
|
200
|
+
Lista de instituciones del sector popular
|
|
201
|
+
|
|
202
|
+
Ejemplo:
|
|
203
|
+
>>> sector_popular = InstitucionesFinancieras.get_sector_popular()
|
|
204
|
+
>>> for inst in sector_popular:
|
|
205
|
+
... print(inst['tipo'])
|
|
206
|
+
"""
|
|
207
|
+
cls._load_data()
|
|
208
|
+
return [
|
|
209
|
+
inst
|
|
210
|
+
for inst in cls._data # type: ignore
|
|
211
|
+
if any(
|
|
212
|
+
keyword in inst["tipo"]
|
|
213
|
+
for keyword in ["Cooperativa", "Financiera Popular", "Ahorro y Crédito"]
|
|
214
|
+
)
|
|
215
|
+
]
|
|
216
|
+
|
|
217
|
+
@classmethod
|
|
218
|
+
def get_seguros_y_fianzas(cls) -> list[TipoInstitucionFinanciera]:
|
|
219
|
+
"""
|
|
220
|
+
Obtiene instituciones de seguros y fianzas.
|
|
221
|
+
|
|
222
|
+
Returns:
|
|
223
|
+
Lista de instituciones de seguros y fianzas
|
|
224
|
+
|
|
225
|
+
Ejemplo:
|
|
226
|
+
>>> seguros = InstitucionesFinancieras.get_seguros_y_fianzas()
|
|
227
|
+
>>> for inst in seguros:
|
|
228
|
+
... print(f"{inst['tipo']} - {inst['regulador']}")
|
|
229
|
+
"""
|
|
230
|
+
cls._load_data()
|
|
231
|
+
return [
|
|
232
|
+
inst
|
|
233
|
+
for inst in cls._data # type: ignore
|
|
234
|
+
if "Seguros" in inst["tipo"] or "Fianzas" in inst["tipo"]
|
|
235
|
+
]
|
|
236
|
+
|
|
237
|
+
@classmethod
|
|
238
|
+
def get_mercado_valores(cls) -> list[TipoInstitucionFinanciera]:
|
|
239
|
+
"""
|
|
240
|
+
Obtiene instituciones del mercado de valores.
|
|
241
|
+
|
|
242
|
+
Returns:
|
|
243
|
+
Lista de instituciones del mercado de valores
|
|
244
|
+
|
|
245
|
+
Ejemplo:
|
|
246
|
+
>>> mercado = InstitucionesFinancieras.get_mercado_valores()
|
|
247
|
+
>>> for inst in mercado:
|
|
248
|
+
... print(inst['tipo'])
|
|
249
|
+
"""
|
|
250
|
+
cls._load_data()
|
|
251
|
+
return [
|
|
252
|
+
inst
|
|
253
|
+
for inst in cls._data # type: ignore
|
|
254
|
+
if any(
|
|
255
|
+
keyword in inst["tipo"]
|
|
256
|
+
for keyword in ["Bolsa", "Casa de Bolsa", "Valores", "Inversión"]
|
|
257
|
+
)
|
|
258
|
+
]
|
|
259
|
+
|
|
260
|
+
@classmethod
|
|
261
|
+
def get_fintech(cls) -> list[TipoInstitucionFinanciera]:
|
|
262
|
+
"""
|
|
263
|
+
Obtiene instituciones de tecnología financiera (Fintech).
|
|
264
|
+
|
|
265
|
+
Returns:
|
|
266
|
+
Lista de instituciones fintech
|
|
267
|
+
|
|
268
|
+
Ejemplo:
|
|
269
|
+
>>> fintech = InstitucionesFinancieras.get_fintech()
|
|
270
|
+
>>> for inst in fintech:
|
|
271
|
+
... print(f"{inst['tipo']} - {inst['ley_aplicable']}")
|
|
272
|
+
"""
|
|
273
|
+
cls._load_data()
|
|
274
|
+
return [
|
|
275
|
+
inst for inst in cls._data if "Tecnología Financiera" in inst["tipo"] # type: ignore
|
|
276
|
+
]
|
|
277
|
+
|
|
278
|
+
@classmethod
|
|
279
|
+
def get_retiro(cls) -> list[TipoInstitucionFinanciera]:
|
|
280
|
+
"""
|
|
281
|
+
Obtiene AFOREs y SIEFOREs.
|
|
282
|
+
|
|
283
|
+
Returns:
|
|
284
|
+
Lista de instituciones del sistema de ahorro para el retiro
|
|
285
|
+
|
|
286
|
+
Ejemplo:
|
|
287
|
+
>>> retiro = InstitucionesFinancieras.get_retiro()
|
|
288
|
+
>>> for inst in retiro:
|
|
289
|
+
... print(f"{inst['tipo']} - {inst['regulador']}")
|
|
290
|
+
"""
|
|
291
|
+
cls._load_data()
|
|
292
|
+
return [
|
|
293
|
+
inst
|
|
294
|
+
for inst in cls._data # type: ignore
|
|
295
|
+
if "AFORE" in inst["tipo"] or "SIEFORE" in inst["tipo"]
|
|
296
|
+
]
|
|
297
|
+
|
|
298
|
+
@classmethod
|
|
299
|
+
def validar_codigo(cls, codigo: str) -> bool:
|
|
300
|
+
"""
|
|
301
|
+
Valida código de institución.
|
|
302
|
+
|
|
303
|
+
Args:
|
|
304
|
+
codigo: Código a validar
|
|
305
|
+
|
|
306
|
+
Returns:
|
|
307
|
+
True si el código existe, False en caso contrario
|
|
308
|
+
|
|
309
|
+
Ejemplo:
|
|
310
|
+
>>> InstitucionesFinancieras.validar_codigo("01") # True
|
|
311
|
+
>>> InstitucionesFinancieras.validar_codigo("99") # False
|
|
312
|
+
"""
|
|
313
|
+
cls._load_data()
|
|
314
|
+
return any(inst["codigo"] == codigo for inst in cls._data) # type: ignore
|
|
315
|
+
|
|
316
|
+
@classmethod
|
|
317
|
+
def get_descripcion_regulador(cls, siglas: str) -> str | None:
|
|
318
|
+
"""
|
|
319
|
+
Obtiene descripción de regulador.
|
|
320
|
+
|
|
321
|
+
Args:
|
|
322
|
+
siglas: Siglas del regulador (CNBV, CNSF, CONSAR, etc.)
|
|
323
|
+
|
|
324
|
+
Returns:
|
|
325
|
+
Descripción completa del regulador o None si no existe
|
|
326
|
+
|
|
327
|
+
Ejemplo:
|
|
328
|
+
>>> desc = InstitucionesFinancieras.get_descripcion_regulador("CNBV")
|
|
329
|
+
>>> print(desc) # "Comisión Nacional Bancaria y de Valores"
|
|
330
|
+
"""
|
|
331
|
+
reguladores = {
|
|
332
|
+
"CNBV": "Comisión Nacional Bancaria y de Valores",
|
|
333
|
+
"CNSF": "Comisión Nacional de Seguros y Fianzas",
|
|
334
|
+
"CONSAR": "Comisión Nacional del Sistema de Ahorro para el Retiro",
|
|
335
|
+
"CONDUSEF": "Comisión Nacional para la Protección y Defensa de los Usuarios de Servicios Financieros",
|
|
336
|
+
"SHCP": "Secretaría de Hacienda y Crédito Público",
|
|
337
|
+
}
|
|
338
|
+
return reguladores.get(siglas.upper())
|