Commit faebfc13 authored by Yohan Boniface's avatar Yohan Boniface

Add various "action collective" financements

parent b4f04550
......@@ -112,7 +112,7 @@ async def test_simulate_endpoint_filter_eligible(client):
resp = await client.post('/financement', body=body)
assert resp.status == HTTPStatus.OK
financements = json.loads(resp.body)['financements']
assert len(financements) == 20
assert len(financements) == 25
# Filter eligible only
resp = await client.post('/financement?eligible=true', body=body)
assert resp.status == HTTPStatus.OK
......@@ -124,7 +124,7 @@ async def test_simulate_endpoint_filter_eligible(client):
resp = await client.post('/financement?eligible=false', body=body)
assert resp.status == HTTPStatus.OK
financements = json.loads(resp.body)['financements']
assert len(financements) == 18
assert len(financements) == 23
for financement in financements:
assert financement['eligible'] is False
......@@ -144,7 +144,7 @@ async def test_simulate_endpoint_filter_tags(client):
resp = await client.post('/financement', body=body)
assert resp.status == HTTPStatus.OK
financements = json.loads(resp.body)['financements']
assert len(financements) == 20
assert len(financements) == 25
# Filter CPF only
resp = await client.post('/financement?tags=CPF', body=body)
assert resp.status == HTTPStatus.OK
......@@ -169,7 +169,7 @@ async def test_simulate_endpoint_mix_filters(client):
resp = await client.post('/financement', body=body)
assert resp.status == HTTPStatus.OK
financements = json.loads(resp.body)['financements']
assert len(financements) == 20
assert len(financements) == 25
# Filter CPF only
resp = await client.post('/financement?tags=hors%20temps%20de%20travail'
'&eligible=1', body=body)
......@@ -193,7 +193,7 @@ async def test_simulate_hors_temps_de_travail(client):
resp = await client.post('/financement', body=body)
assert resp.status == HTTPStatus.OK
financements = json.loads(resp.body)['financements']
assert len(financements) == 20
assert len(financements) == 25
# Filter eligible only
resp = await client.post('/financement?tags=hors%20temps%20de%20travail'
'&eligible=1', body=body)
......
from datetime import datetime
import pytest
from trefle.context import Context
from trefle.exceptions import DataError
from trefle.helpers import (count_indent, diff_month, diff_week, flatten,
fold_name, insee_commune_to_region, isfloat)
fold_name, insee_commune_to_departement,
insee_commune_to_region, isfloat)
def test_flatten():
......@@ -64,7 +67,33 @@ def test_fold_name(input, expected):
assert fold_name(input) == expected
def test_insee_commune_to_region():
context = {'commune': '93031'}
insee_commune_to_region(context, 'commune', 'region')
assert context['region'] == '11' # IDF
@pytest.mark.parametrize('input,expected', [
('93031', '11'), # idf
('20000', '94'), # When consuming postode
('blah', False)
])
def test_insee_commune_to_region(input, expected):
context = Context({'commune': input})
if expected:
insee_commune_to_region(context, 'commune', 'region')
assert context['region'] == expected
else:
with pytest.raises(DataError):
insee_commune_to_region(context, 'commune', 'region')
@pytest.mark.parametrize('input,expected', [
('93031', '93'), # idf
('2A000', '2A'),
('97131', '971'),
('99999', False),
])
def test_insee_commune_to_departement(input, expected):
context = Context({'commune': input})
insee_commune_to_departement(context, 'commune',
'beneficiaire.departement')
if expected:
assert context['beneficiaire.departement'] == expected
else:
# Invalid enum value prevent to be added in context
assert 'beneficiaire.departement' not in context
......@@ -42,6 +42,7 @@ async def test_populate_formation_from_bytes():
assert context['formation.contrat_apprentissage'] is False
assert context['formation.contrat_professionnalisation'] is False
assert context['formation.poec'] is False
assert context['formation.departement'] == '37'
@pytest.mark.parametrize('path,key,value', [
......
......@@ -42,6 +42,9 @@ def load_schema(data, output=None, namespace=None):
if 'enum' in more:
for key, label in more['enum'].items():
LABELS[label] = key
if more['type'] == 'array' and 'enum' in more['items']:
for key, label in more['items']['enum'].items():
LABELS[label] = key
if 'pattern' in more:
more['pattern'] = re.compile(more['pattern'])
else:
......
Fonctionnalité: action collective
Scénario: financement région pour un bénéficiaire sans allocation ayant plus de 26 ans
Soit un bénéficiaire et une formation
Et c'est un demandeur d'emploi
Et le âge du bénéficiaire vaut 30
Et la durée en heures de la formation vaut 120
Et les codes financeur de la formation vaut [2]
Quand je demande un calcul de financement
Quand je sélectionne le financement «Action de formation collective financée par la région»
# FIXME: d'après Armelle, 652.02
Alors la rémunération applicable vaut 401.09
Scénario: financement région pour bénéficiaire avec ARE
Soit un bénéficiaire et une formation
Et c'est un demandeur d'emploi
Et le âge du bénéficiaire vaut 30
Et la durée en heures de la formation vaut 120
Et les codes financeur de la formation vaut [2]
Et le montant de l'allocation du bénéficiaire vaut 800
Et l'allocation du bénéficiaire vaut «allocation d'aide au retour à l'emploi»
Quand je demande un calcul de financement
Et je sélectionne le financement «Action de formation collective financée par la région»
Alors la rémunération applicable vaut 800
Scénario: financement PE pour un bénéficiaire de 18 ans sans allocation
Soit un bénéficiaire et une formation
Et c'est un demandeur d'emploi
Et le âge du bénéficiaire vaut 18
Et la durée en heures de la formation vaut 120
Et les codes financeur de la formation vaut [4]
Quand je demande un calcul de financement
Quand je sélectionne le financement «Action de formation collective financée par Pôle emploi»
Alors la rémunération applicable vaut 310.39
Scénario: pas de financement PE si le code financeur entreprise est présent
Soit un bénéficiaire et une formation
Et c'est un demandeur d'emploi
Et le âge du bénéficiaire vaut 18
Et la durée en heures de la formation vaut 120
Et les codes financeur de la formation vaut [4,5]
Quand je demande un calcul de financement
Alors le financement «Action de formation collective financée par Pôle emploi» n'est pas proposé
Scénario: financement Agefiph pour un travailleur handicapé
Soit un bénéficiaire et une formation
Et c'est un demandeur d'emploi
Et le âge du bénéficiaire vaut 28
Et la durée en heures de la formation vaut 120
Et les codes financeur de la formation vaut [7]
Et c'est une travailleur handicapé
Quand je demande un calcul de financement
Quand je sélectionne le financement «Action de formation collective financée par l'Agefiph»
Alors la rémunération applicable vaut 652.02
Scénario: financement département
Soit un bénéficiaire et une formation
Et c'est un demandeur d'emploi
Et le âge du bénéficiaire vaut 28
Et la durée en heures de la formation vaut 120
Et les codes financeur de la formation vaut [8]
Et la département de la formation vaut «Ariège»
Et la département du bénéficiaire vaut «Ariège»
Quand je demande un calcul de financement
Quand je sélectionne le financement «Action de formation collective financée par le conseil départemental»
Alors la rémunération applicable vaut 401.09
Scénario: pas de financement département si les départements ne sont pas les mêmes
Soit un bénéficiaire et une formation
Et c'est un demandeur d'emploi
Et le âge du bénéficiaire vaut 28
Et la durée en heures de la formation vaut 120
Et les codes financeur de la formation vaut [8]
Et la département de la formation vaut «Ariège»
Et la département du bénéficiaire vaut «Aude»
Quand je demande un calcul de financement
Alors le financement «Action de formation collective financée par le conseil départemental» n'est pas proposé
Scénario: financement par l'État
Soit un bénéficiaire et une formation
Et c'est un demandeur d'emploi
Et le âge du bénéficiaire vaut 28
Et la durée en heures de la formation vaut 120
Et les codes financeur de la formation vaut [11]
Quand je demande un calcul de financement
Quand je sélectionne le financement «Action de formation collective financée par l'État»
Alors la rémunération applicable vaut 401.09
......@@ -63,3 +63,18 @@ Financement individuel Agefiph:
Fonds d'aide aux jeunes:
tags: [FAJ, DE]
rules: FAJ
Action de formation collective financée par la région:
tags: [DE, région, collectif]
rules: action collective
Action de formation collective financée par Pôle emploi:
tags: [DE, PE, collectif]
rules: action collective
Action de formation collective financée par l'Agefiph:
tags: [DE, TH, collectif]
rules: action collective
Action de formation collective financée par le conseil départemental:
tags: [DE, département, collectif]
rules: action collective
Action de formation collective financée par l'État:
tags: [DE, État, collectif]
rules: action collective
Si c'est un demandeur d'emploi
Et le code CERTIFINFO de la formation vaut 84385
Alors le financement est éligible
Et appliquer les règles «AREF-RFPE»
Et appliquer les règles «AREF-RFPE-RPS»
Et le texte de la prise en charge vaut «Formation totalement financée si validée par Pôle emploi.»
Et le texte de description vaut «L'aide individuelle à la formation "artisan" permet de couvrir le coût du stage de préparation à l'installation (le SPI).⏎Le SPI est obligatoire pour toute personne sollicitant une immatriculation auprès d'une chambre de métiers et de l'artisanat dans le cadre d'un projet de création ou de reprise d'entreprise.»
Et le texte des démarches vaut «Assurez-vous auprès de la chambre des métiers et de l'artisanat (http://www.artisanat.fr/portals/0/annuaire/annuaire.html) que la formation est bien obligatoire et préalable à l'installation comme artisan.⏎Le financement par le biais de cette aide individuelle à la formation - Artisan (AIF Artisan) n'est possible que si le devis présenté à Pôle emploi du Stage préparatoire à l'installation d'une entreprise artisanale correspond précisément au montant exact de l'aide (195,18 € pour 2018).»
Si c'est un demandeur d'emploi
Et c'est une formation ouverte aux bénéficiaires individuels
Et ce n'est pas une préparation opérationnelle à l'emploi collective
Et la liste des codes FORMACODE de la formation ne contient aucun des codes parmi [15064,13250,44091]
Et la liste des codes FORMACODE de la formation ne contient aucun code parmi [15064,13250,44091]
Et le code CERTIFINFO de la formation ne fait pas partie de [54664,84385]
Et ce n'est pas un contrat d'apprentissage
Et ce n'est pas un contrat de professionnalisation
......@@ -11,7 +11,7 @@ Et le nombre d'heures en entreprise n'est pas supérieur à 30% de la durée en
Alors le texte de la prise en charge vaut «Formation totalement financée si validée par Pôle emploi.»
Et le texte de description vaut «L’Aide individuelle à la formation est réservée à des projets de formation dont la pertinence est validée par votre conseiller référent emploi, en fonction de votre projet professionnel et du marché du travail.⏎Les formations financées par Pôle emploi doivent permettre un retour rapide à l'emploi.»
Et le texte des démarches vaut «1. Contactez un conseiller Pôle emploi pour connaître les conditions de la mobilisation éventuelle d'une aide individuelle de Pole emploi dans votre région.⏎2. Votre projet de formation et son financement doivent être présentés bien en amont du début de la formation (au plus tard 15 jours avant).⏎3. Ne démarrez pas votre formation tant que vous n'avez pas eu la confirmation de l'accord de la part de votre conseiller.»
Et appliquer les règles «AREF-RFPE»
Et appliquer les règles «AREF-RFPE-RPS»
Si la région du bénéficiaire ne fait pas partie de [«Corse»,«Nouvelle-Aquitaine»,«Provence-Alpes-Côte d'Azur»,«Occitanie»,«Hauts-de-France»,«Normandie»,«Guadeloupe»,«Auvergne-Rhône-Alpes»,«La Réunion»,«Mayotte»,«Centre-Val de Loire»,«Île-de-France»,«Bourgogne-Franche-Comté»]
Alors le financement est éligible
......
......@@ -10,4 +10,4 @@ Si l'allocation du bénéficiaire est «allocation d'aide au retour à l'emploi
Alors la RFF applicable est égale au montant de la RFF en vigueur
Si l'allocation du bénéficiaire n'est pas «allocation d'aide au retour à l'emploi»
Alors appliquer les règles «RFPE»
Alors appliquer les règles «RFPE-RPS»
......@@ -6,7 +6,7 @@ Et c'est un travailleur handicapé
Et c'est un demandeur d'emploi
Et ce n'est pas une préparation opérationnelle à l'emploi collective
Alors le financement est éligible
Et appliquer les règles «AREF-RFPE»
Et appliquer les règles «AREF-RFPE-RPS»
Et le texte des démarches vaut «Contactez un conseiller emploi pour connaitre les conditions de la mobilisation éventuelle d'une aide individuelle de l'Agefiph.»
Et le texte de description vaut «L'Agefiph propose une participation au financement du coût d’une formation individuelle offrant des perspectives réelles et sérieuses d'accès à l'emploi.»
Et le texte de la prise en charge vaut «Formation totalement ou partiellement financée»
......@@ -3,7 +3,7 @@ Et le solde CPF du bénéficiaire est supérieur à 0
Et ce n'est pas un contrat de professionnalisation
Et ce n'est pas un contrat d'apprentissage
# TODO use formation VAE instead?
Et la liste des codes FORMACODE de la formation ne contient aucun des codes parmi [15064,44591]
Et la liste des codes FORMACODE de la formation ne contient aucun code parmi [15064,44591]
Si la région du bénéficiaire fait partie des régions éligibles COPAREF
Ou c'est une formation éligible COPANEF
Alors le financement est éligible
......
Si le financement est de type «AIF»
Si la liste des codes FORMACODE de la formation ne contient aucun des codes parmi [31802,31805,31847,31827,31833,43409,43436,43339,43441,43448,43454,44004,44028,44054,15064,44591]
Si la liste des codes FORMACODE de la formation ne contient aucun code parmi [31802,31805,31847,31827,31833,43409,43436,43339,43441,43448,43454,44004,44028,44054,15064,44591]
Et le code CERTIFINFO de la formation ne fait pas partie de [54912,84385,87185,87187,87189,83899]
Et la liste des domaines FORMACODE de la formation ne contient pas 150
Et la durée en mois de la formation n'est pas supérieure à 12
......
Si le financement est de type «AIF»
# TODO libellé contient "permis"
Si la liste des codes FORMACODE de la formation ne contient aucun des codes parmi [43448,43436,43441,43454,44004,44028,44054]
Si la liste des codes FORMACODE de la formation ne contient aucun code parmi [43448,43436,43441,43454,44004,44028,44054]
Et le code CERTIFINFO de la formation ne fait pas partie de [54912,54913,54917,87185,87187,25467]
Alors le financement est éligible
Et le texte de la prise en charge vaut «Formation totalement prise en charge, sous réserve d'acceptation par Pôle emploi»
Si le financement est de type «AIF»
Si la liste des codes FORMACODE de la formation ne contient aucun des codes parmi [14406,14407,14426,14428,14447,14449,14477,15450,15452,43425,43428,43438,43442,43444,43445,14403,14405,14406,14407,14411,14414,14420,14423,14426,14428,14435,14441,14447,14450,14454,14456,14475,14477,14484,14489,14490,14496,14497,14498,42001,42020,42030,42032,42034,42052,43418,42101,31812,31816,31804,31805,31811,31795,31826,42811,24049,24130,23603,50545,43454,44054,31801,31812,43409,44002,15094,15073,13030,31795,31768,31706,31715,31747,31826,42811,24049,24130,22603,42101,42102,42103,42105,42106,42108,42108,42109,42110,44067,23014,23015,23016,31828,21546,72412,71954,71909,71905,71906,71904,71908,71907,71901,71903,71902,71910,70154,70254,70201,70202,70203,70204,72554,72501,72503,72502,72754,72740,72742,72741,72710,72713,72712,72714,72711,72730,72720,72721,71854,71803,71802,71804,70354,70310,70311,70312,70313,70320,70321,70322,70323,70330,70332,70333,70454,70401,70402,71454,71401,71402,71408,71404,71410,71403,71409,71405,71407,71406,70554,70501,70502,70503,70504,72854,70654,70601,70602,70604,70603,72254,72201,72202,70754,70701,70702,70710,70712,70711,70703,70704,70705,70706,70707,70854,70801,70954,70901,71054,71001,71002,71154,71110,71111,71115,71113,71114,71140,71141,71142,71143,71144,71120,71121,71123,71125,71126,71127,71130,71131,71135,71132,71134,71133,71754,71701,71254,71201,71202,71203,71204,71205,71354,71301,71302,71303,71304,71305,71554,71501,71502,71503,71504,71505,71506,71507,72054,72001,72002,72154,72101,72102,71654,71630,71632,71631,71633,71670,71620,71660,71661,71640,71610,71613,71614,71611,71612,71616,71615,72654,72601,72603,72602,72354,72310,72311,72313,72312,72320,72321,72330,72331,49616,65960,55673,55674,55675,55676,55677,55803,55804,55805,55806,55807,55808,55809,55810,55811,55812,55813,55814,55815,55816,55817,55818,55819,55820,55822,55821,55823,55824,55825,55826,55827,84700,84449,84700,84715,85312,85338,31801,31812,43409,44002,15094,15073,13030]
Si la liste des codes FORMACODE de la formation ne contient aucun code parmi [14406,14407,14426,14428,14447,14449,14477,15450,15452,43425,43428,43438,43442,43444,43445,14403,14405,14406,14407,14411,14414,14420,14423,14426,14428,14435,14441,14447,14450,14454,14456,14475,14477,14484,14489,14490,14496,14497,14498,42001,42020,42030,42032,42034,42052,43418,42101,31812,31816,31804,31805,31811,31795,31826,42811,24049,24130,23603,50545,43454,44054,31801,31812,43409,44002,15094,15073,13030,31795,31768,31706,31715,31747,31826,42811,24049,24130,22603,42101,42102,42103,42105,42106,42108,42108,42109,42110,44067,23014,23015,23016,31828,21546,72412,71954,71909,71905,71906,71904,71908,71907,71901,71903,71902,71910,70154,70254,70201,70202,70203,70204,72554,72501,72503,72502,72754,72740,72742,72741,72710,72713,72712,72714,72711,72730,72720,72721,71854,71803,71802,71804,70354,70310,70311,70312,70313,70320,70321,70322,70323,70330,70332,70333,70454,70401,70402,71454,71401,71402,71408,71404,71410,71403,71409,71405,71407,71406,70554,70501,70502,70503,70504,72854,70654,70601,70602,70604,70603,72254,72201,72202,70754,70701,70702,70710,70712,70711,70703,70704,70705,70706,70707,70854,70801,70954,70901,71054,71001,71002,71154,71110,71111,71115,71113,71114,71140,71141,71142,71143,71144,71120,71121,71123,71125,71126,71127,71130,71131,71135,71132,71134,71133,71754,71701,71254,71201,71202,71203,71204,71205,71354,71301,71302,71303,71304,71305,71554,71501,71502,71503,71504,71505,71506,71507,72054,72001,72002,72154,72101,72102,71654,71630,71632,71631,71633,71670,71620,71660,71661,71640,71610,71613,71614,71611,71612,71616,71615,72654,72601,72603,72602,72354,72310,72311,72313,72312,72320,72321,72330,72331,49616,65960,55673,55674,55675,55676,55677,55803,55804,55805,55806,55807,55808,55809,55810,55811,55812,55813,55814,55815,55816,55817,55818,55819,55820,55822,55821,55823,55824,55825,55826,55827,84700,84449,84700,84715,85312,85338,31801,31812,43409,44002,15094,15073,13030]
Et le code CERTIFINFO de la formation ne fait pas partie de [49616,65960]
Et la durée en heures de la formation n'est pas inférieure à 20, ou ce n'est pas une formation ouverte à distance
Et le code AIS de la formation n'est pas «Création d'entreprise»
......
Si le financement est de type «AIF»
Si la liste des codes FORMACODE de la formation ne contient aucun des codes parmi [42030,42034,31812,31811,43445,43448,43433,43438,43409,44002,14456,15084,15093]
Si la liste des codes FORMACODE de la formation ne contient aucun code parmi [42030,42034,31812,31811,43445,43448,43433,43438,43409,44002,14456,15084,15093]
Et le code CERTIFINFO de la formation ne fait pas partie de [87185,87187,87189]
Et la durée hebdomadaire de la formation n'est pas inférieure à 30
Alors le financement est éligible
......
Si le financement est de type «AIF»
Alors le plafond financier applicable vaut 1500
Si la liste des codes FORMACODE de la formation ne contient aucun des codes parmi [44591,15081]
Si la liste des codes FORMACODE de la formation ne contient aucun code parmi [44591,15081]
Alors le financement est éligible
Et le texte de la prise en charge vaut «Formation financée jusqu'à 1500 € maximum»
Si le financement est de type «AIF»
Alors le texte de la prise en charge vaut «L'AIF permet une prise en charge des frais pédagogiques mais ne couvre pas les frais annexes (droits d'inscription, acquisition de matériels, frais de passage d'examen…).⏎L’AIF peut être attribuée quelle que soit la modalité pédagogique de la formation, y compris pour une formation à distance (FOAD) ou pour une formation en cours du soir.»
Si la liste des codes FORMACODE de la formation ne contient aucun des codes parmi [43441]
Si la liste des codes FORMACODE de la formation ne contient aucun code parmi [43441]
Et le code CERTIFINFO de la formation ne fait pas partie de [54913,54912]
Alors le financement est éligible
Et le plafond financier applicable vaut 2500
Si le financement est de type «AIF»
Si la liste des codes FORMACODE de la formation ne contient aucun des codes parmi [13030,15073,43409,44002,42793]
Si la liste des codes FORMACODE de la formation ne contient aucun code parmi [13030,15073,43409,44002,42793]
Et le code CERTIFINFO de la formation ne fait pas partie de [54912,84385,87185,87187,87189,83899]
Et la liste des domaines FORMACODE de la formation ne contient pas 150
Et la durée en mois de la formation n'est pas supérieure à 12, ou ce n'est pas une formation ouverte à distance
Et ce n'est pas un permis B
# Autres permis
Et la liste des codes FORMACODE de la formation ne contient aucun des codes parmi [31805,31816,31833,31854]
Et la liste des codes FORMACODE de la formation ne contient aucun code parmi [31805,31816,31833,31854]
# permis d'exploitation et permis CE
Et le code CERTIFINFO de la formation ne fait pas partie de [87805,81306]
Alors le financement est éligible
......
Si le financement est de type «AIF»
Si la liste des codes FORMACODE de la formation ne contient aucun des codes parmi [43448,43436,31815,43441,44041,31815,43454,44054,43409,44041,31802,31854,31805,31827,31833,31815,43454,44054,43409,31734,32050,43438,43438,43438,42003,42030,42050,42060,46061,43445,43425,14449,42020,42093]
Si la liste des codes FORMACODE de la formation ne contient aucun code parmi [43448,43436,31815,43441,44041,31815,43454,44054,43409,44041,31802,31854,31805,31827,31833,31815,43454,44054,43409,31734,32050,43438,43438,43438,42003,42030,42050,42060,46061,43445,43425,14449,42020,42093]
Et le code CERTIFINFO de la formation ne fait pas partie de [49616,23710,55676,83419,96173,83899]
Et la liste des domaines FORMACODE de la formation ne contient pas 150, ou la liste des codes FORMACODE de la formation contient au moins un code parmi [15009,15015]
Alors le financement est éligible
......
Si la durée en heures de la formation est inférieure ou égale à 400, ou la durée en mois de la formation est supérieur à 12
Et la durée hebdomadaire de la formation n'est pas inférieure ou égale à 21
Et la liste des codes FORMACODE de la formation ne contient aucun des codes parmi [31826,31795,31768,31747,31709,31715,31717,31708,31828,24069,24066,43409,44002,15073,13030,43448,43457,43456,43439,43449,43490,43491,43493,43497,43092,43436,43441,31815,43006,44092,44008,44084,44083,44050,44092,434436,43425,43428,43430,43433,43445,43442,43438,43443,43444,43490,43442,14447,14407,14426,14456]
Et la liste des codes FORMACODE de la formation ne contient aucun code parmi [31826,31795,31768,31747,31709,31715,31717,31708,31828,24069,24066,43409,44002,15073,13030,43448,43457,43456,43439,43449,43490,43491,43493,43497,43092,43436,43441,31815,43006,44092,44008,44084,44083,44050,44092,434436,43425,43428,43430,43433,43445,43442,43438,43443,43444,43490,43442,14447,14407,14426,14456]
Et le code CERTIFINFO de la formation ne fait pas partie de [87805,49616,23710,54660,81306,78281,54664,54662,81136]
Si la liste des domaines FORMACODE de la formation ne contient pas 150
Ou la liste des codes CPF de la formation contient 201
......
......@@ -4,7 +4,7 @@ Si le financement est de type «AIF»
Si le niveau scolaire du bénéficiaire ne fait pas partie de [«I»,«II»,«III»,«IV»]
Et la liste des domaines FORMACODE de la for