Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ['3.7', '3.8', '3.9', '3.10', '3.11', '3.12', '3.13']
python-version: ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13']
steps:
- uses: actions/checkout@v2
- name: Set up Python ${{ matrix.python-version }}
Expand Down
6 changes: 4 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
SHELL := bash
PATH := ./venv/bin:${PATH}
PYTHON = python3.7
PYTHON = python3.8
PROJECT = clabe
isort = isort $(PROJECT) tests setup.py
black = black -S -l 79 --target-version py38 $(PROJECT) tests setup.py
Expand Down Expand Up @@ -50,5 +50,7 @@ release: test clean
python setup.py sdist bdist_wheel
twine upload dist/*

compare-banks:
PYTHONPATH=. python scripts/compare_banks.py

.PHONY: all install-test test format lint clean release
.PHONY: all install-test test format lint clean release compare-banks
89 changes: 80 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ https://es.wikipedia.org/wiki/CLABE

## Requerimientos

Python 3.6 o superior.
Python 3.8 o superior.

## Instalación

Expand All @@ -30,48 +30,119 @@ $ make test

## Uso básico

Obtener el dígito de control de un número CLABE
### Como tipo personalizado en un modelo de Pydantic

```python
from pydantic import BaseModel, ValidationError

from clabe import Clabe


class Account(BaseModel):
id: str
clabe: Clabe


account = Account(id='123', clabe='723010123456789019')
print(account)
"""
id='123' clabe='723010123456789019'
"""

try:
account = Account(id='321', clabe='000000000000000011')
except ValidationError as exc:
print(exc)
"""
1 validation error for Account
clabe
código de banco no es válido [type=clabe.bank_code, input_value='000000000000000011', input_type=str]
"""
```

### Obtener el dígito de control de un número CLABE

```python
import clabe
clabe.compute_control_digit('00200000000000000')
```

Para validar si un número CLABE es válido
### Para validar si un número CLABE es válido

```python
import clabe
clabe.validate_clabe('002000000000000008')
```

Para obtener el banco a partir de 3 dígitos
### Para obtener el banco a partir de 3 dígitos

```python
import clabe
clabe.get_bank_name('002')
```

Para generar nuevo válido CLABES
### Para generar nuevo válido CLABES

```python
import clabe
clabe.generate_new_clabes(10, '002123456')
```

## Para agregar un nuevo banco
## Agregar un nuevo banco

A partir de la versión **2.0.0**, el paquete ha sido actualizado para utilizar **Pydantic v2**, lo que implica que las versiones anteriores ya no recibirán soporte ni actualizaciones.

A partir de la versión 2.0.0, el paquete se actualizará a **Pydantic v2**, lo que significa que las versiones anteriores ya no recibirán soporte.
No obstante, en versiones anteriores hemos agregado una función que permite añadir bancos adicionales a la lista sin necesidad de crear un PR. Esto es útil para quienes aún utilicen versiones anteriores. Sin embargo, a partir de la versión 2, continuaremos manteniendo y actualizando la lista oficial de bancos mediante PRs en el repositorio.

Sin embargo, hemos añadido una función para agregar bancos adicionales a la lista, en caso de que sea necesario. Esto se puede hacer sin necesidad de crear un PR. Para agregar un banco, simplemente llama a la siguiente función con el código de Banxico y el nombre del banco:
### Cómo agregar un banco

Para agregar un banco, llama a la función `add_bank` pasando el código de Banxico y el nombre del banco como parámetros.

```python
import clabe
clabe.add_bank('12345', 'New Bank')
```

Para eliminar un banco
### Cómo eliminar un banco

De manera similar, puedes eliminar un banco llamando a la función remove_bank con el código del banco que deseas eliminar.

```python
import clabe
clabe.remove_bank('12345')
```

**Nota**: Aunque estas funciones están disponibles para un uso más flexible, recomendamos utilizar siempre la lista oficial de bancos actualizada en la versión 2+.

## Mantener actualizada la lista de participantes

Para mantener sincronizada la lista de participantes del SPEI con la información oficial de Banxico, este repositorio incluye un script que compara automáticamente los datos locales con la lista actualizada de instituciones financieras.

### Verificar cambios en la lista de participantes

El script `compare_banks.py` detecta:

- **Nuevos participantes**: Instituciones que aparecen en Banxico pero no están en el paquete
- **Bajas de participantes**: Instituciones que ya no aparecen en la lista oficial de Banxico
- **Cambios de nombre**: Participantes que mantienen el mismo código pero han cambiado su nombre

Para ejecutar la verificación:

```bash
export PYTHONPATH=$(pwd)
python scripts/compare_banks.py
```

### Interpretar los resultados

El script mostrará un reporte con las diferencias encontradas:

- **ADDITIONS**: Nuevos participantes que deben agregarse al archivo `clabe/banks.py`
- **REMOVALS**: Participantes que deben eliminarse por ya no estar activos
- **CHANGES**: Cambios de nombre que requieren actualización

Si no hay diferencias, el script confirmará que los datos están sincronizados.

### Actualizar la lista de participantes

Una vez identificados los cambios, actualiza manualmente el archivo `clabe/banks.py` y crea un pull request para mantener la lista actualizada.
39 changes: 24 additions & 15 deletions clabe/banks.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,10 @@
'140': '40140',
'652': '90652',
'688': '90688',
'126': '40126',
'680': '90680',
'723': '90723',
'722': '90722',
'720': '90720',
'151': '40151',
'616': '90616',
'634': '90634',
Expand All @@ -58,7 +58,6 @@
'902': '90902',
'150': '40150',
'136': '40136',
'686': '90686',
'059': '40059',
'110': '40110',
'661': '90661',
Expand All @@ -70,7 +69,6 @@
'600': '90600',
'108': '40108',
'132': '40132',
'613': '90613',
'135': '37135',
'710': '90710',
'684': '90684',
Expand All @@ -82,28 +80,35 @@
'157': '40157',
'728': '90728',
'646': '90646',
'648': '90648',
'656': '90656',
'617': '90617',
'605': '90605',
'608': '90608',
'703': '90703',
'113': '40113',
'141': '40141',
'715': '90715',
'732': '90732',
'734': '90734',
'167': '40167',
'721': '90721',
'727': '90727',
'738': '90738',
'730': '90730',
}


# Descargado de https://www.banxico.org.mx/cep-scl/listaInstituciones.do
# 2022-10-18
# The order of the banks must be alphabetical by bank name
BANK_NAMES = {
'40138': 'ABC Capital',
'40133': 'Actinver',
'40062': 'Afirme',
'90706': 'Arcus',
'90721': 'Albo',
'90706': 'Arcus Fi',
'90659': 'Asp Integra Opc',
'40128': 'Autofin',
'40127': 'Azteca',
'37166': 'Babien',
'37166': 'BaBien',
'40030': 'Bajio',
'40002': 'Banamex',
'40154': 'Banco Covalto',
Expand All @@ -126,65 +131,69 @@
'40112': 'Bmonex',
'90677': 'Caja Pop Mexica',
'90683': 'Caja Telefonist',
'90715': 'Cashi Cuenta',
'90630': 'CB Intercam',
'40124': 'CBM Banco',
'40143': 'CI Banco',
'40124': 'Citi Mexico',
'40143': 'CIBanco',
'90631': 'CI Bolsa',
'90901': 'Cls',
'90903': 'CoDi Valida',
'40130': 'Compartamos',
'40140': 'Consubanco',
'90652': 'Credicapital',
'90688': 'Crediclub',
'40126': 'Credit Suisse',
'90680': 'Cristobal Colon',
'90723': 'Cuenca',
'40151': 'Donde',
'90616': 'Finamex',
'90634': 'Fincomun',
'90734': 'Finco Pay',
'90738': 'Fintoc',
'90689': 'Fomped',
'90699': 'Fondeadora',
'90685': 'Fondo (Fira)',
'90601': 'Gbm',
'40167': 'Hey Banco',
'37168': 'Hipotecaria Fed',
'40021': 'HSBC',
'40155': 'Icbc',
'40036': 'Inbursa',
'90902': 'Indeval',
'40150': 'Inmobiliario',
'40136': 'Intercam Banco',
'90686': 'Invercap',
'40059': 'Invex',
'40110': 'JP Morgan',
'90661': 'KLAR',
'90653': 'Kuspit',
'90670': 'Libertad',
'90602': 'Masari',
'90722': 'Mercado Pago W',
'90720': 'MexPago',
'40042': 'Mifel',
'40158': 'Mizuho Bank',
'90600': 'Monexcb',
'40108': 'Mufg',
'40132': 'Multiva Banco',
'90613': 'Multiva Cbolsa',
'37135': 'Nafin',
'90638': 'NU MEXICO',
'90710': 'NVIO',
'40148': 'Pagatodo',
'90732': 'Peibo',
'90620': 'Profuturo',
'40156': 'Sabadell',
'40014': 'Santander',
'40044': 'Scotiabank',
'40157': 'Shinhan',
'90728': 'Spin by OXXO',
'90646': 'STP',
'90648': 'Tactiv Cb',
'90730': 'Swap',
'90703': 'Tesored',
'90684': 'Transfer',
'90727': 'Transfer directo',
'40138': 'Uala',
'90656': 'Unagra',
'90617': 'Valmex',
'90605': 'Value',
'90608': 'Vector',
'40113': 'Ve Por Mas',
'40141': 'Volkswagen',
}
11 changes: 0 additions & 11 deletions clabe/errors.py

This file was deleted.

Loading
Loading