Améliore la recherche du code APE
- Ajoute les mots clés artisans du guichet unique - Supprime les niveau 1 et niveau 2 pour la recherche du code ape (trop générique) - Affiche les informations des des catégories du guichet unique pour un code APE dédié - Nettoie et déplace les scriptspull/2568/head
parent
09e6e46e24
commit
cb822f40eb
|
@ -7,11 +7,11 @@
|
|||
},
|
||||
"type": "module",
|
||||
"workspaces": [
|
||||
"scripts",
|
||||
"modele-social",
|
||||
"exoneration-covid",
|
||||
"api",
|
||||
"site",
|
||||
"site/scripts/NAFAndGuichetData",
|
||||
"server"
|
||||
],
|
||||
"scripts": {
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,3 +0,0 @@
|
|||
## Description
|
||||
|
||||
Assemble les données des codes APE (dans `données-NAF-CPF-APE`), les descriptions des nomenclatures du Guichet (dans `données-NomenclatureGuichet`) et le nombre d’établissements par code APE (dans `nombre-etablissements-par-code-ape`) dans un seul fichier json.
|
|
@ -16,18 +16,27 @@ export const pagesToPrerender: {
|
|||
infrance: string[]
|
||||
} = {
|
||||
'mon-entreprise': [
|
||||
sitePathFr.index,
|
||||
sitePathFr.assistants['choix-du-statut'].index,
|
||||
sitePathFr.simulateurs.index,
|
||||
sitePathFr.simulateurs.salarié,
|
||||
sitePathFr.simulateurs['chômage-partiel'],
|
||||
sitePathFr.simulateurs['auto-entrepreneur'],
|
||||
sitePathFr.simulateurs.indépendant,
|
||||
sitePathFr.simulateurs.sasu,
|
||||
sitePathFr.simulateurs['artiste-auteur'],
|
||||
'/iframes/pamc',
|
||||
'/iframes/simulateur-embauche',
|
||||
'/iframes/simulateur-independant',
|
||||
'/iframes/pamc',
|
||||
sitePathFr.assistants['choix-du-statut'].index,
|
||||
sitePathFr.index,
|
||||
sitePathFr.simulateurs.comparaison,
|
||||
sitePathFr.simulateurs.dividendes,
|
||||
sitePathFr.simulateurs.eurl,
|
||||
sitePathFr.simulateurs.indépendant,
|
||||
sitePathFr.simulateurs.index,
|
||||
sitePathFr.simulateurs.is,
|
||||
sitePathFr.simulateurs.salarié,
|
||||
sitePathFr.simulateurs.sasu,
|
||||
sitePathFr.simulateurs['artiste-auteur'],
|
||||
sitePathFr.simulateurs['auto-entrepreneur'],
|
||||
sitePathFr.simulateurs['chômage-partiel'],
|
||||
sitePathFr.simulateurs['coût-création-entreprise'],
|
||||
sitePathFr.simulateurs['entreprise-individuelle'],
|
||||
sitePathFr.simulateurs['profession-libérale'].avocat,
|
||||
sitePathFr.simulateurs['profession-libérale']['chirurgien-dentiste'],
|
||||
sitePathFr.simulateurs['profession-libérale'].index,
|
||||
].map((val) => encodeURI(val)),
|
||||
infrance: [
|
||||
sitePathEn.index,
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
## Description
|
||||
|
||||
Assemble les données des codes APE, les descriptions des nomenclatures du Guichet et le nombre d’établissements par code APE dans un seul fichier json.
|
|
@ -2,17 +2,17 @@ import { writeFileSync } from 'fs'
|
|||
import { join } from 'path'
|
||||
import { fileURLToPath } from 'url'
|
||||
|
||||
import { Data as RawApeData } from '../données-NAF-CPF-APE/convert-pdf.js'
|
||||
import rawApeData from '../données-NAF-CPF-APE/output.json' assert { type: 'json' }
|
||||
import rawApeTags from '../données-NomenclatureGuichet/ape_tags.json' assert { type: 'json' }
|
||||
import { Out as NbEtablissementsData } from '../nombre-etablissements-par-code-ape/convert-json.js'
|
||||
import rawApeTags from '../NomenclatureGuichet/ape_tags.json' assert { type: 'json' }
|
||||
import { Data as RawApeData } from '../extract-NAF-data/convert-pdf.js'
|
||||
import rawApeData from '../extract-NAF-data/output.json' assert { type: 'json' }
|
||||
import { Out as NbEtablissementsData } from '../nombre-etablissements-par-code-ape/fetch-json.js'
|
||||
import rawEtablissementsData from '../nombre-etablissements-par-code-ape/output.json' assert { type: 'json' }
|
||||
import { customTags } from './custom-tags.js'
|
||||
import { multipleCf } from './custom.js'
|
||||
|
||||
const __dirname = fileURLToPath(new URL('.', import.meta.url))
|
||||
|
||||
const OUTPUT_JSON_PATH = join(__dirname, './output.json')
|
||||
const OUTPUT_MIN_JSON_PATH = join(__dirname, './output.min.json')
|
||||
|
||||
const apeData = rawApeData as RawApeData[]
|
||||
const etablissementsData = rawEtablissementsData as NbEtablissementsData
|
||||
|
@ -88,10 +88,15 @@ const output: Output = {
|
|||
title,
|
||||
data,
|
||||
contenuCentral: contenuCentral.concat(
|
||||
apeTags[codeApe]?.filter((el) => el) ?? []
|
||||
apeTags[codeApe]?.filter((el) => el) ?? [],
|
||||
customTags[codeApe]?.contenuCentral ?? []
|
||||
),
|
||||
contenuAnnexe: contenuAnnexe.concat(
|
||||
customTags[codeApe]?.contenuAnnexe ?? []
|
||||
),
|
||||
contenuExclu: contenuExclu.concat(
|
||||
customTags[codeApe]?.contenuExclu ?? []
|
||||
),
|
||||
contenuAnnexe,
|
||||
contenuExclu,
|
||||
}
|
||||
}
|
||||
),
|
||||
|
@ -142,4 +147,3 @@ output.apeData = output.apeData.map(
|
|||
)
|
||||
|
||||
writeFileSync(OUTPUT_JSON_PATH, JSON.stringify(output, null, 2))
|
||||
writeFileSync(OUTPUT_MIN_JSON_PATH, JSON.stringify(output))
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,24 @@
|
|||
# Traitement des tables de référence du Guichet Unique
|
||||
|
||||
Guichet unique défini sa propre nomenclature d’activité, différente de la Naf de l’INSEE, pour des raisons pas forcément très justifiées (selon l’auteur de ces lignes). On a donc deux codes pour une même entreprise, attribuées par des acteurs séparés, ce qui peut aboutir à incompatibilité et de nombreux problèmes de mise à jour.
|
||||
|
||||
Par conséquSent, nous avons choisi de nous appuyer en premier sur la classification Insee sur les assistants mon-entreprise. En effet, cette dernière a l’avantage d’être bien documentée et très connue des usagers et usagères. C’est une fois le code NAF renseigné que nous demandons éventuellement des précisions, afin de déterminer la classification du guichet unique parmis celles compatibles.
|
||||
|
||||
Ce dossier contient ainsi les scripts qui transforment et traitent les données issues du fichier de référence NomenclatureGuichet pour l’utilisation dans les assistants de mon-entreprise.
|
||||
|
||||
## D’où vient le fichier NomenclatureGuichet ?
|
||||
|
||||
Le fichier est mis à jour par les responsables de Guichet unique. On peut le trouver sur Resana. Il est possible de demander à l’Urssaf l’accès à ce fichier.
|
||||
|
||||
|
||||
## Quels traitements sont effectués ?
|
||||
|
||||
- Ajout de tags présents dans GuichetUnique pour améliorer la recherche de code APE (fichier `ape_tags.json`)
|
||||
- Création de la table de liaison entre code APE et code Guichet (fichier `ape_to_guichet.json`)
|
||||
- Extraction des informations pertinentes sur l’activité (imposition, affiliation, nature d’activité, micro-entreprise possible) dans le fichier `activites_guichet.json`
|
||||
|
||||
### Prétraitement
|
||||
|
||||
À noter : le CSV original étant particulièrement à l’arrache, nous devons effectuer quelques étapes de pré-traitement manuel pour que le script `convert` fonctionne :
|
||||
|
||||
- Ajout du header `Métiers d’art` juste après `Encodage ACOSS` : en effet, seule les headers de la seconde ligne du fichier sont utilisés.
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,99 @@
|
|||
import { Activity, CodeGuichet } from './extract.js'
|
||||
|
||||
/**
|
||||
* The type `GuichetEntry` defines the properties and their types for a data entry of the Guichet Unique classification.
|
||||
*/
|
||||
type GuichetEntry = {
|
||||
/**
|
||||
* This property represents the main affiliation of a business or individual with a social security
|
||||
* organization. It can have one of three possible values: 'MSA' (Mutualité Sociale Agricole), 'ACOSS'
|
||||
* (Agence Centrale des Organismes de Sécurité Sociale) or ENIM (le régime social des marins)
|
||||
*/
|
||||
affiliationPrincipale: 'MSA' | 'ACOSS' | 'ENIM'
|
||||
catégorieActivité:
|
||||
| 'AGENT COMMERCIAL'
|
||||
| 'AGRICOLE'
|
||||
| 'ARTISANALE_REGLEMENTEE'
|
||||
| 'ARTISANALE'
|
||||
| 'COMMERCIALE'
|
||||
| 'GESTION DE BIENS'
|
||||
| 'LIBERALE_NON_REGLEMENTEE'
|
||||
| 'LIBERALE_REGLEMENTEE'
|
||||
| undefined
|
||||
typeBénéfice: 'BNC' | 'BIC' | 'BA'
|
||||
artisteAuteurPossible: boolean
|
||||
caisseDeRetraiteSpéciale:
|
||||
| Exclude<Activity['Caisse de retraite spéciale'], ''>
|
||||
| false
|
||||
code: string
|
||||
label: {
|
||||
niv1: string
|
||||
niv2: string
|
||||
niv3: string
|
||||
niv4: string | null
|
||||
}
|
||||
}
|
||||
|
||||
function getCatégorieActivité(
|
||||
activity: Activity
|
||||
): GuichetEntry['catégorieActivité'] {
|
||||
const formeActivitéEffectifsRéduits =
|
||||
activity[
|
||||
'Forme exercice Activité si effectif < 11 (hors prolongement agricole)'
|
||||
]
|
||||
const formeActivitéSansJQPA =
|
||||
activity[
|
||||
"Forme exercice d'activité si JQPA non revendiquée (hors proongement agricole)"
|
||||
]
|
||||
const formeActivité =
|
||||
formeActivitéEffectifsRéduits === 'Non applicable'
|
||||
? formeActivitéSansJQPA
|
||||
: formeActivitéEffectifsRéduits
|
||||
|
||||
return formeActivité.includes('AGRICOLE')
|
||||
? 'AGRICOLE'
|
||||
: formeActivité === 'Non applicable'
|
||||
? undefined
|
||||
: (formeActivité as GuichetEntry['catégorieActivité'])
|
||||
}
|
||||
|
||||
function getTypeBénéfice(activity: Activity): GuichetEntry['typeBénéfice'] {
|
||||
const microBenefice =
|
||||
activity[
|
||||
'si microEntreprise = true, déduction de regimeImpositionBenefices'
|
||||
]
|
||||
|
||||
return microBenefice.includes('BA')
|
||||
? 'BA'
|
||||
: microBenefice.includes('BNC')
|
||||
? 'BNC'
|
||||
: 'BIC'
|
||||
}
|
||||
|
||||
export function computeGuichet(
|
||||
activities: Array<Activity>
|
||||
): Record<CodeGuichet, GuichetEntry> {
|
||||
return activities.reduce((acc, activity) => {
|
||||
const catégorieActivité = getCatégorieActivité(activity)
|
||||
|
||||
acc[activity['Code final']] = {
|
||||
catégorieActivité,
|
||||
affiliationPrincipale:
|
||||
activity['Affiliation si principale (hors prolongement agricole)'],
|
||||
caisseDeRetraiteSpéciale:
|
||||
activity['Caisse de retraite spéciale'] || false,
|
||||
artisteAuteurPossible:
|
||||
activity['Encodage ACOSS'].includes('ArtisteAuteur'),
|
||||
typeBénéfice: getTypeBénéfice(activity),
|
||||
code: activity['Code final'],
|
||||
label: {
|
||||
niv1: activity['Niv. 1'],
|
||||
niv2: activity['Niv. 2'],
|
||||
niv3: activity['Niv. 3'],
|
||||
niv4: activity['Niv. 4'],
|
||||
},
|
||||
}
|
||||
|
||||
return acc
|
||||
}, {} as Record<CodeGuichet, GuichetEntry>)
|
||||
}
|
|
@ -0,0 +1,144 @@
|
|||
import parseCsv from 'csv-parser'
|
||||
import fs from 'fs'
|
||||
import { join } from 'path'
|
||||
import { fileURLToPath } from 'url'
|
||||
|
||||
import { computeGuichet } from './compute-guichet.js'
|
||||
|
||||
const FILENAME = 'NomenclatureGuichet_v1_32resana.csv'
|
||||
|
||||
const __dirname = fileURLToPath(new URL('.', import.meta.url))
|
||||
const results = [] as Array<Activity>
|
||||
|
||||
type CodeAPE = string
|
||||
|
||||
type FormeExercice =
|
||||
| 'ACTIF AGRICOLE'
|
||||
| 'AGENT COMMERCIAL'
|
||||
| 'AGRICOLE (NON ACTIF)'
|
||||
| 'ARTISANALE_REGLEMENTEE'
|
||||
| 'ARTISANALE'
|
||||
| 'COMMERCIALE'
|
||||
| 'GESTION DE BIENS'
|
||||
| 'LIBERALE_NON_REGLEMENTEE'
|
||||
| 'LIBERALE_REGLEMENTEE'
|
||||
| 'Non applicable'
|
||||
|
||||
export type CodeGuichet = string
|
||||
export type Activity = {
|
||||
'Niv. 1': string
|
||||
'Niv. 2': string
|
||||
'Niv. 3': string
|
||||
'Niv. 4': string
|
||||
"Métiers d'art": string
|
||||
'Code final': CodeGuichet
|
||||
'Codes APE compatibles': Array<CodeAPE>
|
||||
'Caisse de retraite spéciale':
|
||||
| 'CARDCF'
|
||||
| 'CARMF'
|
||||
| 'CARPIMKO'
|
||||
| 'CAVAMAC'
|
||||
| 'CAVEC'
|
||||
| 'CAVOM'
|
||||
| 'CAVP'
|
||||
| 'CIPAV'
|
||||
| 'CNBF'
|
||||
| 'CPRN'
|
||||
| ''
|
||||
'Affiliation si principale (hors prolongement agricole)':
|
||||
| 'MSA'
|
||||
| 'ACOSS'
|
||||
| 'ENIM'
|
||||
'Forme exercice Activité si effectif < 11 (hors prolongement agricole)': FormeExercice
|
||||
"Forme exercice d'activité si JQPA non revendiquée (hors proongement agricole)": FormeExercice
|
||||
'Forme exercice Activité si prolongement agricole': FormeExercice
|
||||
'Encodage ACOSS': string
|
||||
'si microEntreprise = true, déduction de regimeImpositionBenefices': string
|
||||
}
|
||||
|
||||
function computeAPETag(
|
||||
activities: Array<Activity>
|
||||
): Record<CodeAPE, Array<string>> {
|
||||
return Object.fromEntries(
|
||||
Object.entries(
|
||||
activities.reduce(
|
||||
(
|
||||
acc,
|
||||
{
|
||||
'Codes APE compatibles': codesAPE,
|
||||
'Niv. 3': niv3,
|
||||
'Niv. 4': niv4,
|
||||
"Métiers d'art": métiers,
|
||||
}
|
||||
) => {
|
||||
codesAPE.forEach((codeAPE) => {
|
||||
acc[codeAPE] ??= new Set()
|
||||
acc[codeAPE].add(niv3).add(niv4).add(métiers)
|
||||
})
|
||||
|
||||
return acc
|
||||
},
|
||||
{} as Record<CodeAPE, Set<string>>
|
||||
)
|
||||
).map(([key, value]) => [key, Array.from(value).filter(Boolean)])
|
||||
)
|
||||
}
|
||||
|
||||
function computeApeToGuichet(
|
||||
activities: Array<Activity>
|
||||
): Record<CodeAPE, Array<CodeGuichet>> {
|
||||
return activities.reduce(
|
||||
(acc, { 'Codes APE compatibles': codesAPE, 'Code final': codeGuichet }) => {
|
||||
codesAPE.forEach((codeAPE) => {
|
||||
acc[codeAPE] ??= []
|
||||
acc[codeAPE].push(codeGuichet)
|
||||
})
|
||||
|
||||
return acc
|
||||
},
|
||||
{} as Record<CodeAPE, Array<CodeGuichet>>
|
||||
)
|
||||
}
|
||||
|
||||
/* The following code reads a CSV file named `NomenclatureGuichet_v1_32resana.csv` using the `fs` module and
|
||||
`csv-parser` library. It then processes the data and writes the results to four different JSON
|
||||
files: `raw_output.json`, `ape_tags.json`, `ape_to_guichet.json` and `guichet.json`. */
|
||||
|
||||
fs.createReadStream(join(__dirname, FILENAME))
|
||||
.pipe(
|
||||
parseCsv({
|
||||
separator: ';',
|
||||
skipLines: 1,
|
||||
mapHeaders: ({ header }) =>
|
||||
(header.match(/.+?(?=\n)/)?.[0] ?? header).trim(),
|
||||
mapValues: ({ header, value }) =>
|
||||
(header === 'Codes APE compatibles' &&
|
||||
value
|
||||
.split(' ; ')
|
||||
.map((v: string) => v.trim())
|
||||
.filter(Boolean)) ||
|
||||
value,
|
||||
})
|
||||
)
|
||||
.on('data', (data) => results.push(data))
|
||||
.on('end', () => {
|
||||
fs.writeFileSync(
|
||||
join(__dirname, 'raw_output.json'),
|
||||
JSON.stringify(results, null, 2)
|
||||
)
|
||||
|
||||
fs.writeFileSync(
|
||||
join(__dirname, 'ape_tags.json'),
|
||||
JSON.stringify(computeAPETag(results), null, 2)
|
||||
)
|
||||
|
||||
fs.writeFileSync(
|
||||
join(__dirname, 'ape_to_guichet.json'),
|
||||
JSON.stringify(computeApeToGuichet(results), null, 2)
|
||||
)
|
||||
|
||||
fs.writeFileSync(
|
||||
join(__dirname, 'guichet.json'),
|
||||
JSON.stringify(computeGuichet(results), null, 2)
|
||||
)
|
||||
})
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,34 @@
|
|||
import { copyFileSync } from 'fs'
|
||||
import { join } from 'path'
|
||||
import { fileURLToPath } from 'url'
|
||||
|
||||
import { dataDir } from '../utils.js'
|
||||
|
||||
/* This code is copying three JSON files (`output.json`, `ape-to-guichet.json`, and `guichet.json`)
|
||||
from their respective directories (`NAF-search` and `NomenclatureGuichet`) to the public
|
||||
`data` directory */
|
||||
|
||||
copyFileSync(
|
||||
join(fileURLToPath(import.meta.url), '..', 'NAF-search', 'output.json'),
|
||||
join(dataDir, 'ape-search.json')
|
||||
)
|
||||
|
||||
copyFileSync(
|
||||
join(
|
||||
fileURLToPath(import.meta.url),
|
||||
'..',
|
||||
'NomenclatureGuichet',
|
||||
'ape_to_guichet.json'
|
||||
),
|
||||
join(dataDir, 'ape-to-guichet.json')
|
||||
)
|
||||
|
||||
copyFileSync(
|
||||
join(
|
||||
fileURLToPath(import.meta.url),
|
||||
'..',
|
||||
'NomenclatureGuichet',
|
||||
'guichet.json'
|
||||
),
|
||||
join(dataDir, 'guichet.json')
|
||||
)
|
|
@ -3,8 +3,6 @@ import { join } from 'path'
|
|||
import { PdfData, VerbosityLevel } from 'pdfdataextract'
|
||||
import { fileURLToPath } from 'url'
|
||||
|
||||
import { customTags } from './custom-tags.js'
|
||||
|
||||
const __dirname = fileURLToPath(new URL('.', import.meta.url))
|
||||
|
||||
const INPUT_PDF_PATH = join(
|
||||
|
@ -358,19 +356,7 @@ const transformText = (pages: PdfData['text']) => {
|
|||
return arr
|
||||
}, [] as Data[])
|
||||
|
||||
return data.map((data) => {
|
||||
const {
|
||||
contenuCentral = [],
|
||||
contenuAnnexe = [],
|
||||
contenuExclu = [],
|
||||
} = customTags[data.code] ?? {}
|
||||
|
||||
data.contenuCentral.push(...contenuCentral)
|
||||
data.contenuAnnexe.push(...contenuAnnexe)
|
||||
data.contenuExclu.push(...contenuExclu)
|
||||
|
||||
return data
|
||||
})
|
||||
return data
|
||||
}
|
||||
|
||||
interface CommonData<Type extends string> {
|
|
@ -3605,8 +3605,7 @@
|
|||
"• chats et chiens",
|
||||
"• oiseaux, tels que des perruches, etc.",
|
||||
"• hamsters, etc.",
|
||||
"l'élevage d'animaux divers",
|
||||
"éleveur"
|
||||
"l'élevage d'animaux divers"
|
||||
],
|
||||
"contenuAnnexe": [],
|
||||
"contenuExclu": [
|
||||
|
@ -4176,8 +4175,7 @@
|
|||
"• insémination artificielle",
|
||||
"• services de haras",
|
||||
"• tonte d'ovins",
|
||||
"• hébergement et entretien d'animaux de ferme",
|
||||
"physiothérapeute équin"
|
||||
"• hébergement et entretien d'animaux de ferme"
|
||||
],
|
||||
"contenuAnnexe": [
|
||||
"les activités des maréchaux-ferrants"
|
||||
|
@ -19023,8 +19021,7 @@
|
|||
"la fabrication d'encadrements pour des toiles d'artistes",
|
||||
"la fabrication de parties de chaussures en bois (par exemple talons et formes)",
|
||||
"la fabrication de manches de parapluies, de cannes et d'articles similaires",
|
||||
"la fabrication de blocs destinés à la fabrication de pipes",
|
||||
"la fabrication d'objets en bois flotté"
|
||||
"la fabrication de blocs destinés à la fabrication de pipes"
|
||||
],
|
||||
"contenuAnnexe": [],
|
||||
"contenuExclu": [
|
||||
|
@ -26472,8 +26469,7 @@
|
|||
"Produits associés : 22.29.91, 22.29.99"
|
||||
],
|
||||
"contenuCentral": [
|
||||
"la fabrication pour compte de tiers de pièces techniques diverses en matières plastiques",
|
||||
"impression 3D"
|
||||
"la fabrication pour compte de tiers de pièces techniques diverses en matières plastiques"
|
||||
],
|
||||
"contenuAnnexe": [
|
||||
"la fabrication pour compte de tiers d'autres pièces en matières plastiques non décrites ailleurs"
|
||||
|
@ -52346,8 +52342,7 @@
|
|||
"l'installation de serrures et autres systèmes complexes de verrouillage",
|
||||
"l'installation de récipients métalliques",
|
||||
"l'installation de coffres-forts",
|
||||
"l'installation et le montage d'armes",
|
||||
"chaudronnier"
|
||||
"l'installation et le montage d'armes"
|
||||
],
|
||||
"contenuAnnexe": [
|
||||
"les travaux de tuyauterie métallique sur site industriel : chimie, pétrole, etc.",
|
||||
|
@ -60538,9 +60533,7 @@
|
|||
"data": [
|
||||
"Produits associés : 46.19.10p"
|
||||
],
|
||||
"contenuCentral": [
|
||||
"apporteur d’affaires"
|
||||
],
|
||||
"contenuCentral": [],
|
||||
"contenuAnnexe": [],
|
||||
"contenuExclu": [],
|
||||
"parent": 4644
|
||||
|
@ -64682,8 +64675,7 @@
|
|||
"47.00.87p, 47.00.88p, 47.00.89p, 47.00.91p, 47.00.92p, 47.00.99p"
|
||||
],
|
||||
"contenuCentral": [
|
||||
"le commerce de détail non spécialisé sans prédominance alimentaire en magasin d'une surface de vente égale ou supérieure à 2500 m²",
|
||||
"boutique de déstockage"
|
||||
"le commerce de détail non spécialisé sans prédominance alimentaire en magasin d'une surface de vente égale ou supérieure à 2500 m²"
|
||||
],
|
||||
"contenuAnnexe": [],
|
||||
"contenuExclu": [],
|
||||
|
@ -64695,8 +64687,7 @@
|
|||
"title": "Autres commerces de détail en magasin non spécialisé",
|
||||
"data": [],
|
||||
"contenuCentral": [
|
||||
"le commerce de détail non-spécialisé sans prédominance alimentaire en magasin d'une surface de vente inférieure à 2500 m²",
|
||||
"boutique de déstockage"
|
||||
"le commerce de détail non-spécialisé sans prédominance alimentaire en magasin d'une surface de vente inférieure à 2500 m²"
|
||||
],
|
||||
"contenuAnnexe": [
|
||||
"les sex-shop",
|
||||
|
@ -65894,9 +65885,7 @@
|
|||
],
|
||||
"contenuCentral": [
|
||||
"le commerce de détail d'enregistrements musicaux, de cassettes audio, de CD et de cassettes",
|
||||
"le commerce de détail de vidéocassettes et de DVD",
|
||||
"disquaire",
|
||||
"vente de vinyle"
|
||||
"le commerce de détail de vidéocassettes et de DVD"
|
||||
],
|
||||
"contenuAnnexe": [
|
||||
"le commerce de détail de bandes et disques vierges"
|
||||
|
@ -65922,8 +65911,7 @@
|
|||
"Produits associés : 47.00.65p, 47.00.66p"
|
||||
],
|
||||
"contenuCentral": [
|
||||
"le commerce de détail d'articles de sport, d'articles pour la pêche, de matériel de camping, de bateaux et de bicyclettes",
|
||||
"Vente de vélo"
|
||||
"le commerce de détail d'articles de sport, d'articles pour la pêche, de matériel de camping, de bateaux et de bicyclettes"
|
||||
],
|
||||
"contenuAnnexe": [
|
||||
"le commerce de détail de chaussures à usage exclusivement sportif"
|
||||
|
@ -65995,8 +65983,7 @@
|
|||
"contenuCentral": [
|
||||
"le commerce de détail d'articles d'habillement",
|
||||
"le commerce de détail d'articles en fourrure",
|
||||
"le commerce de détail d'accessoires du vêtement tels que gants, cravates, bretelles, etc.",
|
||||
"boutique de déstockage de vêtements"
|
||||
"le commerce de détail d'accessoires du vêtement tels que gants, cravates, bretelles, etc."
|
||||
],
|
||||
"contenuAnnexe": [],
|
||||
"contenuExclu": [
|
||||
|
@ -66411,9 +66398,7 @@
|
|||
],
|
||||
"contenuCentral": [
|
||||
"le commerce de détail de tous types de produits par correspondance",
|
||||
"le commerce de détail de tous types de produits par Internet",
|
||||
"e-commerce",
|
||||
"vente en ligne"
|
||||
"le commerce de détail de tous types de produits par Internet"
|
||||
],
|
||||
"contenuAnnexe": [
|
||||
"la vente directe par téléphone ou par le truchement de la radio ou de la télévision",
|
||||
|
@ -66444,9 +66429,7 @@
|
|||
],
|
||||
"contenuCentral": [
|
||||
"le commerce de détail spécialisé de produits par correspondance",
|
||||
"le commerce de détail spécialisé de produits par Internet",
|
||||
"e-commerce",
|
||||
"vente en ligne"
|
||||
"le commerce de détail spécialisé de produits par Internet"
|
||||
],
|
||||
"contenuAnnexe": [],
|
||||
"contenuExclu": [
|
||||
|
@ -66852,8 +66835,7 @@
|
|||
"Produits associés : 49.32.11, 49.32.12"
|
||||
],
|
||||
"contenuCentral": [
|
||||
"le transport de voyageurs par taxis, y compris services des centrales de réservation",
|
||||
"chauffeur VTC"
|
||||
"le transport de voyageurs par taxis, y compris services des centrales de réservation"
|
||||
],
|
||||
"contenuAnnexe": [
|
||||
"la location de voitures particulières avec chauffeur",
|
||||
|
@ -69959,8 +69941,7 @@
|
|||
"Produits associés : 53.20.11, 53.20.12, 53.20.19"
|
||||
],
|
||||
"contenuCentral": [
|
||||
"la levée, le tri, l'acheminement et la distribution (nationale ou internationale) de lettres et de colis et petits paquets (assimilés à du courrier) par des entreprises opérant en dehors de l'obligation de service universel. Il peut être fait appel à un ou à plusieurs modes de transport et l'acheminement peut s'effectuer par un moyen de transport détenu en propre (privé) ou par un moyen de transport public.",
|
||||
"Activité de relais colis"
|
||||
"la levée, le tri, l'acheminement et la distribution (nationale ou internationale) de lettres et de colis et petits paquets (assimilés à du courrier) par des entreprises opérant en dehors de l'obligation de service universel. Il peut être fait appel à un ou à plusieurs modes de transport et l'acheminement peut s'effectuer par un moyen de transport détenu en propre (privé) ou par un moyen de transport public."
|
||||
],
|
||||
"contenuAnnexe": [
|
||||
"les services de livraison à domicile",
|
||||
|
@ -70703,8 +70684,7 @@
|
|||
"• la préparation de repas sur des éventaires ou sur les marchés"
|
||||
],
|
||||
"contenuAnnexe": [
|
||||
"salons de thé",
|
||||
"bar à chat"
|
||||
"salons de thé"
|
||||
],
|
||||
"contenuExclu": [
|
||||
"la vente au détail de nourriture par le biais de distributeurs automatiques (cf. 47.99B)"
|
||||
|
@ -70934,12 +70914,7 @@
|
|||
"les bars",
|
||||
"les cafés",
|
||||
"les discothèques et les pistes de danse où le service de boissons est prédominant",
|
||||
"les vendeurs de boissons itinérants",
|
||||
"bar",
|
||||
"pmu",
|
||||
"café",
|
||||
"bar à cocktail",
|
||||
"bar à bière"
|
||||
"les vendeurs de boissons itinérants"
|
||||
],
|
||||
"contenuAnnexe": [],
|
||||
"contenuExclu": [],
|
||||
|
@ -74562,13 +74537,7 @@
|
|||
"applications logicielles",
|
||||
"bases de données",
|
||||
"pages web",
|
||||
"l'adaptation de logiciels, c'est-à-dire la modification et la configuration d'une application existante pour la rendre opérationnelle dans l'environnement informatique du client",
|
||||
"Développeur (web / front / back)",
|
||||
"Intégrateur",
|
||||
"Architecte technique",
|
||||
"Urbaniste des systèmes d’information",
|
||||
"Tech lead",
|
||||
"Data engineer"
|
||||
"l'adaptation de logiciels, c'est-à-dire la modification et la configuration d'une application existante pour la rendre opérationnelle dans l'environnement informatique du client"
|
||||
],
|
||||
"contenuAnnexe": [],
|
||||
"contenuExclu": [
|
||||
|
@ -74760,8 +74729,7 @@
|
|||
],
|
||||
"contenuCentral": [
|
||||
"la planification et la conception (études, conseil) de systèmes informatiques intégrant les technologies du matériel, des logiciels et des communications. Les services peuvent comprendre la formation des utilisateurs concernés.",
|
||||
"le conseil en développement logiciel personnalisé : analyse des besoins et des problèmes des utilisateurs, formulation de propositions de solutions",
|
||||
"Designer UX / UI"
|
||||
"le conseil en développement logiciel personnalisé : analyse des besoins et des problèmes des utilisateurs, formulation de propositions de solutions"
|
||||
],
|
||||
"contenuAnnexe": [],
|
||||
"contenuExclu": [],
|
||||
|
@ -77223,8 +77191,7 @@
|
|||
"les opérations effectuées sur des marchés financiers pour le compte de tiers (le courtage en valeurs mobilières, par exemple) ainsi que les activités qui s'y rattachent",
|
||||
"le courtage de titres",
|
||||
"le courtage de contrats de marchandises",
|
||||
"les activités des bureaux de change, etc.",
|
||||
"courtier"
|
||||
"les activités des bureaux de change, etc."
|
||||
],
|
||||
"contenuAnnexe": [],
|
||||
"contenuExclu": [
|
||||
|
@ -77700,8 +77667,7 @@
|
|||
"Produits associés : 66.22.10"
|
||||
],
|
||||
"contenuCentral": [
|
||||
"les activités des agents et courtiers d'assurances (intermédiaires d'assurance) consistant en la vente, la négociation ou le démarchage de contrats d'assurance de rente et d'autres formes de contrat d'assurance",
|
||||
"courtage"
|
||||
"les activités des agents et courtiers d'assurances (intermédiaires d'assurance) consistant en la vente, la négociation ou le démarchage de contrats d'assurance de rente et d'autres formes de contrat d'assurance"
|
||||
],
|
||||
"contenuAnnexe": [],
|
||||
"contenuExclu": [],
|
||||
|
@ -79095,8 +79061,7 @@
|
|||
"contenuCentral": [
|
||||
"le conseil et l'assistance opérationnelle apportés à des entreprises et autres organisations sur des questions de gestion, telles que la planification d'entreprise stratégique et organisationnelle, la reconfiguration de processus, la gestion du changement, la réduction des coûts et d'autres questions financières, les objectifs et les politiques de marketing, les politiques, les pratiques et la planification en matière de ressources humaines, les stratégies de rémunération et retraite, la planification de la production et du contrôle.",
|
||||
"le conseil et l'assistance opérationnelle aux entreprises et aux services publics dans les domaines suivants :",
|
||||
"• la conception de méthodes ou procédures comptables, de programme de comptabilisation des dépenses, de procédures de contrôle budgétaire",
|
||||
"apporteur d’affaires"
|
||||
"• la conception de méthodes ou procédures comptables, de programme de comptabilisation des dépenses, de procédures de contrôle budgétaire"
|
||||
],
|
||||
"contenuAnnexe": [],
|
||||
"contenuExclu": [],
|
||||
|
@ -82889,8 +82854,7 @@
|
|||
"la location de cycles",
|
||||
"la location de chaises longues et parasols de plage",
|
||||
"la location d'autres articles de sport",
|
||||
"la location de skis",
|
||||
"Location de vélo"
|
||||
"la location de skis"
|
||||
],
|
||||
"contenuAnnexe": [],
|
||||
"contenuExclu": [
|
||||
|
@ -85185,8 +85149,7 @@
|
|||
],
|
||||
"contenuCentral": [
|
||||
"le nettoyage courant (non spécialisé) de tous types de bâtiments tels que :",
|
||||
"• bureaux",
|
||||
"Homme / Femme de ménage"
|
||||
"• bureaux"
|
||||
],
|
||||
"contenuAnnexe": [],
|
||||
"contenuExclu": [],
|
||||
|
@ -85730,9 +85693,7 @@
|
|||
"Produits associés : 82.11.10"
|
||||
],
|
||||
"contenuCentral": [
|
||||
"la prestation d'une combinaison de services administratifs de bureau quotidiens, comme l'accueil, la planification financière, la facturation, la gestion de dossiers et l'archivage, les activités liées au personnel, l'organisation des locaux, les services de courrier, etc., pour le compte de tiers.",
|
||||
"secrétariat et assistance administrative",
|
||||
"secrétaire"
|
||||
"la prestation d'une combinaison de services administratifs de bureau quotidiens, comme l'accueil, la planification financière, la facturation, la gestion de dossiers et l'archivage, les activités liées au personnel, l'organisation des locaux, les services de courrier, etc., pour le compte de tiers."
|
||||
],
|
||||
"contenuAnnexe": [],
|
||||
"contenuExclu": [
|
||||
|
@ -88364,11 +88325,7 @@
|
|||
"les instructeurs de sports, professeurs et entraîneurs professionnels indépendants",
|
||||
"les cours d'arts martiaux",
|
||||
"les cours de jeux de cartes (comme le bridge)",
|
||||
"les cours de yoga",
|
||||
"Coach sportif",
|
||||
"Moniteur (enseignement sportif)",
|
||||
"Enseignement sportif (Athlétisme, Aviron, Badminton, Baseball, Softball, Basketball, Biathlon, Bobsleigh, Boxe, Breaking, Canoë, Curling, Cyclisme, Escalade, Escrime, Football, Futsal, Golf, Gymnastique, Haltérophilie, Handball, Hockey sur Gazon , Hockey sur glace, Judo, Karaté, Luge, Lutte, Natation, Natation, Marathon, Patinage, Pentathlon, Plongeon, Rugby, Skateboard, Skeleton, Ski, Alpinisme, Snowboard, Sports Équestres, Surf, Taekwondo, Tennis, Tennis de Table, Ping-pong, Tir, Tir à L'Arc, Trampoline, Triathlon, Ultimate, Voile, Volleyball, Beach-Volley, Water-Polo, Pilates, Stretching, Trail, Fitness, etc.)",
|
||||
"activité physique"
|
||||
"les cours de yoga"
|
||||
],
|
||||
"contenuAnnexe": [
|
||||
"l'enseignement à caractère récréatif des échecs"
|
||||
|
@ -89743,11 +89700,7 @@
|
|||
"• activités des psychologues à vocation thérapeutique",
|
||||
"• activités des sophrologues à vocation thérapeutique",
|
||||
"• activités des praticiens exerçant dans les domaines de l'acupuncture, de l'homéopathie, etc.",
|
||||
"• activités des guérisseurs, rebouteux, etc.",
|
||||
"psychopraticien",
|
||||
"hypnothérapeute",
|
||||
"hypnothérapie",
|
||||
"réflexologue"
|
||||
"• activités des guérisseurs, rebouteux, etc."
|
||||
],
|
||||
"contenuAnnexe": [],
|
||||
"contenuExclu": [
|
||||
|
@ -90603,8 +90556,7 @@
|
|||
"l'accueil de jour des enfants d'age pré-scolaire :",
|
||||
"• les activités des crèches",
|
||||
"• les activités des assistantes maternelles à leur domicile",
|
||||
"• les activités des haltes-garderies",
|
||||
"baby-sitters"
|
||||
"• les activités des haltes-garderies"
|
||||
],
|
||||
"contenuAnnexe": [
|
||||
"les services de garde d'enfants à domicile assurés par des prestataires de services indépendants"
|
||||
|
@ -91909,9 +91861,7 @@
|
|||
"• clubs de bowling",
|
||||
"• clubs de natation",
|
||||
"• clubs de golf",
|
||||
"• clubs de boxe",
|
||||
"randonnée",
|
||||
"activité physique"
|
||||
"• clubs de boxe"
|
||||
],
|
||||
"contenuAnnexe": [],
|
||||
"contenuExclu": [],
|
||||
|
@ -92040,9 +91990,7 @@
|
|||
"Produits associés : 93.13.10"
|
||||
],
|
||||
"contenuCentral": [
|
||||
"les clubs et centres de culture physique et de musculation",
|
||||
"Salle de sport",
|
||||
"Salle de musculation"
|
||||
"les clubs et centres de culture physique et de musculation"
|
||||
],
|
||||
"contenuAnnexe": [],
|
||||
"contenuExclu": [
|
||||
|
@ -93613,8 +93561,7 @@
|
|||
"la réparation d'instruments de musique (à l'exclusion des orgues et instruments de musique historiques)",
|
||||
"la réparation de jouets et articles similaires",
|
||||
"la réparation d'autres articles personnels et domestiques",
|
||||
"l'accordage de pianos",
|
||||
"Réparation de vélo"
|
||||
"l'accordage de pianos"
|
||||
],
|
||||
"contenuAnnexe": [],
|
||||
"contenuExclu": [
|
||||
|
@ -94104,9 +94051,7 @@
|
|||
"Produits associés : 96.04.10"
|
||||
],
|
||||
"contenuCentral": [
|
||||
"les activités d'entretien corporel telle que celles fournies par les bains turcs, les saunas et les bains de vapeur, les solariums, les stations thermales, les instituts d'amaigrissement et d'amincissement, les instituts de massage, etc.",
|
||||
"activité de bien-être",
|
||||
"relaxation"
|
||||
"les activités d'entretien corporel telle que celles fournies par les bains turcs, les saunas et les bains de vapeur, les solariums, les stations thermales, les instituts d'amaigrissement et d'amincissement, les instituts de massage, etc."
|
||||
],
|
||||
"contenuAnnexe": [],
|
||||
"contenuExclu": [
|
||||
|
@ -94139,11 +94084,7 @@
|
|||
"les services de recherche généalogique",
|
||||
"les activités des studios de tatouage et de perçage corporel",
|
||||
"les services des cireurs, des porteurs, des préposés au parcage des véhicules, etc.",
|
||||
"l'exploitation de machines de services personnels fonctionnant avec des pièces de monnaie (photomatons, pèse-personne, appareils de mesure de la tension artérielle, consignes à pièces, etc.)",
|
||||
"Coach personnel",
|
||||
"Coach de vie",
|
||||
"Home organiser",
|
||||
"Aide à l'organisation et au rangement"
|
||||
"l'exploitation de machines de services personnels fonctionnant avec des pièces de monnaie (photomatons, pèse-personne, appareils de mesure de la tension artérielle, consignes à pièces, etc.)"
|
||||
],
|
||||
"contenuAnnexe": [],
|
||||
"contenuExclu": [
|
|
@ -0,0 +1,25 @@
|
|||
{
|
||||
"name": "scripts",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"type": "module",
|
||||
"private": true,
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/betagouv/mon-entreprise.git",
|
||||
"directory": "site/scripts"
|
||||
},
|
||||
"scripts": {
|
||||
"extract-NAF-from-PDF": "ts-node-esm ./extract-NAF-data/convert-pdf.ts",
|
||||
"extract-guichet": "ts-node-esm ./NomenclatureGuichet/extract.ts",
|
||||
"fetch-nombre-etablissements": "ts-node-esm ./nombre-etablissements-par-code-ape/fetch-json.ts",
|
||||
"merge-data": "ts-node-esm ./NAF-search/merge-data.ts",
|
||||
"build": "yarn extract-NAF-from-PDF && yarn extract-guichet && yarn fetch-nombre-etablissements && yarn merge-data"
|
||||
},
|
||||
"devDependencies": {
|
||||
"csv": "^6.2.7",
|
||||
"csv-parser": "^3.0.0",
|
||||
"pdfdataextract": "^3.2.0",
|
||||
"ts-node": "^10.9.1"
|
||||
}
|
||||
}
|
|
@ -1,3 +1,4 @@
|
|||
import './fetch-releases.js'
|
||||
import './fetch-stats.js'
|
||||
import './fetch-job-offers.js'
|
||||
import './fetch-releases.js'
|
||||
import './NAFAndGuichetData/copy-to-data-dir.js'
|
||||
import './stats/fetch-stats.js'
|
||||
|
|
|
@ -3,8 +3,8 @@ import fs from 'fs'
|
|||
import path from 'path'
|
||||
import { fileURLToPath } from 'url'
|
||||
|
||||
import { createDataDir, writeInDataDir } from '../utils.js'
|
||||
import { apiStats } from './fetch-api-stats.js'
|
||||
import { createDataDir, writeInDataDir } from './utils.js'
|
||||
|
||||
dotenv.config()
|
||||
|
|
@ -2,7 +2,7 @@ import { existsSync, mkdirSync, writeFileSync } from 'fs'
|
|||
import { join } from 'path'
|
||||
import { fileURLToPath } from 'url'
|
||||
|
||||
const dataDir = join(
|
||||
export const dataDir = join(
|
||||
fileURLToPath(import.meta.url),
|
||||
'..',
|
||||
'..',
|
||||
|
|
|
@ -3,7 +3,17 @@ import styled, { css } from 'styled-components'
|
|||
import { baseParagraphStyle } from './paragraphs'
|
||||
|
||||
type ListProps = {
|
||||
/**
|
||||
* @property {'XS' | 'MD' | 'XL'} - The `size` property is an optional property that can have one
|
||||
* of three values: 'XS', 'MD', or 'XL'. It is used to specify the size of the list. If this property
|
||||
* is not provided, the default size will be used. */
|
||||
size?: 'XS' | 'MD' | 'XL'
|
||||
|
||||
/**
|
||||
* @property {boolean} - A boolean property that indicates whether or not to display markers
|
||||
* (such as bullets or numbers) for each item in the list.
|
||||
*/
|
||||
noMarker?: boolean
|
||||
}
|
||||
|
||||
export const Li = styled.li``
|
||||
|
@ -27,16 +37,22 @@ const BaseListStyle = css<ListProps>`
|
|||
padding-left: 2rem;
|
||||
`}
|
||||
|
||||
${Li} {
|
||||
> ${Li} {
|
||||
position: relative;
|
||||
padding-left: ${({ theme }) => theme.spacings.lg};
|
||||
padding-left: ${({ theme, noMarker }) =>
|
||||
noMarker ? 0 : theme.spacings.lg};
|
||||
margin-bottom: ${({ theme }) => theme.spacings.xs};
|
||||
}
|
||||
`
|
||||
|
||||
export const Ul = styled.ul<ListProps>`
|
||||
${BaseListStyle}
|
||||
${Li}::before {
|
||||
> ${Li}::before {
|
||||
${({ noMarker }) =>
|
||||
noMarker &&
|
||||
css`
|
||||
display: none;
|
||||
`}
|
||||
content: '●';
|
||||
font-size: 80%;
|
||||
display: inline-block;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { DependencyList, useEffect, useRef } from 'react'
|
||||
import { DependencyList, useEffect, useState } from 'react'
|
||||
|
||||
/**
|
||||
* Executes a function that returns a promise (when dependencies change)
|
||||
|
@ -9,14 +9,14 @@ export const useAsyncData = <T, U = null>(
|
|||
defaultValue: U | null = null,
|
||||
deps: DependencyList = []
|
||||
): T | U | null => {
|
||||
const data = useRef<T | U | null>(defaultValue)
|
||||
const [state, setState] = useState<T | U | null>(defaultValue)
|
||||
|
||||
useEffect(() => {
|
||||
void (async () => {
|
||||
data.current = await getAsyncData()
|
||||
setState(await getAsyncData())
|
||||
})()
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, deps)
|
||||
|
||||
return data.current
|
||||
return state
|
||||
}
|
||||
|
|
|
@ -511,6 +511,12 @@ checklist:
|
|||
chomagePartiel:
|
||||
tableCaption: Table showing net salary and cost to the employer with or without
|
||||
partial unemployment.
|
||||
codeApe:
|
||||
catégorie-guichet: <0>Categories of the Guichet unique<1><0>The <2>Guichet
|
||||
électronique des formalités d'entreprises</2> (Guichet unique) is a secure
|
||||
internet portal, with which any company is required to declare its creation,
|
||||
since January 1st 2023.</0><1>It uses a different classification of
|
||||
activities than the one used by INSEE for APE code.</1></1></0>
|
||||
comparaisonRégimes:
|
||||
ACRE: <0>ACRE</0><1>1 year <1>(automatic and unconditional)</1></1><2>Between 3
|
||||
and 4 quarters <2>(subject to eligibility requirements)</2></2>
|
||||
|
@ -1479,8 +1485,8 @@ pages:
|
|||
title: Income simulator for liberal professions Cipav
|
||||
comparaison:
|
||||
meta:
|
||||
description: Auto-entrepeneur, EI/EURL or SASU? Simulate the differences in income,
|
||||
retirement and health benefits
|
||||
description: Auto-entrepeneur, EI/EURL or SASU? Simulate the differences in
|
||||
income, retirement and health benefits
|
||||
title: Legal status comparator
|
||||
shortname: Status Comparison
|
||||
title: Legal status comparator
|
||||
|
|
|
@ -530,6 +530,13 @@ checklist:
|
|||
chomagePartiel:
|
||||
tableCaption: Tableau indiquant le salaire net et le coût pour l'employeur avec
|
||||
ou sans chômage partiel.
|
||||
codeApe:
|
||||
catégorie-guichet: <0>Catégories du Guichet unique<1><0>Le <2>Guichet
|
||||
électronique des formalités d’entreprises</2> (Guichet unique) est un
|
||||
portail internet sécurisé, auprès duquel toute entreprise est tenue de
|
||||
déclarer sa création, depuis le 1er janvier 2023.</0><1>Il utilise une
|
||||
classification des activités différente de celle utilisée par l'INSEE pour
|
||||
code APE.</1></1></0>
|
||||
comparaisonRégimes:
|
||||
ACRE: <0>ACRE</0><1>1 an <1>(automatique et inconditionnelle)</1></1><2>Entre 3
|
||||
et 4 trimestres <2>(sous conditions d'éligibilité)</2></2>
|
||||
|
|
|
@ -0,0 +1,76 @@
|
|||
import { Chip, Message } from '@/design-system'
|
||||
import { Strong } from '@/design-system/typography'
|
||||
import { H5 } from '@/design-system/typography/heading'
|
||||
import { Li, Ul } from '@/design-system/typography/list'
|
||||
import { Body } from '@/design-system/typography/paragraphs'
|
||||
import { useAsyncData } from '@/hooks/useAsyncData'
|
||||
|
||||
const lazyApeToGuichet = () => import('@/public/data/ape-to-guichet.json')
|
||||
type ApeToGuichet = typeof import('@/public/data/ape-to-guichet.json')
|
||||
const lazyGuichet = () => import('@/public/data/guichet.json')
|
||||
type Guichet = typeof import('@/public/data/guichet.json')
|
||||
|
||||
export default function GuichetInfo({ apeCode }: { apeCode: string }) {
|
||||
const guichet = useAsyncData(lazyGuichet)?.default
|
||||
const apeToGuichet = useAsyncData(lazyApeToGuichet)?.default
|
||||
|
||||
if (!guichet || !apeToGuichet || !(apeCode in apeToGuichet)) {
|
||||
return null
|
||||
}
|
||||
const guichetEntries = apeToGuichet[apeCode as keyof ApeToGuichet].map(
|
||||
(code) => guichet[code as keyof Guichet]
|
||||
)
|
||||
|
||||
return (
|
||||
<Ul noMarker>
|
||||
{guichetEntries.map(
|
||||
({
|
||||
label,
|
||||
caisseDeRetraiteSpéciale,
|
||||
typeBénéfice,
|
||||
artisteAuteurPossible,
|
||||
catégorieActivité,
|
||||
code,
|
||||
}) => {
|
||||
return (
|
||||
<Li key={code}>
|
||||
<Message border={false}>
|
||||
<H5>
|
||||
{label.niv4
|
||||
? label.niv4
|
||||
: label.niv3
|
||||
? label.niv3
|
||||
: label.niv2}
|
||||
<Chip type="secondary">{code}</Chip>
|
||||
</H5>
|
||||
<Body>
|
||||
Activité{' '}
|
||||
<Strong>{catégorieActivité.replace(/_/g, ' ')}</Strong>, avec
|
||||
des revenus déclarés en <Strong>{typeBénéfice}</Strong>{' '}
|
||||
{caisseDeRetraiteSpéciale && (
|
||||
<>
|
||||
, affiliée à la{' '}
|
||||
<Strong>{caisseDeRetraiteSpéciale}</Strong> pour la
|
||||
retraite
|
||||
</>
|
||||
)}
|
||||
.
|
||||
</Body>
|
||||
<Body>
|
||||
{artisteAuteurPossible && (
|
||||
<>
|
||||
Possibilitée d'exercer en tant qu'
|
||||
<Strong>ARTISTE AUTEUR</Strong>
|
||||
</>
|
||||
)}
|
||||
</Body>
|
||||
|
||||
{/* </Ul> */}
|
||||
</Message>
|
||||
</Li>
|
||||
)
|
||||
}
|
||||
)}
|
||||
</Ul>
|
||||
)
|
||||
}
|
|
@ -1,15 +1,19 @@
|
|||
import { useState } from 'react'
|
||||
import { useTranslation } from 'react-i18next'
|
||||
import { Trans, useTranslation } from 'react-i18next'
|
||||
import styled, { css } from 'styled-components'
|
||||
|
||||
import { Appear } from '@/components/ui/animate'
|
||||
import { Chip } from '@/design-system'
|
||||
import InfoBulle from '@/design-system/InfoBulle'
|
||||
import { Button } from '@/design-system/buttons'
|
||||
import { Button, HelpButtonWithPopover } from '@/design-system/buttons'
|
||||
import { ChevronIcon } from '@/design-system/icons'
|
||||
import { Grid } from '@/design-system/layout'
|
||||
import { H3, H4 } from '@/design-system/typography/heading'
|
||||
import { Link } from '@/design-system/typography/link'
|
||||
import { Li, Ul } from '@/design-system/typography/list'
|
||||
import { Body } from '@/design-system/typography/paragraphs'
|
||||
|
||||
import GuichetInfo from './GuichetInfo'
|
||||
|
||||
interface ResultProps {
|
||||
debug: string | null
|
||||
|
@ -88,6 +92,30 @@ export const Result = ({ item, debug }: ResultProps) => {
|
|||
</Ul>
|
||||
</>
|
||||
) : null}
|
||||
<Trans i18nKey={'codeApe.catégorie-guichet'}>
|
||||
<H4>
|
||||
Catégories du Guichet unique
|
||||
<HelpButtonWithPopover
|
||||
type="info"
|
||||
title="Qu'est-ce que le guichet unique ?"
|
||||
>
|
||||
<Body>
|
||||
Le{' '}
|
||||
<Link href="https://procedures.inpi.fr/">
|
||||
Guichet électronique des formalités d’entreprises
|
||||
</Link>{' '}
|
||||
(Guichet unique) est un portail internet sécurisé, auprès
|
||||
duquel toute entreprise est tenue de déclarer sa création,
|
||||
depuis le 1er janvier 2023.
|
||||
</Body>
|
||||
<Body>
|
||||
Il utilise une classification des activités différente de
|
||||
celle utilisée par l'INSEE pour code APE.
|
||||
</Body>
|
||||
</HelpButtonWithPopover>
|
||||
</H4>
|
||||
</Trans>
|
||||
<GuichetInfo apeCode={codeApe} />
|
||||
</Appear>
|
||||
)}
|
||||
</Grid>
|
||||
|
|
|
@ -19,9 +19,10 @@ import { Grid, Spacing } from '@/design-system/layout'
|
|||
import { SmallBody } from '@/design-system/typography/paragraphs'
|
||||
import { useAsyncData } from '@/hooks/useAsyncData'
|
||||
|
||||
import { Output as Data } from '../../../../../scripts/codeAPESearch/données-code-APE/reduce-json'
|
||||
import { Result } from './Result'
|
||||
|
||||
type Data = typeof import('@/public/data/ape-search.json')
|
||||
|
||||
interface SearchableData {
|
||||
original: string[]
|
||||
latinized: string[]
|
||||
|
@ -88,12 +89,7 @@ export default function SearchCodeAPE({ disabled }: SearchCodeApeProps) {
|
|||
const [selected, setSelected] = useState('')
|
||||
const [list, setList] = useState<ListResult[]>([])
|
||||
|
||||
const lazyData: Data | null = useAsyncData(
|
||||
() =>
|
||||
import(
|
||||
'../../../../../scripts/codeAPESearch/données-code-APE/output.min.json'
|
||||
)
|
||||
)
|
||||
const lazyData = useAsyncData(() => import('@/public/data/ape-search.json'))
|
||||
|
||||
const lastIdxs = useRef<Record<string, UFuzzy.HaystackIdxs>>({})
|
||||
const prevValue = useRef<string>(job)
|
||||
|
@ -153,7 +149,12 @@ export default function SearchCodeAPE({ disabled }: SearchCodeApeProps) {
|
|||
item,
|
||||
scoreFuzzy: index / arr.length,
|
||||
nbEtablissement:
|
||||
lazyData.indexByCodeApe[item.codeApe.replace('.', '')] || 0,
|
||||
lazyData.indexByCodeApe[
|
||||
item.codeApe.replace(
|
||||
'.',
|
||||
''
|
||||
) as keyof (typeof lazyData)['indexByCodeApe']
|
||||
] || 0,
|
||||
}))
|
||||
.sort(({ nbEtablissement: a }, { nbEtablissement: b }) => b - a)
|
||||
.map(({ item, scoreFuzzy, nbEtablissement }, index, arr) => {
|
||||
|
|
|
@ -26334,13 +26334,12 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"scripts@workspace:scripts":
|
||||
"scripts@workspace:site/scripts/NAFAndGuichetData":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "scripts@workspace:scripts"
|
||||
resolution: "scripts@workspace:site/scripts/NAFAndGuichetData"
|
||||
dependencies:
|
||||
csv: ^6.2.7
|
||||
csv-parser: ^3.0.0
|
||||
nodemon: ^2.0.20
|
||||
pdfdataextract: ^3.2.0
|
||||
ts-node: ^10.9.1
|
||||
languageName: unknown
|
||||
|
|
Loading…
Reference in New Issue