diff --git a/api/source/openapi.yaml b/api/source/openapi.yaml
index 52dcc1127..b7629a40e 100644
--- a/api/source/openapi.yaml
+++ b/api/source/openapi.yaml
@@ -11,4 +11,52 @@ info:
servers:
- url: /api/v1/
-paths: {}
+paths:
+ /evaluate:
+ post:
+ requestBody:
+ content:
+ application/json:
+ examples:
+ SalaireBrutEnNet:
+ value:
+ {
+ 'situation':
+ {
+ 'contrat salarié . rémunération . brut de base':
+ { 'valeur': 4200, 'unité': '€ / mois' },
+ 'contrat salarié': "'CDI'",
+ },
+ 'expressions': ['contrat salarié . rémunération . net'],
+ }
+ MicroEntreprise:
+ value:
+ {
+ situation:
+ {
+ "dirigeant . auto-entrepreneur . chiffre d'affaires": '42000 €/an',
+ 'entreprise . activité': "'libérale'",
+ 'entreprise . activité . libérale réglementée': 'non',
+ 'entreprise . catégorie juridique': "'EI'",
+ 'entreprise . catégorie juridique . EI . auto-entrepreneur': 'oui',
+ 'dirigeant . auto-entrepreneur . impôt . versement libératoire': 'non',
+ 'impôt . méthode de calcul': "'taux neutre'",
+ },
+ expressions:
+ [
+ {
+ 'valeur': 'dirigeant . auto-entrepreneur . cotisations et contributions',
+ 'unité': '€/an',
+ },
+ 'dirigeant . rémunération . impôt',
+ 'dirigeant . auto-entrepreneur . net après impôt',
+ ],
+ }
+ /rules/{rule}:
+ get:
+ parameters:
+ - examples:
+ SalaireNet:
+ value: 'contrat salarié . rémunération . net'
+ Impot:
+ value: 'impôt . méthode de calcul'
diff --git a/api/source/utils.ts b/api/source/utils.ts
index 45417e99c..fc7783a45 100644
--- a/api/source/utils.ts
+++ b/api/source/utils.ts
@@ -31,6 +31,13 @@ export function mergeDeep(
target[key] as Record,
source[key] as Record
)
+ } else if (Array.isArray(target[key]) && Array.isArray(source[key])) {
+ return (target[key] as unknown[]).map((el, i) =>
+ mergeDeep(
+ el as Record,
+ (source[key] as unknown[])[i] as Record
+ )
+ ) as unknown as Record
} else {
Object.assign(target, { [key]: source[key] })
}
diff --git a/site/source/locales/ui-en.yaml b/site/source/locales/ui-en.yaml
index 2d2169b1e..2be0f833b 100644
--- a/site/source/locales/ui-en.yaml
+++ b/site/source/locales/ui-en.yaml
@@ -1139,17 +1139,14 @@ pages:
this API?2><3>The my-company api is totally open and without
authentication, it is composed of 3 routes inspired by the methods of the
Publicodes interpreter: <1>/evaluate1>, <4>/rules4> and
- <7>/rules/:rule7>.3><4><0>What is Publicodes?0><1>It is a
- declarative language developed by beta.gouv.fr and the Urssaf to encode
- public interest algorithms.<1>1>All our calculation rules are written in
- this language.<3>3><4>Learn more about publicodes4>1>4><5>POST
- /evaluate5><6>Allows to evaluate the expressions of publicode with a
- given situation<1>1>You will find more info on the structure of the JSON
- to send on our <4>Swagger4>.6><7>GET /rules7><8>Retrieve all
- publicode rules8><9>GET /rules/:rule9><10>Retrieve a publicodes
- rule10><11>Example11><12>Here is an example of how to use the
- different routes, you can explore their code in the
- <1>example1>folder12><13><0>0>13>"
+ <7>/rules/:rule7>.<9>9><10>10>Find more information on our
+ <13>Swagger UI13>.<15>15>3><4><0>What is Publicodes?0><1>It is a
+ declarative language developed by beta.gouv.fr and Urssaf to encode public
+ interest algorithms.<1>1>All our calculation rules are therefore written
+ in this language.<3>3><4>Learn more about
+ publicodes4>1>4><5>Example5><6>Here is an example of how to use
+ the different routes, you can explore their code in the
+ <1>example1>folder6><7><0>0>7>"
bibliothèque: "<0>Integrate our calculation library0><1>If you think that your
website or service would benefit from displaying salary calculations, for
example switching from gross to net salary, good news: all the tax and
diff --git a/site/source/locales/ui-fr.yaml b/site/source/locales/ui-fr.yaml
index 483c5b6f1..c00b5ef03 100644
--- a/site/source/locales/ui-fr.yaml
+++ b/site/source/locales/ui-fr.yaml
@@ -903,18 +903,14 @@ pages:
mon-entreprise est totalement ouverte et sans authentification, elle se
compose de 3 routes qui s'inspirent des méthodes de l'interpréteur
Publicodes : <1>/evaluate1>, <4>/rules4> et
- <7>/rules/:rule7>.3><4><0>Qu'est ce que Publicodes ?0><1>C'est un
- language déclaratif développé par beta.gouv.fr et l'Urssaf pour encoder
- des algorithmes d'intérêt public.<1>1>Toutes nos règles de calculs sont
- donc écrites dans ce language.<3>3><4>En savoir plus sur
- publicodes4>1>4><5>POST /evaluate5><6>Permet d'évaluer les
- expressions de publicode avec une situation donnée<1>1>Vous trouverez
- plus d'infos sur la structure du JSON à envoyer sur notre
- <4>Swagger4>.6><7>GET /rules7><8>Permet de récupérer toutes les
- règles publicodes8><9>GET /rules/:rule9><10>Permet de récupérer une
- règle publicodes10><11>Exemple11><12>Voici un exemple d'utilisation
- des différentes routes, vous pouvez explorer leur code dans le dossier
- <1>example1>12><13><0>0>13>"
+ <7>/rules/:rule7>.<9>9><10>10>Retrouvez plus d'informations sur
+ notre <13>Swagger UI13>.<15>15>3><4><0>Qu'est ce que Publicodes
+ ?0><1>C'est un language déclaratif développé par beta.gouv.fr et
+ l'Urssaf pour encoder des algorithmes d'intérêt public.<1>1>Toutes nos
+ règles de calculs sont donc écrites dans ce language.<3>3><4>En savoir
+ plus sur publicodes4>1>4><5>Exemple5><6>Voici un exemple
+ d'utilisation des différentes routes, vous pouvez explorer leur code dans
+ le dossier <1>example1>6><7><0>0>7>"
bibliothèque: "<0>Intégrez notre bibliothèque de calcul0><1>Si vous pensez que
votre site ou service gagnerait à afficher des calculs de salaire, par
exemple passer du salaire brut au salaire net, bonne nouvelle : tous les
diff --git a/site/source/pages/integration/API.tsx b/site/source/pages/integration/API.tsx
index 4b5987174..adad13516 100644
--- a/site/source/pages/integration/API.tsx
+++ b/site/source/pages/integration/API.tsx
@@ -33,6 +33,11 @@ export default function API() {
l'interpréteur Publicodes : /evaluate,{' '}
/rules et{' '}
/rules/:rule.
+
+
+ Retrouvez plus d'informations sur notre{' '}
+ Swagger UI.
+
- Permet d'évaluer les expressions de publicode avec une situation
- donnée
-
- Vous trouverez plus d'infos sur la structure du JSON à envoyer sur
- notre{' '}
- Swagger.
- Permet de récupérer toutes les règles publicodesPermet de récupérer une règle publicodes
Voici un exemple d'utilisation des différentes routes, vous pouvez