dmachard / python-creditagricole-particuliers

Client Python, à destination des particuliers, souhaitant récupérer ses opérations bancaires stockées par le Crédit Agricole.
https://pypi.org/project/creditagricole-particuliers/
MIT License
38 stars 13 forks source link

[Question] Est-on sûr qu'1 département = 1 caisse régionale ? #30

Open Royalphax opened 10 months ago

Royalphax commented 10 months ago

Hello, nous sommes quelques-uns à utiliser cette API pour récupérer nos transactions et les envoyer vers nos instances firefly3 grâce à ce projet.

Initialement, j'indiquais à la classe Authenticator le nom de la caisse régionale et depuis la contribution de @Elektriman, cela a été simplifié via l'argument du numéro de département.

Au départ, je pensais qu'une personne domiciliée dans un département avait forcément ses comptes dans une seule caisse régionale, mais après quelques recherches, ce n'est pas forcément le cas partout.

Par exemple, pour l'Ardèche (07), on peut le voir :

Ce qui... au final... est assez paradoxal, car l'annuaire en ligne des caisses régionales nous dit que le département de l'Ardèche est dans la caisse régionale Sud Rhône Alpes.

Étant donné que python-creditagricole-particuliers s'appuie sur des requêtes utilisées par le site ou l'application (qui reconnaissent que certains départements peuvent avoir 2 caisses régionales), j'ai trouvé pertinent de le prendre en compte.

Voici la liste statique des départements ainsi que leur(s) région(s) correspondantes que nous utilisons dans notre projet :

DEPARTMENTS_TO_CA_REGIONS = {
    ('20', '2A', '2B'): ['corse'],
    ('1', '71'): ['centrest'],
    ('2', '8', '51'): ['nord-est'],
    ('4', '6', '83'): ['pca'],
    ('5', '13', '84'): ['alpesprovence'],
    ('10', '21', '52', '89'): ['cb'],
    ('11', '30', '34', '48'): ['languedoc'],
    ('12', '46', '81', '82'): ['nmp'],
    ('14', '50'): ['normandie'],
    ('53', '61'): ['normandie', 'anjou-maine'],
    ('15', '23', '63', '03', '19'): ['centrefrance'],
    ('16', '24'): ['charente-perigord'],
    ('17', '79'): ['cmds'],
    ('18', '58'): ['centreloire'],
    ('56',): ['morbihan'],
    ('45',): ['briepicardie', 'centreloire'],
    ('22',): ['cotesdarmor'],
    ('25', '39', '70', '90'): ['franchecomte'],
    ('26', '38', '69', '7'): ['centrest', 'sudrhonealpes'],
    ('27', '76'): ['normandie-seine'],
    ('28', '41'): ['valdefrance'],
    ('29',): ['finistere'],
    ('31',): ['toulouse31'],
    ('32',): ['aquitaine', 'pyrenees-gascogne'],
    ('33', '40', '47'): ['aquitaine'],
    ('35',): ['illeetvilaine'],
    ('36', '87'): ['centreouest'],
    ('37', '86'): ['tourainepoitou'],
    ('54', '55', '57'): ['lorraine'],
    ('67', '68', '88'): ['alsace-vosges'],
    ('42', '43'): ['loirehauteloire'],
    ('44', '85'): ['atlantique-vendee'],
    ('11', '30', '34', '48',): ['languedoc'],
    ('49', '72'): ['anjou-maine'],
    ('59', '62'): ['norddefrance'],
    ('64', '65'): ['pyrenees-gascogne'],
    ('66', '9'): ['sudmed'],
    ('73', '74'): ['des-savoie'],
    ('75', '91', '92', '93', '94', '95', '78'): ['paris'],
    ('60',): ['briepicardie', 'paris'],
    ('80', '77'): ['briepicardie'],
    ('971',): ['guadeloupe'],
    ('972', '973'): ['martinique'],
    ('974',): ['reunion']
}

Et la méthode pour passer du numéro de département à la caisse régionale (ou aux caisses...) :

def get_ca_region(department_id: str):
    department_id = str(int(department_id)) if department_id.isdigit() else department_id
    for key, value in DEPARTMENTS_TO_CA_REGIONS.items():
        if department_id in key:
            return value
    return None

Enfin, en cas d'ambiguïté (plusieurs caisses pour 1 département), nous demandons à l'utilisateur de clairement indiquer sa caisse.

Exemple :

Exception: Unfortunately your department number is not enough to know what is your CA region. Please replace your department number by one of the following CA region :
-> bank-department = sudrhonealpes (if your accounts are managed by Credit Agricole Sud Rhône Alpes)
-> bank-department = centrest (if your accounts are managed by Credit Agricole Centre Est)

Je vous laisse me donner votre avis afin de savoir si cette subtilité devrait être intégrée à l'API. De notre côté, nous assignons directement la variable self.regional_bank_url.

dmachard commented 6 months ago

Merci pour l'analyse et les explications associés. Ne pas hésitez à faire une pull request pour intégrer directement ce changement.