Skip to content
Snippets Groups Projects
Unverified Commit bac7ffda authored by vmaubert's avatar vmaubert Committed by GitHub
Browse files

feat(openfisca): ajoute l’utilitaire pour utiliser l’API Openfisca (#596)

parent 67643c3a
Branches
Tags
No related merge requests found
......@@ -36,6 +36,9 @@ ACTIVITES_RAPPORTS_EMAIL=email@domaine.com
# API de détection d'intersection avec les communes
API_GEO_URL=""
# API Openfisca
API_OPENFISCA_URL=""
# url du serveur (docker-compose)
URL=""
......
import 'dotenv/config'
import { redevanceCommunaleMinesAurifiereGet } from '../src/tools/api-openfisca'
async function main() {
const result = await redevanceCommunaleMinesAurifiereGet(
[
{
id: 'or compagnie',
orNet: {
2019: 1000,
2018: 1000
}
}
],
[2020, 2019]
)
console.info(result)
process.exit()
}
main()
import fetch from 'node-fetch'
import errorLog from '../error-log'
interface IOpenfiscaBody {
societes: {
[titreId: string]: {
// eslint-disable-next-line camelcase
quantite_aurifere_kg: {
[annee: string]: number | null
}
// eslint-disable-next-line camelcase
redevance_communale_des_mines_aurifere_kg: {
[annee: string]: number | null
}
}
}
}
const apiOpenfiscaFetch = async (body: IOpenfiscaBody) => {
try {
const apiOpenfiscaUrl = process.env.API_OPENFISCA_URL
if (!apiOpenfiscaUrl) {
throw new Error(
"impossible de se connecter à l'API Openfisca car la variable d'environnement est absente"
)
}
const response = await fetch(`${apiOpenfiscaUrl}/calculate`, {
method: 'post',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(body)
})
const result = (await response.json()) as IOpenfiscaBody
if (response.status >= 400) {
throw result
}
return result
} catch (e) {
const properties = JSON.stringify(body)
errorLog(`apiOpenfiscaFetch ${properties}`, e.error || e.message || e)
return null
}
}
/**
* Calcule la redevance communale des mines aurifères
* @param entreprises - liste des entreprises avec leur production d’or net en gramme par année
* @param annees - liste des années sur lesquelles on souhaite calculer la redevance
* @return la redevance à payer par entreprise et par année
*/
const redevanceCommunaleMinesAurifiereGet = async (
entreprises: {
id: string
orNet: { [annee: string]: number }
}[],
annees: number[]
) => {
// construction de l’objet qui permet de dire à Openfisca ce que l’on souhaite récupérer
const redevanceCommunaleDesMinesAurifereKg = annees.reduce((acc, annee) => {
acc[annee] = null
return acc
}, {} as { [annee: string]: null })
const societes: IOpenfiscaBody = entreprises.reduce(
(acc, entreprise) => {
// conversion des grammes en kilogrammes
const orNetKg = Object.keys(entreprise.orNet).reduce(
(orNetKg, annee) => ({
...orNetKg,
[annee]: entreprise.orNet[annee] / 1000
}),
{}
)
acc.societes[entreprise.id] = {
quantite_aurifere_kg: orNetKg,
redevance_communale_des_mines_aurifere_kg: redevanceCommunaleDesMinesAurifereKg
}
return acc
},
{ societes: {} } as IOpenfiscaBody
)
const result = (await apiOpenfiscaFetch(societes))?.societes
if (result) {
return Object.keys(result).reduce((acc, societe) => {
acc[societe] = result[societe].redevance_communale_des_mines_aurifere_kg
return acc
}, {} as { [entrepriseId: string]: { [annee: string]: number | null } })
}
return null
}
export { redevanceCommunaleMinesAurifiereGet }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment