Merge branch 'master' into modifs-demande-mobilité

modifs-demande-mobilité
Alex S 2021-09-23 12:00:41 +02:00 committed by GitHub
commit 29dc6c0f5d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
431 changed files with 44699 additions and 9695 deletions

View File

@ -8,23 +8,18 @@ trim_trailing_whitespace = true
# tab_width doesn't make much sense as it can be left to the reader to decide.
indent_style = tab
insert_final_newline = true
max_line_length = 80
[**.{js,jsx,ts,tsx}]
indent_size = 2
max_line_length = 80
[**.{yml,yaml}]
# Spaces are mandatory for yaml files:
indent_style = space
indent_size = 2
# A high max_line_length is needed as prettier doesn't manage property-name
# line-wrapping correctly:
# See https://github.com/prettier/prettier/issues/5599
max_line_length = 1000
trim_trailing_whitespace = false
[*.md]
trim_trailing_whitespace = false
indent_style = space
indent_size = 4
trim_trailing_whitespace = false

View File

@ -1,2 +1,3 @@
node_modules
dist
publicodes/example/

View File

@ -43,7 +43,15 @@ module.exports = {
"react/jsx-uses-react": "off",
"react/react-in-jsx-scope": "off",
"mocha/no-skipped-tests": "warn",
"mocha/no-exclusive-tests": "error"
"mocha/no-exclusive-tests": "error",
'no-restricted-syntax': [
'error',
{
message: "Utilisez le composant <Emoji /> plutôt que la function emoji directement importée de react-easy-emoji",
selector:
"CallExpression[callee.name='emoji']"
}
]
},
settings: {
"react": {
@ -59,7 +67,7 @@ module.exports = {
"jsx": true
},
"tsconfigRootDir": __dirname,
"project": [ "./tsconfig.json" ]
"project": [ "./mon-entreprise/tsconfig.json", "./publicodes/tsconfig.json" ]
},
plugins: [ "@typescript-eslint" ],
rules: {

2
.git-blame-ignore-revs Normal file
View File

@ -0,0 +1,2 @@
# Upgrade to Prettier 2.3.x, run prettier & trim whitespaces on yaml
04d8c01243b0051c61d9cfd6eaec046705d3f806

1
.github/FUNDING.yml vendored Normal file
View File

@ -0,0 +1 @@
custom: ['https://mon-entreprise.fr/budget']

View File

@ -5,6 +5,17 @@ on:
push:
branches: [master, demo, next]
# We display the release notes in the "news" section of mon-entreprise.fr so
# we want to re-deploy the site when a new release is published or edited on
# GitHub.
release:
types: [published, edited]
# The /stats data is generated during the build. To keep the daily data fresh,
# we relaunch a nightly full build of the app
schedule:
- cron: '0 4 * * *'
jobs:
deploy-context:
runs-on: ubuntu-18.04
@ -13,16 +24,15 @@ jobs:
fr_url: ${{ steps.base-urls.outputs.fr }}
en_url: ${{ steps.base-urls.outputs.en }}
publicodes_url: ${{ steps.base-urls.outputs.publicodes }}
steps:
steps:
- id: deploy-env
run:
echo "::set-output name=name::${{ github.event.number || '${GITHUB_REF#refs/*/}' }}"
run: echo "::set-output name=name::${{ github.event.number || '${GITHUB_REF#refs/*/}' }}"
- id: base-urls
run:
echo "::set-output name=fr::${{ steps.deploy-env.outputs.name == 'master' && 'https://mon-entreprise.fr' || format('https://{0}--mon-entreprise.netlify.app', steps.deploy-env.outputs.name) }}";
echo "::set-output name=en::${{ steps.deploy-env.outputs.name == 'master' && 'https://mycompanyinfrance.fr' || format('https://{0}-en--mon-entreprise.netlify.app', steps.deploy-env.outputs.name) }}";
echo "::set-output name=publicodes::${{ steps.deploy-env.outputs.name == 'master' && 'https://publi.codes' || format('https://{0}-publicodes--mon-entreprise.netlify.app', steps.deploy-env.outputs.name) }}";
build:
needs: deploy-context
env:
@ -48,11 +58,20 @@ jobs:
env:
AT_INTERNET_SITE_ID: ${{ needs.deploy-context.outputs.env-name == 'master' && 617190 || 617189 }}
NODE_ENV: production
ALGOLIA_APP_ID: ${{ secrets.ALGOLIA_APP_ID }}
ALGOLIA_SEARCH_KEY: ${{secrets.ALGOLIA_SEARCH_KEY}}
ALGOLIA_INDEX_PREFIX: monentreprise-${{needs.deploy-context.outputs.env-name}}-
- name: Replace site placeholders in netlify.toml redirection file
run:
sed -i "s|:SITE_FR|$FR_BASE_URL|g" netlify.toml;
run: sed -i "s|:SITE_FR|$FR_BASE_URL|g" netlify.toml;
sed -i "s|:SITE_EN|$EN_BASE_URL|g" netlify.toml;
sed -i "s|:SITE_PUBLICODES|$PUBLICODES_BASE_URL|g" netlify.toml
sed -i "s|:SITE_PUBLICODES|$PUBLICODES_BASE_URL|g" netlify.toml
- name: Update Algolia index
run: yarn workspace mon-entreprise algolia:update
env:
ALGOLIA_APP_ID: ${{ secrets.ALGOLIA_APP_ID }}
ALGOLIA_ADMIN_KEY: ${{ secrets.ALGOLIA_ADMIN_KEY }}
ALGOLIA_SEARCH_KEY: ${{secrets.ALGOLIA_SEARCH_KEY}}
ALGOLIA_INDEX_PREFIX: monentreprise-${{needs.deploy-context.outputs.env-name}}-
- uses: actions/upload-artifact@v2
with:
name: static-site
@ -60,13 +79,13 @@ jobs:
mon-entreprise/dist/**
netlify.toml
if-no-files-found: error
deploy-preview:
needs: [build, deploy-context]
runs-on: ubuntu-18.04
if: needs.deploy-context.outputs.env-name != 'master'
strategy:
matrix:
matrix:
site: ['', 'en', 'publicodes']
steps:
- uses: actions/checkout@v2
@ -85,14 +104,14 @@ jobs:
github-deployment-environment: ${{ needs.deploy-context.outputs.env-name }}
alias: ${{ needs.deploy-context.outputs.env-name }}${{ matrix.site && format('-{0}', matrix.site) }}
deploy-message: ${{ github.event.pull_request.title || needs.deploy-context.outputs.env-name }} (${{ matrix.site || 'fr' }})
# Disabled because we create our own customized comment
enable-pull-request-comment: false
env:
NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}
NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }}
timeout-minutes: 1
deploy-prod:
needs: [build, deploy-context]
runs-on: ubuntu-18.04
@ -137,48 +156,65 @@ jobs:
issue-number: ${{ github.event.pull_request.number }}
edit-mode: replace
body: |
🚀 La branche est déployée !
🚀 La branche est déployée !
- mon-entreprise : ${{ needs.deploy-context.outputs.fr_url }}
- mycompanyinfrance : ${{ needs.deploy-context.outputs.en_url }}
- publicodes : ${{ needs.deploy-context.outputs.publicodes_url }}
end-to-end-test:
e2e-test-preview:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
runs-on: ubuntu-16.04
runs-on: ubuntu-20.04
# We need to specify always() https://github.com/actions/runner/issues/491
if: always() && (needs.deploy-prod.result == 'success' || needs.deploy-preview.result == 'success')
needs: [deploy-context, deploy-prod, deploy-preview]
if: always() && needs.deploy-preview.result == 'success'
needs: [deploy-context, deploy-preview]
strategy:
fail-fast: false
matrix:
site: ['fr', 'en', 'publicodes']
browser: [electron] # Firefox is very slow…
viewport: [default]
container: [1, 2, 3, 4]
include:
- site: fr
integrationFolder: mon-entreprise
baseUrl: ${{ needs.deploy-context.outputs.fr_url }}
language: fr
test-external: ${{ needs.deploy-context.outputs.env-name == 'master' }}
- site: en
- site: fr
integrationFolder: mon-entreprise
baseUrl: ${{ needs.deploy-context.outputs.fr_url }}
language: fr
- site: en
integrationFolder: mon-entreprise/english
baseUrl: ${{ needs.deploy-context.outputs.en_url }}
language: en
- site: publicodes
baseUrl: ${{ needs.deploy-context.outputs.publicodes_url }}
integrationFolder: publi.codes
language: fr
# TODO : activate parallelization https://github.com/cypress-io/github-action#parallel (missing https://github.com/cypress-io/github-action#custom-build-id)
# containers: [1, 2]
# TODO : browser: ['firefox', 'chrome']
exclude:
- site: en
container: 2
- site: publicodes
container: 2
- site: en
container: 3
- site: publicodes
container: 3
- site: en
container: 4
- site: publicodes
container: 4
- site: en
viewport: small
steps:
- name: Checkout
uses: actions/checkout@v2
- uses: actions/cache@v2
# Custom cache as we do not care about installing all the other dependancies
with:
@ -186,26 +222,100 @@ jobs:
~/.cache/Cypress
node_modules
key: cypress-cache-${{ runner.os }}-${{ hashFiles('package-lock.json') }}
- run: npm i cypress cypress-plugin-tab
- name: Test mon-entreprise
- run: node mon-entreprise/scripts/get-cypress-packages.js | xargs npm i
- name: Test e2e mon-entreprise on preview (site=${{ matrix.site }}, browser=${{ matrix.browser}}, viewport=${{ matrix.viewport }})
uses: cypress-io/github-action@v2
with:
install: false
working-directory: mon-entreprise
record: true
tag: ${{ matrix.site }},${{ needs.deploy-context.outputs.env-name }}-deploy
config: integrationFolder=cypress/integration/${{ matrix.integrationFolder }},baseUrl=${{ matrix.baseUrl }}
tag: ${{ needs.deploy-context.outputs.env-name }}_deploy
config: integrationFolder=cypress/integration/${{ matrix.integrationFolder }},baseUrl=${{ matrix.baseUrl }}${{ matrix.viewport == 'small' && ',viewportHeight=740,viewportWidth=360' || '' }}
env: language=${{ matrix.language }}
browser: ${{ matrix.browser }}
headless: true
parallel: true
group: ${{ matrix.site }}-${{ matrix.browser }}-viewport_${{ matrix.viewport }}
env:
COMMIT_INFO_MESSAGE: ${{ github.event.pull_request.title }}
- name: Test external integration
if: matrix.test-external
e2e-test-production:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
runs-on: ubuntu-20.04
# We need to specify always() https://github.com/actions/runner/issues/491
if: always() && needs.deploy-prod.result == 'success'
needs: [deploy-context, deploy-prod]
strategy:
fail-fast: false
matrix:
site: ['fr', 'en', 'publicodes']
browser: [chrome] # Firefox is very slow…
viewport: [default, small]
container: [1, 2, 3, 4]
include:
- site: fr
integrationFolder: mon-entreprise
baseUrl: ${{ needs.deploy-context.outputs.fr_url }}
language: fr
- site: fr
integrationFolder: mon-entreprise
baseUrl: ${{ needs.deploy-context.outputs.fr_url }}
language: fr
- site: en
integrationFolder: mon-entreprise/english
baseUrl: ${{ needs.deploy-context.outputs.en_url }}
language: en
- site: publicodes
baseUrl: ${{ needs.deploy-context.outputs.publicodes_url }}
integrationFolder: publi.codes
language: fr
exclude:
- site: en
container: 2
- site: publicodes
container: 2
- site: en
container: 3
- site: publicodes
container: 3
- site: en
container: 4
- site: publicodes
container: 4
- site: en
viewport: small
steps:
- name: Checkout
uses: actions/checkout@v2
- uses: actions/cache@v2
# Custom cache as we do not care about installing all the other dependancies
with:
path: |
~/.cache/Cypress
node_modules
key: cypress-cache-${{ runner.os }}-${{ hashFiles('package-lock.json') }}
- run: node mon-entreprise/scripts/get-cypress-packages.js | xargs npm i
- name: Test e2e mon-entreprise on production (site=${{ matrix.site }}, browser=${{ matrix.browser}}, viewport=${{ matrix.viewport }})
uses: cypress-io/github-action@v2
with:
install: false
working-directory: mon-entreprise
record: true
tag: external-integration
config: integrationFolder=cypress/integration/external,baseUrl=${{ matrix.baseUrl }}
tag: ${{ needs.deploy-context.outputs.env-name }}_deploy
config: integrationFolder=cypress/integration/${{ matrix.integrationFolder }},baseUrl=${{ matrix.baseUrl }}${{ matrix.viewport == 'small' && ',viewportHeight=740,viewportWidth=360' || '' }}
env: language=${{ matrix.language }}
browser: ${{ matrix.browser }}
headless: true
parallel: true
group: ${{ matrix.site }}-${{ matrix.browser }}-viewport_${{ matrix.viewport }}
env:
COMMIT_INFO_MESSAGE: ${{ github.event.pull_request.title }}

24
.github/workflows/pr-cleanup.yaml vendored Normal file
View File

@ -0,0 +1,24 @@
name: PR clean up
on:
pull_request:
types: [closed]
jobs:
deploy-context:
runs-on: ubuntu-18.04
outputs:
env-name: ${{ steps.deploy-env.outputs.name }}
steps:
- id: deploy-env
run: echo "::set-output name=name::${{ github.event.number || '${GITHUB_REF#refs/*/}' }}"
algolia-rm-temp-index:
needs: deploy-context
runs-on: ubuntu-18.04
steps:
- name: Remove temporary algolia index
run: yarn workspace mon-entreprise algolia:clean
env:
ALGOLIA_APP_ID: ${{ secrets.ALGOLIA_APP_ID }}
ALGOLIA_ADMIN_KEY: ${{ secrets.ALGOLIA_ADMIN_KEY }}
ALGOLIA_INDEX_PREFIX: monentreprise-${{needs.deploy-context.outputs.env-name}}-

View File

@ -0,0 +1,47 @@
name: Test external integrations
on:
schedule:
- cron: '47 3,15 * * *'
jobs:
test-external-integrations:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@v2
- uses: actions/cache@v2
# Custom cache as we do not care about installing all the other dependancies
with:
path: |
~/.cache/Cypress
node_modules
key: cypress-cache-${{ runner.os }}-${{ hashFiles('package-lock.json') }}
- run: node mon-entreprise/scripts/get-cypress-packages.js | xargs npm i
- name: Test external integration
uses: cypress-io/github-action@v2
with:
install: false
working-directory: mon-entreprise
record: true
tag: external-integration
config: integrationFolder=cypress/integration/external,baseUrl=https://mon-entreprise.fr
- name: e2e tests with external API calls
uses: cypress-io/github-action@v2
with:
install: false
working-directory: mon-entreprise
# List here all the specs that are making external API calls:
spec: |
cypress/integration/mon-entreprise/english/gérer.js
cypress/integration/mon-entreprise/demande-mobilité.js
record: true
tag: external-mon-entreprise-e2e
config: integrationFolder=cypress/integration/mon-entreprise,baseUrl=https://mon-entreprise.fr
env: language=fr,record_http= # prevent stubbing

View File

@ -1,5 +1,5 @@
name: Règles (non-regression)
on:
on:
pull_request:
paths:
- modele-social/règles/**
@ -9,10 +9,10 @@ jobs:
test:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v2
- uses: actions/cache@v2
with:
path: '**/node_modules'
key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}-v2
- run: yarn install --frozen-lockfile
- run: yarn test:regressions
- uses: actions/checkout@v2
- uses: actions/cache@v2
with:
path: '**/node_modules'
key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}-v2
- run: yarn install --frozen-lockfile
- run: yarn test:regressions

View File

@ -5,55 +5,51 @@ jobs:
lint:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v2
- uses: actions/cache@v2
with:
path: '**/node_modules'
key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}-v2
- run: yarn install --frozen-lockfile
- run: yarn lint
- uses: actions/checkout@v2
- uses: actions/cache@v2
with:
path: '**/node_modules'
key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}-v2
- run: yarn install --frozen-lockfile
- run: yarn lint
typecheck:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v2
- uses: actions/cache@v2
with:
path: '**/node_modules'
key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}-v2
- run: yarn install --frozen-lockfile
env:
# Secrets of all kinds for fetching stats & releases
GITHUB_API_SECRET: ${{ secrets.GITHUB_TOKEN }}
ZAMMAD_API_SECRET_KEY: ${{ secrets.ZAMMAD_API_SECRET_KEY }}
ATINTERNET_API_SECRET_KEY: ${{ secrets.ATINTERNET_API_SECRET_KEY }}
ATINTERNET_API_ACCESS_KEY: ${{ secrets.ATINTERNET_API_ACCESS_KEY }}
- run: yarn test:type
- uses: actions/checkout@v2
- uses: actions/cache@v2
with:
path: '**/node_modules'
key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}-v2
- run: yarn install --frozen-lockfile
env:
# Secrets of all kinds for fetching stats & releases
GITHUB_API_SECRET: ${{ secrets.GITHUB_TOKEN }}
ZAMMAD_API_SECRET_KEY: ${{ secrets.ZAMMAD_API_SECRET_KEY }}
ATINTERNET_API_SECRET_KEY: ${{ secrets.ATINTERNET_API_SECRET_KEY }}
ATINTERNET_API_ACCESS_KEY: ${{ secrets.ATINTERNET_API_ACCESS_KEY }}
- run: yarn test:type
unit:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v2
- uses: actions/cache@v2
with:
path: '**/node_modules'
key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}-v2
- run: yarn install --frozen-lockfile
- run: yarn test
- uses: actions/checkout@v2
- uses: actions/cache@v2
with:
path: '**/node_modules'
key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}-v2
- run: yarn install --frozen-lockfile
- run: yarn test
i18n:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v2
- uses: actions/cache@v2
with:
path: '**/node_modules'
key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}-v2
- run: yarn install --frozen-lockfile
- working-directory: mon-entreprise
run:
yarn run i18n:rules:check;
yarn run i18n:ui:check
- uses: actions/checkout@v2
- uses: actions/cache@v2
with:
path: '**/node_modules'
key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}-v2
- run: yarn install --frozen-lockfile
- working-directory: mon-entreprise
run: yarn run i18n:rules:check;
yarn run i18n:ui:check

View File

@ -18,7 +18,7 @@ jobs:
body: |
Ce ticket vient d'être fermé 🎉
Il est temps de prévenir les utilisateurs qui nous ont fait ce retour :
Il est temps de prévenir les utilisateurs qui nous ont fait ce retour :
https://mon-entreprise.zammad.com/#search/tags%3A%23${{ github.event.issue.number }}
Laissez un 👍 quand c'est fait !

3
.gitignore vendored
View File

@ -10,3 +10,6 @@ dist/
# Local Netlify folder
.netlify
# Webstorm (and other Jetbrains IDE)
.idea/

View File

@ -1 +0,0 @@
12.16.1

1
.nvmrc Normal file
View File

@ -0,0 +1 @@
16.0.0

View File

@ -1,2 +1,3 @@
.eslintrc.js
dist
mon-entreprise/source/locales/*.yaml

View File

@ -8,5 +8,8 @@
"cSpell.words": [
"mycompanyinfrance",
"smarttag"
]
],
"search.exclude": {
"**/dist": true
}
}

View File

@ -18,87 +18,108 @@ L'application est écrite en JavaScript, elle est exécuté uniquement côté cl
Nous utilisons :
- [TypeScript](https://www.typescriptlang.org) pour ajouter un système de typage à notre code JavaScript. Le typage n'est pas utilisé partout et il n'est pas obligatoire de le prendre en compte pour contribuer.
- [Yarn](https://yarnpkg.com/fr) pour la gestion des dépendances (à la place de NPM qui est souvent utilisé dans les applications JavaScript)
- [React](https://reactjs.org) pour la gestion de l'interface utilisateur
- [Redux](https://redux.js.org) pour gérer le “state” de l'application côté client
- [Prettier](https://prettier.io/) pour formater le code source, l'idéal est de configurer votre éditeur de texte pour que les fichiers soit formatés automatiquement quand vous sauvegardez un fichier. Si vous utilisez [VS Code](https://code.visualstudio.com/) cette configuration est automatique.
- [Webpack](https://webpack.js.org) pour le “bundling”
- [Eslint](http://eslint.org) qui permet par exemple d'éviter de garder des variables inutilisées
- [Ramda](https://ramdajs.com) comme libraire d'utilitaires pour manipuler les listes/objects/etc (c'est une alternative à lodash ou underscore)
- [Mocha](https://mochajs.org), [Jest](https://jestjs.io) et [Cypress](https://www.cypress.io) pour les l'execution des tests. Plus d'informations dans la section consacrée aux tests.
- [TypeScript](https://www.typescriptlang.org) pour ajouter un système de typage à notre code JavaScript. Le typage n'est pas utilisé partout et il n'est pas obligatoire de le prendre en compte pour contribuer.
- [Yarn](https://yarnpkg.com/fr) pour la gestion des dépendances (à la place de NPM qui est souvent utilisé dans les applications JavaScript)
- [React](https://reactjs.org) pour la gestion de l'interface utilisateur
- [Redux](https://redux.js.org) pour gérer le “state” de l'application côté client
- [Prettier](https://prettier.io/) pour formater le code source, l'idéal est de configurer votre éditeur de texte pour que les fichiers soit formatés automatiquement quand vous sauvegardez un fichier. Si vous utilisez [VS Code](https://code.visualstudio.com/) cette configuration est automatique.
- [Webpack](https://webpack.js.org) pour le “bundling”
- [Eslint](http://eslint.org) qui permet par exemple d'éviter de garder des variables inutilisées
- [Ramda](https://ramdajs.com) comme libraire d'utilitaires pour manipuler les listes/objects/etc (c'est une alternative à lodash ou underscore)
- [Mocha](https://mochajs.org), [Jest](https://jestjs.io) et [Cypress](https://www.cypress.io) pour les l'execution des tests. Plus d'informations dans la section consacrée aux tests.
### Démarrage
Si possible, assurez-vous d'avoir toutes les clés d'API nécessaires dans votre fichier
`mon-entreprise/.env` (un template est disponible dans `mon-entreprise/.env.template`).
**NB : ne vous inquiétez pas, ceci n'est pas nécessaire pour effectuer une première contribution à
la base de code !** Cependant, vous en aurez besoin pour la commande `yarn prepare` et pour les
commandes de traduction automatique français -> anglais. Si vous êtes confronté à ce type de besoin,
demandez l'aide des contributeurs du projet.
Si l'historique des commits est trop volumineux, vous pouvez utiliser le paramètre `depth` de git pour ne télécharger que les derniers commits.
```
# Clone this repo on your computer
git clone --depth 100 git@github.com:betagouv/mon-entreprise.git && cd mon-entreprise
# Mettre à jour votre config git locale
git config blame.ignoreRevsFile .git-blame-ignore-revs
# Install the Javascript dependencies through Yarn
yarn install
# Download some data
yarn prepare
# Watch changes in publicodes and run the server for mon-entreprise
yarn start
```
L'application est exécuté sur https://localhost:8080/mon-entreprise pour la version française et http://localhost:8080/infrance pour la version anglaise.
L'application est exécutée sur http://localhost:8080/mon-entreprise pour la version française et
http://localhost:8080/infrance pour la version anglaise.
Pour activer le tracing Redux:
Pour activer le traçage Redux:
```
REDUX_TRACE=true yarn start
```
### Messages de commit
A mettre sans retenue dans les messages de commit :
https://github.com/atom/atom/blob/master/CONTRIBUTING.md#git-commit-messages
- 🎨 `:art:` when working on the app's visual style
- 🐎 `:racehorse:` when improving performance
- 📝 `:memo:` when writing docs
- 🐛 `:bug:` when fixing a bug
- 🔥 `:fire:` when removing code or files
- 💚 `:green_heart:` when fixing the CI build
- ✅ `:white_check_mark:` when adding tests
- ⬆️ `:arrow_up:` when upgrading dependencies
- :sparkles: `:sparkles:` when formatting, renaming, reorganizing files
Et ceux spécifiques au projet :
- :gear: `:gear:` pour une contribution au moteur qui traite les YAML
- :hammer: `:hammer:` pour une contribution à la base de règles
- :calendar: `:calendar:` pour un changement de règle du à une évolution temporelle (en attendant mieux)
- :chart_with_upwards_trend: `:chart_with_upwards_trend:` pour une amélioration du tracking
- :alien: `:alien:` pour ajouter des traductions
- :wheelchair: `:wheelchair:` pour corriger les problèmes liés à l'accessibilité
- :fountain_pen: `:fountain_pen:` pour séparer les commits liés à la modification du contenu
- :mag: `:mag:` pour les modifications liées au référencement naturel
- 🎨 `:art:` pour une modification de l'UI
- 🐎 `:racehorse:` pour une amélioration de performance
- 🐛 `:bug:` pour une correction de bug
- 🔥 `:fire:` pour une suppression de code ou de fichier
- 💚 `:green_heart:` pour une correction de CI
- ✅ `:white_check_mark:` pour un ajout de test
- ⬆️ `:arrow_up:` pour une mise à jour de dépendances
- ✨ `:sparkles:` pour une ré-organisation du code
- ⚙ `:gear:` pour une contribution sur le moteur publicodes
- 🔨 `:hammer:` pour une contribution à la base de règles
- 📆 `:calendar:` pour un changement de règle du à une évolution temporelle (en attendant mieux)
- 📈 `:chart_with_upwards_trend:` pour une amélioration du tracking
- 👽 `:alien:` pour ajouter des traductions
- ♿ `:wheelchair:` pour corriger les problèmes liés à l'accessibilité
- 🖋 `:fountain_pen:` pour séparer les commits liés à la modification du contenu
- 🔍 `:mag:` pour les modifications liées au référencement naturel
### Tests
Pour la vérification syntaxique :
```sh
$ yarn lint
```
Pour la vérification du typage :
```sh
$ yarn test:type
```
Pour executer les tests unitaires :
```sh
$ yarn run test-common
$ yarn test
```
Pour le snapshot testing :
```sh
$ yarn run test:regressions
$ yarn test:regressions
```
Si vous souhaitez mettre à jour les snapshots vous pouvez utiliser le paramètre `--updateSnapshot`, son raccourci `-u`, ou encore le [mode interactif](https://jestjs.io/docs/en/snapshot-testing#interactive-snapshot-mode).
Enfin pour les tests d'intégration :
Pour les tests d'intégration sur chacun des 3 sites :
```sh
$ yarn run cypress run
$ yarn workspace mon-entreprise test:dev-e2e:mon-entreprise
$ yarn workspace mon-entreprise test:dev-e2e:mycompanyinfrance
$ yarn workspace mon-entreprise test:dev-e2e:publicodes
```
### Traduction 👽
@ -133,10 +154,9 @@ N'oubliez pas de vérifier sur le diff que rien n'est choquant.
### CI/CD
- [CircleCI](https://circleci.com/) s'occupe de faire tourner les builds et
tests.
- [Netlify](https://www.netlify.com/), s'occupe de lhébergement du site sur Internet
sur internet avec gestion des DNS.
- Nous utilisons des [Github actions](https://github.com/features/actions) pour faire tourner les builds et
tests.
- [Netlify](https://www.netlify.com/), s'occupe de lhébergement du site sur Internet avec gestion des DNS.
### Analyse des bundles
@ -144,42 +164,74 @@ La commande `yarn run build:analyse-bundle` gènere une visualisation interactiv
contenu packagé, cf.
[webpack-bundle-analyzer](https://github.com/webpack-contrib/webpack-bundle-analyzer)
## Développement de modèles Publicodes
### Tests
Pour tester les règles, il est recommandé de:
- faire tourner un simulateur et vérifier à la main l'adéquation des règles avec les normes
traduites ;
- créer des cas de tests de non-régression sous la forme de nouveaux snapshots (cf.
`mon-entreprise/test/regressions`).
En local, le moteur de recherche n'est pas mis à jour automatiquement et la liste des règles
est exposée ici: http://localhost:8080/mon-entreprise/documentation/dev
## Publicodes
### Documentation
La documentation de publicodes est disponible sur https://publi.codes.
Un wiki contenant des informations intéressantes sur publicodes et le
raisonnement ayant abouti à ce langage sont dispos sur le repository
[betagouv/publicodes](https://github.com/betagouv/publicodes/wiki)
Pour se familiariser avec les règles, vous pouvez jeter un œil aux fichiers
contenant les règles elles-mêmes (dans le dossier `modele-social`) mais cela
peut s'avérer assez abrupt.
Essayez plutôt de jeter un oeil [aux tests](https://github.com/betagouv/publicodes/tree/master/core/test/m%C3%A9canismes)
dans un premier temps, et pourquoi pas à [à l'implémentation des mécanismes](https://github.com/betagouv/publicodes/tree/master/core/source/mecanisms).
### Traduction des normes (lois) en règles Publicodes
Checklist:
- [ ] Lire les articles de vulgarisation (sur le site de l'URSSAF, des impôts, etc.).
- [ ] Utiliser un moteur de recherche spécialisé, comme [RFPaye](https://rfpaye.grouperf.com/).
- [ ] [Lire les normes][wiki normes] et noter leurs référence dans les règles Publicodes.
- [ ] Lire les articles de vulgarisation (sur le site de l'URSSAF, des impôts, etc.).
- [ ] Utiliser un moteur de recherche spécialisé, comme [RFPaye](https://rfpaye.grouperf.com/).
- [ ] [Lire les normes][wiki normes] et noter leurs référence dans les règles Publicodes.
[wiki normes]: https://github.com/betagouv/mon-entreprise/wiki/Comment-lire-les-normes-(la-loi)-efficacement-pour-r%C3%A9diger-des-r%C3%A8gles-Publicodes%3F
### Tests
### Modifier publicodes
Pour tester les règles, il est recommandé de:
Publicodes dispose désormais de son propre dépôt GitHub https://github.com/betagouv/publicodes
- faire tourner un simulateur et vérifier à la main l'adéquation des règles avec les normes
traduites ;
- créer des cas de tests de non-régression sous la forme de nouveaux snapshots (cf.
`mon-entreprise/test/regressions`).
Néanmoins pour certaines nouvelles fonctionnalités de mon-entreprise nous concervons le besoin de
modifier publicodes avec le moins de frictions possible. Pour tester une évolution du moteur il
serait en effet trop lourd d'avoir à ouvrir d'abord une PR côté publicodes, la merger, publier une
nouvelle version du paquet, puis ré-intégrer cette nouvelle version sur mon-entreprise.
## Documentation
C'est pourquoi nous intégrons le code source du publicode dans le sous-répertoire `publicodes/`. La
commande `git subtree` nous permet de synchroniser les changements effectués dans l'un ou l'autre
des dépôts.
### Publicodes
La première chose à faire est d'ajouter une nouvelle `remote` pour `betagouv/publicodes`, ici nous l'appelons simplement `publicodes` :
Un tutoriel sur publicode est disponible sur https://publi.codes.
```sh
git remote add publicodes git@github.com:betagouv/publicodes.git
```
Un wiki contenant des informations intéressantes sur publicode et le
raisonnement ayant abouti à ce langage sont dispos sur le repository
[betagouv/publicodes](https://github.com/betagouv/publicodes/wiki), qui est par
ailleurs inutilisé.
Ensuite il est possible de remonter les changements effectués dans le sous-repertoire `publicodes/` vers la branche master de la remote `publicodes`.
Pour se familiariser avec les règles, vous pouvez jeter un œil aux fichiers
contenant les règles elles-mêmes (dans le dossier `rules`) mais cela peut
s'avérer assez abrupt.
```sh
$ git subtree push --prefix=publicodes publicodes master
```
Essayez plutôt de jeter un oeil [aux tests](./publicodes/test/mécanismes/expressions.yaml)
dans un premier temps, puis au [mécanismes en
place](./publicodes/source/mecanisms).
Dans l'autre sens il est possible de rapatrier les changements avec la commande
```sh
$ git subtree pull --prefix=publicodes publicodes master --squash
```
Les dépendances peuvent avoir changé côté publicodes, mieux vaut donc enchaîner avec un `yarn install` pour être à jour.

View File

@ -1,43 +1,33 @@
Ce repo contient :
- Le code source du site [mon-entreprise.fr](https://mon-entreprise.fr)
- La documentation et le code source du langage [publicodes](https://publi.codes)
- Les [règles publicodes](https://github.com/betagouv/mon-entreprise/tree/master/modele-social) pour le calcul des cotisations sociales, des impôts et des droits sociaux.
Ce dépôt contient :
- Le code source du site [mon-entreprise.fr](https://mon-entreprise.fr)
- Les [règles publicodes](https://github.com/betagouv/mon-entreprise/tree/master/modele-social) pour le calcul des cotisations sociales, des impôts et des droits sociaux.
## <a href="https://mon-entreprise.fr"><img src="https://mon-entreprise.fr/images/logo.svg" alt="mon-entreprise.fr" width="200"/></a>
[![Statut déploiement](https://github.com/betagouv/mon-entreprise/actions/workflows/deploy.yaml/badge.svg?branch=master)](https://github.com/betagouv/mon-entreprise/actions/workflows/deploy.yaml?query=branch%3Amaster++)&nbsp;
[![Statut test](https://github.com/betagouv/mon-entreprise/actions/workflows/test.yaml/badge.svg?branch=master)](https://github.com/betagouv/mon-entreprise/actions/workflows/test.yaml?query=branch%3Amaster++)
[![Gitter chat](https://badges.gitter.im/mon-entreprise/community.png)](https://gitter.im/mon-entreprise/community)
Site développé en partenariat avec l'Urssaf, qui a pour mission d'accompagner des créateurs dentreprise dans le développement de leur activité.
Site développé en partenariat avec l'Urssaf, qui a pour mission d'accompagner des créateurs dentreprise dans le développement de leur activité.
Il propose notamment des simulateurs de cotisations sociales très complets, basés sur le language déclaratif [publicodes](https://publi.codes). On peut ainsi calculer le coût d'une embauche, un salaire net après impôt, ses revenus d'auto-entrepreneur ou encore ceux d'un dirigeant de SASU ou d'indépendant
Il propose notamment des simulateurs de cotisations sociales très complets, basés sur le language déclaratif publicodes. On peut ainsi calculer le coût d'une embauche, un salaire net après impôt, ses revenus d'auto-entrepreneur ou encore ceux d'un dirigeant de SASU ou d'indépendant
> 🧮 [Voir la liste des simulateurs](https://mon-entreprise.fr/simulateurs)
Les développeurs ont la possibilité d'intégrer ces simulateurs sur d'autres sites, ou de réutiliser les règles pour effectuer leur propre calculs.
> 🧰 [Voir les outils à disposition des développeurs](https://mon-entreprise.fr/int%C3%A9gration)
## <a href="https://publi.codes"><img src="https://mon-entreprise.fr/images/logo-publicodes.png" alt="Publicodes" width="200"/></a>
[![Npm version](https://img.shields.io/npm/v/publicodes)](https://www.npmjs.com/package/publicodes)
[![Gitter chat](https://badges.gitter.im/publicodes/publicodes.png)](https://gitter.im/publicodes/community)
Publicodes est un langage déclaratif pour encoder les algorithmes d'intérêt public. Il permet de réaliser des calculs généraux tout en fournissant une explication permettant de comprendre et de documenter ces calculs.
Publicode est adapté pour modéliser des domaines métiers complexes pouvant être décomposés en règles élémentaires simples (comme la législation socio-fiscale, un bilan carbone, un estimateur de rendement locatif, etc.). Il propulse les simulateurs de mon-entreprise.fr et le site [futur.eco](https://futur.eco).
> 📖 [Voir la documentation](https://publi.codes)
Tous les outils proposés sur mon-entreprise.fr sont propulsés par [publicodes](https://publi.codes), un nouveau langage pour les algorithmes d'intérêt public.
## Contribuer
Si vous souhaitez contribuer à l'un des deux projet, rendez-vous sur [CONTRIBUTING.md](./CONTRIBUTING.md).
Si vous souhaitez contribuer à l'un des deux projets, rendez-vous sur [CONTRIBUTING.md](./CONTRIBUTING.md).
## 🇬🇧 English users
This repository powers [mycompanyinfrance.fr](https://mycompanyinfrance.fr) and [mon-entreprise.fr](https://mon-entreprise.fr) and [publi.codes](https://publi.codes).
This repository powers [mycompanyinfrance.fr](https://mycompanyinfrance.fr) and [mon-entreprise.fr](https://mon-entreprise.fr)
Most of the documentation (including issues and commit message) is written in french, please raise an [issue](https://github.com/betagouv/mon-entreprise/issues/new) if you are interested and do not speak French.
@ -48,4 +38,3 @@ The website will run well on modern browsers. Internet Explorer is not supported
This compatibility is tested thanks to [BrowserStack](http://browserstack.com/)'s free open source program.
![Logo de Browserstack, notre solution de tests manuels](https://i.imgur.com/dQwLjXA.png)

View File

@ -132,7 +132,7 @@ module.exports = {
// testLocationInResults: false,
// The glob patterns Jest uses to detect test files
testMatch: ['**/*.jest.js'],
testMatch: ['**/*.jest.ts'],
// [
// "**/__tests__/**/*.[jt]s?(x)",
// "**/?(*.)+(spec|test).[tj]s?(x)"
@ -163,7 +163,7 @@ module.exports = {
// It's not possible to have 2 piped transformers like in webpack
// ie ['jest-transform-nearley', 'babel-jest'], so we removed ES6 module from nearley output.
'\\.ne$': require.resolve('jest-transform-nearley'),
'\\.yaml$': require.resolve('yaml-jest'),
'\\.yaml$': 'mon-entreprise/test/regressions/yaml-transformer.js',
'\\.(js|tsx?)$': require.resolve('babel-jest'),
},

View File

@ -1,28 +1,29 @@
# Modèle social français en publicodes
Ce paquet contient les règles publicodes utilisées sur https://mon-entreprise.fr
Ce paquet contient les règles [publicodes](https://publi.codes) utilisées sur https://mon-entreprise.fr
pour le calcul des cotisations sociales, des impôts et des droits sociaux.
### Installation
```
npm install publicodes modele-social
npm install publicodes modele-social
```
### Exemple d'utilisation
```js
import Engine, { formatValue } from "publicodes";
import rules from "modele-social";
const engine = new Engine(rules);
```js
import Engine, { formatValue } from 'publicodes'
import rules from 'modele-social'
const engine = new Engine(rules)
const net = engine
.setSituation({
"contrat salarié . rémunération . brut de base": "3000 €/mois",
})
.evaluate("contrat salarié . rémunération . net");
console.log(formatValue(net));
.setSituation({
'contrat salarié . rémunération . brut de base': '3000 €/mois',
})
.evaluate('contrat salarié . rémunération . net')
console.log(formatValue(net))
```
👉 **[Voir le tutoriel complet](https://mon-entreprise.fr/int%C3%A9gration/biblioth%C3%A8que-de-calcul)**

View File

@ -16,11 +16,11 @@
"dist/index.js"
],
"devDependencies": {
"publicodes": "^1.0.0-beta.12",
"publicodes": "^1.0.0-beta.15",
"yaml": "^1.10.0"
},
"peerDependencies": {
"publicodes": "^1.0.0-beta.12"
"publicodes": "^1.0.0-beta.15"
},
"scripts": {
"build": "node build.js",

View File

@ -21,6 +21,7 @@ artiste-auteur . revenus . BNC:
artiste-auteur . revenus . BNC . micro-bnc:
non applicable si: contrôle micro-bnc
applicable si: recettes > 0 €/an
par défaut: oui
question: Souhaitez-vous opter pour le régime micro-BNC ?
résumé: Avec abattement forfaitaire fiscal de 34 % au titre des frais professionnels
@ -30,7 +31,7 @@ artiste-auteur . revenus . BNC . contrôle micro-bnc:
formule:
toutes ces conditions:
- recettes != 0
- recettes > 72500 €/an
- recettes > 72600 €/an
artiste-auteur . revenus . BNC . recettes:
titre: Revenu en BNC
@ -53,6 +54,7 @@ artiste-auteur . cotisations:
- vieillesse
- CSG-CRDS
- formation professionnelle
arrondi: oui
références:
Urssaf.fr: https://www.urssaf.fr/portail/home/espaces-dedies/artistes-auteurs-diffuseurs-comm/vous-etes-artiste-auteur/taux-des-cotisations.html
@ -72,15 +74,32 @@ artiste-auteur . cotisations . option surcotisation:
règle: assiette
dans: vieillesse
par: assiette surcotisation
question: Souhaitez-vous surcotiser ?
résumé: Vos revenus sont en dessous des seuils vous permettant de valider 4 trimestres de retraite. Vous pouvez choisir de surcotiser pour augmenter vos droits.
question: Souhaitez-vous surcotiser pour augmenter vos droits à retraite ?
description: |
Vos revenus sont en dessous des seuils vous permettant de valider l'ensemble
de vos droits sociaux. Vous pouvez choisir de surcotiser pour augmenter vos
droits.
par défaut: non
références:
Urssaf.fr: https://www.urssaf.fr/portail/home/espaces-dedies/artistes-auteurs-diffuseurs-comm/vous-etes-artiste-auteur/la-surcotisation.html
artiste-auteur . cotisations . assiette surcotisation: 900 heures/an * SMIC horaire
artiste-auteur . cotisations . avertissement trimestres retraite:
type: notification
sévérité: avertissement
formule:
toutes ces conditions:
- assiette > 0 €/an
- assiette < 600 heures/an * SMIC horaire
- option surcotisation = non
description: |
Vos revenus ne vous permettent pas de valider 4 trimestres pour la retraite
de base. Vous pouvez décider de « surcotiser » pour valider 4 trimestres et
bénéficier d'indemnités journalières.
artiste-auteur . cotisations . vieillesse:
titre: Retraite de base
formule:
produit:
assiette: assiette
@ -130,38 +149,123 @@ artiste-auteur . cotisations . formation professionnelle:
assiette: assiette
taux: 0.35%
artiste-auteur . cotisations . assiette 2019:
artiste-auteur . cotisations . IRCEC:
titre: Retraite complémentaire
description: |
Nous calculons l'aide covid sur la base d'une assiette des cotisations 2019
égale à l'assiette 2020.
par défaut: cotisations . assiette
artiste-auteur . réduction de cotisations covid 2020:
description: |
Afin de tenir compte de l'impact de la crise du Covid-19 le gouvernement a
mis en place une prise en charge des cotisations sociales des
artistes-auteurs dues pour 2020 pouvant aller jusqu'à 2 000€.
Cette aide est calculée à partir de l'assiette des cotisations sociales de
2019.
La prise en charge est automatique et vous n'avez pas de démarche a
effectuer. Vous bénéficierez de cette aide après la déclaration annuelle de
revenus 2020, soit au second trimestre 2021.
applicable si:
toutes ces conditions:
- période . fin d'année = 31/12/2020
- cotisations . assiette >= 3000 €/an
Si vous êtes artiste-auteur professionnel et que vous êtes rémunéré en
droits dauteur, lIRCEC est lorganisme de Sécurité sociale qui assure la
gestion de votre retraite complémentaire obligatoire.
formule:
# TODO: c'est inférieur ou égal ici
grille:
assiette: cotisations . assiette 2019
tranches:
- montant: 500 €/an
plafond: 800 heures/an * SMIC horaire
- montant: 1000 €/an
plafond: 2000 heures/an * SMIC horaire
- montant: 2000 €/an
plafond: cotisations
somme:
- cotisation RAAP
- cotisation RACD
- cotisation RACL
références:
Infographie Urssaf: https://www.urssaf.fr/portail/files/live/sites/urssaf/files/documents/5761-Infographie-Aide-AA-WEB.pdf
Guide IRCEC 2021: http://www.ircec.fr/wp-content/uploads/2021/02/guide-ircec-2021.pdf
artiste-auteur . cotisations . IRCEC . cotisation RAAP:
applicable si: assiette > seuil d'affiliation
description: |
Vous pouvez bénéficier d'un taux réduit à votre demande si vos revenus
n'atteignent pas à seuil minimal pour une année donnée. Ce taux réduit
s'applique également à vos revenus déjà soumis à cotisation auprès du RACL
ou du RACD.
formule:
variations:
- si: taux réduit
alors:
produit:
assiette: assiette
taux: 4%
- sinon:
barème:
assiette: assiette
tranches:
- taux: 4%
plafond:
variations:
- si: profession . RACD
alors: cotisation RACD . plafond
- si: profession . RACL
alors: cotisation RACL . plafond
- taux: 8%
arrondi: oui
artiste-auteur . cotisations . IRCEC . cotisation RAAP . seuil d'affiliation: 9135 €/an
artiste-auteur . cotisations . IRCEC . cotisation RAAP . taux réduit:
applicable si: assiette < 3 * seuil d'affiliation
question: Souhaitez-vous cotiser sur la base d'un taux réduit pour votre retraite complémentaire à l'IRCEC ?
par défaut: non
description: |
Le régime RAAP vous permet d'opter pour un taux réduit de 4% au lieu de 8%
si vous en faite la demande.
Les points de retraite complémentaire sont acquis au pro-rata du montant
cotisé. En réduisant votre cotisation vous réduisez donc le nombre de points
acquis.
références:
Guide IRCEC 2021: http://www.ircec.fr/wp-content/uploads/2021/02/guide-ircec-2021.pdf#page=5
artiste-auteur . cotisations . IRCEC . profession:
question: Exercez-vous l'une de professions suivantes ?
description: |
Selon la nature de leur activité, les artistes-auteurs cotisent à
un ou plusieurs régimes de retraite complémentaire gérés par
lIRCEC : dans tous les cas et si vous atteignez le seuil
daffiliation, au RAAP, puis selon votre activité artistique au RACD
et/ou au RACL.
formule:
une possibilité:
choix obligatoire: non
possibilités:
- RACD
- RACL
par défaut: non
artiste-auteur . cotisations . IRCEC . profession . RACD:
icônes: 🎞️
titre: auteur ou compositeur dramatique, de spectacle vivant, de films
description: |
Les professions suivantes cotisent au RACD :
- Les auteurs dramatiques exerçant lune des professions suivantes : scénariste, dialoguiste, adaptateur, réalisateur, auteur de la bible littéraire, auteur graphique danimation, créateur des personnages originaux et des décors sil sagit dun univers original, etc.
- Les auteurs et compositeurs dramatiques et du spectacle vivant : théâtre, danse, opéra, cirque, arts de la rue, etc.
formule: profession = 'RACD'
artiste-auteur . cotisations . IRCEC . profession . RACL:
icônes: 🎙️
titre: auteur ou compositeur lyrique, dialoguiste de doublage
description: Les auteurs et compositeurs dœuvres musicales et les dialoguistes de doublage cotisent au RACL.
formule: profession = 'RACL'
artiste-auteur . cotisations . IRCEC . régime RACL:
question: Cotisez-vous au RACL ?
par défaut: non
artiste-auteur . cotisations . IRCEC . cotisation RACD:
applicable si: profession . RACD
formule:
produit:
assiette: assiette
plafond:
nom: plafond
valeur: 496250 €/an
taux: 8%
arrondi: oui
artiste-auteur . cotisations . IRCEC . cotisation RACL:
applicable si: profession . RACL
formule:
barème:
assiette: assiette
tranches:
- taux: 0%
plafond: 2739 €/an
- taux: 6.5%
plafond:
nom: plafond
valeur: 376665 €/an
- taux:
nom: cotisation de solidarité
valeur: 1.5%
arrondi: oui

View File

@ -41,7 +41,7 @@ plafond journalier sécurité sociale:
Article D242-17 du code de la sécurité sociale: https://www.legifrance.gouv.fr/affichCodeArticle.do?cidTexte=LEGITEXT000006073189&idArticle=LEGIARTI000006736124
SMIC horaire:
formule:
formule:
variations:
- si: établissement . localisation . département = 'Mayotte'
alors: 7.74 €/heure

View File

@ -0,0 +1,150 @@
bénéficiaire:
valeur: non
description: |
Un bénéficiaire est un actionnaire dans une SAS ou un associé dans une
SARL/EURL.
Attention: nous ne prenons en compte ici que le cas de figure de l'associé
unique (SASU et EURL).
# [TODO] [dividendes-indep]
bénéficiaire . compte courant d'associé:
par défaut: 0
titre: Sommes versées en compte courant d'associé
question: Quelles sont les sommes versées en compte courant par l'associé ?
description: >
Cette valeur est nécessaire à calculer le montant maximal imposable au PFU
pour un bénéficiaire au régime des travailleurs indépendants.
Le montant pris en compte est le solde moyen annuel du compte courant. Il
est déterminé par la somme des soldes moyens mensuels du compte, divisée par
le nombre de mois compris dans lexercice.
Le solde moyen mensuel est égal à laddition des soldes journaliers, divisée
par le nombre de jours dans le mois. Le solde moyen mensuel diffère donc du
solde mensuel figurant dans les comptes de la société.
En cas douverture ou de clôture du compte en cours dexercice, le nombre de
mois au cours de lexercice sera réduit au nombre de mois de fonctionnement
du compte. Un compte est considéré comme « fonctionnant », même sil nest
pas mouvementé au cours de lexercice. La date à laquelle les sommes
versées en compte courant doivent être appréciées est le dernier jour de
lexercice précédant le versement des intérêts.
références:
Circulaire RSI C2014-001: https://www.secu-independants.fr/uploads/tx_rsirss/C2014-001.pdf
bénéficiaire . dividendes:
valeur: oui
applicable si: entreprise . imposition = 'IS'
bénéficiaire . dividendes . bruts:
unité: €/an
par défaut: 0 €/an
inversion numérique:
avec:
- nets d'impôt
titre: Dividendes bruts versés
bénéficiaire . dividendes . nets:
somme:
- bruts
- (- cotisations et contributions)
titre: Dividendes nets
bénéficiaire . dividendes . nets d'impôt:
valeur:
somme:
- bruts
- (- dividendes . cotisations et contributions)
- (- impôt . dividendes . montant en sus des autres revenus imposables)
titre: Dividendes nets
résumé: Après paiements des cotisations et impôts
bénéficiaire . dividendes . cotisations et contributions:
produit:
assiette: bruts
composantes:
- attributs:
nom: CSG non déductible
taux:
variations:
- si: impôt . méthode de calcul . PFU
alors: 9.2%
- sinon: 2.4%
- attributs:
nom: CSG déductible
taux:
variations:
- si: impôt . méthode de calcul . PFU
alors: 0%
- sinon: 6.8%
- attributs:
nom: CRDS
taux: 0.5%
- attributs:
nom: prélèvement de solidarité
taux: 7.5%
titre: Cotisations et contributions sur dividendes
note: La CSG sur les revenus soumis au PFU n'est jamais déductible
références:
Fiche impots.gouv.fr: https://www.impots.gouv.fr/portail/particulier/les-revenus-mobiliers
Fiche service-public.fr: https://www.service-public.fr/particuliers/vosdroits/F2329
Article L 136-6 du code de la sécurité sociale: https://www.legifrance.gouv.fr/codes/id/LEGISCTA000006173130/
Article L 136-7 du code de la sécurité sociale: https://www.legifrance.gouv.fr/codes/id/LEGISCTA000006173129/
bénéficiaire . dividendes . imposables:
somme:
- bruts
- (- cotisations et contributions . CSG déductible)
abattement: 40%
titre: Net imposable des dividendes auxquels s'applique le barème de l'impôt
sur le revenu
description: |
Un abattement de 40% s'applique dans le cas où
- la société distributrice des dividendes relève de l'IS
- la société distributrice est française ou a son siège en UE ou dans un
état ayant conclu des accords en ce sens avec la France
- les dividendes sont décidés en assemblée générale.
références:
Fiche service-public.fr: https://www.service-public.fr/professionnels-entreprises/vosdroits/F32963
# [TODO] [dividendes-indep]
bénéficiaire . dividendes . cotisations et contributions . assiette forfaitaire:
variations:
- si: dirigeant = 'indépendant'
alors:
valeur: bruts
plafond: assiette forfaitaire max indépendant
- sinon: bruts
unité: €/an
titre: Assiette des dividendes soumis aux cotisations et contributions au PFU
(ou "flat tax")
description: |
Ce calcul extrait l'assiette des dividendes qui sont soumis au PFU en termes
de cotisations et contributions.
références:
Article L131-6 du Code de la Sécurité Sociale: https://www.legifrance.gouv.fr/codes/id/LEGISCTA000033714224/
Fiche URSSAF: https://www.urssaf.fr/portail/home/independant/mes-cotisations/les-etapes-de-calcul/la-declaration-sociale-et-fiscal/les-revenus-pris-en-compte-pour.html
bénéficiaire . dividendes . cotisations et contributions . assiette forfaitaire max indépendant:
produit:
assiette:
somme:
- entreprise . capital social
- compte courant d'associé
taux: 10%
unité: €/an
bénéficiaire . dividendes . cotisations et contributions . assiette régime indépendant:
valeur: bruts - assiette forfaitaire
par défaut: 0 €/an
unité: €/an
titre: Assiette des dividendes soumis aux cotisations et contributions du
régime indépendant
description: |
Cette assiette représente la partie des dividendes qui n'est pas soumise au
prélèvements sociaux forfaitaires mais aux cotisations et contributions du
régime du travailleur indépendant.
références:
Fiche URSSAF: https://www.urssaf.fr/portail/home/independant/mes-cotisations/les-etapes-de-calcul/la-declaration-sociale-et-fiscal/les-revenus-pris-en-compte-pour.html

View File

@ -1,4 +1,4 @@
chômage partiel:
chômage partiel: oui
chômage partiel . revenu net habituel:
formule:

View File

@ -29,11 +29,11 @@ contrat salarié . convention collective . BTP . catégorie . ouvrier . prévoya
assiette: rémunération . brut de base
plafond: 3 * plafond sécurité sociale
composantes:
- attributs:
- attributs:
nom: employeur
remplace: prévoyance . employeur
taux: 1.72%
- attributs:
- attributs:
nom: salarié
remplace: prévoyance . salarié
taux: 0.87%
@ -60,11 +60,11 @@ contrat salarié . convention collective . BTP . catégorie . etam . prévoyance
assiette: rémunération . brut de base
plafond: 3 * plafond sécurité sociale
composantes:
- attributs:
- attributs:
nom: employeur
remplace: prévoyance . employeur
taux: 1.25%
- attributs:
- attributs:
nom: salarié
remplace: prévoyance . salarié
taux: 0.60%
@ -77,7 +77,6 @@ contrat salarié . convention collective . BTP . catégorie . cadre:
- règle: statut cadre
par: oui
contrat salarié . convention collective . BTP . catégorie . cadre . prévoyance complémentaire:
barème:
assiette: rémunération . brut de base
@ -104,7 +103,6 @@ contrat salarié . convention collective . BTP . catégorie . cadre . prévoyanc
- taux: 50% * 3.60%
plafond: 8
contrat salarié . convention collective . BTP . cotisations conventionnelles:
remplace: cotisations . patronales . conventionnelles
formule:

View File

@ -21,3 +21,19 @@ contrat salarié . convention collective . HCR . majoration heures supplémentai
- taux: 20%
plafond: 8 heures/semaine
- taux: 50%
contrat salarié . convention collective . HCR . prévoyance conventionnelle:
produit:
assiette: rémunération . brut de base
plafond: plafond sécurité sociale
composantes:
- attributs:
nom: employeur
remplace: prévoyance . employeur
taux: 0.40%
- attributs:
nom: salarié
remplace: prévoyance . salarié
taux: 0.40%
références:
Prévoyance HCR: https://www.hcrprevoyance.fr/contenu/documents/modalites_pratiques/HCR%20027_20-2%20-%20Fiche%20Garantie%20Conventionnelle%20Prevoyance.pdf

File diff suppressed because it is too large Load Diff

View File

@ -2,29 +2,235 @@
aide déclaration revenu indépendant 2020:
description: >-
Ces règles calculent les montants demandés dans les déclarations sociale et
fiscale des indépendants de 2021 sur les revenus 2020
Ces règles calculent les montants demandés dans la déclaration de revenu des
indépendants de 2021 sur les revenus 2020.
formule: non
remplace:
- règle: entreprise . ACRE
par: ACRE
- # Par défaut on considère que l'entreprise est mixte et on affiche tous les champs
règle: entreprise . activité . mixte
par: oui
aide déclaration revenu indépendant 2020 . comptabilité:
titre: régime de la déclaration contrôlée
non applicable si: entreprise . imposition . IS
question: Quel méthode de gestion de la comptabilité est utilisée pour l'entreprise ?
formule:
une possibilité:
choix obligatoire: oui
possibilités:
- engagement
- trésorerie
aide déclaration revenu indépendant 2020 . comptabilité . trésorerie:
rend non applicable: entreprise . imposition . IR . micro-fiscal
valeur: comptabilité = 'trésorerie'
titre: comptabilité de trésorerie
aide déclaration revenu indépendant 2020 . comptabilité . engagement:
valeur: comptabilité = 'engagement'
titre: comptabilité d'engagement
aide déclaration revenu indépendant 2020 . cotisations payées:
remplace:
- règle: dirigeant . indépendant . cotisations et contributions . CSG et CRDS . non déductible
par: CSG non déductible + CRDS
- règle: aide déclaration revenu indépendant 2020 . résultat simple . cotisations obligatoires
par:
valeur: cotisations payées . total charges sociales
abattement:
somme:
- dirigeant . indépendant . cotisations et contributions . formation professionnelle
- CSG non déductible
- CRDS
- CSG déductible
applicable si:
une de ces conditions:
- comptabilité . trésorerie
- entreprise . imposition . IS
non applicable si: résultat simple
valeur: oui
aide déclaration revenu indépendant 2020 . cotisations payées . total charges sociales:
remplace:
règle: dirigeant . indépendant . cotisations et contributions
par:
somme:
- cotisations payées . total charges sociales
- dirigeant . indépendant . cotisations facultatives . total
unité: €/an
question: Quel est le montant total des cotisations et contributions sociales payées pendant l'exercice ?
description: |
Vous pouvez retrouver ce montant dans votre espace personnel Urssaf. Voici la marche à suivre :
1. Connectez-vous à votre [espace personnel Urssaf](https://www.urssaf.fr/portail/home.html)
2. Allez dans l'onglet "Document"
3. Selectionnez "relevé de situation comptable"
4. Reportez dans ce champs le montant de la colonne "Cotisation", ligne "Année 2020"
aide déclaration revenu indépendant 2020 . cotisations payées . CSG déductible:
question: Quel est le montant total de CSG déductible payé cette année ?
remplace: dirigeant . indépendant . cotisations et contributions . CSG et CRDS . déductible
unité: €/an
description: |
Vous pouvez retrouver ce montant dans votre espace personnel Urssaf. Voici la marche à suivre :
1. Connectez-vous à votre [espace personnel Urssaf](https://www.urssaf.fr/portail/home.html)
2. Allez dans l'onglet "Document"
3. Selectionnez "demander une attestation"
3. Puis, "attestation CSG/CRDS"
4. Reportez dans ce champs le total de la colonne "Montant déductible CSG" (dernière ligne)
aide déclaration revenu indépendant 2020 . cotisations payées . CSG non déductible:
question: Quel est le montant total de CSG non déductible payé cette année ?
unité: €/an
description: |
Vous pouvez retrouver ce montant dans votre espace personnel Urssaf. Voici la marche à suivre :
1. Connectez-vous à votre [espace personnel Urssaf](https://www.urssaf.fr/portail/home.html)
2. Allez dans l'onglet "Document"
3. Selectionnez "demander une attestation"
3. Puis, "attestation CSG/CRDS"
4. Reportez dans ce champs le total de la colonne "Montant non déductible : CSG" (dernière ligne)
aide déclaration revenu indépendant 2020 . cotisations payées . CRDS:
question: Quel est le montant total de CRDS payé cette année ?
unité: €/an
description: |
Vous pouvez retrouver ce montant dans votre espace personnel Urssaf. Voici la marche à suivre :
1. Connectez-vous à votre [espace personnel Urssaf](https://www.urssaf.fr/portail/home.html)
2. Allez dans l'onglet "Document"
3. Selectionnez "demander une attestation"
3. Puis, "attestation CSG/CRDS"
4. Reportez dans ce champs le total de la colonne "Montant non déductible : CRDS" (dernière ligne)
aide déclaration revenu indépendant 2020 . cotisations payées . cotisations obligatoires déductibles:
remplace: cotisations obligatoires déductibles
unité: €/an
valeur: cotisations payées . total charges sociales
abattement:
somme:
- dirigeant . indépendant . cotisations et contributions . CSG et CRDS
- dirigeant . indépendant . cotisations et contributions . formation professionnelle
aide déclaration revenu indépendant 2020 . cotisations payées version simple:
applicable si:
toutes ces conditions:
- une de ces conditions:
- comptabilité . trésorerie
- entreprise . imposition . IS
- résultat simple
valeur: oui
remplace:
- règle: résultat simple . cotisations obligatoires
par: cotisations payées version simple . cotisations sociales
- règle: résultat simple . total charges sociales déductible
par:
somme:
- cotisations payées version simple . cotisations sociales
- cotisations payées version simple . CSG déductible et CFP
aide déclaration revenu indépendant 2020 . cotisations payées version simple . CSG déductible et CFP:
question: Quel est le montant total de CSG déductible et CFP payées cette année ?
unité: €/an
description: |
Indiquez le montant de la part de CSG déductible et de CFP que vous avez payé en 2020 (peu importe lannée à laquelle ces contributions se rapportent).
aide déclaration revenu indépendant 2020 . cotisations payées version simple . cotisations sociales:
question: Quel est le montant de vos cotisations sociales payées cette année ?
unité: €/an
description: |
Indiquez le montant des cotisations sociales aux régimes obligatoires (maladie-maternité, vieillesse, invalidité-décès, famille) que vous avez payées en 2020 (peu importe lannée à laquelle ces cotisations se rapportent).
aide déclaration revenu indépendant 2020 . régime d'imposition: oui
aide déclaration revenu indépendant 2020 . régime d'imposition . déclaration contrôlée:
titre: régime de la déclaration contrôlée
applicable si: entreprise . activité . libérale
non applicable si:
une de ces conditions:
- entreprise . imposition . IS
- entreprise . imposition . IR . micro-fiscal
valeur: oui
description: |
Si vous devez déclarer des bénéfices non commerciaux (BNC), vous pouvez être soumis au régime de la déclaration contrôlée ou au régime micro-BNC ; cela dépend du montant de vos bénéfices.
Le régime de la déclaration contrôlée est le régime obligatoire si les bénéfices non commerciaux à déclarer sont supérieurs à 70 000 € HT. Si les bénéfices sont inférieurs, les professionnels dépendent du régime micro-BNC mais peuvent tout de même opter pour le régime de la déclaration contrôlée.
Dans le cas de la déclaration contrôlée, le contribuable est imposé sur les bénéfices effectivement réalisés. Dans le cas du régime micro-BNC, un abattement forfaitaire de 34 % est appliqué automatiquement après déclaration du chiffre daffaires.
aide déclaration revenu indépendant 2020 . régime d'imposition . réel:
description: |
Le régime simplifié d'imposition (RSI) et le régime réel normal (RN) s'appliquent aux bénéfices réalisés au cours de l'exercice et à la taxe sur la valeur ajoutée (TVA).
C'est principalement le détail demandé lors du remplissage des obligations comptables qui différencie ces 2 régimes d'imposition.
question: Quel est le régime d'imposition applicable à l'exercice ?
non applicable si:
une de ces conditions:
- entreprise . imposition . IR . micro-fiscal
- déclaration contrôlée
formule:
une possibilité:
choix obligatoire: oui
possibilités:
- simplifié
- normal
aide déclaration revenu indépendant 2020 . régime d'imposition . réel . simplifié:
description: |
Les entreprises soumises au régime d'imposition réel simplifié doivent tenir une comptabilité classique : un bilan, un compte de résultat et des annexes. Des dispositions particulières sappliquent pour alléger vos obligations comptables :
- le livre journal nenregistre journellement que les recettes encaissées et les dépenses payées
- les créances et les dettes sont constatées à la clôture de lexercice
- le bilan fourni à ladministration fiscale est un bilan simplifié
titre: régime réel simplifié
acronyme: RSI
valeur: réel = 'simplifié'
aide déclaration revenu indépendant 2020 . régime d'imposition . réel . normal:
description: |
La comptabilité de lentreprise soumise au régime réel normal doit être plus précise que pour le régime réel simplifié :
- Elle doit s'appuyer sur des pièces justificatives.
- L'entreprise est obligée de procéder à l'enregistrement comptable chronologique des mouvements affectant son patrimoine.
- L'entreprise doit procéder à un inventaire au moins une fois tous les 12 mois.
- L'entreprise doit établir des comptes annuels comprenant un bilan, un compte de résultat et des annexes.
- L'entreprise doit tenir un livre journal et un grand livre.
titre: régime réel normal
acronyme: RN
valeur: réel = 'normal'
aide déclaration revenu indépendant 2020 . nature de l'activité:
remplace: entreprise . activité
remplace:
- entreprise . activité
- règle: entreprise . activité . libérale
par: libérale
- règle: entreprise . activité . artisanale
par: artisanale
- règle: entreprise . activité . commerciale
par: commerciale
question: Quelle est la nature de votre activité ?
par défaut: "'commerciale'"
formule:
une possibilité:
choix obligatoire: oui
possibilités:
- artisanale
- commerciale ou industrielle
- commerciale
- libérale
références:
Vérifier la nature de son activité: https://bpifrance-creation.fr/encyclopedie/trouver-proteger-tester-son-idee/verifiertester-son-idee/verifier-nature-son-activite
Comment déterminer la nature de l'activité d'une entreprise ?: https://www.service-public.fr/professionnels-entreprises/vosdroits/F32887
aide déclaration revenu indépendant 2020 . ACRE:
remplace: entreprise . ACRE
description: >-
L'aide à la création ou à la reprise d'une entreprise (Acre) consiste en une
exonération partielle de charges sociales, dite exonération de début
d'activité pendant 12 mois.
d'activité pendant 12 mois.
Elle est automatique pour les sociétés et les entreprises individuelles
@ -49,7 +255,7 @@ aide déclaration revenu indépendant 2020 . ACRE:
- Si le revenu est inférieur à 75% du PASS lexonération est totale.
- Si le revenu est compris entre 75% et 100% du PASS lexonération est dégressive.
- Si le revenu est compris entre 75% et 100% du PASS lexonération est dégressive.
- Si le revenu est supérieur à 100% du PASS lexonération est nulle.
@ -59,22 +265,20 @@ aide déclaration revenu indépendant 2020 . ACRE:
aide déclaration revenu indépendant 2020 . nature de l'activité . libérale:
rend non applicable: dirigeant . indépendant . PL . CIPAV
remplace: entreprise . activité . libérale
formule: nature de l'activité = 'libérale'
titre: Libérale rattachée au régime général
description: |
Ce sont les professions "intellectuelles", qui ne sont rattachée à aucune
caisse spécifique de retraite.
C'est le cas de toutes les professions libérale non reglementée depuis le
C'est le cas de toutes les professions libérale non réglementées depuis le
1er janvier 2020.
références:
fiche Wikipedia: https://fr.m.wikipedia.org/wiki/Profession_libérale
aide déclaration revenu indépendant 2020 . nature de l'activité . commerciale ou industrielle:
remplace: entreprise . activité . commerciale ou industrielle
formule: nature de l'activité = 'commerciale ou industrielle'
aide déclaration revenu indépendant 2020 . nature de l'activité . commerciale:
formule: nature de l'activité = 'commerciale'
description: |
### Activité commerciale
- Achats de biens pour leur revente en l'état (commerce en gros ou de détail)
@ -86,7 +290,6 @@ aide déclaration revenu indépendant 2020 . nature de l'activité . commerciale
aide déclaration revenu indépendant 2020 . nature de l'activité . artisanale:
formule: nature de l'activité = 'artisanale'
remplace: entreprise . activité . artisanale
description: |
C'est une activité de service, de production, de transformation, ou de réparation exercée par un professionnel qualifié, et qui nécessite des compétences et un savoir-faire spécifiques.
@ -116,49 +319,585 @@ aide déclaration revenu indépendant 2020 . période:
- règle: période . fin d'année
par: 31/12/2020
aide déclaration revenu indépendant 2020 . revenu net fiscal:
titre: revenu net fiscal
résumé: avant déduction des charges sociales et exonérations fiscales [A]
unité: €/an
formule: dirigeant . rémunération totale
aide déclaration revenu indépendant 2020 . réduction covid:
titre: Réduction de cotisation Covid
remplace:
- règle: dirigeant . indépendant . cotisations et contributions . cotisations
par:
valeur: dirigeant . indépendant . cotisations et contributions . cotisations
abattement: réduction covid . part cotisations
- règle: dirigeant . indépendant . cotisations et contributions . CSG et CRDS . non déductible
par:
valeur: dirigeant . indépendant . cotisations et contributions . CSG et CRDS . non déductible
abattement: réduction covid . part CSG . non déductible
- règle: dirigeant . indépendant . cotisations et contributions . CSG et CRDS . déductible
par:
valeur: dirigeant . indépendant . cotisations et contributions . CSG et CRDS . déductible
abattement: réduction covid . part CSG . déductible
description: |
Dans le cadre de la crise sanitaire, le Gouvernement a mis en œuvre plusieurs mesures exceptionnelles concernant les cotisations et contributions sociales des travailleurs indépendants affectés par la crise du coronavirus avec :
aide déclaration revenu indépendant 2020 . CSG déductible:
- un premier dispositif de réduction des cotisations et contributions sociales prévu par la 3ème loi de finance rectificative (LFR3) pour 2020(1) dans le cadre de la première période détat durgence sanitaire du printemps 2020,
- un second dispositif de réduction prévu par la loi de financement de la sécurité sociale (LFSS) pour 2021 (2) dans le cadre de la seconde période détat durgence sanitaire de lautomne 2020.
références:
(1) Décret n° 2020-1103 du 1er septembre 2020: https://www.legifrance.gouv.fr/jorf/id/JORFTEXT000042297236/
(2) Décret 2021-75 du 27 janvier 2021: https://www.legifrance.gouv.fr/jorf/id/JORFTEXT000043070140
question: Remplissez-vous les conditions pour bénéficier de la réduction de cotisations sociales liées à la crise du Covid-19 ?
par défaut: non
aide déclaration revenu indépendant 2020 . réduction covid . montant:
titre: Réduction Covid
formule:
somme:
- printemps 2020
- automne 2020
aide déclaration revenu indépendant 2020 . réduction covid . conjoint collaborateur:
applicable si: dirigeant . indépendant . conjoint collaborateur
remplace:
règle: dirigeant . indépendant . conjoint collaborateur . cotisations
par:
valeur: dirigeant . indépendant . conjoint collaborateur . cotisations
abattement: réduction covid . conjoint collaborateur
valeur: montant
aide déclaration revenu indépendant 2020 . réduction covid . total:
titre: Réduction Covid
description: Intégrée dans le montant des cotisations affiché ci-dessus
somme:
- montant
- conjoint collaborateur
aide déclaration revenu indépendant 2020 . réduction covid . part cotisations:
titre: Part réduction Covid sur cotisations (hors CSG/CRDS)
arrondi: oui
résoudre la référence circulaire: oui
produit:
assiette: montant
taux: pourcentage cotisations
aide déclaration revenu indépendant 2020 . réduction covid . pourcentage cotisations:
unité: '%'
valeur: dirigeant . indépendant . cotisations et contributions . cotisations / (dirigeant . indépendant . cotisations et contributions . cotisations + dirigeant . indépendant . cotisations et contributions . CSG et CRDS)
aide déclaration revenu indépendant 2020 . réduction covid . part CSG:
titre: Part réduction Covid sur CSG
valeur: montant - part cotisations
aide déclaration revenu indépendant 2020 . réduction covid . part CSG . déductible:
titre: Part réduction Covid sur CSG/CRDS déductible
produit:
assiette: part CSG
taux: dirigeant . indépendant . cotisations et contributions . CSG et CRDS . déductible . taux / taux CSG
arrondi: oui
aide déclaration revenu indépendant 2020 . réduction covid . part CSG . non déductible:
titre: Part réduction Covid sur CSG/CRDS non déductible
valeur: part CSG - part CSG . déductible
aide déclaration revenu indépendant 2020 . réduction covid . taux CSG:
unité: '%'
valeur:
somme:
- dirigeant . indépendant . cotisations et contributions . CSG et CRDS . non déductible . taux
- dirigeant . indépendant . cotisations et contributions . CSG et CRDS . déductible . taux
aide déclaration revenu indépendant 2020 . réduction covid . montant . printemps 2020:
applicable si: éligible aide printemps 2020
formule:
variations:
- si: secteur d'activité = 'S2'
alors: 1800 €/an
- sinon: 2400 €/an
aide déclaration revenu indépendant 2020 . réduction covid . montant . automne 2020:
applicable si: éligible aide automne 2020
formule: nombre de mois éligibles * 600 €/an/mois éligibles
aide déclaration revenu indépendant 2020 . réduction covid . secteur d'activité:
question: |
De quel secteur votre activité principale relève-t'elle ?
# Pas d'inéligibilité explicite des PL réglementés à ce dispositif, mais il
# apparaît que les métiers concernés (médecins, avocats...) sont incompatibles
# avec les secteurs d'activités concernés par l'aide (hôtels, restaurants...)
description: |
Les conditions déligibilité aux aides « Covid » dépendent du secteur dactivité
dont relève lactivité principale.
Les hôtels, restaurants, bars, etc. sont dans
la catégorie dite "S1" et ont le droit aux aides sans autres conditions.
Les secteurs dont l'activité dépendent de celles du "secteur 1" peuvent
aussi bénéficier des aides à condition d'avoir eu une baisse de chiffre
d'affaires significative pendant le confinement.
Enfin les secteurs dits "S2" sont ceux impliquant l'accueil du public, et
sont éligibles aux aides à condition d'avoir subi une fermeture
administrative.
Les modalités sont précisées sur le site de l'Urssaf.
références:
Liste détaillée des secteurs (pdf): https://www.urssaf.fr/portail/files/live/sites/urssaf/files/documents/liste-secteurs-pour-infographie.pdf
Présentation du dispositif: https://www.urssaf.fr/portail/home/actualites/toute-lactualite-independant/dispositifs-de-reduction-des-cot.html
formule:
une possibilité:
choix obligatoire: oui
possibilités:
- S1
- S1-bis
- S2
par défaut: non
aide déclaration revenu indépendant 2020 . réduction covid . secteur d'activité . S1:
titre: Secteur dit S1
description: |
Secteurs du tourisme, de lhôtellerie, de la restauration, du sport, de la culture, du transport aérien et de lévénementiel.
aide déclaration revenu indépendant 2020 . réduction covid . secteur d'activité . S1-bis:
titre: Secteur dit S1 bis
description: |
Secteurs dont lactivité dépend de celle des secteurs 1 et qui ont subi une très forte baisse de leur chiffre daffaires.
aide déclaration revenu indépendant 2020 . réduction covid . secteur d'activité . S2:
titre: Secteur dit S2
description: Autres secteurs dactivité qui ont fait lobjet dune interdiction affectant de manière prépondérante la poursuite de leur activité.
aide déclaration revenu indépendant 2020 . réduction covid . éligible aide printemps 2020:
applicable si: secteur d'activité
question: Êtes-vous éligibles au dispositif de réduction prévu au titre de la première vague de la crise sanitaire du printemps 2020 ?
par défaut: non
description: |
Les conditions déligibilité à la réduction au titre de la première période détat durgence sanitaire du printemps 2020 dépendent de votre secteur dactivité :
### Secteur S1
Activité principale exercée relevant des secteurs du tourisme, de lhôtellerie, de la restauration, du sport, de la culture, du transport aérien et de lévénementiel (Voir liste détaillée des activités relevant du secteur S1).
Votre activité doit avoir débuté avant le 1er juillet 2020.
Si vous avez cessé votre activité, la cessation doit être postérieure ou égale au 15 mars 2020.
### Secteur S1 bis
Activité principale exercée dépendant de celles du secteur S1 (Voir liste détaillée des activités relevant du secteur S1 bis) et ayant subi une forte baisse du chiffre daffaires à savoir :
- Soit une baisse de chiffre daffaires dau moins 80% durant la période comprise entre le 15 mars et le 15 mai 2020 par rapport à la même période lannée précédente (cas 1) ;
ou, par rapport au chiffre daffaires mensuel moyen de lannée 2019 ramené sur deux mois (cas 2) ;
ou, pour les entreprises créées après le 15 mars 2019 et avant le 10 mars 2020, par rapport au montant moyen calculé sur deux mois du chiffre daffaires réalisé entre la date de création de lentreprise et le 15 mars 2020 (cas 2 bis).
- Soit à une baisse de chiffre daffaires durant la période comprise entre le 15 mars et le 15 mai 2020 par rapport à la même période lannée précédente qui représente au moins 30 % du chiffre daffaires de lannée 2019 (cas 3).
ou, pour les entreprises créées entre le 1er et le 14 mars 2019, une baisse du chiffre daffaires réalisé entre la date de création de lentreprise et le 31 décembre 2019 ramené sur 12 mois (cas 3 bis).
Votre activité doit avoir débuté avant le 1er juillet 2020.
Si vous avez cessé votre activité, la cessation doit être postérieure ou égale au 15 mars 2020.
### Secteur S2
Activité principale exercée dans un secteur autre que S1 et S1 bis impliquant laccueil du public et interrompue en application du décret n° 2020-293 du 23 mars 2020, à lexclusion des fermetures volontaires.
Votre activité doit avoir débuté avant le 1er juin 2020.
Si vous avez cessé votre activité, la cessation doit être postérieure ou égale au 15 mars 2020.
aide déclaration revenu indépendant 2020 . réduction covid . éligible aide automne 2020:
applicable si: secteur d'activité
question: Êtes-vous éligibles au dispositif de réduction prévu au titre de la première vague de la crise sanitaire de l'automne 2020 ?
par défaut: non
description: |
Les conditions déligibilité à la réduction au titre de la seconde période détat durgence sanitaire de lautomne 2020 sévaluent mois par mois et dépendent de votre secteur dactivité.
Vous devez également préciser le nombre de mois où vous remplissez les conditions déligibilité.
### Secteur dit S1
Activité principale exercée relevant des secteurs du tourisme, de lhôtellerie, de la restauration, du sport, de la culture, du transport aérien et de lévénementiel
Mois concerné | Conditions d'éligibilité
--------------|--------------------------
Octobre 2020 | Activité exercée dans une zone dapplication des mesures de couvre-feu Et avoir fait lobjet dune mesure dinterdiction daccueil du public **OU** Activité exercée dans une zone dapplication des mesures de couvre-feu Et avoir subi une forte baisse du chiffre daffaires mensuel(ca)
Novembre 2020 à Mars 2021 | Avoir fait lobjet dune mesure dinterdiction daccueil du public **OU** Avoir subi une forte baisse du chiffre daffaires mensuel(ca)
_(ca) Condition de baisse de chiffre d'affaire:_
_Vous devez avoir subi une baisse dau moins 50% du chiffre daffaires mensuel par rapport au même mois de lannée précédente, ou si vous le souhaitez par rapport au chiffre daffaires mensuel moyen de lannée 2019, ou, pour les entreprises créées en 2020, par rapport au montant mensuel moyen du chiffre daffaires réalisé entre la date de création de lentreprise et le 31 août 2020._
_Cette condition est également satisfaite lorsque la baisse de chiffre daffaires mensuel par rapport à la même période de lannée précédente représente au moins 15% du chiffre daffaires de lannée 2019, ou, pour les entreprises créées en 2019, par rapport au chiffre daffaires de lannée 2019 ramené sur 12 mois._
Si vous avez cessé votre activité, la cessation doit être postérieure ou égale au 17 octobre 2020.
Bon à savoir : Les activités de livraison, de retrait de commande ou de vente à emporter ne sont pas prises en compte pour apprécier le respect de la condition dinterdiction daccueil du public.
### Secteur dit S1 bis
Activité principale exercée dépendant de celles du secteur S1
Mois concerné | Conditions d'éligibilité
--------------|--------------------------
Octobre 2020 | Avoir fait lobjet dune mesure dinterdiction daccueil du public **OU** Avoir subi une forte baisse du chiffre daffaires mensuel(ca)
_(ca) Condition de baisse de chiffre d'affaire:_
_Vous devez avoir subi une baisse dau moins 50% du chiffre daffaires mensuel par rapport au même mois de lannée précédente, ou si vous le souhaitez par rapport au chiffre daffaires mensuel moyen de lannée 2019, ou, pour les entreprises créées en 2020, par rapport au montant mensuel moyen du chiffre daffaires réalisé entre la date de création de lentreprise et le 31 août 2020._
_Cette condition est également satisfaite lorsque la baisse de chiffre daffaires mensuel par rapport à la même période de lannée précédente représente au moins 15% du chiffre daffaires de lannée 2019, ou, pour les entreprises créées en 2019, par rapport au chiffre daffaires de lannée 2019 ramené sur 12 mois._
Si vous avez cessé votre activité, la cessation doit être postérieure ou égale au 17 octobre 2020.
Bon à savoir : Les activités de livraison, de retrait de commande ou de vente à emporter ne sont pas prises en compte pour apprécier le respect de la condition dinterdiction daccueil du public.
### Secteur dit S2
Activité principale exercée dans un secteur autre que S1 et S1 bis
- **Mois concerné** : novembre 2020, février 2021, mars 2021
- **Conditions d'éligibilité**: Avoir fait lobjet dune mesure dinterdiction affectant de manière prépondérante la poursuite de lactivité, en application du décret n° 2020-1310 du 29 octobre 2020
Si vous avez cessé votre activité, la cessation doit être postérieure ou égale au 30 octobre 2020.
Bon à savoir : Les activités de livraison, de retrait de commande ou de vente à emporter ne sont pas prises en compte pour apprécier le respect de la condition dinterdiction.
aide déclaration revenu indépendant 2020 . réduction covid . nombre de mois éligibles:
formule:
somme:
- S1 et S1bis
- S2
arrondi: oui
aide déclaration revenu indépendant 2020 . réduction covid . nombre de mois éligibles . S1 et S1bis:
applicable si:
toutes ces conditions:
- éligible aide automne 2020
- une de ces conditions:
- secteur d'activité = 'S1'
- secteur d'activité = 'S1-bis'
question: |
Précisez le nombre de mois entre octobre 2020* et mars 2021 durant lesquels vous avez subi une interdiction daccueil du public ou une baisse de 50% de votre chiffre daffaires
description: |
* Pour octobre 2020, votre activité devait également être située dans une zone dapplication des mesures de couvre-feu
unité: mois éligibles
plafond: 6 mois éligibles
aide déclaration revenu indépendant 2020 . réduction covid . nombre de mois éligibles . S2:
applicable si:
toutes ces conditions:
- éligible aide automne 2020
- secteur d'activité = 'S2'
question: |
Précisez le nombre de mois (novembre 2020 et/ou février 2021 et/ou mars 2021) durant lesquels vous avez fait lobjet dune mesure dinterdiction affectant de manière prépondérante la poursuite de votre activité
unité: mois éligibles
plafond: 3 mois éligibles
aide déclaration revenu indépendant 2020 . cotisations obligatoires déductibles:
description: Cotisations obligatoires déductibles, utile pour calculer l'assiette de la CSG/CRDS
somme:
- dirigeant . indépendant . cotisations et contributions . cotisations
- dirigeant . indépendant . conjoint collaborateur . cotisations
aide déclaration revenu indépendant 2020 . rémunération déductible:
variations:
- si: entreprise . imposition . IS
alors: dirigeant . rémunération . nette
- sinon: 0
aide déclaration revenu indépendant 2020 . formulaire 2033:
titre: formulaire 2033-SD
applicable si: régime d'imposition . réel . simplifié
valeur: oui
résumé: Liasse fiscale du régime réel simplifié
référence:
formulaire: https://www.impots.gouv.fr/portail/files/formulaires/2033-sd/2021/2033-sd_3330.pdf
notice: https://www.impots.gouv.fr/portail/files/formulaires/2033-sd/2021/2033-sd_3498.pdf
aide déclaration revenu indépendant 2020 . formulaire 2033 . rubrique 250:
résumé: Rémunérations du personnel (+)
valeur: rémunération déductible
description: |
Si votre entreprise emploie des salarié, ajoutez à ce montant le total des rémunération brute versée durant l'exercice
aide déclaration revenu indépendant 2020 . formulaire 2033 . rubrique 252:
résumé: Charges sociales (+)
valeur: dirigeant . indépendant . cotisations et contributions
description: |
Si votre entreprise emploie des salarié, ajoutez à ce montant le total des cotisations patronales payées durant l'exercice
aide déclaration revenu indépendant 2020 . formulaire 2033 . rubrique 324:
résumé: Impôts et taxes non déductibles
applicable si: entreprise . imposition . IR
valeur: dirigeant . indépendant . cotisations et contributions . CSG et CRDS . non déductible
aide déclaration revenu indépendant 2020 . formulaire 2033 . rubrique 330:
résumé: Divers à réintégrer (+)
description: Réintégrer également les montants spécifiés [page 8 de la notice dédiée](https://www.impots.gouv.fr/portail/files/formulaires/2033-sd/2019/2033-sd_2570.pdf#page=8)
applicable si:
toutes ces conditions:
- entreprise . imposition . IR
- dirigeant . indépendant . cotisations facultatives . non déductibles > 0
valeur: dirigeant . indépendant . cotisations facultatives . non déductibles
aide déclaration revenu indépendant 2020 . formulaire 2033 . rubrique 381:
applicable si: entreprise . imposition . IR
résumé: Primes et cotisations complémentaires facultatives
valeur: dirigeant . indépendant . cotisations facultatives . total
aide déclaration revenu indépendant 2020 . formulaire 2033 . rubrique 325:
applicable si: entreprise . imposition . IR
résumé: Dont montant déductible des cotisations facultatives versées en application du I de l'article 154 bis du CGI dont cotisations facultatives Madelin (I de lart. 154 bis du CGI)
valeur: dirigeant . indépendant . cotisations facultatives . déductibles
aide déclaration revenu indépendant 2020 . formulaire 2033 . rubrique 327:
applicable si: entreprise . imposition . IR
résumé: Dont cotisations facultatives aux nouveaux plans d'épargne retraite
valeur: dirigeant . indépendant . cotisations facultatives . PER
aide déclaration revenu indépendant 2020 . formulaire 2033 . rubrique 380:
applicable si: entreprise . imposition . IR
résumé: Cotisations personnelles obligatoires de l'exploitant
valeur: dirigeant . indépendant . cotisations et contributions
abattement: dirigeant . indépendant . cotisations facultatives . total
aide déclaration revenu indépendant 2020 . formulaire 2033 . rubrique 326:
applicable si: entreprise . imposition . IR
résumé: Dont montant déductible des cotisations sociales obligatoires hors CSG-CRDS
valeur: cotisations obligatoires déductibles
aide déclaration revenu indépendant 2020 . formulaire 2050:
titre: formulaire 2052-SD et 2053-SD
applicable si: régime d'imposition . réel . normal
valeur: oui
résumé: Liasse fiscale du régime réel normal
référence:
formulaire: https://www.impots.gouv.fr/portail/files/formulaires/2050-liasse/2021/2050-liasse_3391.pdf
notice: https://www.impots.gouv.fr/portail/files/formulaires/2032-not-sd/2020/2032-not-sd_2959.pdf
aide déclaration revenu indépendant 2020 . formulaire 2050 . rubrique FY:
résumé: Salaires et traitements (+)
valeur: rémunération déductible
description: |
Si votre entreprise emploie des salarié, ajoutez à ce montant le total des rémunérations et indemnités versée durant l'exercice
aide déclaration revenu indépendant 2020 . formulaire 2050 . rubrique FZ:
résumé: Charges sociales (+)
valeur: dirigeant . indépendant . cotisations et contributions
description: |
Si votre entreprise emploie des salarié, ajoutez à ce montant le total des cotisations patronales payées durant l'exercice, ainsi que toutes les autres charges sociales
aide déclaration revenu indépendant 2020 . formulaire 2050 . rubrique A2:
applicable si: entreprise . imposition . IR
résumé: Cotisations personnelles de l'exploitant
valeur: dirigeant . indépendant . cotisations et contributions
abattement: dirigeant . indépendant . cotisations facultatives . total
aide déclaration revenu indépendant 2020 . formulaire 2050 . rubrique A5:
applicable si: entreprise . imposition . IR
résumé: Dont montant des cotisations sociales obligatoires hors CSG/CRDS
valeur: cotisations obligatoires déductibles
aide déclaration revenu indépendant 2020 . formulaire 2050 . rubrique A6:
applicable si: entreprise . imposition . IR
résumé: Primes et cotisations complémentaires personnelles facultatives
valeur: dirigeant . indépendant . cotisations facultatives . déductibles
aide déclaration revenu indépendant 2020 . formulaire 2050 . rubrique A7:
applicable si: entreprise . imposition . IR
résumé: Dont cotisations facultatives Madelin
valeur: dirigeant . indépendant . cotisations facultatives . contrats madelin
aide déclaration revenu indépendant 2020 . formulaire 2050 . rubrique A8:
applicable si: entreprise . imposition . IR
résumé: Dont cotisations facultatives aux nouveaux plans d'épargne retraite
valeur: dirigeant . indépendant . cotisations facultatives . PER
aide déclaration revenu indépendant 2020 . formulaire 2050 . rubrique WQ:
applicable si: entreprise . imposition . IR
valeur: dirigeant . indépendant . cotisations et contributions . non déductibles
résumé: Réintégrations diverses (+)
description: Ajouter toutes les réintégrations listée dans la [page 9 de la notice](https://www.impots.gouv.fr/portail/files/formulaires/2032-not-sd/2020/2032-not-sd_2959.pdf#page=9)
aide déclaration revenu indépendant 2020 . formulaire 2035:
titre: formulaire 2035-A-SD
applicable si: régime d'imposition . déclaration contrôlée
valeur: oui
résumé: Liasse fiscale du régime de la déclaration contrôlée
référence:
formulaire: https://www.impots.gouv.fr/portail/formulaire/2035-sd/revenus-non-commerciaux-et-assimiles-regime-de-la-declaration-controlee
aide déclaration revenu indépendant 2020 . formulaire 2035 . rubrique BS:
résumé: Autres impôts (+)
description: Contribution à la formation professionnelle de l'exploitant et de son conjoint, à ajouter aux autres impôts existants.
valeur: dirigeant . indépendant . cotisations et contributions . formation professionnelle
aide déclaration revenu indépendant 2020 . formulaire 2035 . rubrique BV:
résumé: Contribution sociale généralisée déductible
valeur: dirigeant . indépendant . cotisations et contributions . CSG et CRDS . déductible
aide déclaration revenu indépendant 2020 . formulaire 2035 . rubrique BK:
résumé: Charges sociales personnelles
somme:
- cotisations obligatoires déductibles
- dirigeant . indépendant . cotisations facultatives . déductibles
aide déclaration revenu indépendant 2020 . formulaire 2035 . rubrique BT:
résumé: Dont obligatoires
valeur: cotisations obligatoires déductibles
aide déclaration revenu indépendant 2020 . formulaire 2035 . rubrique BZ:
résumé: Dont cotisations facultatives Madelin
valeur: dirigeant . indépendant . cotisations facultatives . contrats madelin
aide déclaration revenu indépendant 2020 . formulaire 2035 . rubrique BU:
résumé: Dont facultatives aux nouveaux plans dépargne retraite
valeur: dirigeant . indépendant . cotisations facultatives . PER
aide déclaration revenu indépendant 2020 . formulaire 2042:
valeur: oui
résumé: Déclaration des revenus
référence:
formulaire: https://www.impots.gouv.fr/portail/formulaire/2042/declaration-des-revenus
notice fusion déclaration sociale/fiscale: https://www.impots.gouv.fr/portail/www2/fichiers/documentation/brochure/ir_2021/pdf_som/11-bis-decla_fusion_fisc_185a195.pdf
aide déclaration revenu indépendant 2020 . formulaire 2042 . rubrique 1GB:
titre: rubrique 1GB / 1HB
applicable si: entreprise . imposition . IS
résumé: Traitements et salaires
valeur: dirigeant . rémunération . imposable
aide déclaration revenu indépendant 2020 . formulaire 2042 . rubrique DSCA:
titre: rubrique DSCA / DSCB
résumé: Cotisations sociales obligatoires
description: |
La rubrique DSCA ou DSCB de la déclaration de revenu fiscale et sociale unifiée correspond au montant des cotisations sociales obligatoires déductibles fiscalement (ces cotisations seront soumises à CSG-CRDS). La rubrique DSCA ou DSCB figure dans le volet social « déclaration de revenus des indépendants » de la déclaration 2042.
valeur: cotisations obligatoires déductibles
références:
notice: https://www.impots.gouv.fr/portail/www2/fichiers/documentation/brochure/ir_2021/pdf_som/11-bis-decla_fusion_fisc_185a195.pdf
aide déclaration revenu indépendant 2020 . formulaire 2042 . rubrique DSEA:
titre: rubrique DSEA / DSEB
résumé: Cotisations facultatives
formule: dirigeant . indépendant . cotisations facultatives . déductibles
aide déclaration revenu indépendant 2020 . formulaire 2042 . rubrique DSIA:
titre: rubrique DSIA / DSIB
résumé: Débit de tabac
formule: dirigeant . indépendant . cotisations et contributions . déduction tabac
aide déclaration revenu indépendant 2020 . formulaire 2042 . rubrique DSLA:
titre: rubrique DSLA / DSLB
résumé: Revenus étrangers imposables mais exonérés de CSG-CRDS
formule: dirigeant . indépendant . revenus étrangers . montant
aide déclaration revenu indépendant 2020 . formulaire 2042 PRO C:
valeur: oui
applicable si: entreprise . imposition . IR . micro-fiscal
références:
formulaire: https://www.impots.gouv.fr/portail/files/formulaires/2042/2021/2042_3451.pdf
aide déclaration revenu indépendant 2020 . formulaire 2042 PRO C . rubrique 5KO:
titre: rubrique 5KO / 5LO
résumé: Revenus imposables micro BIC (ventes de marchandises et assimilées)
valeur: entreprise . chiffre d'affaires . vente restauration hébergement
aide déclaration revenu indépendant 2020 . formulaire 2042 PRO C . rubrique 5KP:
titre: rubrique 5KP / 5LP
résumé: Revenus imposables micro BIC (prestations de services et locations meublées)
valeur: entreprise . chiffre d'affaires . service BIC
aide déclaration revenu indépendant 2020 . formulaire 2042 PRO C . rubrique 5HQ:
titre: rubrique 5HQ / 5IQ
résumé: Régime déclaratif spécial ou micro BNC (recettes brutes)
valeur: entreprise . chiffre d'affaires . service BNC
aide déclaration revenu indépendant 2020 . informations résultat par formulaire:
applicable si: comptabilité . engagement
non applicable si: entreprise . imposition . IR . micro-fiscal
valeur: oui
aide déclaration revenu indépendant 2020 . informations résultat par formulaire . réduction Covid:
description: La réduction de cotisation applicable dans le cas du dispositif Covid
valeur: réduction covid . total
aide déclaration revenu indépendant 2020 . informations résultat par formulaire . rémunération totale:
titre: Total rémunération dirigeant
résumé: '[A]'
description: La rémunération "superbrute" du dirigeant, incluant toutes les cotisations et contributions sociales.
valeur: dirigeant . rémunération . totale
aide déclaration revenu indépendant 2020 . informations résultat par formulaire . cotisations déductibles:
résumé: '[C1]'
description: "Cotisations et contributions sociales déductibles pour le calcul de l'assiette sociale"
somme:
- cotisations obligatoires déductibles
- dirigeant . indépendant . cotisations et contributions . CSG et CRDS . déductible
- dirigeant . indépendant . cotisations et contributions . formation professionnelle
aide déclaration revenu indépendant 2020 . informations résultat par formulaire . cotisations non déductibles:
résumé: '[C2]'
description: Cotisations et contributions sociales non déductibles pour le calcul de l'assiette sociale
valeur:
somme:
- dirigeant . indépendant . cotisations et contributions . CSG et CRDS . non déductible
- dirigeant . indépendant . cotisations facultatives . total
aide déclaration revenu indépendant 2020 . informations résultat par formulaire . assiette sociale:
résumé: '[A - C1]'
description: Assiette utilisée pour le calcul des cotisations sociales.
valeur: dirigeant . indépendant . assiette des cotisations
aide déclaration revenu indépendant 2020 . informations résultat par formulaire . rémunération nette:
résumé: '[A - C1 - C2]'
description: Le revenu net du dirigeant avant impôt sur le revenu. C'est la rémunération effectivement versée.
valeur: dirigeant . rémunération . nette
aide déclaration revenu indépendant 2020 . résultat simple . revenu net fiscal:
non applicable si: entreprise . imposition . IR . micro-fiscal
titre: revenu net fiscal
résumé: '[A]'
description: Résultat avant déduction des charges sociales et exonérations fiscales
valeur: dirigeant . rémunération . totale
aide déclaration revenu indépendant 2020 . résultat simple . cotisations obligatoires:
titre: Cotisations sociales obligatoires déductibles
résumé: '[C]'
description: |
À reporter dans :
- **la case DSCA/DSCB** dans le formulaire de donnée complémentaire à la déclaration de revenus des indépendant (formulaire 2042)
- **régime réel simplifié :** la rubrique 326 du formulaire 2033-D-SD
- **régime réel normal :** la rubrique A5 du formulaire 2053-SD
- **déclaration contrôlée :** la rubrique BT du formulaire 2035-A-SD
- **régime micro fiscal :** pas de liasse professionnelle fiscale à souscrire
unité: €/an
somme:
- dirigeant . indépendant . cotisations et contributions . cotisations
- dirigeant . indépendant . conjoint collaborateur . cotisations
références:
Notice impots.gouv.fr: https://www.impots.gouv.fr/portail/www2/fichiers/documentation/brochure/ir_2021/pdf_som/11-bis-decla_fusion_fisc_185a195.pdf
aide déclaration revenu indépendant 2020 . résultat simple: oui
aide déclaration revenu indépendant 2020 . résultat simple . CSG déductible:
non applicable si: entreprise . imposition . IR . micro-fiscal
titre: CSG déductible
résumé: '[B]'
formule: dirigeant . indépendant . cotisations et contributions . CSG et CRDS . déductible
description: "Montant de la CSG déductible à l'impôt sur le revenu"
valeur: dirigeant . indépendant . cotisations et contributions . CSG et CRDS . déductible
aide déclaration revenu indépendant 2020 . cotisations sociales déductible:
titre: cotisations sociales obligatoires déductibles
résumé: '[C]'
description: >-
Montant à reporter dans la case XI de votre déclaration sociale et rubrique
326 du formulaire 2033-D-SD (pour le réel simplifié) ou rubrique A5 du
formulaire 2053-SD (pour le réel normal) de votre déclaration fiscale.
formule:
somme:
- dirigeant . indépendant . cotisations et contributions . cotisations
- dirigeant . indépendant . conjoint collaborateur . cotisations
- (- dirigeant . indépendant . cotisations et contributions . exonérations)
aide déclaration revenu indépendant 2020 . CFP:
résumé: contribution à la formation professionnelle [D]
formule: dirigeant . indépendant . cotisations et contributions . formation professionnelle
aide déclaration revenu indépendant 2020 . résultat simple . CFP:
non applicable si: entreprise . imposition . IR . micro-fiscal
résumé: '[D]'
description: Contribution à la formation professionnelle
valeur: dirigeant . indépendant . cotisations et contributions . formation professionnelle
aide déclaration revenu indépendant 2020 . total charges sociales déductible:
titre: total charges sociales obligatoires déductibles fiscalement
aide déclaration revenu indépendant 2020 . résultat simple . total charges sociales déductible:
non applicable si: entreprise . imposition . IR . micro-fiscal
titre: charges sociales obligatoires déductibles fiscalement
résumé: '[B + C + D]'
formule:
somme:
- CSG déductible
- CFP
- cotisations sociales déductible
description: >-
Montant à reporter dans la rubrique 252 du formulaire 2033-B-SD (pour le
réel simplifié) ou en rubrique FZ du formulaire 2052-SD (pour le réel
normal) de votre déclaration fiscale.
somme:
- CSG déductible
- cotisations obligatoires
- CFP
description: |
À reporter dans :
- **régime réel simplifié :** la rubrique 252 du formulaire 2033-B-SD
- **régime réel normal :** la rubrique FZ du formulaire 2052-SD
- **déclaration contrôlée :** la rubrique BK du formulaire 2035-A-SD
- **régime micro fiscal :** pas de liasse professionnelle fiscale à souscrire
aide déclaration revenu indépendant 2020 . assiette sociale:
titre: assiette sociale
résumé: 'pour information [A - (B + C + D)]'
formule:
valeur: revenu net fiscal
abattement: total charges sociales déductible
aide déclaration revenu indépendant 2020 . résultat simple . assiette sociale:
non applicable si: entreprise . imposition . IR . micro-fiscal
résumé: '[A - (B + C + D)]'
description: Assiette utilisée pour le calcul des cotisations sociales
valeur: dirigeant . indépendant . assiette des cotisations

View File

@ -5,10 +5,10 @@ entreprise:
entreprise . date de création:
question: Quelle est votre date de début d'activité ?
par défaut: 01/01/2017
par défaut: 01/01/2020
description: |
La date de début d'activité (ou date de création) est fixée lors de la
déclaration de votre entreprise.
déclaration de votre entreprise.
Vous pouvez [renseigner votre entreprise](/gérer), pour préremplir
automatiquement cette information.
@ -24,7 +24,7 @@ entreprise . date de création:
entreprise . date de création . contrôle date future:
type: notification
sévérité: avertissement
formule: date de création > 01/2021
formule: date de création > 01/2025
description: Nous ne pouvons voir aussi loin dans le futur
entreprise . date de création . contrôle date passée:
@ -41,9 +41,11 @@ entreprise . durée d'activité:
entreprise . durée d'activité . en fin d'année:
titre: durée d'activité à la fin de l'année
formule:
durée:
depuis: date de création
jusqu'à: période . fin d'année
somme:
- durée:
depuis: date de création
jusqu'à: période . fin d'année
- 1 jour # Le mécanisme durée n'inclue pas le dernier jour
entreprise . durée d'activité . en début d'année:
titre: durée d'activité au début de l'année
@ -54,66 +56,62 @@ entreprise . durée d'activité . en début d'année:
entreprise . chiffre d'affaires:
question: Quel est votre chiffre d'affaires envisagé ?
résumé: Montant total des recettes brutes (hors taxe)
unité: €/an
variations:
- si: dirigeant . auto-entrepreneur
alors:
inversion numérique:
avec:
- dirigeant . auto-entrepreneur . net de cotisations
- dirigeant . auto-entrepreneur . net après impôt
- dirigeant . rémunération totale
- sinon:
somme:
- dirigeant . rémunération totale
- charges
somme:
- dirigeant . rémunération . nette après impôt
- dirigeant . rémunération . impôt
- dirigeant . rémunération . cotisations
- charges
- applicable si: entreprise . imposition . IS
somme:
- imposition . IS . résultat net
- imposition . IS . impôt sur les sociétés
plancher: 0€/an
arrondi: oui
identifiant court: ca
identifiant court: CA
entreprise . chiffre d'affaires . vente restauration hébergement:
titre: Vente de biens, restauration, hébergement (BIC)
résumé: Chiffre d'affaires hors taxe
question: Quel est le chiffre d'affaires issus de la vente de bien, restauration ou hébergement ?
question: Quel est le chiffre d'affaires issu de la vente de biens, restauration ou hébergement ?
unité: €/an
variations:
variations:
- si: activité . mixte
alors:
produit:
assiette: chiffre d'affaires
produit:
assiette: chiffre d'affaires
taux: activité . mixte . proportions . vente restauration hébergement
- sinon:
- sinon:
applicable si: activité . service ou vente = 'vente'
valeur: chiffre d'affaires
arrondi: oui
plancher: 0€/an
description: |
### Vente de biens
### Vente de biens
Il sagit du chiffre d'affaires de toutes les opérations comportant
transfert de propriété d'un bien corporel, c'est-à-dire un bien ayant une
existence matérielle.
existence matérielle.
### Restauration et hébergement
Il sagit du chiffre d'affaires de toutes les opérations de restauration
ou hébergement (hors meublé de tourisme classé)
ou hébergement
Ces revenus sont imposable au régime BIC
> Note : pour les locations meublées, seules les locations de meublé de tourisme classé et de chambre dhôte entrent dans cette catégorie hébergement ; les autres locations meublées relèvent de la catégorie « Prestations de service BIC »
Ces revenus sont imposables dans la catégorie des BIC
références:
service-public.fr: https://www.service-public.fr/professionnels-entreprises/vosdroits/F32919
définition vente de bien (impots.gouv): https://www.impots.gouv.fr/portail/professionnel/achatvente-de-biens
entreprise . chiffre d'affaires . service BIC:
unité: €/an
plancher: 0€/an
arrondi: oui
résumé: Chiffre d'affaires hors taxe
titre: Prestations de service commerciales ou artisanales (BIC)
question: Quel est le chiffre d'affaires issus de prestations de service commerciales ou artisanales ?
question: Quel est le chiffre d'affaires issu de prestations de service commerciales ou artisanales ?
description: |
Il sagit de toute opération ne comportant pas de transfert de propriété de
biens corporels (c'est-à-dire ayant une existence matérielle), dont
@ -123,48 +121,47 @@ entreprise . chiffre d'affaires . service BIC:
services qui nécessite plus qu'un ordinateur pour être effectuées.
**Exemples** : transports, service à la personne, réparation etc.
variations:
variations:
- si: activité . mixte
alors:
produit:
assiette: chiffre d'affaires
produit:
assiette: chiffre d'affaires
taux: activité . mixte . proportions . service BIC
- sinon:
- sinon:
applicable si: activité . service ou vente = 'service'
valeur: chiffre d'affaires
références:
service-public.fr: https://www.service-public.fr/professionnels-entreprises/vosdroits/F32919
entreprise . chiffre d'affaires . service BNC:
titre: Autres prestations de service et activités libérales (BNC)
résumé: Chiffre d'affaires hors taxe
question: Quel est le chiffre d'affaires issus de prestations de service libérale ?
résumé: Recettes hors taxes
question: Quelles sont les recettes issues de lactivité libérale ?
arrondi: oui
plancher: 0€/an
description: |
Ce sont toutes les opérations dont l'activité intellectuelle tient
un rôle essentiel.
un rôle essentiel.
**Exemples** : conseil, accompagnement, traduction, développement,
formation, enseignement, sportif
Les revenus tirés de ce chiffre d'affaires sont imposable au régime BNC (bénéfices non commerciaux)
variations:
variations:
- si: activité . mixte
alors:
produit:
assiette: chiffre d'affaires
produit:
assiette: chiffre d'affaires
taux: activité . mixte . proportions . service BNC
- sinon:
- sinon:
applicable si: activité = 'libérale'
valeur: chiffre d'affaires
références:
liste des activités libérales: https://bpifrance-creation.fr/encyclopedie/trouver-proteger-tester-son-idee/verifiertester-son-idee/liste-professions-liberales
entreprise . chiffre d'affaires . service:
titre: Chiffre d'affaires de prestation de service
description: |
Il sagit de toute opération ne comportant pas de transfert de propriété de
biens corporels (c'est-à-dire ayant une existence matérielle)
@ -178,28 +175,12 @@ entreprise . chiffre d'affaires . BIC:
Le chiffre d'affaires correspondant au revenus imposable au titre des bénéfice industriels et commerciaux (BIC ou micro-BIC).
unité: €/an
somme:
- service BIC
- service BIC
- vente restauration hébergement
entreprise . chiffre d'affaires . franchise de TVA dépassée:
description: |
La franchise de TVA est un dispositif qui exonère les entreprises de la
déclaration et du paiement de la TVA. Il s'applique en dessous d'un seuil de
chiffre d'affaire annuel dépendant de l'activité.
Le professionnel qui relève de ce dispositif facture ses prestations ou ses
ventes en hors taxe, et ne peut pas déduire la TVA de ses achats.
une de ces conditions:
- chiffre d'affaires > seuil vente + seuil service
- vente restauration hébergement > seuil vente
- service > seuil service
note: >
On prend compte ici des seuils majorés (qui s'appliquent si le seuil
"minoré" n'a pas été dépassé en année `n - 2`)
références:
Fiche service-public.fr: https://www.service-public.fr/professionnels-entreprises/vosdroits/F21746
entreprise . chiffre d'affaires . franchise de TVA: oui
entreprise . chiffre d'affaires . franchise de TVA dépassée . seuil vente:
entreprise . chiffre d'affaires . franchise de TVA . seuil vente:
variations:
- si: établissement . localisation . outre-mer . Guadeloupe Réunion Martinique
alors: 110000 €/an
@ -207,7 +188,7 @@ entreprise . chiffre d'affaires . franchise de TVA dépassée . seuil vente:
références:
Fiche service-public.fr: https://www.service-public.fr/professionnels-entreprises/vosdroits/F21746
entreprise . chiffre d'affaires . franchise de TVA dépassée . seuil service:
entreprise . chiffre d'affaires . franchise de TVA . seuil service:
variations:
- si: établissement . localisation . outre-mer . Guadeloupe Réunion Martinique
alors: 60000 €/an
@ -217,31 +198,41 @@ entreprise . chiffre d'affaires . franchise de TVA dépassée . seuil service:
références:
Fiche service-public.fr: https://www.service-public.fr/professionnels-entreprises/vosdroits/F21746
entreprise . chiffre d'affaires . franchise de TVA dépassée . notification:
entreprise . chiffre d'affaires . franchise de TVA . dépassement:
type: notification
formule: oui
formule:
une de ces conditions:
- chiffre d'affaires > seuil vente + seuil service
- vente restauration hébergement > seuil vente
- service > seuil service
résumé: |
Le seuil annuel de chiffre d'affaires pour la franchise de TVA est dépassé.
description: |
Le seuil annuel de chiffre d'affaires pour la franchise de TVA est dépassé. [En savoir plus](/documentation/entreprise/chiffre-d'affaires/franchise-de-TVA-dépassée)
La franchise de TVA est un dispositif qui exonère les entreprises de la
déclaration et du paiement de la TVA. Il s'applique en dessous d'un seuil de
chiffre d'affaire annuel dépendant de l'activité.
entreprise . chiffre d'affaires minimum:
identifiant court: entreprise-ca-min
description: Le montant minimum des ventes (H.T) à réaliser pour atteindre le seuil de rentabilité.
question: Quel est votre chiffre d'affaires minimum envisagé ?
Le professionnel qui relève de ce dispositif facture ses prestations ou ses
ventes en hors taxe, et ne peut pas déduire la TVA de ses achats.
note: >
On prend compte ici des seuils majorés (qui s'appliquent si le seuil
"minoré" n'a pas été dépassé en année `n - 2`)
références:
Fiche service-public.fr: https://www.service-public.fr/professionnels-entreprises/vosdroits/F21746
entreprise . résultat fiscal:
unité: €/an
formule: chiffre d'affaires
entreprise . rémunération du dirigeant:
description: |
C'est la part du chiffre d'affaires après charges qui est allouée à la rémunération du dirigeant. Plus cette part est élevée, plus la rémunération du dirigeant augmente, et plus le bénéfice de l'entreprise diminue.
question: Quelle part du chiffre d'affaires après charge est allouée à la rémunération du dirigeant ?
par défaut: 100%
somme:
- chiffre d'affaires
- (- charges)
- (- charges . dirigeant)
entreprise . imposition:
question: À quel régime d'imposition l'entreprise est-elle soumise ?
question: Comment l'entreprise est-elle imposée ?
description: |
Le créateur d'entreprise peut opter pour l'un des deux régimes d'imposition des bénéfices de son activité :
- l'impôt sur le revenu, où les bénéfices sont déclarés sur la déclaration de revenus personnelle et imposés au barème progressif
- l'impôt sur les sociétés, où les bénéfices sont déclarés au nom de la société
Indiquez si le régime dimposition des revenus liés à lactivité indépendante relèvent :
- de limpôt sur le revenu : les bénéfices de lentreprise sont imposés directement auprès du travailleur indépendant, au barème progressif de limpôt sur le revenu.
- de limpôt sur les sociétés : les bénéfices de lentreprise sont imposés au nom de la société, au taux de limpôt sur les sociétés.
formule:
une possibilité:
choix obligatoire: oui
@ -252,50 +243,112 @@ entreprise . imposition:
entreprise . imposition . IR:
valeur: imposition = 'IR'
titre: À l'impôt sur le revenu
titre: Impôt sur le revenu
entreprise . imposition . IS:
valeur: imposition = 'IS'
titre: À l'impôt sur les sociétés
entreprise . imposition . IR . micro-fiscal:
rend non applicable: dirigeant . indépendant . cotisations facultatives
entreprise . imposition . IS . notification IS non intégré:
type: notification
formule:
une de ces conditions:
- dirigeant . assimilé salarié
- dirigeant . indépendant
question: Avez-vous opté pour le régime micro-fiscal ?
description: |
Ce simulateur n'intègre pas l'impôts sur les sociétés ni la fiscalité des
dividendes. L'option "Impôt sur les Sociétés" est uniquement utilisée dans
le calcul de l'impôt sur le revenu.
Avec le régime micro fiscal, les charges déductibles sont estimées forfaitairement,en fonction dun pourcentage du chiffre daffaires. Ce pourcentage dépend du type dactivité : 71% pour les activités de vente, restauration et hébergement (location de meublé de tourisme classé et chambre dhôte), 50% pour les prestations de service commerciales ou artisanales, 34% pour les activités libérales.
entreprise . bénéfice:
titre: Bénéfice de l'exercice
résumé: Imposable à l'impôt sur les sociétés
formule: chiffre d'affaires - charges dont rémunération dirigeant
Cette option permet de simplifier votre comptabilité et peut être avantageuse en termes de revenu imposable et soumis à cotisations et contributions sociales dans le cas où vos charges de fonctionnement sont faibles.
par défaut: non
entreprise . bénéfice . information sur le report de déficit:
type: notification
formule: bénéfice < 0 €/an
# TODO: Support des références dans les notifications
entreprise . imposition . IR . micro-fiscal . revenu abattu:
remplace: résultat fiscal
résoudre la référence circulaire: oui
titre: abattement forfaitaire micro-fiscal
description: |
Les déficits subits au cours d'un exercice peuvent être reportés sur les exercices suivants (report en avant), ou sur le seul exercice précédent (report en arrière).
Le micro-entrepreneur est dispensé d'établir une déclaration professionnelle de bénéfices au titre des BNC ou BIC.
[Plus d'infos sur service-public.fr](https://www.service-public.fr/professionnels-entreprises/vosdroits/F23628)
Il lui suffit de porter dans la déclaration complémentaire de revenu (n°2042-C Pro) le montant annuel du chiffre d'affaires brut (BIC) ou des recettes (BNC).
somme:
- entreprise . chiffre d'affaires . vente restauration hébergement
- entreprise . chiffre d'affaires . service BIC
- entreprise . chiffre d'affaires . service BNC
abattement:
produit:
composantes:
- assiette: entreprise . chiffre d'affaires . vente restauration hébergement
taux: 71%
- assiette: entreprise . chiffre d'affaires . service BIC
taux: 50%
- assiette: entreprise . chiffre d'affaires . service BNC
taux: 34%
plancher:
variations:
- si: entreprise . activité . mixte
alors: 610 €/an
- sinon: 305 €/an
entreprise . résultat net:
résumé: Ce qu'il reste après impôt sur les sociétés
formule: bénéfice - impôt sur les sociétés
entreprise . imposition . IR . micro-fiscal . alerte seuil dépassés:
type: notification
sévérité: avertissement
formule: chiffre d'affaires . seuil micro dépassé
description: Le seuil annuel de chiffre d'affaires pour le régime micro-fiscal est dépassé. [En savoir plus](/documentation/entreprise/chiffre-d'affaires/seuil-micro-dépassé)
entreprise . exercice:
entreprise . chiffre d'affaires . seuil micro dépassé:
applicable si: imposition . IR
description: |
Le statut de micro-entreprise s'applique tant que le chiffre d'affaires annuel (effectivement encaissé au cours de l'année civile) ne dépasse pas les seuils du régime fiscal de la micro-entreprise.
En cas de dépassement **sur deux années consécutives**, l'entreprise bascule automatiquement dans le régime de [l'entreprise individuelle](/simulateurs/indépendant).
À la fin de la première année d'activité, le CA est proratisé par rapport à la durée d'activité.
Exemple :
> Un contribuable crée une entreprise le 1er août et encaisse des recettes HT de `50 000 €` au cours des cinq mois d'activité de sa première année civile d'exploitation.
> Les recettes de cette première année civile sont ajustées *prorata temporis* pour les comparer au plafond :
>
> `50 000€ x (365/153) = 119 280 €`
Les charges ne sont pas déductibles pour le calcul du plafond (comme pour le calcul des cotisations)
### Multi-activité
Lorsqu'un entrepreneur exerce 2 activités au sein de sa micro-entreprise, le
seuil de chiffre daffaires à respecter nest pas pour autant doublé. En
effet l'exercice de plusieurs activités avec la même micro-entreprise
naugmente pas les seuils.
références:
Fiche service-public.fr: https://www.service-public.fr/professionnels-entreprises/vosdroits/F32353
Article 50-0 du Code général des impôts: https://www.legifrance.gouv.fr/affichCode.do?idSectionTA=LEGISCTA000006199553&cidTexte=LEGITEXT000006069577
Bofip (dépassement micro-bnc): https://bofip.impots.gouv.fr/bofip/4807-PGP.html
Bofip (dépassement micro-bic): https://bofip.impots.gouv.fr/bofip/1802-PGP.html
autoentrepreneur.urssaf.fr: https://www.autoentrepreneur.urssaf.fr/portail/accueil/une-question/questions-frequentes.html
unité: €/an
# TODO: les seuils micro sont dupliqués à plusieurs endroits (artiste-auteur .
# revenus . BNC . contrôle micro-bnc, tableau de la comparaison de régime,
# économie collaborative). Il faudrait référencer la même valeur partout où
# elle est utilisée.
une de ces conditions:
- entreprise . chiffre d'affaires > 176200 €/an
- entreprise . chiffre d'affaires . service > 72600 €/an
entreprise . imposition . IR . information sur le report de déficit:
non applicable si: micro-fiscal
type: notification
formule: résultat fiscal < 0 €/an
description: |
Lorsque votre résultat fiscal est négatif, ce dernier vient réduire le revenu imposables du foyer fiscal.
Un déficit peut être imputé jusqu'à 6 ans après sa réalisation.
[Voir les règles fiscales détaillées](https://bofip.impots.gouv.fr/bofip/2003-PGP.html/identifiant%3DBOI-BIC-DEF-20-10-20170301)
références:
bofip: https://bofip.impots.gouv.fr/bofip/2003-PGP.html/identifiant%3DBOI-BIC-DEF-20-10-20170301
entreprise . exercice: oui
entreprise . exercice . début:
type: date
par défaut: 01/01/2020
par défaut: 01/01/2021
entreprise . exercice . fin:
type: date
par défaut: 31/12/2020
par défaut: 31/12/2021
entreprise . exercice . durée:
titre: durée de l'exercice
@ -328,11 +381,36 @@ entreprise . exercice . durée maximale:
formule: durée >= 24 mois
description: La durée maximale d'un exercice comptable est de 24 mois.
entreprise . impôt sur les sociétés:
entreprise . imposition . IS:
valeur: imposition = 'IS'
titre: Impôt sur les sociétés
entreprise . imposition . IS . résultat imposable:
titre: Résultat de l'exercice
résumé: Imposable à l'impôt sur les sociétés
valeur: résultat fiscal
entreprise . imposition . IS . information sur le report de déficit:
type: notification
formule: résultat imposable < 0 €/an
# TODO: Support des références dans les notifications
description: |
Les déficits subits au cours d'un exercice peuvent être reportés sur les exercices suivants (report en avant), ou sur le seul exercice précédent (report en arrière).
entreprise . imposition . IS . résultat net:
résumé: Après déduction des charges et de l'impôt sur les société
somme:
- chiffre d'affaires
- (- charges)
- (- dirigeant . rémunération . totale)
- (- impôt sur les sociétés)
par défaut: 0
entreprise . imposition . IS . impôt sur les sociétés:
unité: €/an
formule:
barème:
assiette: bénéfice
assiette: résultat imposable
multiplicateur: prorata temporis
variations:
- si: exercice . début >= 01/01/2022
@ -374,22 +452,22 @@ entreprise . impôt sur les sociétés:
Fiche impots.gouv.fr: https://www.impots.gouv.fr/portail/international-professionnel/impot-sur-les-societes
Fiche service-public.fr: https://www.service-public.fr/professionnels-entreprises/vosdroits/F23575
entreprise . impôt sur les sociétés . plafond taux réduit 1:
entreprise . imposition . IS . impôt sur les sociétés . plafond taux réduit 1:
applicable si: éligible taux réduit
valeur: 38120 €/an
entreprise . impôt sur les sociétés . plafond taux réduit 2:
entreprise . imposition . IS . impôt sur les sociétés . plafond taux réduit 2:
applicable si: éligible taux réduit
valeur: 500000 €/an
entreprise . impôt sur les sociétés . éligible taux réduit:
entreprise . imposition . IS . impôt sur les sociétés . éligible taux réduit:
formule:
toutes ces conditions:
- chiffre d'affaires <= 7630 k€/an * prorata temporis
- nom: capital détenu au moins à 75 pourcents par des personnes physiques
valeur: oui
entreprise . impôt sur les sociétés . prorata temporis:
entreprise . imposition . IS . impôt sur les sociétés . prorata temporis:
description: |
Lorsque la durée de lexercice n'est pas égale à un an, on pro-ratise les
plafonds utilisés dans le barème de l'impôt sur les sociétés.
@ -402,7 +480,7 @@ entreprise . impôt sur les sociétés . prorata temporis:
références:
Bofip: https://bofip.impots.gouv.fr/bofip/2065-PGP.html/identifiant%3DBOI-IS-LIQ-20-20-20180801
entreprise . impôt sur les sociétés . contribution sociale:
entreprise . imposition . IS . impôt sur les sociétés . contribution sociale:
# description: |
# La contribution sociale sur les bénéfices est un impôt distinct de l'impôt sur les sociétés. Son montant n'est pas déductible des résultats.
@ -420,14 +498,11 @@ entreprise . impôt sur les sociétés . contribution sociale:
références:
Bofip: https://bofip.impots.gouv.fr/bofip/3492-PGP.html/identifiant%3DBOI-IS-AUT-10-20-20130318
entreprise . charges dont rémunération dirigeant:
formule: charges + dirigeant . rémunération totale
entreprise . charges:
synonymes:
- charges d'exploitation
- charges de fonctionnement
titre: charges de fonctionnement
titre: charges (hors rémunération dirigeant)
identifiant court: charges
résumé: Toutes les dépenses nécessaires à l'entreprise
question: Quelles sont les charges de l'entreprise ?
@ -442,7 +517,6 @@ entreprise . charges:
- achat de matières premières pour une activité de production
- achat de produits en vue de leur revente, pour une activité commerciale
- frais de repas : le supplément par rapport au coût d'un repas à domicile
- les cotisations aux contrats Madelin
Attention : l'achat d'un ordinateur à 1000€ n'est pas une charge, mais une immobilisation : c'est un bien qui va profiter à l'entreprise pendant plusieurs années. Chaque année, une partie de cette immobilisation est amortie, et cet amortissement déductible peut être intégré dans ce calcul, par exemple 200€ par an pendant 5 ans.
@ -452,11 +526,35 @@ entreprise . charges:
Charges déductibles ou non du résultat fiscal d'une entreprise: https://www.service-public.fr/professionnels-entreprises/vosdroits/F31973
par défaut: 0 €/an
entreprise . charges . dirigeant:
titre: Charges déductibles dirigeant
description: Les montants liés à la rémunération du dirigeant qui sont déductibles d'impôt.
variations:
- si: imposition . IS
alors: dirigeant . rémunération . totale
# Note : le cas de dirigeant AS à l'IR n'est pas géré
# - si: dirigeant . assimilé salarié
# alors: 0€/an
- sinon: # TNS dans entreprise à l'IR
valeur: dirigeant . indépendant . cotisations et contributions
abattement: dirigeant . indépendant . cotisations et contributions . non déductibles
# on ne prend en compte pour l'instant que le cas entreprise unipersonnelle
entreprise . dividendes: bénéficiaire . dividendes . bruts
# [TODO] [dividendes-indep]
entreprise . capital social:
description: |
Cette valeur doit inclure la valeur des primes d'émission.
titre: Capital social
question: Quele est le capital social de la société ?
unité:
entreprise . ACRE:
description: >-
L'aide à la création ou à la reprise d'une entreprise (Acre) consiste en une
exonération partielle de charges sociales, dite exonération de début
d'activité pendant 12 mois.
d'activité pendant 12 mois.
Elle est **automatique** pour les **sociétés et les entreprises individuelles**
@ -465,7 +563,7 @@ entreprise . ACRE:
Pour les **auto-entrepreneurs** en revanche, elle doit être demandée et est réservée aux
bénéficiaires suivants:
bénéficiaires suivants:
- Les demandeurs d'emplois (indemnisés ou non indemnisés mais ayant au moins 6 mois dinscription à Pôle Emploi au cours des 18 derniers mois).
@ -586,7 +684,7 @@ entreprise . exonérée de TVA:
question: L'entreprise est-elle exonérée de TVA (hors franchise de base) ?
par défaut: non
description: |
Certains types d'entreprises ne sont pas assujetties à la TVA.
Certains types d'entreprises ne sont pas assujetties à la TVA.
Ces dernières payent la taxe sur les salaires en contrepartie.
C'est le cas par exemple des établissements bancaires, financiers ou d'assurance.
@ -607,7 +705,8 @@ entreprise . taxe sur les salaires:
une de ces conditions:
- association non lucrative
- entreprise . exonérée de TVA
description: Lorsque le montant de la taxe sur les salaires est inférieur à 1200 €/an, il
description:
Lorsque le montant de la taxe sur les salaires est inférieur à 1200 €/an, il
n'y a pas besoin de faire de déclaration et la taxe n'est pas recouvré.
Entre 1200 €/an et 2400 €/an une décote s'applique.
formule:
@ -624,13 +723,13 @@ entreprise . activité:
titre: nature de l'activité
question: Quelle est la nature de votre activité principale ?
description: Votre type d'activité va déterminer une grande partie des calculs de cotisations, contributions et impôt.
par défaut: "'commerciale ou industrielle'"
par défaut: "'commerciale'"
formule:
une possibilité:
choix obligatoire: oui
possibilités:
- artisanale
- commerciale ou industrielle
- commerciale
- libérale
références:
Vérifier la nature de son activité: https://bpifrance-creation.fr/encyclopedie/trouver-proteger-tester-son-idee/verifiertester-son-idee/verifier-nature-son-activite
@ -648,7 +747,7 @@ entreprise . activité . libérale:
fiche Wikipedia: https://fr.m.wikipedia.org/wiki/Profession_libérale
liste des professions libérales: https://bpifrance-creation.fr/encyclopedie/trouver-proteger-tester-son-idee/verifiertester-son-idee/liste-professions-liberales
entreprise . activité . commerciale ou industrielle:
entreprise . activité . commerciale:
description: |
### Activité commerciale
- Achats de biens pour leur revente en l'état (commerce en gros ou de détail)
@ -674,7 +773,7 @@ entreprise . activité . service ou vente:
applicable si:
une de ces conditions:
- activité = 'artisanale'
- activité = 'commerciale ou industrielle'
- activité = 'commerciale'
question: Quelle est le type d'activité de l'entreprise ?
formule:
une possibilité:
@ -704,50 +803,47 @@ entreprise . activité . service ou vente . service:
entreprise . activité . mixte:
titre: Activités mixtes
applicable si: entreprise . imposition . IR . micro-fiscal
question: Votre entreprise a-t-elle plusieurs types d'activités ?
par défaut: non
description: |
Il est possible d'avoir plusieurs activités avec des types de revenus
différents pour une même entreprise.
différents pour une même entreprise.
Par exemple, une entreprise de plomberie qui facture l'achat et la pose d'un
robinet a une partie de son chiffre d'affaires en vente de materiel (le robinet)
et une partie en prestation de service (la pose)
et une partie en prestation de service (la pose).
Il existe trois principales familles de revenus au yeux de l'administration
fiscale et sociale :
Il existe trois catégories avec des taux dabattement forfaitaire pour frais différents :
- [Ventes de biens, restauration et hébergement (BIC)](/documentation/entreprise/chiffre-d'affaires/vente-restauration-hébergement)
- [Prestation de service commerciale ou artisanale (BIC)](/documentation/entreprise/chiffre-d'affaires/prestations-de-service-BIC)
- [Autres prestation de service et activité libérale (BNC)](/documentation/entreprise/chiffre-d'affaires/prestations-de-service-BNC)
- [Ventes de biens, restauration et hébergement (BIC)](/documentation/entreprise/chiffre-d'affaires/vente-restauration-hébergement) (abattement de 71%)
- [Prestation de service commerciale ou artisanale (BIC)](/documentation/entreprise/chiffre-d'affaires/service-BIC) (abattement de 50%)
- [Autres prestation de service et activité libérale (BNC)](/documentation/entreprise/chiffre-d'affaires/service-BNC) (abattement de 34%)
Si votre entreprise a des activités correspondants à plus d'un type de
Si votre entreprise a des activités correspondants à plusieurs catégories de
revenus, répondez oui à cette question.
entreprise . activité . mixte . proportions:
description: Part des différentes activités dans le chiffre d'affaires
titre: proportion activité
unité: '%'
somme:
somme:
- nom: service BIC
par défaut:
variations:
- si: activité = 'libérale'
alors: 0
- sinon: 50%
variations:
- si: activité = 'libérale'
alors: 0%
- sinon: 50%
- nom: service BNC
par défaut:
variations:
- si: activité = 'libérale'
alors: 2 / 3
- sinon: 0
variations:
- si: activité = 'libérale'
alors: 2 / 3
- sinon: 0%
- nom: vente restauration hébergement
par défaut:
variations:
- si: activité = 'libérale'
alors: 1 / 3
- sinon: 50%
variations:
- si: activité = 'libérale'
alors: 1 / 3
- sinon: 50%
note: Il appartient à l'utilisateur de bien vérifier que la somme des trois pourcentages renseignés vaut 100%.
entreprise . activité . libérale réglementée:
question: Est-ce une activité libérale réglementée ?
@ -765,7 +861,7 @@ entreprise . activité . libérale réglementée:
Liste des activités libérales: https://bpifrance-creation.fr/encyclopedie/trouver-proteger-tester-son-idee/verifiertester-son-idee/liste-professions-liberales
entreprise . activité . débit de tabac:
applicable si: activité = 'commerciale ou industrielle'
applicable si: activité = 'commerciale'
question: Exercez-vous une activité de vente de tabac ?
par défaut: non
@ -805,7 +901,7 @@ entreprise . activité . débit de tabac:
chemin: nom
établissement . taux du versement transport:
unité: "%"
unité: '%'
formule:
synchronisation:
data: localisation
@ -843,74 +939,3 @@ entreprise . activité . débit de tabac:
durée:
depuis: entreprise . date de création
jusqu'à: 31/12/2019
établissement . secteur d'activité covid:
question: |
Dispositif de réduction "covid" : votre activité principale relève-t'elle d'un des secteurs suivants ?
# Pas d'inigibilité explicite des PL réglementés à ce dispositif, mais il
# apparaît que les métiers concernés (médecins, avocats...) sont incompatibles
# avec les secteurs d'activités concernés par l'aide (hôtels, restaurants...)
non applicable si: entreprise . activité . libérale réglementée
description: |
Les conditions d'éligibilité aux aides "covid" dépendent du secteur
d'activité de l'établissement.
Les hôtels, restaurants, bars, etc. sont dans
la catégorie dite "S1" et ont le droit aux aides sans autre conditions.
Les secteurs dont l'activité dépendent de celles du "secteur 1" peuvent
aussi bénéficier des aides à condition d'avoir eu une baisse de chiffre
d'affaires significative pendant le confinement.
Enfin les secteurs dits "S2" sont ceux impliquant l'accueil du public, et
sont éligibles aux aides à condition d'avoir subit une fermeture
administrative.
Les modalités sont précisées sur le site de l'Urssaf.
références:
Sécu-indépendant: https://www.secu-independants.fr/cpsti/actualites/actualites-nationales/covid-dispositifs-de-reduction-des-cotisations/
par défaut: non
formule:
une possibilité:
choix obligatoire: non
possibilités:
- S1
- S1-bis
- S2
établissement . secteur d'activité covid . S1:
titre: Secteur "1" - tourisme, hôtellerie, restauration
établissement . secteur d'activité covid . S1-bis:
titre: Secteur "1 bis" - dont l'activité dépend de celle des secteurs 1
établissement . secteur d'activité covid . S2:
titre: Secteur "2" - activité impliquant l'accueil du public qui a été interrompue
établissement . secteur d'activité covid . éligible aide:
formule:
une de ces conditions:
- secteur d'activité covid = 'S1'
- toutes ces conditions:
- secteur d'activité covid = 'S1-bis'
- baisse significative de chiffre d'affaires
- toutes ces conditions:
- secteur d'activité covid = 'S2'
- activité interrompue
références:
Sécu-indépendant: https://www.secu-independants.fr/cpsti/actualites/actualites-nationales/covid-dispositifs-de-reduction-des-cotisations/
établissement . secteur d'activité covid . baisse significative de chiffre d'affaires:
question: |
Votre activité a-t-elle subit une baisse d'au moins 80% de chiffre d'affaire
entre le 15 mars et le 15 mai 2020 par rapport à l'année précédentes ?
par défaut: oui
références:
Sécu-indépendant: https://www.secu-independants.fr/cpsti/actualites/actualites-nationales/covid-dispositifs-de-reduction-des-cotisations/
établissement . secteur d'activité covid . activité interrompue:
question: |
Votre activité a-t'elle été interrompue à cause de lépidémie de Covid-19 ?
par défaut: oui
références:
Sécu-indépendant: https://www.secu-independants.fr/cpsti/actualites/actualites-nationales/covid-dispositifs-de-reduction-des-cotisations/

View File

@ -1,14 +1,19 @@
impôt:
valeur: oui
icônes: 🏛️
description: Cet ensemble de formules est un modèle simplifié de l'impôt sur le revenu.
titre: impôts sur le revenu
titre: impôt sur le revenu
impôt . montant:
somme:
- produit:
assiette: revenu imposable
taux: taux d'imposition
- dirigeant . auto-entrepreneur . impôt . versement libératoire . montant
- impôt . dividendes . PFU
arrondi: oui
unité: €/an
titre: Impôt sur le revenu
impôt . taux d'imposition:
formule:
@ -32,7 +37,9 @@ impôt . méthode de calcul:
# applicable si: revenu imposable > 0
# bizarrement, cette condition ne semble pas marcher, on se résout donc à utiliser une version plus "hacky" et moins proche de la loi. Elle posera problème le jour où l'on aura a calculer l'impot avec plusieurs sources de revenu
non applicable si: dirigeant . auto-entrepreneur . impôt . versement libératoire
par défaut: "'taux neutre'"
par défaut:
nom: par défaut
valeur: "'barème standard'"
formule:
une possibilité:
choix obligatoire: oui
@ -59,6 +66,11 @@ impôt . méthode de calcul . barème standard:
description: Le calcul "officiel" de l'impôt, celui sur lequel l'administration fiscal se base pour calculer votre taux d'imposition.
formule: impôt . méthode de calcul = 'barème standard'
impôt . méthode de calcul . PFU:
titre: avec prélèvement forfaitaire unique
description: Calcul de l'impôt des revenus de capitaux mobiliers avec le prélèvement forfaitaire unique (ou "flat tax")
formule: impôt . méthode de calcul = 'PFU'
impôt . méthode de calcul . prélèvement à la source:
formule:
une de ces conditions:
@ -69,10 +81,13 @@ impôt . revenu imposable:
description: |
C'est le revenu à prendre en compte pour calculer l'impôt avec un taux moyen d'imposition (neutre ou personnalisé).
somme:
- contrat salarié . rémunération . net imposable
- dirigeant . indépendant . résultat fiscal
- dirigeant . auto-entrepreneur . impôt . revenu imposable
abattement: abattement contrat court
- variations:
- si: dirigeant
alors: dirigeant . rémunération . imposable
- sinon:
valeur: contrat salarié . rémunération . net imposable
abattement: abattement contrat court
- bénéficiaire . dividendes . imposables
impôt . revenu imposable . abattement contrat court:
description: Lorsque la durée d'un contrat de travail est inférieure à 2 mois, il est possible d'appliquer un abattement pour diminuer le montant du prélèvement à la source.
@ -251,28 +266,6 @@ impôt . taux personnalisé:
- votre espace personnel [impots.gouv.fr](https://impots.gouv.fr)
unité: '%'
revenus net de cotisations:
résumé: Avant impôt
unité: €/an
question: Quel revenu avant impôt voulez-vous toucher ?
description: |
Il s'agit du revenu net de cotisations et de charges, avant le paiement de l'impôt sur le revenu.
formule:
somme:
- contrat salarié . rémunération . net
- dirigeant . indépendant . revenu net de cotisations
- dirigeant . auto-entrepreneur . net de cotisations
revenu net après impôt:
unité: €/an
résumé: Disponible sur votre compte en banque
question: Quel revenu voulez-vous toucher ?
identifiant court: net-apres-impot
description: |
Il s'agit du revenu net de charges, cotisations et d'impôts.
Autrement dit, c'est ce que vous gagnez à la fin sur votre compte en banque.
formule: revenus net de cotisations - impôt
# TODO: "foyer fiscal" should be in its own top level namespace, but we put it
# in the "impôt" namespace to have a better questions ordering
impôt . foyer fiscal:
@ -312,6 +305,8 @@ impôt . foyer fiscal . nombre de parts:
- majoration personne seule avec enfant
- majoration personne veuve avec enfant
impôt . foyer fiscal . nombre de parts . sans parts rattachées: nombre de parts - nombre de parts . rattachées
impôt . foyer fiscal . nombre de parts . principales:
formule:
variations:
@ -357,40 +352,49 @@ impôt . foyer fiscal . nombre de parts . majoration personne veuve avec enfant:
impôt . foyer fiscal . taux effectif:
unité: '%'
formule: impôt à payer / revenu imposable
variations:
- si: impôt à payer = 0
alors: 0%
- sinon: impôt à payer / revenu imposable
impôt . foyer fiscal . revenu imposable:
formule:
somme:
- revenu d'activité abattu
- dirigeant . auto-entrepreneur . impôt . revenu imposable
- valeur: dirigeant . indépendant . résultat fiscal
applicable si: entreprise . imposition . IR
- applicable si:
toutes ces conditions:
- dirigeant . rémunération . imposable
- entreprise . imposition . IR
valeur: dirigeant . rémunération . imposable
- bénéficiaire . dividendes . imposables
- autres revenus imposables
impôt . foyer fiscal . revenu imposable . revenu d'activité abattu:
description: Dans le cas général, l'impôt est calculé après l'application d'un abattement forfaitaire fixe. Chacun peut néanmoins opter pour la déclaration de ses *frais réels*, qui viendront remplacer ce forfait par défaut.
formule:
valeur [ref assiette]:
somme:
- contrat salarié . rémunération . net imposable
- valeur: dirigeant . indépendant . résultat fiscal
applicable si: entreprise . imposition . IS
abattement:
valeur: 10% * assiette
# A VÉRIFIER: calculé à la main en revalorisant le taux 2020
# HISTORIQUE 2020: 12627€
# 12627€ × (1 + 0,2%)
plafond: 12652 €/an
# HISTORIQUE 2020: 441€
# 441€ × (1 + 0,2%)
plancher: 442 €/an
description: |
Dans le cas général, l'impôt est calculé après l'application d'un abattement forfaitaire fixe. Chacun peut néanmoins opter pour la déclaration de ses *frais réels*, qui viendront remplacer ce forfait par défaut.
valeur:
nom: assiette
variations:
- si: dirigeant = non
alors: contrat salarié . rémunération . net imposable
- si: entreprise . imposition = 'IS'
alors: dirigeant . rémunération . imposable
abattement:
valeur: 10% * assiette
# A VÉRIFIER: calculé à la main en revalorisant le taux 2020
# HISTORIQUE 2020: 12627€
# 12627€ × (1 + 0,2%)
plafond: 12652 €/an
# HISTORIQUE 2020: 441€
# 441€ × (1 + 0,2%)
plancher: 442 €/an
références:
Frais professionnels - forfait ou frais réels: https://www.service-public.fr/particuliers/vosdroits/F1989
impôt . foyer fiscal . revenu imposable . autres revenus imposables:
question: Quel est le montant total des autres revenus imposables du foyer fiscal ?
titre: Autres revenus imposables du foyer fiscal
question: Quel est le montant total des autres revenus imposables du foyer
fiscal ?
par défaut: 0 €/an
impôt . foyer fiscal . revenu fiscal de référence:
@ -411,11 +415,19 @@ impôt . foyer fiscal . impôt à payer:
- impôt sur le revenu
- CEHR
# [TODO] Il semble y avoir un soucis: selon la doc impot.gouv, le "revenu brut"
# (sur lequel est basé l'impôt brut ci-dessous sans doute?) ne doit pas contenir
# les revenus de capitaux mobiliers. Donc les dividendes imposables au barème ne
# devraient dans ce cas pas se voir appliquer de décote pour les bas revenus. Il
# faudrait sans doute revoir l'ensemble des règles de calcul autour du barème
# pour bien séparer celles qui ne s'appliquent qu'aux revenus brut.
impôt . foyer fiscal . impôt sur le revenu:
unité: €/an
formule:
valeur: impôt brut
abattement: décote
somme:
- valeur: impôt brut
abattement: décote
- impôt . dividendes . PFU
exemples:
- nom: Salaire d'un cadre
situation:
@ -439,6 +451,10 @@ impôt . foyer fiscal . impôt sur le revenu . quotient familial:
unité: €/part/an
formule: revenu imposable / nombre de parts
impôt . foyer fiscal . impôt sur le revenu . quotient familial . sans parts rattachées:
unité: €/part/an
formule: revenu imposable / nombre de parts . sans parts rattachées
impôt . foyer fiscal . impôt sur le revenu . quotient familial . plafond avantage:
formule:
somme:
@ -464,11 +480,11 @@ impôt . foyer fiscal . impôt sur le revenu . impôt brut par part:
Voici le fameux barème de l'impôt sur le revenu. C'est un barème marginal à 5 tranches.
Une contribution sur les hauts revenus ajoute deux tranches supplémentaires.
Attention : pour un revenu de 100 000€ annuels, le contribuable ne paiera 41 000€ d'impôt (le taux de la 4ème tranche est 41%) ! Ces 41% sont appliqués uniquement à la part de ses revenus supérieure à 72 617€.
Attention : pour un revenu de 100 000€ annuels, le contribuable ne paiera pas 41 000€ d'impôt (le taux de la 4ème tranche est 41%) ! Ces 41% sont appliqués uniquement à la part de ses revenus supérieure à 72 617€.
formule:
barème:
assiette: quotient familial
tranches:
tranches: # ⚠️ Les tranches sont en doublon dans la règle "sans parts rattachées"
- taux: 0%
plafond: 10084 €/part/an
- taux: 11%
@ -486,22 +502,38 @@ impôt . foyer fiscal . impôt sur le revenu . impôt brut par part:
références:
Article 197 du Code général des impôts: https://www.legifrance.gouv.fr/affichCodeArticle.do?cidTexte=LEGITEXT000006069577&idArticle=LEGIARTI000006308322
impôt . foyer fiscal . impôt sur le revenu . impôt brut par part . sans parts rattachées:
formule:
barème:
assiette: quotient familial . sans parts rattachées
tranches:
- taux: 0%
plafond: 10084 €/part/an
- taux: 11%
plafond: 25710 €/part/an
- taux: 30%
plafond: 73516 €/part/an
- taux: 41%
plafond: 158122 €/part/an
- taux: 45%
impôt . foyer fiscal . impôt sur le revenu . impôt brut:
formule:
le maximum de:
- impôt brut . sans plafonnement
- somme:
- recalcul:
règle: impôt brut . sans plafonnement
avec:
nombre de parts . rattachées: 0 part
- impôt brut . sans plafonnement . sans parts rattachées
- (- quotient familial . plafond avantage)
impôt . foyer fiscal . impôt sur le revenu . impôt brut . sans plafonnement:
formule:
produit:
assiette: impôt brut par part
facteur: nombre de parts
produit:
assiette: impôt brut par part
facteur: nombre de parts
impôt . foyer fiscal . impôt sur le revenu . impôt brut . sans plafonnement . sans parts rattachées:
produit:
assiette: impôt brut par part . sans parts rattachées
facteur: nombre de parts . sans parts rattachées
impôt . foyer fiscal . CEHR:
unité: €/an
@ -535,5 +567,51 @@ impôt . domiciliation étranger non implémentée:
formule: situation personnelle . domiciliation fiscale à l'étranger
type: notification
niveau: avertissement
description: |
description: |
La retenue à la source pour les non-résident n'est pas encore implémentée. Pour en savoir plus, se référer à la [documentation fiscale](https://www.impots.gouv.fr/portail/international-particulier/je-suis-non-resident-dois-je-declarer-des-revenus-et-payer-des-impots-en)
impôt . dividendes:
valeur: oui
applicable si: bénéficiaire . dividendes . bruts > 0
titre: Imposition des dividendes
impôt . montant si autres revenus imposables uniquement:
recalcul:
règle: impôt . foyer fiscal . impôt à payer
avec:
bénéficiaire . dividendes . bruts: 0 €/an
impôt . foyer fiscal . revenu imposable: foyer fiscal . revenu imposable . autres revenus imposables
titre: Montant de l'impôt dans le cas où aucun dividende ne serait touché
impôt . dividendes . montant en sus des autres revenus imposables:
variations:
- si: méthode de calcul . PFU
alors: PFU
- sinon: impôt . foyer fiscal . impôt à payer - montant si autres revenus imposables uniquement
titre: Montant de l'impôt sur dividendes, en sus de l'impôt sur les autres
revenus imposables
impôt . dividendes . PFU:
applicable si: impôt . méthode de calcul . PFU
produit:
assiette: bénéficiaire . dividendes . bruts
taux: 12.8%
titre: Montant de l'impôt sur dividendes au titre du Prélèvement Forfaitaire
Unique (ou "flat tax")
description: |
Ce montant est à verser sous forme d'acompte au moment du versement des
dividendes.
L'acompte n'est pas obligatoire au cas où le revenu fiscal n-2 est inférieur
à
- 50 000 € pour une personne seule,
- 75 000 € pour un couple soumis à l'imposition commune (mariés ou
pacsés).
Dans ce cas, le bénéficiaire peut faire la demande de dispense au plus tard
le 30 novembre de l'année précédant celle du paiement
références:
Fiche service-public.fr: https://www.service-public.fr/professionnels-entreprises/vosdroits/F32963
Article 200 A du Code Général des Impôts: https://www.legifrance.gouv.fr/codes/id/LEGISCTA000006179579/
Article 117 quater du Code Général des Impôts: https://www.legifrance.gouv.fr/codes/id/LEGIARTI000036428175/#LEGIARTI000036428175

View File

@ -2,6 +2,7 @@
dirigeant . indépendant . PL:
titre: Profession libérale
applicable si: entreprise . activité = 'libérale'
rend non applicable: entreprise . activité . mixte
formule: oui
dirigeant . indépendant . PL . métier:
@ -20,7 +21,7 @@ dirigeant . indépendant . PL . métier:
dirigeant . indépendant . PL . métier . rattaché CIPAV:
titre: Autre métier rattaché à la CIPAV
description: |
Vous exercez un métier réglementé rattaché à la CIPAV. La liste de ces métiers est :
Vous exercez un métier réglementé rattaché à la CIPAV. La liste de ces métiers est :
- Architecte (architecte, architecte dintérieur, économiste de la construction, maître dœuvre, géomètre expert)
- Guide-montage (moniteur de ski, guide de haute montagne, accompagnateur de moyenne montagne)
@ -112,7 +113,7 @@ dirigeant . indépendant . PL . option régime général:
Les personnes exerçant déjà une profession libérale non réglementée avant
2019 peuvent opter entre 2019 et 2023 pour la Sécurité sociale pour les
indépendants, à condition dêtre à jour dans le paiement de toutes leurs
cotisations à la CIPAV.
cotisations à la CIPAV.
Cette option leur permettra de bénéficier des mêmes droits que les artisans
et commerçants (indemnités journalières, retraite, invalidité, etc.).
@ -153,7 +154,7 @@ dirigeant . indépendant . PL . régime général . taux spécifique retraite co
travailleurs indépendants  ont la possibilité dopter pour des taux
spécifique de la cotisation retraite complémentaire.
références:
Guide PL urssaf (page 10): https://www.urssaf.fr/portail/files/live/sites/urssaf/files/documents/Guide-Professions-liberales.pdf
Guide PL urssaf: https://www.urssaf.fr/portail/files/live/sites/urssaf/files/documents/Diaporama_TI_statuts_hors_AE.pdf
dirigeant . indépendant . PL . régime général . taux spécifique retraite complémentaire . montant:
titre: retraite complémentaire (taux PLNR)
@ -176,22 +177,23 @@ dirigeant . indépendant . PL . maladie:
- régime général
- PAMC
remplace: cotisations et contributions . maladie
formule:
produit:
assiette: indépendant . assiette des cotisations
taux:
taux progressif:
assiette: indépendant . assiette des cotisations
multiplicateur: plafond sécurité sociale temps plein
tranches:
- plafond: 0%
taux: 1.5%
- plafond: 110%
taux: 6.5%
arrondi: oui
produit:
assiette:
valeur: assiette des cotisations
plancher: assiette minimale . maladie
taux:
taux progressif:
assiette: assiette des cotisations
multiplicateur: plafond sécurité sociale temps plein
tranches:
- plafond: 0%
taux: 1.5%
- plafond: 110%
taux: 6.5%
arrondi: oui
références:
secu-independants.fr: https://www.secu-independants.fr/cotisations/calcul-des-cotisations/taux-de-cotisations
guide urssaf (pdf): https://www.urssaf.fr/portail/files/live/sites/urssaf/files/documents/Guide-Professions-liberales.pdf
guide urssaf (pdf): https://www.urssaf.fr/portail/files/live/sites/urssaf/files/documents/Diaporama_PL_statuts_hors_AE_et_PAM.pdf
note: |
Les professions libérales réglementée ne cotisent pour la part correspondante aux
indemnités journalières et n'ont donc pas le droit à ces indemnités en cas de
@ -242,47 +244,25 @@ dirigeant . indépendant . PL . CIPAV:
dirigeant . indépendant . PL . CIPAV . retraite complémentaire:
remplace: cotisations et contributions . retraite complémentaire
titre: retraite complémentaire (CIPAV)
formule:
somme:
- grille:
assiette: assiette des cotisations
unité: €/an
tranches:
- montant: 1457
plafond: 26581 €/an
- montant: 2913
plafond: 49281 €/an
- montant: 4370
plafond: 57851 €/an
- montant: 7283
plafond: 66401 €/an
- montant: 10196
plafond: 83061 €/an
- montant: 16023
plafond: 103181 €/an
- montant: 17479
plafond: 123301 €/an
- montant: 18936
- (- réduction COVID . montant)
plancher: 0
dirigeant . indépendant . PL . CIPAV . retraite complémentaire . réduction COVID:
applicable si: entreprise . date de création < 01/01/2020
question: |
Avez-vous fait une demande pour bénéficier de la réduction de cotisations de
retraite complémentaire sans conditions de revenus ?
description: |
La Cipav met en place une réduction jusqu'à 1392€ de cotisation sur la
retraire complémentaire sans diminution du nombre de points acquis. Cette
aide n'est pas automatique, mais peut-être obtenue sur simple demande via la
messagerie de l'espace adhérent.
[Faire votre demande](https://www.lacipav.fr/dispositif-exceptionnel-procedure)
par défaut: non
dirigeant . indépendant . PL . CIPAV . retraite complémentaire . réduction COVID . montant:
titre: réduction COVID
formule: 1392 €/an
unité: €/an
grille:
assiette: assiette des cotisations
tranches:
- montant: 1457
plafond: 26581 €/an
- montant: 2913
plafond: 49281 €/an
- montant: 4370
plafond: 57851 €/an
- montant: 7283
plafond: 66401 €/an
- montant: 10196
plafond: 83061 €/an
- montant: 16023
plafond: 103181 €/an
- montant: 17479
plafond: 123301 €/an
- montant: 18936
dirigeant . indépendant . PL . CIPAV . invalidité et décès:
remplace: cotisations et contributions . invalidité et décès
@ -325,30 +305,32 @@ dirigeant . indépendant . PL . retraite CNAVPL:
une de ces conditions:
- régime général
- PL . CNBF
titre: retraite de base (CNAVPL)
description: |
Toutes les professions libérale (à l'exception des avocats)
ont les mêmes taux de cotisations pour leur retraite de base.
La caisse nationale d'assurance vieillesse des professions
libérales est l'organisme qui fédère les différentes caisses
libérales est l'organisme qui fédère les différentes caisses
existantes (CIPAV, CARPIMKO, CARCDSF, CAVEC etc..)
formule:
somme:
- produit:
assiette: cotisations et contributions . retraite de base . assiette
taux: 8.23%
plafond: plafond sécurité sociale temps plein
arrondi: oui
- produit:
assiette: cotisations et contributions . retraite de base . assiette
taux: 1.87%
plafond: 5 * plafond sécurité sociale temps plein
arrondi: oui
produit:
assiette:
valeur: assiette des cotisations
plancher: assiette minimale . retraite
composantes:
- attributs:
nom: tranche T1
arrondi: oui
taux: 8.23%
plafond: plafond sécurité sociale temps plein
- attributs:
nom: tranche t2
arrondi: oui
taux: 1.87%
plafond: 5 * plafond sécurité sociale temps plein
références:
cnavpl.fr: https://www.cnavpl.fr/
cnavpl.fr: https://www.cnavpl.fr/preparer-sa-retraite/
cotisation minimale (Guide CNAVPL): https://www.cnavpl.fr/wp-content/uploads/2020/10/guide-site-2020.pdf#page=21
liste des caisses: https://www.cnavpl.fr/regimes-complementaires-et-prevoyance/
Guide CNAVPL (PDF): https://www.cnavpl.fr/statuts-et-documents-de-reference/?wpdmdl=56215
@ -373,7 +355,7 @@ dirigeant . indépendant . PL . PAMC:
rend non applicable:
- cotisations et contributions . indemnités journalières maladie
- conjoint collaborateur
- entreprise . chiffre d'affaires . franchise de TVA dépassée
- entreprise . chiffre d'affaires . franchise de TVA
- dirigeant . indépendant . revenus étrangers
- dirigeant . indépendant . cotisations et contributions . maladie domiciliation fiscale étranger
formule: oui
@ -388,8 +370,8 @@ dirigeant . indépendant . PL . PAMC . proportion recette activité non conventi
30%: 30%
description: |
Les recettes non conventionnées sont toutes celles qui ne rentrent pas dans
les catégories suivantes :
les catégories suivantes :
- Honoraires tirés des actes remboursables (y compris les
dépassements dhonoraires et les frais de déplacement figurant sur le relevé
SNIR)
@ -489,30 +471,31 @@ dirigeant . indépendant . PL . PAMC . revenus activité conventionnée:
plancher: 0%
dirigeant . indépendant . PL . PAMC . assiette participation CPAM:
description: Aussi appelé revenu conventionnel, il s'agit du revenu des honoraires nets
description:
Aussi appelé revenu conventionnel, il s'agit du revenu des honoraires nets
de dépassement.
formule: revenus activité conventionnée / (100% + dépassement d'honoraire moyen)
note: |
La formule référencée dans les textes Urssaf est la suivante :
> (revenu de lactivité conventionnée) x (total des honoraires - total des dépassements dhonoraires) / montant total des honoraires.
La formule référencée dans les textes Urssaf est la suivante :
> (revenu de lactivité conventionnée) x (total des honoraires - total des dépassements dhonoraires) / montant total des honoraires.
On peut simplififer cette formule en :
On peut simplififer cette formule en :
> (revenu de lactivité conventionnée) / (100% + dépassement d'honoraire moyen)
### Preuve
Si on prends les variables suivantes,
Si on prends les variables suivantes,
> `h+` : total des honoraires (avec dépassement)
`h` : honoraires sans dépassement
`d%`: pourcentage de dépassement d'honoraire moyen
On a :
>
On a :
>
`h+ = h + h * d%`
`h+ = h * (100% + d%)`
Si on remplace dans la formule de l'assiette participation CPAM, on a :
> 1. `(revenu de lactivité conventionnée) * h / h+`
> 2. `(revenu de lactivité conventionnée) * h / (h * (100% + d%))
> 2. `(revenu de lactivité conventionnée) * h / (h * (100% + d%))
> 3. `(revenu de lactivité conventionnée) / (100% + d%)`
références:
@ -578,7 +561,7 @@ dirigeant . indépendant . PL . PAMC . assiette participation chirurgien-dentist
dirigeant . indépendant . PL . PAMC . assiette participation chirurgien-dentiste . taux Urssaf:
description: |
Le « taux Urssaf » (taux UR) permet de calculer la part de votre
cotisation dassurance maladie-maternité prise en charge par la CPAM.
cotisation dassurance maladie-maternité prise en charge par la CPAM.
Ce taux est pré-rempli sur votre déclaration de revenus professionnels. Il
est issu des données de votre Relevé individuel dactivité et de
@ -589,7 +572,7 @@ dirigeant . indépendant . PL . PAMC . assiette participation chirurgien-dentist
## Calcul du taux
La formule de calcul du taux de dépassement est la suivante :
La formule de calcul du taux de dépassement est la suivante :
> Taux Urssaf = (dépassements - montants remboursés forfaits CMU) / (montants remboursables actes + montants remboursés forfaits CMU)
question: Quel est votre "taux Urssaf" ?
unité: ''
@ -633,7 +616,7 @@ dirigeant . indépendant . PL . PAMC . IJSS:
Les indemnités complémentaires aux indemnités journalières de la Sécurité
sociale versées dans le cadre dun contrat de prévoyance ne constituent pas
des revenus de remplacement.
Note: Les prestations dinvalidité versées par les régimes
dinvalidité-décès ne sont pas concernées.
@ -755,7 +738,7 @@ dirigeant . indépendant . PL . CARMF . retraite CNAVPL . participation CPAM:
dirigeant . indépendant . PL . CARMF . retraite complémentaire:
remplace: cotisations et contributions . retraite complémentaire
description: >-
La CARMF gère le régime de retraite complémentaire.
La CARMF gère le régime de retraite complémentaire.
Le montant des cotisations est déterminé en fonction des revenus
nets dactivité indépendante de lavant-dernière année.
@ -768,7 +751,7 @@ dirigeant . indépendant . PL . CARMF . retraite complémentaire:
titre: retraite complémentaire (CARMF)
arrondi: oui
variations:
- si: entreprise . durée d'activité . en fin d'année <= 2 ans
- si: entreprise . date de création >= 01/01/2020
alors: 0€/an
- sinon:
produit:
@ -785,7 +768,7 @@ dirigeant . indépendant . PL . CARMF . invalidité décès:
description: >-
La CARMF gère un régime de prévoyance versant une pension en cas
d'invalidité permanente et un capital décès ainsi quune rente pour les
conjoints et enfants survivants en cas de décès de l'assuré.
conjoints et enfants survivants en cas de décès de l'assuré.
La cotisation comporte trois classes forfaitaires dont le montant est
déterminé en fonction de vos revenus nets d'activité indépendante de
@ -927,7 +910,8 @@ dirigeant . indépendant . PL . CARCDSF . chirurgien-dentiste . PCV:
titre: Prestation complémentaire vieillesse (CARCDSF chirurgien-dentiste)
remplace: cotisations et contributions . PCV
non applicable si: exonération PCV
note: Une dispense peut être accordée lorsque les revenus professionnels 2019 sont
note:
Une dispense peut être accordée lorsque les revenus professionnels 2019 sont
inférieurs ou égaux à 500 C (valeur au 1er janvier de lannée considérée),
soit 11 500 €.

View File

@ -8,10 +8,7 @@ protection sociale . retraite:
icônes: 👵
type: branche
résumé: Garantit en moyenne 60 à 70 % du dernier revenu d'activité après 65 ans.
non applicable si:
toutes ces conditions:
- entreprise . activité = 'libérale'
- dirigeant . indépendant . PL . régime général = non
description: |
Tous les travailleurs en France cotisent tout au long de leur vie professionnelle pour bénéficier dun régime de retraite dès lors quils ont lâge de cesser leur activité.
@ -35,7 +32,7 @@ protection sociale . retraite:
somme:
- base
- complémentaire salarié
- complémentaire sécurité des indépendants
- complémentaire indépendants
note: |
Il s'agit d'une estimation a but purement indicatif, afin de comparer la retraite des différents régimes.
@ -47,7 +44,16 @@ protection sociale . retraite:
- On ne prend pas en compte les caisses de retraite des professions libérales réglementées (les 10 sections de la Cnavpl et la Cnbf)
- On ne calcule pas le nombre de trimestres validés par année
Ces limites seront amenées à évoluer au fur et à mesure du développement du simulateur
protection sociale . retraite . plr:
applicable si:
toutes ces conditions:
- entreprise . activité . libérale réglementée
- dirigeant . indépendant . PL . option régime général = non
remplace: retraite
rend non applicable: complémentaire indépendants
titre: Retraite profession libérale réglementée
description: Nous n'avons pas implémenté les règles spécifiques aux professions libérales relementées.
valeur: "'Non implémenté'"
protection sociale . retraite . base:
titre: pension de retraite de base
@ -115,7 +121,7 @@ protection sociale . retraite . trimestres validés . barème trimestres génér
- montant: 4
références:
cnav.fr: https://www.legislation.cnav.fr/Pages/bareme.aspx?Nom=salaire_validant_un_trimestre_montant_bar
Article R351-9 du code de la sécurité sociale: https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000028751530/2014-03-21
protection sociale . retraite . trimestres validés . trimestres auto-entrepreneur:
applicable si: dirigeant . auto-entrepreneur
description: Les seuils de chiffre d'affaires minimum pour la validation des trimestres pour la retraite en auto-entrepreneur. En-dessous du montant minimum, vous n'aurez accès qu'à l'allocation de solidarité.
@ -197,32 +203,30 @@ protection sociale . retraite . complémentaire salarié . points acquis:
références:
service-public.fr: https://www.service-public.fr/particuliers/vosdroits/F15396
protection sociale . retraite . complémentaire sécurité des indépendants:
formule: points acquis * valeur du point
protection sociale . retraite . complémentaire indépendants:
acronyme: RCI
non applicable si:
toutes ces conditions:
- entreprise . activité = 'libérale'
- dirigeant . indépendant . PL . régime général = non
formule: total points acquis * valeur du point
références:
secu-independants.fr: https://www.secu-independants.fr/retraite/calcul-retraite/retraite-complementaire/
protection sociale . retraite . complémentaire sécurité des indépendants . valeur du point:
protection sociale . retraite . complémentaire indépendants . valeur du point:
formule: 1.191 €/point/an
références:
secu-independants.fr: https://www.secu-independants.fr/baremes/prestations-vieillesse-et-invalidite-deces
protection sociale . retraite . complémentaire sécurité des indépendants . points acquis:
formule: points acquis par mois * mois cotisés
protection sociale . retraite . complémentaire indépendants . total points acquis:
formule: points acquis * mois cotisés
protection sociale . retraite . complémentaire sécurité des indépendants . points acquis par mois:
unité: points/mois
formule:
produit:
assiette:
somme:
- dirigeant . indépendant . cotisations et contributions . retraite complémentaire
# - dirigeant . auto-entrepreneur . cotisations et contributions . cotisations . retraite complémentaire
facteur: 1 / prix d'achat du point
protection sociale . retraite . complémentaire indépendants . points acquis:
unité: points/an
valeur: dirigeant . indépendant . cotisations et contributions . retraite complémentaire / prix d'achat du point
protection sociale . retraite . complémentaire sécurité des indépendants . prix d'achat du point:
formule: 17.515 €/point
notes: il s'agit du prix d'achat 2018 (la valeur pour 2019 sur le site secu-independants.fr est marquée comme N.C)
protection sociale . retraite . complémentaire indépendants . prix d'achat du point:
formule: 17.765 €/point
références:
secu-independants.fr: https://www.secu-independants.fr/baremes/baremes-2018/baremesprestations-maladie-maternite/?reg=ile-de-france-centre&ae=oui
@ -267,7 +271,7 @@ protection sociale . santé . indemnités journalières:
brut et versées tous les 14 jours en moyenne.
non applicable si:
toutes ces conditions:
- entreprise . activité = 'libérale'
- entreprise . activité . libérale réglementée
- dirigeant . indépendant . PL . régime général = non
unité: €/jour
note: |

View File

@ -91,7 +91,7 @@ contrat salarié . frais professionnels . titres-restaurant:
- dun repas,
- de préparations alimentaires directement consommables,
- de fruits et légumes.
Ce titre peut être émis sur support papier ou sous forme dématérialisée.
@ -126,14 +126,13 @@ contrat salarié . frais professionnels . titres-restaurant . part déductible:
contrat salarié . frais professionnels . titres-restaurant . nombre:
question: Combien de titres-restaurant sont distribués au salarié ?
arrondi: oui
par défaut:
produit:
assiette: 19 titres-restaurant/mois
par défaut:
produit:
assiette: 19 titres-restaurant/mois
facteur: temps de travail . quotité de travail
suggestions:
5 repas/semaines: 5 titres-restaurant/semaines * période . semaines par mois
3 repas/semaine: 3 titres-restaurant/semaines * période . semaines par mois
5 repas/semaines: 5 titres-restaurant/semaines * période . semaines par mois
3 repas/semaine: 3 titres-restaurant/semaines * période . semaines par mois
contrat salarié . frais professionnels . titres-restaurant . montant unitaire:
question: Quelle est la valeur unitaire du titre-restaurant ?
@ -180,7 +179,7 @@ contrat salarié . frais professionnels . abonnement transports publics . montan
par défaut: 0 €/mois
description: |
L'employeur doit prendre en charge 50% du montant dépensé par le salarié pour les transports publics lui permettant de se rendre sur son lieu de travail.
Cette prise en charge (dans la limite des 50% du montant) est exonérée de cotisations sociales et d'impôt sur le revenu.
Dans le cas d'un temps partiel, le taux de prise en charge sera le même pour un mi-temps ou plus. En dessous, le taux de prise en charge sera proportionnel.
@ -191,11 +190,9 @@ contrat salarié . frais professionnels . abonnement transports publics . montan
Navigo: 75 €/mois
Técély: 65 €/mois
RTM: 40 €/mois
Tisséo: 42.50 €/mois
Tisséo: 42.50 €/mois
TBM: 42.20 €/mois
contrat salarié . frais professionnels . abonnement transports publics . taux de participation employeur:
valeur: 50%
@ -203,7 +200,7 @@ contrat salarié . frais professionnels . abonnement transports publics . taux d
titre: Taux de prise en charge
valeur:
produit:
assiette:
assiette:
le minimum de:
- temps de travail . quotité de travail
- 50%
@ -275,9 +272,9 @@ contrat salarié . frais professionnels . transports personnels . carburant faib
valeur: montant
plafond:
le minimum de:
- proportion déduction * 200€/an
- valeur: proportion déduction * 500€/an
abattement: abonnement transports publics . prise en charge
- proportion déduction * 200€/an
- valeur: proportion déduction * 500€/an
abattement: abonnement transports publics . prise en charge
contrat salarié . frais professionnels . transports personnels . forfait mobilités durables:
valeur: oui
@ -416,7 +413,12 @@ contrat salarié . activité partielle . indemnités . base:
formule:
multiplication:
assiette: retrait absence
taux: 70%
# Historique:
# - avant le 01/07/2021: 70%
# - à partir du 01/07/2021 : 60% (sauf pour les secteurs protégés, date repoussée au 01/09/2021)
taux:
valeur: 70%
nom: taux
contrat salarié . activité partielle . indemnités . complémentaire:
titre: indemnité complémentaire
@ -444,11 +446,11 @@ contrat salarié . activité partielle . indemnités . conventionnelle:
grille:
assiette: rémunération . assiette congés payés
tranches:
- montant: 95% - 70%
- montant: 95% - indemnités . base . taux
plafond: 2000 €/mois
- montant: 80% - 70%
- montant: 80% - indemnités . base . taux
plafond: plafond sécurité sociale temps plein
- montant: 75% - 70%
- montant: 75% - indemnités . base . taux
références:
Legifrance: https://www.legifrance.gouv.fr/affichIDCCArticle.do?idArticle=KALIARTI000028465400&cidTexte=KALITEXT000028465378&dateTexte=29990101&categorieLien=id
Juritravail: https://www.juritravail.com/Actualite/Hygiene-securite-travail-employeur/Id/327284
@ -505,8 +507,17 @@ contrat salarié . activité partielle . indemnisation entreprise . taux d'indem
formule:
variations:
- si: secteur d'activité restreint
# Historique:
# - avant le 01/07/2021: 70%
# - avant le 01/08/2021: 60%
# - avant le 01/09/2021: 52%
# - à partir du 01/09/2021: 36%
alors: 70%
- sinon: 60%
# Historique:
# - avant le 01/06/2021: 60%
# - avant le 01/07/2021: 52%
# - à partir du 01/07/2021: 36%
- sinon: 52%
contrat salarié . activité partielle . secteur d'activité restreint:
question: >-
@ -538,74 +549,120 @@ contrat salarié . activité partielle . convention syntec:
de chômage partielle au dessus du minimum légal et à la charge de
l'entreprise.
par défaut: non
rend non applicable:
# TODO: this is not working, the question is still displayed. This should be
# fixed but is not critical
- profession spécifique
contrat salarié . déduction forfaitaire spécifique:
description: >-
Pour une liste précise de professions, l'employeur peut pratiquer une
déduction forfaitaire spécifique pour frais professionnels sur la base de
calcul des cotisations sociales.
applicable si:
toutes ces conditions:
- application
- taux > 0%
déduction forfaitaire spécifique (DFS) pour frais professionnels sur la base de
calcul des cotisations sociales. spécifique consiste en un abattement sur l'assiette
des cotisations sociales. Elle peut s'appliquer si le salarié supporte
effectivement des frais lors de son activité professionnelle.
En labsence de frais effectivement engagés, ou si lemployeur prend en
charge ou rembourse la totalité des frais professionnels, il est impossible
dappliquer la DFS.
titre: assiette avec DFS
question: Le salarié bénéficie-t-il d'une déduction forfaitaire spécifique ?
par défaut: non
remplace:
règle: cotisations . assiette
par:
valeur: cotisations . assiette
abattement:
valeur: taux * cotisations . assiette
plafond: 7600 €/an
plancher: cotisations . assiette minimale
sauf dans: contrat salarié . CSG et CRDS
# TODO: ajouter pas d'abattement pour l'assurance chômage mais seulement
# pour les journalistes. Nécessite probablement de faire un re-remplacement
# inverse.
formule:
valeur: cotisations . assiette
abattement:
valeur: taux * cotisations . assiette
plafond: 7600 €/an
plancher: cotisations . assiette minimale
références:
Fiche Urssaf.fr: https://www.urssaf.fr/portail/home/employeur/calculer-les-cotisations/les-elements-a-prendre-en-compte/les-frais-professionnels/la-deduction-forfaitaire-specifi.html
contrat salarié . déduction forfaitaire spécifique . taux:
formule:
variations:
- si: profession spécifique = 'journaliste'
- si: profession = 'journaliste'
alors: 20%
- si: profession spécifique = 'ouvrier du bâtiment'
- si: profession = 'ouvrier du bâtiment'
alors: 10%
- si: profession spécifique = 'artiste musicien'
- si: profession = 'artiste musicien'
alors: 20%
- si: profession spécifique = 'pilote de ligne ou personnel navigant'
- si: profession = 'pilote de ligne ou personnel navigant'
alors: 30%
- sinon: 0%
références:
Circulaire DSS: https://solidarites-sante.gouv.fr/fichiers/bo/2005/05-09/a0090046.htm
contrat salarié . déduction forfaitaire spécifique . application:
contrat salarié . déduction forfaitaire spécifique . profession:
question: Quelle est la profession du salarié pour l'application de la déduction forfaitaire spécifique ?
par défaut: non
formule:
une possibilité:
possibilités:
- journaliste
- ouvrier du bâtiment
- artiste musicien
- pilote de ligne ou personnel navigant
choix obligatoire: oui
contrat salarié . déduction forfaitaire spécifique . profession . journaliste:
formule: contrat salarié . déduction forfaitaire spécifique . profession = 'journaliste'
icônes:
description: >-
La déduction forfaitaire spécifique consiste en un abattement sur l'assiette
des cotisations sociales. L'employeur peut renoncer à appliquer cette
déduction afin d'accorder plus de droits au salarié, notamment en terme de
retraite et d'assurance chômage.
titre: application de la DFS
formule: oui
Concerne les journalistes, rédacteurs, photographes, directeurs de journaux
Critiques dramatiques et musicaux.
contrat salarié . CDD . taxe forfaitaire sur les CDD d'usage:
description: |
À compter du 1er janvier 2020, l'employeur doit s'acquitter d'une taxe
forfaitaire pour chaque conclusion d'un CDD d'usage. L'objectif de cette
taxe est de décourager le recours excessif aux contrats courts.
contrat salarié . déduction forfaitaire spécifique . profession . journaliste . réduction de taux:
applicable si: déduction forfaitaire spécifique . profession = 'journaliste'
remplace:
- règle: vieillesse . employeur . plafonnée . taux
par: vieillesse . employeur . plafonnée . taux * réduction de taux
- règle: vieillesse . employeur . déplafonnée . taux
par: vieillesse . employeur . déplafonnée . taux * réduction de taux
- règle: vieillesse . salarié . plafonnée . taux
par: vieillesse . salarié . plafonnée . taux * réduction de taux
- règle: vieillesse . salarié . déplafonnée . taux
par: vieillesse . salarié . déplafonnée . taux * réduction de taux
Certains secteurs d'activités définis dans le code du travail ne sont pas
concernés par cette taxe.
applicable si: motif = 'classique . usage'
# TODO: cette formule ne fonctionne pas pour des contrats dont la durée est
# inférieure à un mois
formule: 10 € / durée contrat
références:
Urssaf.fr: https://www.urssaf.fr/portail/home/actualites/toute-lactualite-employeur/taxe-forfaitaire-sur-les-cdd-dus.html
- règle: allocations familiales . taux
par: allocations familiales . taux * réduction de taux
- règle: établissement . taux du versement transport
par: établissement . taux du versement transport * réduction de taux
- règle: ATMP . taux
par: ATMP . taux * réduction de taux
- règle: ATMP . taux minimum
par: ATMP . taux minimum * réduction de taux
formule: 80%
contrat salarié . déduction forfaitaire spécifique . profession . journaliste . abattement fiscal:
applicable si: déduction forfaitaire spécifique . profession = 'journaliste'
remplace: rémunération . net imposable
titre: net imposable journaliste
formule:
valeur: rémunération . net imposable
abattement: 7650€/an
contrat salarié . déduction forfaitaire spécifique . profession . ouvrier du bâtiment:
icônes: 👷‍♂️
description: >-
Concerne les ouvriers du bâtiment visés aux paragraphes 1er et 2 de
larticle 1er du décret du 17 novembre 1936, à lexclusion de ceux qui
travaillent en usine ou en atelier.
contrat salarié . déduction forfaitaire spécifique . profession . artiste musicien:
icônes: 🎼
description: >-
Concerne les artistes musiciens, choristes, chefs dorchestre, régisseurs de
théâtre
contrat salarié . déduction forfaitaire spécifique . profession . pilote de ligne ou personnel navigant:
icônes:
description: >-
Concerne les pilotes, radios, mécaniciens navigants des compagnies de
transports aériens ; pilotes et mécaniciens employés par les maisons de
construction davions et de moteurs pour lessai de prototypes ; pilotes
moniteurs daéro-clubs et des écoles daviation civile
contrat salarié . CDD . CPF:
description: Contribution au financement du compte personnel de formation (CPF) spécifique aux CDD.
@ -626,7 +683,7 @@ contrat salarié . CDD . CPF:
taux: 1%
références:
Code du travail - Article L6322-37: https://www.legifrance.gouv.fr/affichCodeArticle.do?idArticle=LEGIARTI000022234996&cidTexte=LEGITEXT000006072050
contrat salarié . CDD . congés pris:
question: Combien de jours de congés seront pris sur la durée du CDD (en jours ouvrés) ?
description: |
@ -637,17 +694,17 @@ contrat salarié . CDD . congés pris:
la totalité: congés dus sur la durée du contrat
la moitié: 50% * congés dus sur la durée du contrat
par défaut: 0 jours ouvrés
contrat salarié . CDD . jours ouvrés sur la durée du contrat:
contrat salarié . CDD . jours ouvrés sur la durée du contrat:
produit:
assiette: 253 jours ouvrés/an
assiette: 253 jours ouvrés/an
facteur: durée contrat
contrat salarié . CDD . congés dus sur la durée du contrat:
produit:
assiette: 25 jours ouvrés/an
facteur: durée contrat
arrondi: 2 unités
arrondi: 2 décimales
contrat salarié . CDD . contrôle congés non pris max:
type: notification
@ -677,7 +734,7 @@ contrat salarié . CDD . indemnité compensatrice de congés payés:
rémunération brute totale perçue par le salarié au cours de la période de
référence.
### Méthode "maintien du salaire"
### Méthode "maintien du salaire"
Cette méthode sera le plus souvent favorable au salarié lorsque celui-ci a
bénéficié dune augmentation de salaire.
@ -694,7 +751,7 @@ contrat salarié . CDD . indemnité compensatrice de congés payés:
produit:
assiette: rémunération . assiette congés payés
taux: 10%
abattement:
abattement:
nom: proportion congés pris
unité: '%'
valeur: congés pris / congés dus sur la durée du contrat
@ -702,15 +759,14 @@ contrat salarié . CDD . indemnité compensatrice de congés payés:
- nom: Méthode du maintien de salaire
produit:
assiette: rémunération . assiette congés payés / jours ouvrés sur la durée du contrat
facteur:
facteur:
nom: congés non pris
valeur: congés dus sur la durée du contrat - congés pris
note: |
L'indemnité est versée à la fin du contrat, sauf si le CDD se poursuit par un CDI.
À noter, la loi El Khomri modifie l'article L3141-12:
- avant : Les congés peuvent être pris dès l'ouverture des droits
- avant : Les congés peuvent être pris dès l'ouverture des droits
- maintenant : Les congés peuvent être pris dès lembauche
références:
Fiche service-public.gouv.fr: https://www.service-public.fr/particuliers/vosdroits/F2931
@ -781,10 +837,10 @@ contrat salarié . ATMP:
assiette: cotisations . assiette
taux [ref]:
variations:
- si: taux réduit
alors: 0.8%
- si: taux connu
alors: taux personnalisé
- si: taux réduit
alors: 0.8%
- sinon: ATMP . taux collectif ATMP
références:
taux réduit 2020 (code 00.00B): https://www.legifrance.gouv.fr/loda/id/JORFTEXT000039684705
@ -834,7 +890,9 @@ contrat salarié . ATMP . taux connu:
contrat salarié . ATMP . taux personnalisé:
question: Quel est le taux AT/MP de l'entreprise ?
description: >
Les entreprises de plus de 20 salariés ont un taux individualisé. L'entreprise peut consulter le taux qui la
Les entreprises de plus de 20 salariés ont un taux individualisé. L'entreprise peut consulter son taux effectif directement sur espace net-entreprise.
références:
Accès compte ATMP (entreprise): https://www.net-entreprises.fr/declaration/compte-atmp/
par défaut: taux moyen
contrat salarié . ATMP . taux collectif ATMP:
@ -1285,9 +1343,7 @@ contrat salarié . rémunération . brut de base:
- rémunération . net
- rémunération . net après impôt
- équivalent temps plein
- dirigeant . rémunération totale
- entreprise . chiffre d'affaires
- entreprise . chiffre d'affaires minimum
- dirigeant . rémunération . totale
références:
Le salaire. Fixation et paiement: http://travail-emploi.gouv.fr/droit-du-travail/remuneration-et-participation-financiere/remuneration/article/le-salaire-fixation-et-paiement
@ -1735,7 +1791,6 @@ contrat salarié . cotisations . patronales:
- formation professionnelle
- versement transport
- taxe d'apprentissage
- CDD . taxe forfaitaire sur les CDD d'usage
- CDD . CPF
- forfait social
- conventionnelles
@ -1767,7 +1822,7 @@ contrat salarié . rémunération . net imposable:
description: |
C'est la base utilisée pour calculer l'impôt sur le revenu.
valeur:
nom: base
nom: base
description: Le net imposable avant les exonérations et déductions
somme:
- net avec revenus de remplacement
@ -1784,8 +1839,6 @@ contrat salarié . rémunération . net imposable:
références:
DSN: https://dsn-info.custhelp.com/app/answers/detail/a_id/2110
contrat salarié . rémunération . net imposable . heures supplémentaires et complémentaires défiscalisées:
unité: €/mois
formule:
@ -1851,7 +1904,7 @@ contrat salarié . rémunération . net après impôt:
références:
Explication de l'impôt à la source: https://www.economie.gouv.fr/prelevement-a-la-source
formule: net - impôt
formule: net - impôt . montant
contrat salarié . prix du travail:
titre: Coût total
@ -1892,11 +1945,11 @@ contrat salarié . cotisations . salariales . réductions de cotisations:
contrat salarié . cotisations . patronales . réductions de cotisations:
titre: réductions patronales
description: >-
À l'exception de la déduction heure supplémentaire, les
dispositifs de réduction de cotisations patronales sont
À l'exception de la déduction heure supplémentaire, les
dispositifs de réduction de cotisations patronales sont
mutuellement exclusif.
Le formule ci dessous selectionne donc automatiquement
Le formule ci dessous selectionne donc automatiquement
le plus avantageux pour l'employeur.
formule:
somme:
@ -1986,11 +2039,19 @@ contrat salarié . aides employeur:
Le simulateur n'intègre pas toutes les innombrables aides disponibles en France. Découvrez-les sur le [portail officiel](http://www.aides-entreprises.fr).
formule:
somme:
- aides à l'embauche
- activité partielle . indemnisation entreprise
contrat salarié . aides employeur . aides à l'embauche:
description: |
L'État met en place des aides pour encourager l'embauche de certains publics prioritaires. Ces aides sont non cumulables entre elles.
formule:
le maximum de:
- aide à l'embauche d'apprentis
- aide exceptionnelle à l'embauche d'apprentis
- aide exceptionnelle à l'embauche des jeunes
- aide à l'embauche senior professionnalisation
- activité partielle . indemnisation entreprise
- aide à l'embauche des travailleurs handicapés
- emploi franc
contrat salarié . aides employeur . aide à l'embauche d'apprentis:
@ -2029,7 +2090,7 @@ contrat salarié . aides employeur . aide exceptionnelle à l'embauche d'apprent
- apprentissage
- professionnalisation . jeune de moins de 30 ans
- ancienneté . date d'embauche >= 01/07/2020
- ancienneté . date d'embauche <= 28/02/2021
- ancienneté . date d'embauche <= 31/12/2021
- temps de travail . temps effectif > 0 heures/mois
formule:
variations:
@ -2040,6 +2101,10 @@ contrat salarié . aides employeur . aide exceptionnelle à l'embauche d'apprent
références:
Plan \#1jeune1solution: https://travail-emploi.gouv.fr/formation-professionnelle/entreprise-et-alternance/aide-exceptionnelle-apprentissage
contrat salarié . jeune de moins de 26 ans:
question: Le salarié a-t-il moins de 26 ans ?
par défaut: non
contrat salarié . aides employeur . aide exceptionnelle à l'embauche des jeunes:
non applicable si: aides employeur . emploi franc
description: >-
@ -2053,16 +2118,17 @@ contrat salarié . aides employeur . aide exceptionnelle à l'embauche des jeune
applicable si:
toutes ces conditions:
- ancienneté . date d'embauche >= 01/08/2020
- ancienneté . date d'embauche <= 31/03/2021
- ancienneté . date d'embauche <= 31/05/2021
- rémunération . brut de base <= 2 * SMIC
- une de ces conditions:
- CDI
- toutes ces conditions:
- CDD
- CDD . durée contrat >= 3 mois
- nom: jeune de moins de 26 ans
question: Le salarié a-t-il moins de 26 ans ?
par défaut: non
- jeune de moins de 26 ans
rend non applicable:
# Dispositifs moins généreux et non cumulables
- aide à l'embauche des travailleurs handicapés
formule:
produit:
assiette: 4000 €/an
@ -2094,9 +2160,6 @@ contrat salarié . aides employeur . emploi franc:
- *embauche en CDI* : 5000€/an pendant 3 ans, soit un total de 15 000€
- *embauche en CDD d'au moins 6 mois* : 2 500€/an pendant 2 ans, soit 5 000€ au maximum
> Dans le cadre du plan "France Relance", le dispositif est revalorisé pour
une embauche jusqu'au 31 janvier 2021.
[🗺 Vérifier l'éligibilité d'une adresse](https://sig.ville.gouv.fr/recherche-adresses-qp-polville)
applicable si: éligible
formule:
@ -2106,8 +2169,10 @@ contrat salarié . aides employeur . emploi franc:
- si:
toutes ces conditions:
- ancienneté . date d'embauche >= 15/10/2020
- ancienneté . date d'embauche <= 31/03/2021
- ancienneté . date d'embauche <= 31/05/2021
- jeune de moins de 26 ans
alors:
nom: emploi franc plus
variations:
- si: CDD
alors: 5500 €/an
@ -2119,6 +2184,9 @@ contrat salarié . aides employeur . emploi franc:
- sinon: 5000 €/an
facteur: temps de travail . quotité de travail effective
arrondi: oui
rend non applicable:
# Dispositifs moins généreux et non cumulables
- aide à l'embauche des travailleurs handicapés
références:
Fiche emploi franc: https://travail-emploi.gouv.fr/emploi/emplois-francs/article/embaucher-une-personne-en-emploi-franc
@ -2132,7 +2200,7 @@ contrat salarié . aides employeur . emploi franc . éligible:
- CDD . durée contrat >= 6
question: Cette embauche est-elle éligible à l'aide emploi-franc ?
description: |
Conditions :
Conditions :
- Le salarié recruté est un demandeur d'emploi inscrit à Pôle Emploi et réside dans un quartier prioritaire de la ville (QPV) [vérifier l'éligibilité d'un quartier](https://sig.ville.gouv.fr/recherche-adresses-qp-polville)
- L'employeur est à jour de ses cotisations et n'a pas procédé à un licenciement économique pour le poste pourvu dans les 6 mois précédents le recrutement
- Le salarié recruté ne doit pas avoir appartenu à l'effectif de l'entreprise dans les 6 mois précédent l'embauche
@ -2147,6 +2215,33 @@ contrat salarié . temps de travail:
- heures complémentaires
description: En France, la base légale du travail est de 35h/semaine. Mais un grand nombre de dispositions existantes permettent de faire varier ce nombre. Vous pouvez les retrouver sur la page [service-public.fr](https://www.service-public.fr/particuliers/vosdroits/N458) dédiée.
contrat salarié . aides employeur . aide à l'embauche des travailleurs handicapés:
non applicable si: aides employeur . emploi franc
description: >-
Dans le cadre du plan de relance, le gouvernement a décidé de créer une aide
à lembauche visant à favoriser lemploi des personnes en situation de
handicap quel que soit leur âge.
applicable si:
toutes ces conditions:
- nom: situation de handicap
question: Le salarié a-t'il la reconnaissance de travailleur handicapé (RQTH) ?
par défaut: non
- ancienneté . date d'embauche >= 01/09/2020
- ancienneté . date d'embauche <= 30/06/2021
- rémunération . brut de base <= 2 * SMIC
- une de ces conditions:
- CDI
- toutes ces conditions:
- CDD
- CDD . durée contrat >= 3 mois
formule:
produit:
assiette: 4000 €/an
facteur: temps de travail . quotité de travail effective
arrondi: oui
références:
Plan \#1jeune1solution: https://travail-emploi.gouv.fr/le-ministere-en-action/relance-activite/plan-1jeune-1solution/aide-embauche-jeunes
contrat salarié . temps de travail . temps effectif:
formule:
somme:
@ -2458,7 +2553,7 @@ contrat salarié . réduction générale . plafond avec application de la DFS:
recalcul:
règle: réduction générale
avec:
déduction forfaitaire spécifique . application: non
déduction forfaitaire spécifique: non
contrat salarié . contribution d'équilibre général:
description: >-
@ -2725,7 +2820,7 @@ contrat salarié . complémentaire santé . forfait:
titre: Forfait de complémentaire santé entreprise
description: >-
L'employeur a l'obligation de proposer une offre de complémentaire santé. Il
doit prendre à sa charge au moins la moitié de son coût.
doit prendre à sa charge au moins la moitié de son coût.
Le montant peut varier, mais la prévoyance doit couvrir un panier minimum
légal de soins.
@ -3065,8 +3160,8 @@ contrat salarié . maladie . taux solidarité autonomie:
acronyme: CSA
formule: 0.3%
références:
- https://www.urssaf.fr/portail/home/employeur/calculer-les-cotisations/les-taux-de-cotisations/la-contribution-solidarite-auton.html
- https://www.service-public.fr/professionnels-entreprises/vosdroits/F32872
Fiche Urssaf: https://www.urssaf.fr/portail/home/employeur/calculer-les-cotisations/les-taux-de-cotisations/la-contribution-solidarite-auton.html
Fiche service-public: https://www.service-public.fr/professionnels-entreprises/vosdroits/F32872
contrat salarié . maladie . taux employeur:
formule:
@ -3302,75 +3397,6 @@ contrat salarié . taxe sur les salaires . barème:
références:
barème: https://www.service-public.fr/professionnels-entreprises/vosdroits/F22576
contrat salarié . profession spécifique:
question: Le salarié exerce t-il l'une des professions suivantes ?
par défaut: non
formule:
une possibilité:
possibilités:
- journaliste
- ouvrier du bâtiment
- artiste musicien
- pilote de ligne ou personnel navigant
contrat salarié . profession spécifique . journaliste:
formule: contrat salarié . profession spécifique = 'journaliste'
icônes:
description: >-
Concerne les journalistes, rédacteurs, photographes, directeurs de journaux
Critiques dramatiques et musicaux.
contrat salarié . profession spécifique . journaliste . réduction de taux:
applicable si: profession spécifique = 'journaliste'
remplace:
- règle: vieillesse . employeur . plafonnée . taux
par: vieillesse . employeur . plafonnée . taux * réduction de taux
- règle: vieillesse . employeur . déplafonnée . taux
par: vieillesse . employeur . déplafonnée . taux * réduction de taux
- règle: vieillesse . salarié . plafonnée . taux
par: vieillesse . salarié . plafonnée . taux * réduction de taux
- règle: vieillesse . salarié . déplafonnée . taux
par: vieillesse . salarié . déplafonnée . taux * réduction de taux
- règle: allocations familiales . taux
par: allocations familiales . taux * réduction de taux
- règle: établissement . taux du versement transport
par: établissement . taux du versement transport * réduction de taux
- règle: ATMP . taux
par: ATMP . taux * réduction de taux
- règle: ATMP . taux minimum
par: ATMP . taux minimum * réduction de taux
formule: 80%
contrat salarié . profession spécifique . journaliste . abattement fiscal:
applicable si: profession spécifique = 'journaliste'
remplace: rémunération . net imposable
titre: net imposable journaliste
formule:
valeur: rémunération . net imposable
abattement: 7650€/an
contrat salarié . profession spécifique . ouvrier du bâtiment:
icônes: 👷‍♂️
description: >-
Concerne les ouvriers du bâtiment visés aux paragraphes 1er et 2 de
larticle 1er du décret du 17 novembre 1936, à lexclusion de ceux qui
travaillent en usine ou en atelier.
contrat salarié . profession spécifique . artiste musicien:
icônes: 🎼
description: >-
Concerne les artistes musiciens, choristes, chefs dorchestre, régisseurs de
théâtre
contrat salarié . profession spécifique . pilote de ligne ou personnel navigant:
icônes:
description: >-
Concerne les pilotes, radios, mécaniciens navigants des compagnies de
transports aériens ; pilotes et mécaniciens employés par les maisons de
construction davions et de moteurs pour lessai de prototypes ; pilotes
moniteurs daéro-clubs et des écoles daviation civile
contrat salarié . régime des impatriés:
question: Le salarié bénéficie-t-il du régime des impatriés ?
non applicable si: situation personnelle . domiciliation fiscale à l'étranger
@ -3529,7 +3555,7 @@ contrat salarié . lodeom:
contrat salarié . lodeom . zone un:
titre: Zone géographique 1 (Guadeloupe, Martinique, La Réunion, Guyane)
références:
- https://www.urssaf.fr/portail/home/outre-mer/employeur/exoneration-de-cotisations-di-1/employeurs-situes-en-guadeloupe.html
fiche Urssaf: https://www.urssaf.fr/portail/home/outre-mer/employeur/exoneration-de-cotisations-di-1/employeurs-situes-en-guadeloupe.html
formule:
une de ces conditions:
- établissement . localisation . département = 'Guadeloupe'

View File

@ -1,8 +1,8 @@
{
"extends": "../tsconfig.json",
"compilerOptions": {
"allowJs": true,
"noEmit": true,
"strict": true
},
"include": ["build.js"]
},
"include": ["build.js"]
}

View File

@ -0,0 +1,11 @@
ALGOLIA_APP_ID=
ALGOLIA_ADMIN_KEY=
ALGOLIA_SEARCH_KEY=
ALGOLIA_INDEX_PREFIX=monentreprise-{env}-
INSEE_SIRENE_API_SECRET=
MATOMO_TOKEN=
ATINTERNET_API_ACCESS_KEY=
ATINTERNET_API_SECRET_KEY=
DEEPL_API_SECRET=
ZAMMAD_API_SECRET_KEY=
GITHUB_API_SECRET=

View File

@ -3,3 +3,4 @@ source/data/*
!source/data/versement-transport.json
cypress/videos
cypress/screenshots
cypress/downloads

View File

@ -0,0 +1,52 @@
[
{
"nom": "Brest",
"code": "29019",
"codesPostaux": [
"29200",
"29000",
"29240"
],
"_score": 1.7190035169667954,
"departement": {
"code": "29",
"nom": "Finistère"
},
"region": {
"code": "53",
"nom": "Bretagne"
}
},
{
"nom": "Brestot",
"code": "27110",
"codesPostaux": [
"27350"
],
"_score": 0.6998164236528914,
"departement": {
"code": "27",
"nom": "Eure"
},
"region": {
"code": "28",
"nom": "Normandie"
}
},
{
"nom": "Esboz-Brest",
"code": "70216",
"codesPostaux": [
"70300"
],
"_score": 0.4939500123346406,
"departement": {
"code": "70",
"nom": "Haute-Saône"
},
"region": {
"code": "27",
"nom": "Bourgogne-Franche-Comté"
}
}
]

View File

@ -0,0 +1,34 @@
[
{
"nom": "Escoubès-Pouts",
"code": "65164",
"codesPostaux": [
"65100"
],
"_score": 0.7078563143746053,
"departement": {
"code": "65",
"nom": "Hautes-Pyrénées"
},
"region": {
"code": "76",
"nom": "Occitanie"
}
},
{
"nom": "Ponson-Debat-Pouts",
"code": "64451",
"codesPostaux": [
"64460"
],
"_score": 0.6108133474330959,
"departement": {
"code": "64",
"nom": "Pyrénées-Atlantiques"
},
"region": {
"code": "75",
"nom": "Nouvelle-Aquitaine"
}
}
]

View File

@ -0,0 +1,240 @@
{
"total_results": 2,
"total_pages": 1,
"per_page": 5,
"page": 1,
"etablissement": [
{
"id": 162746407,
"siren": "493096580",
"siret": "49309658000029",
"nic": "00029",
"l1_normalisee": "MONSIEUR JOHAN GIROD",
"l2_normalisee": null,
"l3_normalisee": null,
"l4_normalisee": "ROUTE DE SAINT PONS",
"l5_normalisee": null,
"l6_normalisee": "34390 MONS",
"l7_normalisee": null,
"l1_declaree": "PAYSAGISTE DU CAROUX",
"l2_declaree": null,
"l3_declaree": null,
"l4_declaree": "ROUTE DE SAINT PONS",
"l5_declaree": null,
"l6_declaree": "34390 MONS",
"l7_declaree": null,
"numero_voie": null,
"indice_repetition": null,
"type_voie": "RTE",
"libelle_voie": "DE SAINT PONS",
"code_postal": "34390",
"cedex": null,
"region": "76",
"libelle_region": "Occitanie",
"departement": "34",
"arrondissement": "1",
"canton": "24",
"commune": "160",
"libelle_commune": "MONS",
"departement_unite_urbaine": "34",
"taille_unite_urbaine": "0",
"numero_unite_urbaine": "34000",
"etablissement_public_cooperation_intercommunale": "200066348",
"tranche_commune_detaillee": "11",
"zone_emploi": "9108",
"is_siege": "1",
"enseigne": null,
"indicateur_champ_publipostage": "A",
"statut_prospection": null,
"date_introduction_base_diffusion": "201310",
"nature_entrepreneur_individuel": null,
"libelle_nature_entrepreneur_individuel": null,
"activite_principale": "8130Z",
"libelle_activite_principale": "Services d'aménagement paysager",
"date_validite_activite_principale": null,
"tranche_effectif_salarie": "NN",
"libelle_tranche_effectif_salarie": null,
"tranche_effectif_salarie_centaine_pret": null,
"date_validite_effectif_salarie": null,
"origine_creation": null,
"date_creation": "20101022",
"date_debut_activite": "20131001",
"nature_activite": null,
"lieu_activite": null,
"type_magasin": null,
"is_saisonnier": null,
"modalite_activite_principale": null,
"caractere_productif": null,
"participation_particuliere_production": null,
"caractere_auxiliaire": null,
"nom_raison_sociale": "GIROD*JOHAN/",
"sigle": null,
"nom": "GIROD",
"prenom": "JOHAN",
"civilite": "MONSIEUR",
"numero_rna": null,
"nic_siege": "00029",
"region_siege": "76",
"departement_commune_siege": "34160",
"email": null,
"nature_juridique_entreprise": "1000",
"libelle_nature_juridique_entreprise": "Entrepreneur individuel",
"activite_principale_entreprise": "8130Z",
"libelle_activite_principale_entreprise": "Services d'aménagement paysager",
"date_validite_activite_principale_entreprise": null,
"activite_principale_registre_metier": null,
"is_ess": null,
"date_ess": null,
"tranche_effectif_salarie_entreprise": "NN",
"libelle_tranche_effectif_salarie_entreprise": null,
"tranche_effectif_salarie_entreprise_centaine_pret": null,
"date_validite_effectif_salarie_entreprise": null,
"categorie_entreprise": "PME",
"date_creation_entreprise": "200612",
"date_introduction_base_diffusion_entreprise": "201303",
"indice_monoactivite_entreprise": null,
"modalite_activite_principale_entreprise": null,
"caractere_productif_entreprise": null,
"date_validite_rubrique_niveau_entreprise_esa": null,
"tranche_chiffre_affaire_entreprise_esa": null,
"activite_principale_entreprise_esa": null,
"premiere_activite_secondaire_entreprise_esa": null,
"deuxieme_activite_secondaire_entreprise_esa": null,
"troisieme_activite_secondaire_entreprise_esa": null,
"quatrieme_activite_secondaire_entreprise_esa": null,
"nature_mise_a_jour": null,
"indicateur_mise_a_jour_1": null,
"indicateur_mise_a_jour_2": null,
"indicateur_mise_a_jour_3": null,
"date_mise_a_jour": "2021-02-23T14:00:31",
"created_at": "2021-06-03T01:09:00.000+02:00",
"updated_at": "2021-06-03T01:09:00.000+02:00",
"longitude": "2.947298",
"latitude": "43.565142",
"geo_score": "0.94",
"geo_type": "street",
"geo_adresse": "Route de Saint-Pons 34390 Mons",
"geo_id": "34160_0061",
"geo_ligne": "G",
"geo_l4": "ROUTE DE SAINT PONS",
"geo_l5": null
},
{
"id": 163431308,
"siren": "534886650",
"siret": "53488665000041",
"nic": "00041",
"l1_normalisee": "MONSIEUR JOHAN HERVOIS",
"l2_normalisee": null,
"l3_normalisee": null,
"l4_normalisee": "2 RUE GIRODET",
"l5_normalisee": null,
"l6_normalisee": "45000 ORLEANS",
"l7_normalisee": null,
"l1_declaree": "HERVOIS",
"l2_declaree": null,
"l3_declaree": null,
"l4_declaree": "2 RUE GIRODET",
"l5_declaree": null,
"l6_declaree": "45000 ORLEANS",
"l7_declaree": null,
"numero_voie": "2",
"indice_repetition": null,
"type_voie": "RUE",
"libelle_voie": "GIRODET",
"code_postal": "45000",
"cedex": null,
"region": "24",
"libelle_region": "Centre-Val de Loire",
"departement": "45",
"arrondissement": "2",
"canton": "99",
"commune": "234",
"libelle_commune": "ORLEANS",
"departement_unite_urbaine": "45",
"taille_unite_urbaine": "7",
"numero_unite_urbaine": "45701",
"etablissement_public_cooperation_intercommunale": "244500468",
"tranche_commune_detaillee": "61",
"zone_emploi": "2418",
"is_siege": "1",
"enseigne": null,
"indicateur_champ_publipostage": "A",
"statut_prospection": null,
"date_introduction_base_diffusion": "201507",
"nature_entrepreneur_individuel": null,
"libelle_nature_entrepreneur_individuel": null,
"activite_principale": "6910Z",
"libelle_activite_principale": "Activités juridiques",
"date_validite_activite_principale": null,
"tranche_effectif_salarie": null,
"libelle_tranche_effectif_salarie": null,
"tranche_effectif_salarie_centaine_pret": null,
"date_validite_effectif_salarie": null,
"origine_creation": null,
"date_creation": "20150701",
"date_debut_activite": "20150701",
"nature_activite": null,
"lieu_activite": null,
"type_magasin": null,
"is_saisonnier": null,
"modalite_activite_principale": null,
"caractere_productif": null,
"participation_particuliere_production": null,
"caractere_auxiliaire": null,
"nom_raison_sociale": "HERVOIS*JOHAN CEDRIC ALEXANDRE/",
"sigle": null,
"nom": "HERVOIS",
"prenom": "JOHAN",
"civilite": "MONSIEUR",
"numero_rna": null,
"nic_siege": "00041",
"region_siege": "24",
"departement_commune_siege": "45234",
"email": null,
"nature_juridique_entreprise": "1000",
"libelle_nature_juridique_entreprise": "Entrepreneur individuel",
"activite_principale_entreprise": "6910Z",
"libelle_activite_principale_entreprise": "Activités juridiques",
"date_validite_activite_principale_entreprise": null,
"activite_principale_registre_metier": null,
"is_ess": null,
"date_ess": null,
"tranche_effectif_salarie_entreprise": null,
"libelle_tranche_effectif_salarie_entreprise": null,
"tranche_effectif_salarie_entreprise_centaine_pret": null,
"date_validite_effectif_salarie_entreprise": null,
"categorie_entreprise": "PME",
"date_creation_entreprise": "201110",
"date_introduction_base_diffusion_entreprise": "201507",
"indice_monoactivite_entreprise": null,
"modalite_activite_principale_entreprise": null,
"caractere_productif_entreprise": null,
"date_validite_rubrique_niveau_entreprise_esa": null,
"tranche_chiffre_affaire_entreprise_esa": null,
"activite_principale_entreprise_esa": null,
"premiere_activite_secondaire_entreprise_esa": null,
"deuxieme_activite_secondaire_entreprise_esa": null,
"troisieme_activite_secondaire_entreprise_esa": null,
"quatrieme_activite_secondaire_entreprise_esa": null,
"nature_mise_a_jour": null,
"indicateur_mise_a_jour_1": null,
"indicateur_mise_a_jour_2": null,
"indicateur_mise_a_jour_3": null,
"date_mise_a_jour": "2021-02-23T15:56:48",
"created_at": "2021-06-03T01:13:33.000+02:00",
"updated_at": "2021-06-03T01:13:33.000+02:00",
"longitude": "1.90327",
"latitude": "47.907448",
"geo_score": "0.96",
"geo_type": "housenumber",
"geo_adresse": "2 Rue Girodet 45000 Orléans",
"geo_id": "45234_3240_00002",
"geo_ligne": "G",
"geo_l4": "2 RUE GIRODET",
"geo_l5": null
}
],
"spellcheck": null,
"suggestions": []
}

View File

@ -0,0 +1,596 @@
{
"total_results": 35,
"total_pages": 7,
"per_page": 5,
"page": 1,
"etablissement": [
{
"id": 169416217,
"siren": "511125122",
"siret": "51112512200024",
"nic": "00024",
"l1_normalisee": "SCI MENOZA",
"l2_normalisee": null,
"l3_normalisee": null,
"l4_normalisee": "160 RUELLE DU HERLIN",
"l5_normalisee": null,
"l6_normalisee": "62700 BRUAY-LA-BUISSIERE",
"l7_normalisee": null,
"l1_declaree": null,
"l2_declaree": null,
"l3_declaree": null,
"l4_declaree": "160 RUELLE DU HERLIN",
"l5_declaree": null,
"l6_declaree": "62700 BRUAY-LA-BUISSIERE",
"l7_declaree": null,
"numero_voie": "160",
"indice_repetition": null,
"type_voie": "RLE",
"libelle_voie": "DU HERLIN",
"code_postal": "62700",
"cedex": null,
"region": "32",
"libelle_region": "Hauts-de-France",
"departement": "62",
"arrondissement": "2",
"canton": "16",
"commune": "178",
"libelle_commune": "BRUAY LA BUISSIERE",
"departement_unite_urbaine": "62",
"taille_unite_urbaine": "7",
"numero_unite_urbaine": "00752",
"etablissement_public_cooperation_intercommunale": "200072460",
"tranche_commune_detaillee": "41",
"zone_emploi": "3123",
"is_siege": "1",
"enseigne": null,
"indicateur_champ_publipostage": "A",
"statut_prospection": null,
"date_introduction_base_diffusion": "201312",
"nature_entrepreneur_individuel": null,
"libelle_nature_entrepreneur_individuel": null,
"activite_principale": "6820B",
"libelle_activite_principale": "Location de terrains et d'autres biens immobiliers",
"date_validite_activite_principale": null,
"tranche_effectif_salarie": null,
"libelle_tranche_effectif_salarie": null,
"tranche_effectif_salarie_centaine_pret": null,
"date_validite_effectif_salarie": null,
"origine_creation": null,
"date_creation": "20131201",
"date_debut_activite": "20131201",
"nature_activite": null,
"lieu_activite": null,
"type_magasin": null,
"is_saisonnier": null,
"modalite_activite_principale": null,
"caractere_productif": null,
"participation_particuliere_production": null,
"caractere_auxiliaire": null,
"nom_raison_sociale": "SCI MENOZA",
"sigle": null,
"nom": null,
"prenom": null,
"civilite": null,
"numero_rna": null,
"nic_siege": "00024",
"region_siege": "32",
"departement_commune_siege": "62178",
"email": null,
"nature_juridique_entreprise": "6540",
"libelle_nature_juridique_entreprise": "Société civile immobilière",
"activite_principale_entreprise": "6820B",
"libelle_activite_principale_entreprise": "Location de terrains et d'autres biens immobiliers",
"date_validite_activite_principale_entreprise": null,
"activite_principale_registre_metier": null,
"is_ess": null,
"date_ess": null,
"tranche_effectif_salarie_entreprise": null,
"libelle_tranche_effectif_salarie_entreprise": null,
"tranche_effectif_salarie_entreprise_centaine_pret": null,
"date_validite_effectif_salarie_entreprise": null,
"categorie_entreprise": null,
"date_creation_entreprise": "200902",
"date_introduction_base_diffusion_entreprise": "201312",
"indice_monoactivite_entreprise": null,
"modalite_activite_principale_entreprise": null,
"caractere_productif_entreprise": null,
"date_validite_rubrique_niveau_entreprise_esa": null,
"tranche_chiffre_affaire_entreprise_esa": null,
"activite_principale_entreprise_esa": null,
"premiere_activite_secondaire_entreprise_esa": null,
"deuxieme_activite_secondaire_entreprise_esa": null,
"troisieme_activite_secondaire_entreprise_esa": null,
"quatrieme_activite_secondaire_entreprise_esa": null,
"nature_mise_a_jour": null,
"indicateur_mise_a_jour_1": null,
"indicateur_mise_a_jour_2": null,
"indicateur_mise_a_jour_3": null,
"date_mise_a_jour": "2021-02-23T15:19:11",
"created_at": "2021-06-03T01:53:54.000+02:00",
"updated_at": "2021-06-03T01:53:54.000+02:00",
"longitude": "2.564399",
"latitude": "50.499922",
"geo_score": "0.96",
"geo_type": "housenumber",
"geo_adresse": "160 Ruelle du Herlin 62700 Bruay-la-Buissière",
"geo_id": "62482_0098_00160",
"geo_ligne": "G",
"geo_l4": "160 RUELLE DU HERLIN",
"geo_l5": null
},
{
"id": 170002635,
"siren": "834364291",
"siret": "83436429100015",
"nic": "00015",
"l1_normalisee": "MENOZ",
"l2_normalisee": null,
"l3_normalisee": null,
"l4_normalisee": "55 RUE DES PYRENEES",
"l5_normalisee": null,
"l6_normalisee": "75020 PARIS 20",
"l7_normalisee": null,
"l1_declaree": null,
"l2_declaree": null,
"l3_declaree": null,
"l4_declaree": "55 RUE DES PYRENEES",
"l5_declaree": null,
"l6_declaree": "75020 PARIS 20",
"l7_declaree": null,
"numero_voie": "55",
"indice_repetition": null,
"type_voie": "RUE",
"libelle_voie": "DES PYRENEES",
"code_postal": "75020",
"cedex": null,
"region": "11",
"libelle_region": null,
"departement": "75",
"arrondissement": "1",
"canton": null,
"commune": "120",
"libelle_commune": "PARIS 20E ARRONDISSEMENT",
"departement_unite_urbaine": null,
"taille_unite_urbaine": null,
"numero_unite_urbaine": null,
"etablissement_public_cooperation_intercommunale": null,
"tranche_commune_detaillee": "80",
"zone_emploi": null,
"is_siege": "1",
"enseigne": null,
"indicateur_champ_publipostage": "A",
"statut_prospection": null,
"date_introduction_base_diffusion": "201803",
"nature_entrepreneur_individuel": null,
"libelle_nature_entrepreneur_individuel": null,
"activite_principale": "6201Z",
"libelle_activite_principale": "Programmation informatique",
"date_validite_activite_principale": null,
"tranche_effectif_salarie": "01",
"libelle_tranche_effectif_salarie": null,
"tranche_effectif_salarie_centaine_pret": null,
"date_validite_effectif_salarie": "2018",
"origine_creation": null,
"date_creation": "20180102",
"date_debut_activite": "20180325",
"nature_activite": null,
"lieu_activite": null,
"type_magasin": null,
"is_saisonnier": null,
"modalite_activite_principale": null,
"caractere_productif": null,
"participation_particuliere_production": null,
"caractere_auxiliaire": null,
"nom_raison_sociale": "MENOZ",
"sigle": null,
"nom": null,
"prenom": null,
"civilite": null,
"numero_rna": null,
"nic_siege": "00015",
"region_siege": "11",
"departement_commune_siege": "75120",
"email": null,
"nature_juridique_entreprise": "5710",
"libelle_nature_juridique_entreprise": "SAS, société par actions simplifiée",
"activite_principale_entreprise": "6201Z",
"libelle_activite_principale_entreprise": "Programmation informatique",
"date_validite_activite_principale_entreprise": null,
"activite_principale_registre_metier": null,
"is_ess": null,
"date_ess": null,
"tranche_effectif_salarie_entreprise": "01",
"libelle_tranche_effectif_salarie_entreprise": null,
"tranche_effectif_salarie_entreprise_centaine_pret": null,
"date_validite_effectif_salarie_entreprise": "2018",
"categorie_entreprise": "PME",
"date_creation_entreprise": "201801",
"date_introduction_base_diffusion_entreprise": "201803",
"indice_monoactivite_entreprise": null,
"modalite_activite_principale_entreprise": null,
"caractere_productif_entreprise": null,
"date_validite_rubrique_niveau_entreprise_esa": null,
"tranche_chiffre_affaire_entreprise_esa": null,
"activite_principale_entreprise_esa": null,
"premiere_activite_secondaire_entreprise_esa": null,
"deuxieme_activite_secondaire_entreprise_esa": null,
"troisieme_activite_secondaire_entreprise_esa": null,
"quatrieme_activite_secondaire_entreprise_esa": null,
"nature_mise_a_jour": null,
"indicateur_mise_a_jour_1": null,
"indicateur_mise_a_jour_2": null,
"indicateur_mise_a_jour_3": null,
"date_mise_a_jour": "2020-08-25T11:39:32",
"created_at": "2021-06-03T01:57:56.000+02:00",
"updated_at": "2021-06-03T01:57:56.000+02:00",
"longitude": "2.406077",
"latitude": "48.851854",
"geo_score": "0.99",
"geo_type": "housenumber",
"geo_adresse": "55 Rue des Pyrénées 75020 Paris",
"geo_id": "75120_7904_00055",
"geo_ligne": "G",
"geo_l4": "55 RUE DES PYRENEES",
"geo_l5": null
},
{
"id": 159190900,
"siren": "403049448",
"siret": "40304944800034",
"nic": "00034",
"l1_normalisee": "MISTRAL MENOZZI",
"l2_normalisee": null,
"l3_normalisee": null,
"l4_normalisee": "551 ROUTE DE GADAGNE",
"l5_normalisee": null,
"l6_normalisee": "84450 SAINT-SATURNIN-LES-AVIGNON",
"l7_normalisee": null,
"l1_declaree": null,
"l2_declaree": null,
"l3_declaree": null,
"l4_declaree": "551 ROUTE DE GADAGNE",
"l5_declaree": null,
"l6_declaree": "84450 SAINT-SATURNIN-LES-AVIGNON",
"l7_declaree": null,
"numero_voie": "551",
"indice_repetition": null,
"type_voie": "RTE",
"libelle_voie": "DE GADAGNE",
"code_postal": "84450",
"cedex": null,
"region": "93",
"libelle_region": "Provence-Alpes-Côte d'Azur",
"departement": "84",
"arrondissement": "2",
"canton": "14",
"commune": "119",
"libelle_commune": "SAINT SATURNIN LES AVIGNON",
"departement_unite_urbaine": "84",
"taille_unite_urbaine": "7",
"numero_unite_urbaine": "00754",
"etablissement_public_cooperation_intercommunale": "248400251",
"tranche_commune_detaillee": "18",
"zone_emploi": "59",
"is_siege": "1",
"enseigne": null,
"indicateur_champ_publipostage": "A",
"statut_prospection": null,
"date_introduction_base_diffusion": "201909",
"nature_entrepreneur_individuel": null,
"libelle_nature_entrepreneur_individuel": null,
"activite_principale": "6820A",
"libelle_activite_principale": "Location de logements",
"date_validite_activite_principale": null,
"tranche_effectif_salarie": null,
"libelle_tranche_effectif_salarie": null,
"tranche_effectif_salarie_centaine_pret": null,
"date_validite_effectif_salarie": null,
"origine_creation": null,
"date_creation": "20190902",
"date_debut_activite": "20190902",
"nature_activite": null,
"lieu_activite": null,
"type_magasin": null,
"is_saisonnier": null,
"modalite_activite_principale": null,
"caractere_productif": null,
"participation_particuliere_production": null,
"caractere_auxiliaire": null,
"nom_raison_sociale": "MISTRAL MENOZZI",
"sigle": null,
"nom": null,
"prenom": null,
"civilite": null,
"numero_rna": null,
"nic_siege": "00034",
"region_siege": "93",
"departement_commune_siege": "84119",
"email": null,
"nature_juridique_entreprise": "6540",
"libelle_nature_juridique_entreprise": "Société civile immobilière",
"activite_principale_entreprise": "6820A",
"libelle_activite_principale_entreprise": "Location de logements",
"date_validite_activite_principale_entreprise": null,
"activite_principale_registre_metier": null,
"is_ess": null,
"date_ess": null,
"tranche_effectif_salarie_entreprise": "NN",
"libelle_tranche_effectif_salarie_entreprise": null,
"tranche_effectif_salarie_entreprise_centaine_pret": null,
"date_validite_effectif_salarie_entreprise": null,
"categorie_entreprise": null,
"date_creation_entreprise": "199511",
"date_introduction_base_diffusion_entreprise": "201909",
"indice_monoactivite_entreprise": null,
"modalite_activite_principale_entreprise": null,
"caractere_productif_entreprise": null,
"date_validite_rubrique_niveau_entreprise_esa": null,
"tranche_chiffre_affaire_entreprise_esa": null,
"activite_principale_entreprise_esa": null,
"premiere_activite_secondaire_entreprise_esa": null,
"deuxieme_activite_secondaire_entreprise_esa": null,
"troisieme_activite_secondaire_entreprise_esa": null,
"quatrieme_activite_secondaire_entreprise_esa": null,
"nature_mise_a_jour": null,
"indicateur_mise_a_jour_1": null,
"indicateur_mise_a_jour_2": null,
"indicateur_mise_a_jour_3": null,
"date_mise_a_jour": "2020-01-21T19:35:08",
"created_at": "2021-06-03T00:45:23.000+02:00",
"updated_at": "2021-06-03T00:45:23.000+02:00",
"longitude": "4.938683",
"latitude": "43.953835",
"geo_score": "0.96",
"geo_type": "housenumber",
"geo_adresse": "551 Route de Gadagne 84450 Saint-Saturnin-lès-Avignon",
"geo_id": "84119_0298_00551",
"geo_ligne": "G",
"geo_l4": "551 ROUTE DE GADAGNE",
"geo_l5": null
},
{
"id": 164155083,
"siren": "800559064",
"siret": "80055906400012",
"nic": "00012",
"l1_normalisee": "MENOZZI VAISE",
"l2_normalisee": "CLASS CROUTE",
"l3_normalisee": null,
"l4_normalisee": "51BIS RUE DE SAINT CYR",
"l5_normalisee": null,
"l6_normalisee": "69009 LYON 9EME",
"l7_normalisee": null,
"l1_declaree": "CLASS'CROUTE",
"l2_declaree": null,
"l3_declaree": null,
"l4_declaree": "51BIS RUE DE SAINT CYR",
"l5_declaree": null,
"l6_declaree": "69009 LYON 9EME",
"l7_declaree": null,
"numero_voie": "51",
"indice_repetition": "B",
"type_voie": "RUE",
"libelle_voie": "DE ST CYR",
"code_postal": "69009",
"cedex": null,
"region": "84",
"libelle_region": null,
"departement": "69",
"arrondissement": "1",
"canton": null,
"commune": "389",
"libelle_commune": "LYON 9E ARRONDISSEMENT",
"departement_unite_urbaine": null,
"taille_unite_urbaine": null,
"numero_unite_urbaine": null,
"etablissement_public_cooperation_intercommunale": null,
"tranche_commune_detaillee": null,
"zone_emploi": null,
"is_siege": "1",
"enseigne": "CLASS'CROUTE",
"indicateur_champ_publipostage": "A",
"statut_prospection": null,
"date_introduction_base_diffusion": "201404",
"nature_entrepreneur_individuel": null,
"libelle_nature_entrepreneur_individuel": null,
"activite_principale": "5610C",
"libelle_activite_principale": "Restauration de type rapide",
"date_validite_activite_principale": null,
"tranche_effectif_salarie": "11",
"libelle_tranche_effectif_salarie": null,
"tranche_effectif_salarie_centaine_pret": null,
"date_validite_effectif_salarie": "2018",
"origine_creation": null,
"date_creation": "20140220",
"date_debut_activite": "20140401",
"nature_activite": null,
"lieu_activite": null,
"type_magasin": null,
"is_saisonnier": null,
"modalite_activite_principale": null,
"caractere_productif": null,
"participation_particuliere_production": null,
"caractere_auxiliaire": null,
"nom_raison_sociale": "MENOZZI VAISE",
"sigle": null,
"nom": null,
"prenom": null,
"civilite": null,
"numero_rna": null,
"nic_siege": "00012",
"region_siege": "84",
"departement_commune_siege": "69389",
"email": null,
"nature_juridique_entreprise": "5499",
"libelle_nature_juridique_entreprise": "Société à responsabilité limitée (sans autre indication)",
"activite_principale_entreprise": "5610C",
"libelle_activite_principale_entreprise": "Restauration de type rapide",
"date_validite_activite_principale_entreprise": null,
"activite_principale_registre_metier": null,
"is_ess": null,
"date_ess": null,
"tranche_effectif_salarie_entreprise": "11",
"libelle_tranche_effectif_salarie_entreprise": null,
"tranche_effectif_salarie_entreprise_centaine_pret": null,
"date_validite_effectif_salarie_entreprise": "2018",
"categorie_entreprise": "PME",
"date_creation_entreprise": "201402",
"date_introduction_base_diffusion_entreprise": "201602",
"indice_monoactivite_entreprise": null,
"modalite_activite_principale_entreprise": null,
"caractere_productif_entreprise": null,
"date_validite_rubrique_niveau_entreprise_esa": null,
"tranche_chiffre_affaire_entreprise_esa": null,
"activite_principale_entreprise_esa": null,
"premiere_activite_secondaire_entreprise_esa": null,
"deuxieme_activite_secondaire_entreprise_esa": null,
"troisieme_activite_secondaire_entreprise_esa": null,
"quatrieme_activite_secondaire_entreprise_esa": null,
"nature_mise_a_jour": null,
"indicateur_mise_a_jour_1": null,
"indicateur_mise_a_jour_2": null,
"indicateur_mise_a_jour_3": null,
"date_mise_a_jour": "2020-08-25T11:09:50",
"created_at": "2021-06-03T01:18:25.000+02:00",
"updated_at": "2021-06-03T01:18:25.000+02:00",
"longitude": "4.807071",
"latitude": "45.782404",
"geo_score": "0.62",
"geo_type": "housenumber",
"geo_adresse": "51bis Rue de Saint-Cyr 69009 Lyon",
"geo_id": "69389_6295_00051_bis",
"geo_ligne": "G",
"geo_l4": "51BIS RUE DE SAINT CYR",
"geo_l5": null
},
{
"id": 161314597,
"siren": "480134782",
"siret": "48013478200014",
"nic": "00014",
"l1_normalisee": "MENOZZI CITE",
"l2_normalisee": "CITE INTERNATIONALE",
"l3_normalisee": null,
"l4_normalisee": "85 QUAI CHARLES DE GAULLE",
"l5_normalisee": null,
"l6_normalisee": "69006 LYON 6EME",
"l7_normalisee": null,
"l1_declaree": null,
"l2_declaree": null,
"l3_declaree": null,
"l4_declaree": "85 QUAI CHARLES DE GAULLE",
"l5_declaree": null,
"l6_declaree": "69006 LYON 6EME",
"l7_declaree": null,
"numero_voie": "85",
"indice_repetition": null,
"type_voie": "QUAI",
"libelle_voie": "CHARLES DE GAULLE",
"code_postal": "69006",
"cedex": null,
"region": "84",
"libelle_region": null,
"departement": "69",
"arrondissement": "1",
"canton": null,
"commune": "386",
"libelle_commune": "LYON 6E ARRONDISSEMENT",
"departement_unite_urbaine": null,
"taille_unite_urbaine": null,
"numero_unite_urbaine": null,
"etablissement_public_cooperation_intercommunale": null,
"tranche_commune_detaillee": null,
"zone_emploi": null,
"is_siege": "1",
"enseigne": null,
"indicateur_champ_publipostage": "A",
"statut_prospection": null,
"date_introduction_base_diffusion": "200801",
"nature_entrepreneur_individuel": null,
"libelle_nature_entrepreneur_individuel": null,
"activite_principale": "5610C",
"libelle_activite_principale": "Restauration de type rapide",
"date_validite_activite_principale": null,
"tranche_effectif_salarie": "11",
"libelle_tranche_effectif_salarie": null,
"tranche_effectif_salarie_centaine_pret": null,
"date_validite_effectif_salarie": "2018",
"origine_creation": null,
"date_creation": "20041228",
"date_debut_activite": "20080101",
"nature_activite": null,
"lieu_activite": null,
"type_magasin": null,
"is_saisonnier": null,
"modalite_activite_principale": null,
"caractere_productif": null,
"participation_particuliere_production": null,
"caractere_auxiliaire": null,
"nom_raison_sociale": "MENOZZI CITE",
"sigle": null,
"nom": null,
"prenom": null,
"civilite": null,
"numero_rna": null,
"nic_siege": "00014",
"region_siege": "84",
"departement_commune_siege": "69386",
"email": null,
"nature_juridique_entreprise": "5710",
"libelle_nature_juridique_entreprise": "SAS, société par actions simplifiée",
"activite_principale_entreprise": "5610C",
"libelle_activite_principale_entreprise": "Restauration de type rapide",
"date_validite_activite_principale_entreprise": null,
"activite_principale_registre_metier": null,
"is_ess": null,
"date_ess": null,
"tranche_effectif_salarie_entreprise": "11",
"libelle_tranche_effectif_salarie_entreprise": null,
"tranche_effectif_salarie_entreprise_centaine_pret": null,
"date_validite_effectif_salarie_entreprise": "2018",
"categorie_entreprise": "PME",
"date_creation_entreprise": "200412",
"date_introduction_base_diffusion_entreprise": "201812",
"indice_monoactivite_entreprise": null,
"modalite_activite_principale_entreprise": null,
"caractere_productif_entreprise": null,
"date_validite_rubrique_niveau_entreprise_esa": null,
"tranche_chiffre_affaire_entreprise_esa": null,
"activite_principale_entreprise_esa": null,
"premiere_activite_secondaire_entreprise_esa": null,
"deuxieme_activite_secondaire_entreprise_esa": null,
"troisieme_activite_secondaire_entreprise_esa": null,
"quatrieme_activite_secondaire_entreprise_esa": null,
"nature_mise_a_jour": null,
"indicateur_mise_a_jour_1": null,
"indicateur_mise_a_jour_2": null,
"indicateur_mise_a_jour_3": null,
"date_mise_a_jour": "2021-02-23T13:43:00",
"created_at": "2021-06-03T00:59:31.000+02:00",
"updated_at": "2021-06-03T00:59:31.000+02:00",
"longitude": "4.852064",
"latitude": "45.78402",
"geo_score": "0.97",
"geo_type": "housenumber",
"geo_adresse": "85 Quai Charles de Gaulle 69006 Lyon",
"geo_id": "69386_1380_00085",
"geo_ligne": "G",
"geo_l4": "85 QUAI CHARLES DE GAULLE",
"geo_l5": null
}
],
"spellcheck": null,
"suggestions": [
"menoz",
"menozzi*albertini/marie agnes/",
"menozzi*dominique emile/",
"menoz compagnie yado",
"menozzi champagne",
"menozzi cite",
"menozzi holding",
"menozzi industrie",
"menozzi vaise",
"menozzi*annalisa/"
]
}

View File

@ -0,0 +1,296 @@
{
"unite_legale": {
"id": 213007946,
"siren": "480134782",
"statut_diffusion": "O",
"unite_purgee": null,
"date_creation": "2004-12-28",
"sigle": null,
"sexe": null,
"prenom_1": null,
"prenom_2": null,
"prenom_3": null,
"prenom_4": null,
"prenom_usuel": null,
"pseudonyme": null,
"identifiant_association": null,
"tranche_effectifs": "11",
"annee_effectifs": "2018",
"date_dernier_traitement": "2020-08-25T10:24:08",
"nombre_periodes": "8",
"categorie_entreprise": "PME",
"annee_categorie_entreprise": "2018",
"date_fin": null,
"date_debut": "2018-12-31",
"etat_administratif": "A",
"nom": null,
"nom_usage": null,
"denomination": "MENOZZI CITE",
"denomination_usuelle_1": "CLASS'CROUTE",
"denomination_usuelle_2": null,
"denomination_usuelle_3": null,
"categorie_juridique": "5710",
"activite_principale": "56.10C",
"nomenclature_activite_principale": "NAFRev2",
"nic_siege": "00014",
"economie_sociale_solidaire": "N",
"caractere_employeur": "O",
"created_at": "2021-06-03T02:35:23.715+02:00",
"updated_at": "2021-06-03T02:35:23.715+02:00",
"etablissement_siege": {
"id": 1507749543,
"siren": "480134782",
"nic": "00014",
"siret": "48013478200014",
"statut_diffusion": "O",
"date_creation": "2004-12-28",
"tranche_effectifs": "11",
"annee_effectifs": "2018",
"activite_principale_registre_metiers": null,
"date_dernier_traitement": "2021-02-23T13:43:00",
"etablissement_siege": "true",
"nombre_periodes": "3",
"complement_adresse": "CITE INTERNATIONALE",
"numero_voie": "85",
"indice_repetition": null,
"type_voie": "QUAI",
"libelle_voie": "CHARLES DE GAULLE",
"code_postal": "69006",
"libelle_commune": "LYON 6EME",
"libelle_commune_etranger": null,
"distribution_speciale": null,
"code_commune": "69386",
"code_cedex": null,
"libelle_cedex": null,
"code_pays_etranger": null,
"libelle_pays_etranger": null,
"complement_adresse_2": null,
"numero_voie_2": null,
"indice_repetition_2": null,
"type_voie_2": null,
"libelle_voie_2": null,
"code_postal_2": null,
"libelle_commune_2": null,
"libelle_commune_etranger_2": null,
"distribution_speciale_2": null,
"code_commune_2": null,
"code_cedex_2": null,
"libelle_cedex_2": null,
"code_pays_etranger_2": null,
"libelle_pays_etranger_2": null,
"date_debut": "2008-01-01",
"etat_administratif": "A",
"enseigne_1": null,
"enseigne_2": null,
"enseigne_3": null,
"denomination_usuelle": null,
"activite_principale": "56.10C",
"nomenclature_activite_principale": "NAFRev2",
"caractere_employeur": "O",
"longitude": "4.852064",
"latitude": "45.78402",
"geo_score": "0.67",
"geo_type": "housenumber",
"geo_adresse": "85 Quai Charles de Gaulle 69006 Lyon",
"geo_id": "69386_1380_00085",
"geo_ligne": "G",
"geo_l4": "85 QUAI CHARLES DE GAULLE",
"geo_l5": null,
"unite_legale_id": 213007946,
"created_at": "2021-06-03T04:41:50.706+02:00",
"updated_at": "2021-06-03T04:41:50.706+02:00"
},
"numero_tva_intra": "FR45480134782",
"etablissements": [
{
"id": 1507749545,
"siren": "480134782",
"nic": "00030",
"siret": "48013478200030",
"statut_diffusion": "O",
"date_creation": "2016-02-01",
"tranche_effectifs": null,
"annee_effectifs": null,
"activite_principale_registre_metiers": null,
"date_dernier_traitement": "2019-12-22T03:32:01",
"etablissement_siege": "false",
"nombre_periodes": "3",
"complement_adresse": "41-43",
"numero_voie": "41",
"indice_repetition": null,
"type_voie": "RUE",
"libelle_voie": "DES CHARTREUX",
"code_postal": "69001",
"libelle_commune": "LYON 1ER",
"libelle_commune_etranger": null,
"distribution_speciale": null,
"code_commune": "69381",
"code_cedex": null,
"libelle_cedex": null,
"code_pays_etranger": null,
"libelle_pays_etranger": null,
"complement_adresse_2": null,
"numero_voie_2": null,
"indice_repetition_2": null,
"type_voie_2": null,
"libelle_voie_2": null,
"code_postal_2": null,
"libelle_commune_2": null,
"libelle_commune_etranger_2": null,
"distribution_speciale_2": null,
"code_commune_2": null,
"code_cedex_2": null,
"libelle_cedex_2": null,
"code_pays_etranger_2": null,
"libelle_pays_etranger_2": null,
"date_debut": "2018-12-31",
"etat_administratif": "F",
"enseigne_1": null,
"enseigne_2": null,
"enseigne_3": null,
"denomination_usuelle": null,
"activite_principale": "52.10B",
"nomenclature_activite_principale": "NAFRev2",
"caractere_employeur": "O",
"longitude": "4.825305",
"latitude": "45.771974",
"geo_score": "0.62",
"geo_type": "housenumber",
"geo_adresse": "41 Rue des Chartreux 69001 Lyon",
"geo_id": "69381_1550_00041",
"geo_ligne": "G",
"geo_l4": "41 RUE DES CHARTREUX",
"geo_l5": null,
"unite_legale_id": 213007946,
"created_at": "2021-06-03T04:41:50.706+02:00",
"updated_at": "2021-06-03T04:41:50.706+02:00"
},
{
"id": 1507749544,
"siren": "480134782",
"nic": "00022",
"siret": "48013478200022",
"statut_diffusion": "O",
"date_creation": "2008-10-27",
"tranche_effectifs": "NN",
"annee_effectifs": null,
"activite_principale_registre_metiers": null,
"date_dernier_traitement": "2016-04-26T02:56:45",
"etablissement_siege": "false",
"nombre_periodes": "2",
"complement_adresse": null,
"numero_voie": "51",
"indice_repetition": "B",
"type_voie": "RUE",
"libelle_voie": "DE ST CYR",
"code_postal": "69009",
"libelle_commune": "LYON 9EME",
"libelle_commune_etranger": null,
"distribution_speciale": null,
"code_commune": "69389",
"code_cedex": null,
"libelle_cedex": null,
"code_pays_etranger": null,
"libelle_pays_etranger": null,
"complement_adresse_2": null,
"numero_voie_2": null,
"indice_repetition_2": null,
"type_voie_2": null,
"libelle_voie_2": null,
"code_postal_2": null,
"libelle_commune_2": null,
"libelle_commune_etranger_2": null,
"distribution_speciale_2": null,
"code_commune_2": null,
"code_cedex_2": null,
"libelle_cedex_2": null,
"code_pays_etranger_2": null,
"libelle_pays_etranger_2": null,
"date_debut": "2014-03-31",
"etat_administratif": "F",
"enseigne_1": "CLASS'ROUTE",
"enseigne_2": null,
"enseigne_3": null,
"denomination_usuelle": null,
"activite_principale": "56.10C",
"nomenclature_activite_principale": "NAFRev2",
"caractere_employeur": "O",
"longitude": "4.807071",
"latitude": "45.782404",
"geo_score": "0.49",
"geo_type": "housenumber",
"geo_adresse": "51 bis Rue de Saint-cyr 69009 Lyon",
"geo_id": "69389_6295_00051_bis",
"geo_ligne": "G",
"geo_l4": "51 BIS RUE DE SAINT CYR",
"geo_l5": null,
"unite_legale_id": 213007946,
"created_at": "2021-06-03T04:41:50.706+02:00",
"updated_at": "2021-06-03T04:41:50.706+02:00"
},
{
"id": 1507749543,
"siren": "480134782",
"nic": "00014",
"siret": "48013478200014",
"statut_diffusion": "O",
"date_creation": "2004-12-28",
"tranche_effectifs": "11",
"annee_effectifs": "2018",
"activite_principale_registre_metiers": null,
"date_dernier_traitement": "2021-02-23T13:43:00",
"etablissement_siege": "true",
"nombre_periodes": "3",
"complement_adresse": "CITE INTERNATIONALE",
"numero_voie": "85",
"indice_repetition": null,
"type_voie": "QUAI",
"libelle_voie": "CHARLES DE GAULLE",
"code_postal": "69006",
"libelle_commune": "LYON 6EME",
"libelle_commune_etranger": null,
"distribution_speciale": null,
"code_commune": "69386",
"code_cedex": null,
"libelle_cedex": null,
"code_pays_etranger": null,
"libelle_pays_etranger": null,
"complement_adresse_2": null,
"numero_voie_2": null,
"indice_repetition_2": null,
"type_voie_2": null,
"libelle_voie_2": null,
"code_postal_2": null,
"libelle_commune_2": null,
"libelle_commune_etranger_2": null,
"distribution_speciale_2": null,
"code_commune_2": null,
"code_cedex_2": null,
"libelle_cedex_2": null,
"code_pays_etranger_2": null,
"libelle_pays_etranger_2": null,
"date_debut": "2008-01-01",
"etat_administratif": "A",
"enseigne_1": null,
"enseigne_2": null,
"enseigne_3": null,
"denomination_usuelle": null,
"activite_principale": "56.10C",
"nomenclature_activite_principale": "NAFRev2",
"caractere_employeur": "O",
"longitude": "4.852064",
"latitude": "45.78402",
"geo_score": "0.67",
"geo_type": "housenumber",
"geo_adresse": "85 Quai Charles de Gaulle 69006 Lyon",
"geo_id": "69386_1380_00085",
"geo_ligne": "G",
"geo_l4": "85 QUAI CHARLES DE GAULLE",
"geo_l5": null,
"unite_legale_id": 213007946,
"created_at": "2021-06-03T04:41:50.706+02:00",
"updated_at": "2021-06-03T04:41:50.706+02:00"
}
]
}
}

View File

@ -0,0 +1,233 @@
{
"unite_legale": {
"id": 213908306,
"siren": "493096580",
"statut_diffusion": "O",
"unite_purgee": null,
"date_creation": "2006-12-01",
"sigle": null,
"sexe": "M",
"prenom_1": "JOHAN",
"prenom_2": null,
"prenom_3": null,
"prenom_4": null,
"prenom_usuel": "JOHAN",
"pseudonyme": null,
"identifiant_association": null,
"tranche_effectifs": "NN",
"annee_effectifs": null,
"date_dernier_traitement": "2017-05-20T10:02:30",
"nombre_periodes": "4",
"categorie_entreprise": "PME",
"annee_categorie_entreprise": "2018",
"date_fin": null,
"date_debut": "2013-03-10",
"etat_administratif": "A",
"nom": "GIROD",
"nom_usage": null,
"denomination": null,
"denomination_usuelle_1": null,
"denomination_usuelle_2": null,
"denomination_usuelle_3": null,
"categorie_juridique": "1000",
"activite_principale": "81.30Z",
"nomenclature_activite_principale": "NAFRev2",
"nic_siege": "00029",
"economie_sociale_solidaire": null,
"caractere_employeur": "O",
"created_at": "2021-06-03T02:38:22.368+02:00",
"updated_at": "2021-06-03T02:38:22.368+02:00",
"etablissement_siege": {
"id": 1498200901,
"siren": "493096580",
"nic": "00029",
"siret": "49309658000029",
"statut_diffusion": "O",
"date_creation": "2010-10-22",
"tranche_effectifs": "NN",
"annee_effectifs": null,
"activite_principale_registre_metiers": null,
"date_dernier_traitement": "2021-02-23T14:00:31",
"etablissement_siege": "true",
"nombre_periodes": "3",
"complement_adresse": null,
"numero_voie": null,
"indice_repetition": null,
"type_voie": "RTE",
"libelle_voie": "DE SAINT PONS",
"code_postal": "34390",
"libelle_commune": "MONS",
"libelle_commune_etranger": null,
"distribution_speciale": null,
"code_commune": "34160",
"code_cedex": null,
"libelle_cedex": null,
"code_pays_etranger": null,
"libelle_pays_etranger": null,
"complement_adresse_2": null,
"numero_voie_2": null,
"indice_repetition_2": null,
"type_voie_2": null,
"libelle_voie_2": null,
"code_postal_2": null,
"libelle_commune_2": null,
"libelle_commune_etranger_2": null,
"distribution_speciale_2": null,
"code_commune_2": null,
"code_cedex_2": null,
"libelle_cedex_2": null,
"code_pays_etranger_2": null,
"libelle_pays_etranger_2": null,
"date_debut": "2013-10-01",
"etat_administratif": "A",
"enseigne_1": null,
"enseigne_2": null,
"enseigne_3": null,
"denomination_usuelle": "PAYSAGISTE DU CAROUX",
"activite_principale": "81.30Z",
"nomenclature_activite_principale": "NAFRev2",
"caractere_employeur": "O",
"longitude": "2.951149",
"latitude": "43.565835",
"geo_score": "0.84",
"geo_type": "street",
"geo_adresse": "Route de Saint-pons 34390 Mons",
"geo_id": "34160_0061",
"geo_ligne": "G",
"geo_l4": "ROUTE DE SAINT PONS",
"geo_l5": null,
"unite_legale_id": 213908306,
"created_at": "2021-06-03T03:58:27.878+02:00",
"updated_at": "2021-06-03T03:58:27.878+02:00"
},
"numero_tva_intra": "FR79493096580",
"etablissements": [
{
"id": 1498200901,
"siren": "493096580",
"nic": "00029",
"siret": "49309658000029",
"statut_diffusion": "O",
"date_creation": "2010-10-22",
"tranche_effectifs": "NN",
"annee_effectifs": null,
"activite_principale_registre_metiers": null,
"date_dernier_traitement": "2021-02-23T14:00:31",
"etablissement_siege": "true",
"nombre_periodes": "3",
"complement_adresse": null,
"numero_voie": null,
"indice_repetition": null,
"type_voie": "RTE",
"libelle_voie": "DE SAINT PONS",
"code_postal": "34390",
"libelle_commune": "MONS",
"libelle_commune_etranger": null,
"distribution_speciale": null,
"code_commune": "34160",
"code_cedex": null,
"libelle_cedex": null,
"code_pays_etranger": null,
"libelle_pays_etranger": null,
"complement_adresse_2": null,
"numero_voie_2": null,
"indice_repetition_2": null,
"type_voie_2": null,
"libelle_voie_2": null,
"code_postal_2": null,
"libelle_commune_2": null,
"libelle_commune_etranger_2": null,
"distribution_speciale_2": null,
"code_commune_2": null,
"code_cedex_2": null,
"libelle_cedex_2": null,
"code_pays_etranger_2": null,
"libelle_pays_etranger_2": null,
"date_debut": "2013-10-01",
"etat_administratif": "A",
"enseigne_1": null,
"enseigne_2": null,
"enseigne_3": null,
"denomination_usuelle": "PAYSAGISTE DU CAROUX",
"activite_principale": "81.30Z",
"nomenclature_activite_principale": "NAFRev2",
"caractere_employeur": "O",
"longitude": "2.951149",
"latitude": "43.565835",
"geo_score": "0.84",
"geo_type": "street",
"geo_adresse": "Route de Saint-pons 34390 Mons",
"geo_id": "34160_0061",
"geo_ligne": "G",
"geo_l4": "ROUTE DE SAINT PONS",
"geo_l5": null,
"unite_legale_id": 213908306,
"created_at": "2021-06-03T03:58:27.878+02:00",
"updated_at": "2021-06-03T03:58:27.878+02:00"
},
{
"id": 1498200900,
"siren": "493096580",
"nic": "00011",
"siret": "49309658000011",
"statut_diffusion": "O",
"date_creation": "2006-12-01",
"tranche_effectifs": "NN",
"annee_effectifs": null,
"activite_principale_registre_metiers": null,
"date_dernier_traitement": "2012-05-05T11:53:52",
"etablissement_siege": "false",
"nombre_periodes": "3",
"complement_adresse": "LA POMAREDE",
"numero_voie": null,
"indice_repetition": null,
"type_voie": null,
"libelle_voie": null,
"code_postal": "34390",
"libelle_commune": "SAINT MARTIN DE L'ARCON",
"libelle_commune_etranger": null,
"distribution_speciale": null,
"code_commune": "34273",
"code_cedex": null,
"libelle_cedex": null,
"code_pays_etranger": null,
"libelle_pays_etranger": null,
"complement_adresse_2": null,
"numero_voie_2": null,
"indice_repetition_2": null,
"type_voie_2": null,
"libelle_voie_2": null,
"code_postal_2": null,
"libelle_commune_2": null,
"libelle_commune_etranger_2": null,
"distribution_speciale_2": null,
"code_commune_2": null,
"code_cedex_2": null,
"libelle_cedex_2": null,
"code_pays_etranger_2": null,
"libelle_pays_etranger_2": null,
"date_debut": "2010-10-22",
"etat_administratif": "F",
"enseigne_1": null,
"enseigne_2": null,
"enseigne_3": null,
"denomination_usuelle": null,
"activite_principale": "81.30Z",
"nomenclature_activite_principale": "NAFRev2",
"caractere_employeur": "N",
"longitude": "2.995838",
"latitude": "43.575053",
"geo_score": "0.91",
"geo_type": "locality",
"geo_adresse": "Hameau de la Pomarède 34390 Saint-Martin-de-l'Arçon",
"geo_id": "34273_b038",
"geo_ligne": "D",
"geo_l4": "HAMEAU DE LA POMAREDE",
"geo_l5": null,
"unite_legale_id": 213908306,
"created_at": "2021-06-03T03:58:27.878+02:00",
"updated_at": "2021-06-03T03:58:27.878+02:00"
}
]
}
}

View File

@ -0,0 +1,296 @@
{
"unite_legale": {
"id": 209125843,
"siren": "403049448",
"statut_diffusion": "O",
"unite_purgee": null,
"date_creation": "1995-11-29",
"sigle": null,
"sexe": null,
"prenom_1": null,
"prenom_2": null,
"prenom_3": null,
"prenom_4": null,
"prenom_usuel": null,
"pseudonyme": null,
"identifiant_association": null,
"tranche_effectifs": "NN",
"annee_effectifs": null,
"date_dernier_traitement": "2020-01-21T19:35:08",
"nombre_periodes": "5",
"categorie_entreprise": null,
"annee_categorie_entreprise": null,
"date_fin": null,
"date_debut": "2019-09-02",
"etat_administratif": "A",
"nom": null,
"nom_usage": null,
"denomination": "MISTRAL MENOZZI",
"denomination_usuelle_1": null,
"denomination_usuelle_2": null,
"denomination_usuelle_3": null,
"categorie_juridique": "6540",
"activite_principale": "68.20A",
"nomenclature_activite_principale": "NAFRev2",
"nic_siege": "00034",
"economie_sociale_solidaire": "N",
"caractere_employeur": "N",
"created_at": "2021-06-03T02:22:19.307+02:00",
"updated_at": "2021-06-03T02:22:19.307+02:00",
"etablissement_siege": {
"id": 1515011844,
"siren": "403049448",
"nic": "00034",
"siret": "40304944800034",
"statut_diffusion": "O",
"date_creation": "2019-09-02",
"tranche_effectifs": null,
"annee_effectifs": null,
"activite_principale_registre_metiers": null,
"date_dernier_traitement": "2020-01-21T19:35:08",
"etablissement_siege": "true",
"nombre_periodes": "1",
"complement_adresse": null,
"numero_voie": "551",
"indice_repetition": null,
"type_voie": "RTE",
"libelle_voie": "DE GADAGNE",
"code_postal": "84450",
"libelle_commune": "SAINT-SATURNIN-LES-AVIGNON",
"libelle_commune_etranger": null,
"distribution_speciale": null,
"code_commune": "84119",
"code_cedex": null,
"libelle_cedex": null,
"code_pays_etranger": null,
"libelle_pays_etranger": null,
"complement_adresse_2": null,
"numero_voie_2": null,
"indice_repetition_2": null,
"type_voie_2": null,
"libelle_voie_2": null,
"code_postal_2": null,
"libelle_commune_2": null,
"libelle_commune_etranger_2": null,
"distribution_speciale_2": null,
"code_commune_2": null,
"code_cedex_2": null,
"libelle_cedex_2": null,
"code_pays_etranger_2": null,
"libelle_pays_etranger_2": null,
"date_debut": "2019-09-02",
"etat_administratif": "A",
"enseigne_1": null,
"enseigne_2": null,
"enseigne_3": null,
"denomination_usuelle": null,
"activite_principale": "68.20A",
"nomenclature_activite_principale": "NAFRev2",
"caractere_employeur": "N",
"longitude": "4.938683",
"latitude": "43.953835",
"geo_score": "0.85",
"geo_type": "housenumber",
"geo_adresse": "551 Route de Gadagne 84450 Saint-Saturnin-lès-Avignon",
"geo_id": "84119_0298_00551",
"geo_ligne": "G",
"geo_l4": "551 ROUTE DE GADAGNE",
"geo_l5": null,
"unite_legale_id": 209125843,
"created_at": "2021-06-03T05:14:54.955+02:00",
"updated_at": "2021-06-03T05:14:54.955+02:00"
},
"numero_tva_intra": "FR94403049448",
"etablissements": [
{
"id": 1515011844,
"siren": "403049448",
"nic": "00034",
"siret": "40304944800034",
"statut_diffusion": "O",
"date_creation": "2019-09-02",
"tranche_effectifs": null,
"annee_effectifs": null,
"activite_principale_registre_metiers": null,
"date_dernier_traitement": "2020-01-21T19:35:08",
"etablissement_siege": "true",
"nombre_periodes": "1",
"complement_adresse": null,
"numero_voie": "551",
"indice_repetition": null,
"type_voie": "RTE",
"libelle_voie": "DE GADAGNE",
"code_postal": "84450",
"libelle_commune": "SAINT-SATURNIN-LES-AVIGNON",
"libelle_commune_etranger": null,
"distribution_speciale": null,
"code_commune": "84119",
"code_cedex": null,
"libelle_cedex": null,
"code_pays_etranger": null,
"libelle_pays_etranger": null,
"complement_adresse_2": null,
"numero_voie_2": null,
"indice_repetition_2": null,
"type_voie_2": null,
"libelle_voie_2": null,
"code_postal_2": null,
"libelle_commune_2": null,
"libelle_commune_etranger_2": null,
"distribution_speciale_2": null,
"code_commune_2": null,
"code_cedex_2": null,
"libelle_cedex_2": null,
"code_pays_etranger_2": null,
"libelle_pays_etranger_2": null,
"date_debut": "2019-09-02",
"etat_administratif": "A",
"enseigne_1": null,
"enseigne_2": null,
"enseigne_3": null,
"denomination_usuelle": null,
"activite_principale": "68.20A",
"nomenclature_activite_principale": "NAFRev2",
"caractere_employeur": "N",
"longitude": "4.938683",
"latitude": "43.953835",
"geo_score": "0.85",
"geo_type": "housenumber",
"geo_adresse": "551 Route de Gadagne 84450 Saint-Saturnin-lès-Avignon",
"geo_id": "84119_0298_00551",
"geo_ligne": "G",
"geo_l4": "551 ROUTE DE GADAGNE",
"geo_l5": null,
"unite_legale_id": 209125843,
"created_at": "2021-06-03T05:14:54.955+02:00",
"updated_at": "2021-06-03T05:14:54.955+02:00"
},
{
"id": 1515011843,
"siren": "403049448",
"nic": "00026",
"siret": "40304944800026",
"statut_diffusion": "O",
"date_creation": "2007-02-01",
"tranche_effectifs": null,
"annee_effectifs": null,
"activite_principale_registre_metiers": null,
"date_dernier_traitement": "2020-01-21T19:35:08",
"etablissement_siege": "false",
"nombre_periodes": "3",
"complement_adresse": null,
"numero_voie": "1950",
"indice_repetition": null,
"type_voie": "CHE",
"libelle_voie": "DE SAINT GENS",
"code_postal": "84200",
"libelle_commune": "CARPENTRAS",
"libelle_commune_etranger": null,
"distribution_speciale": null,
"code_commune": "84031",
"code_cedex": null,
"libelle_cedex": null,
"code_pays_etranger": null,
"libelle_pays_etranger": null,
"complement_adresse_2": null,
"numero_voie_2": null,
"indice_repetition_2": null,
"type_voie_2": null,
"libelle_voie_2": null,
"code_postal_2": null,
"libelle_commune_2": null,
"libelle_commune_etranger_2": null,
"distribution_speciale_2": null,
"code_commune_2": null,
"code_cedex_2": null,
"libelle_cedex_2": null,
"code_pays_etranger_2": null,
"libelle_pays_etranger_2": null,
"date_debut": "2019-09-02",
"etat_administratif": "F",
"enseigne_1": null,
"enseigne_2": null,
"enseigne_3": null,
"denomination_usuelle": null,
"activite_principale": "68.20A",
"nomenclature_activite_principale": "NAFRev2",
"caractere_employeur": "N",
"longitude": "5.046323",
"latitude": "44.032154",
"geo_score": "0.87",
"geo_type": "housenumber",
"geo_adresse": "1950 Chemin de Saint-gens 84200 Carpentras",
"geo_id": "84031_1805_01950",
"geo_ligne": "G",
"geo_l4": "1950 CHEMIN DE SAINT GENS",
"geo_l5": null,
"unite_legale_id": 209125843,
"created_at": "2021-06-03T05:14:54.955+02:00",
"updated_at": "2021-06-03T05:14:54.955+02:00"
},
{
"id": 1515011842,
"siren": "403049448",
"nic": "00018",
"siret": "40304944800018",
"statut_diffusion": "O",
"date_creation": "1995-11-29",
"tranche_effectifs": "NN",
"annee_effectifs": null,
"activite_principale_registre_metiers": null,
"date_dernier_traitement": "2007-02-15T11:44:24",
"etablissement_siege": "false",
"nombre_periodes": "3",
"complement_adresse": null,
"numero_voie": "145",
"indice_repetition": null,
"type_voie": "AV",
"libelle_voie": "DWIGHT EISENHOWER",
"code_postal": "84200",
"libelle_commune": "CARPENTRAS",
"libelle_commune_etranger": null,
"distribution_speciale": null,
"code_commune": "84031",
"code_cedex": null,
"libelle_cedex": null,
"code_pays_etranger": null,
"libelle_pays_etranger": null,
"complement_adresse_2": null,
"numero_voie_2": null,
"indice_repetition_2": null,
"type_voie_2": null,
"libelle_voie_2": null,
"code_postal_2": null,
"libelle_commune_2": null,
"libelle_commune_etranger_2": null,
"distribution_speciale_2": null,
"code_commune_2": null,
"code_cedex_2": null,
"libelle_cedex_2": null,
"code_pays_etranger_2": null,
"libelle_pays_etranger_2": null,
"date_debut": "2007-02-01",
"etat_administratif": "F",
"enseigne_1": null,
"enseigne_2": null,
"enseigne_3": null,
"denomination_usuelle": null,
"activite_principale": "70.2A",
"nomenclature_activite_principale": "NAFRev1",
"caractere_employeur": "N",
"longitude": "5.045559",
"latitude": "44.043377",
"geo_score": "0.73",
"geo_type": "street",
"geo_adresse": "Avenue Dwight Eisenhower 84200 Carpentras",
"geo_id": "84031_0589",
"geo_ligne": "G",
"geo_l4": "AVENUE DWIGHT EISENHOWER",
"geo_l5": null,
"unite_legale_id": 209125843,
"created_at": "2021-06-03T05:14:54.955+02:00",
"updated_at": "2021-06-03T05:14:54.955+02:00"
}
]
}
}

View File

@ -0,0 +1,233 @@
{
"unite_legale": {
"id": 215049306,
"siren": "511125122",
"statut_diffusion": "O",
"unite_purgee": null,
"date_creation": "2009-02-10",
"sigle": null,
"sexe": null,
"prenom_1": null,
"prenom_2": null,
"prenom_3": null,
"prenom_4": null,
"prenom_usuel": null,
"pseudonyme": null,
"identifiant_association": null,
"tranche_effectifs": null,
"annee_effectifs": null,
"date_dernier_traitement": "2018-09-07T04:20:27",
"nombre_periodes": "2",
"categorie_entreprise": null,
"annee_categorie_entreprise": null,
"date_fin": null,
"date_debut": "2013-12-01",
"etat_administratif": "A",
"nom": null,
"nom_usage": null,
"denomination": "SCI MENOZA",
"denomination_usuelle_1": null,
"denomination_usuelle_2": null,
"denomination_usuelle_3": null,
"categorie_juridique": "6540",
"activite_principale": "68.20B",
"nomenclature_activite_principale": "NAFRev2",
"nic_siege": "00024",
"economie_sociale_solidaire": null,
"caractere_employeur": "N",
"created_at": "2021-06-03T02:42:09.207+02:00",
"updated_at": "2021-06-03T02:42:09.207+02:00",
"etablissement_siege": {
"id": 1505393375,
"siren": "511125122",
"nic": "00024",
"siret": "51112512200024",
"statut_diffusion": "O",
"date_creation": "2013-12-01",
"tranche_effectifs": null,
"annee_effectifs": null,
"activite_principale_registre_metiers": null,
"date_dernier_traitement": "2021-02-23T15:19:11",
"etablissement_siege": "true",
"nombre_periodes": "1",
"complement_adresse": null,
"numero_voie": "160",
"indice_repetition": null,
"type_voie": "RLE",
"libelle_voie": "DU HERLIN",
"code_postal": "62700",
"libelle_commune": "BRUAY-LA-BUISSIERE",
"libelle_commune_etranger": null,
"distribution_speciale": null,
"code_commune": "62178",
"code_cedex": null,
"libelle_cedex": null,
"code_pays_etranger": null,
"libelle_pays_etranger": null,
"complement_adresse_2": null,
"numero_voie_2": null,
"indice_repetition_2": null,
"type_voie_2": null,
"libelle_voie_2": null,
"code_postal_2": null,
"libelle_commune_2": null,
"libelle_commune_etranger_2": null,
"distribution_speciale_2": null,
"code_commune_2": null,
"code_cedex_2": null,
"libelle_cedex_2": null,
"code_pays_etranger_2": null,
"libelle_pays_etranger_2": null,
"date_debut": "2013-12-01",
"etat_administratif": "A",
"enseigne_1": null,
"enseigne_2": null,
"enseigne_3": null,
"denomination_usuelle": null,
"activite_principale": "68.20B",
"nomenclature_activite_principale": "NAFRev2",
"caractere_employeur": "N",
"longitude": "2.564399",
"latitude": "50.499922",
"geo_score": "0.85",
"geo_type": "housenumber",
"geo_adresse": "160 Ruelle du Herlin 62700 Bruay-la-Buissière",
"geo_id": "62482_0098_00160",
"geo_ligne": "G",
"geo_l4": "160 RUELLE DU HERLIN",
"geo_l5": null,
"unite_legale_id": 215049306,
"created_at": "2021-06-03T04:31:09.948+02:00",
"updated_at": "2021-06-03T04:31:09.948+02:00"
},
"numero_tva_intra": "FR57511125122",
"etablissements": [
{
"id": 1505393375,
"siren": "511125122",
"nic": "00024",
"siret": "51112512200024",
"statut_diffusion": "O",
"date_creation": "2013-12-01",
"tranche_effectifs": null,
"annee_effectifs": null,
"activite_principale_registre_metiers": null,
"date_dernier_traitement": "2021-02-23T15:19:11",
"etablissement_siege": "true",
"nombre_periodes": "1",
"complement_adresse": null,
"numero_voie": "160",
"indice_repetition": null,
"type_voie": "RLE",
"libelle_voie": "DU HERLIN",
"code_postal": "62700",
"libelle_commune": "BRUAY-LA-BUISSIERE",
"libelle_commune_etranger": null,
"distribution_speciale": null,
"code_commune": "62178",
"code_cedex": null,
"libelle_cedex": null,
"code_pays_etranger": null,
"libelle_pays_etranger": null,
"complement_adresse_2": null,
"numero_voie_2": null,
"indice_repetition_2": null,
"type_voie_2": null,
"libelle_voie_2": null,
"code_postal_2": null,
"libelle_commune_2": null,
"libelle_commune_etranger_2": null,
"distribution_speciale_2": null,
"code_commune_2": null,
"code_cedex_2": null,
"libelle_cedex_2": null,
"code_pays_etranger_2": null,
"libelle_pays_etranger_2": null,
"date_debut": "2013-12-01",
"etat_administratif": "A",
"enseigne_1": null,
"enseigne_2": null,
"enseigne_3": null,
"denomination_usuelle": null,
"activite_principale": "68.20B",
"nomenclature_activite_principale": "NAFRev2",
"caractere_employeur": "N",
"longitude": "2.564399",
"latitude": "50.499922",
"geo_score": "0.85",
"geo_type": "housenumber",
"geo_adresse": "160 Ruelle du Herlin 62700 Bruay-la-Buissière",
"geo_id": "62482_0098_00160",
"geo_ligne": "G",
"geo_l4": "160 RUELLE DU HERLIN",
"geo_l5": null,
"unite_legale_id": 215049306,
"created_at": "2021-06-03T04:31:09.948+02:00",
"updated_at": "2021-06-03T04:31:09.948+02:00"
},
{
"id": 1505393374,
"siren": "511125122",
"nic": "00016",
"siret": "51112512200016",
"statut_diffusion": "O",
"date_creation": "2009-02-10",
"tranche_effectifs": null,
"annee_effectifs": null,
"activite_principale_registre_metiers": null,
"date_dernier_traitement": "2013-12-19T16:19:05",
"etablissement_siege": "false",
"nombre_periodes": "2",
"complement_adresse": null,
"numero_voie": "148",
"indice_repetition": null,
"type_voie": "RUE",
"libelle_voie": "ALEXANDRE PONNELLE",
"code_postal": "62400",
"libelle_commune": "BETHUNE",
"libelle_commune_etranger": null,
"distribution_speciale": null,
"code_commune": "62119",
"code_cedex": null,
"libelle_cedex": null,
"code_pays_etranger": null,
"libelle_pays_etranger": null,
"complement_adresse_2": null,
"numero_voie_2": null,
"indice_repetition_2": null,
"type_voie_2": null,
"libelle_voie_2": null,
"code_postal_2": null,
"libelle_commune_2": null,
"libelle_commune_etranger_2": null,
"distribution_speciale_2": null,
"code_commune_2": null,
"code_cedex_2": null,
"libelle_cedex_2": null,
"code_pays_etranger_2": null,
"libelle_pays_etranger_2": null,
"date_debut": "2013-12-01",
"etat_administratif": "F",
"enseigne_1": null,
"enseigne_2": null,
"enseigne_3": null,
"denomination_usuelle": null,
"activite_principale": "68.20B",
"nomenclature_activite_principale": "NAFRev2",
"caractere_employeur": "N",
"longitude": "2.642524",
"latitude": "50.533418",
"geo_score": "0.95",
"geo_type": "housenumber",
"geo_adresse": "148 Rue Alexandre Ponnelle 62400 Béthune",
"geo_id": "62119_0090_00148",
"geo_ligne": "G",
"geo_l4": "148 RUE ALEXANDRE PONNELLE",
"geo_l5": null,
"unite_legale_id": 215049306,
"created_at": "2021-06-03T04:31:09.948+02:00",
"updated_at": "2021-06-03T04:31:09.948+02:00"
}
]
}
}

View File

@ -0,0 +1,359 @@
{
"unite_legale": {
"id": 216730241,
"siren": "534886650",
"statut_diffusion": "O",
"unite_purgee": null,
"date_creation": "2011-10-01",
"sigle": null,
"sexe": "M",
"prenom_1": "JOHAN",
"prenom_2": "CEDRIC",
"prenom_3": "ALEXANDRE",
"prenom_4": null,
"prenom_usuel": "JOHAN",
"pseudonyme": null,
"identifiant_association": null,
"tranche_effectifs": null,
"annee_effectifs": null,
"date_dernier_traitement": "2020-02-18T14:08:16",
"nombre_periodes": "5",
"categorie_entreprise": "PME",
"annee_categorie_entreprise": "2018",
"date_fin": null,
"date_debut": "2015-07-01",
"etat_administratif": "A",
"nom": "HERVOIS",
"nom_usage": null,
"denomination": null,
"denomination_usuelle_1": null,
"denomination_usuelle_2": null,
"denomination_usuelle_3": null,
"categorie_juridique": "1000",
"activite_principale": "69.10Z",
"nomenclature_activite_principale": "NAFRev2",
"nic_siege": "00041",
"economie_sociale_solidaire": null,
"caractere_employeur": "N",
"created_at": "2021-06-03T02:47:46.589+02:00",
"updated_at": "2021-06-03T02:47:46.589+02:00",
"etablissement_siege": {
"id": 1501441919,
"siren": "534886650",
"nic": "00041",
"siret": "53488665000041",
"statut_diffusion": "O",
"date_creation": "2015-07-01",
"tranche_effectifs": null,
"annee_effectifs": null,
"activite_principale_registre_metiers": null,
"date_dernier_traitement": "2021-02-23T15:56:48",
"etablissement_siege": "true",
"nombre_periodes": "1",
"complement_adresse": null,
"numero_voie": "2",
"indice_repetition": null,
"type_voie": "RUE",
"libelle_voie": "GIRODET",
"code_postal": "45000",
"libelle_commune": "ORLEANS",
"libelle_commune_etranger": null,
"distribution_speciale": null,
"code_commune": "45234",
"code_cedex": null,
"libelle_cedex": null,
"code_pays_etranger": null,
"libelle_pays_etranger": null,
"complement_adresse_2": null,
"numero_voie_2": null,
"indice_repetition_2": null,
"type_voie_2": null,
"libelle_voie_2": null,
"code_postal_2": null,
"libelle_commune_2": null,
"libelle_commune_etranger_2": null,
"distribution_speciale_2": null,
"code_commune_2": null,
"code_cedex_2": null,
"libelle_cedex_2": null,
"code_pays_etranger_2": null,
"libelle_pays_etranger_2": null,
"date_debut": "2015-07-01",
"etat_administratif": "A",
"enseigne_1": null,
"enseigne_2": null,
"enseigne_3": null,
"denomination_usuelle": null,
"activite_principale": "69.10Z",
"nomenclature_activite_principale": "NAFRev2",
"caractere_employeur": "N",
"longitude": "1.90327",
"latitude": "47.907448",
"geo_score": "0.96",
"geo_type": "housenumber",
"geo_adresse": "2 Rue Girodet 45000 Orléans",
"geo_id": "45234_3240_00002",
"geo_ligne": "G",
"geo_l4": "2 RUE GIRODET",
"geo_l5": null,
"unite_legale_id": 216730241,
"created_at": "2021-06-03T04:13:13.380+02:00",
"updated_at": "2021-06-03T04:13:13.380+02:00"
},
"numero_tva_intra": "FR20534886650",
"etablissements": [
{
"id": 1501441919,
"siren": "534886650",
"nic": "00041",
"siret": "53488665000041",
"statut_diffusion": "O",
"date_creation": "2015-07-01",
"tranche_effectifs": null,
"annee_effectifs": null,
"activite_principale_registre_metiers": null,
"date_dernier_traitement": "2021-02-23T15:56:48",
"etablissement_siege": "true",
"nombre_periodes": "1",
"complement_adresse": null,
"numero_voie": "2",
"indice_repetition": null,
"type_voie": "RUE",
"libelle_voie": "GIRODET",
"code_postal": "45000",
"libelle_commune": "ORLEANS",
"libelle_commune_etranger": null,
"distribution_speciale": null,
"code_commune": "45234",
"code_cedex": null,
"libelle_cedex": null,
"code_pays_etranger": null,
"libelle_pays_etranger": null,
"complement_adresse_2": null,
"numero_voie_2": null,
"indice_repetition_2": null,
"type_voie_2": null,
"libelle_voie_2": null,
"code_postal_2": null,
"libelle_commune_2": null,
"libelle_commune_etranger_2": null,
"distribution_speciale_2": null,
"code_commune_2": null,
"code_cedex_2": null,
"libelle_cedex_2": null,
"code_pays_etranger_2": null,
"libelle_pays_etranger_2": null,
"date_debut": "2015-07-01",
"etat_administratif": "A",
"enseigne_1": null,
"enseigne_2": null,
"enseigne_3": null,
"denomination_usuelle": null,
"activite_principale": "69.10Z",
"nomenclature_activite_principale": "NAFRev2",
"caractere_employeur": "N",
"longitude": "1.90327",
"latitude": "47.907448",
"geo_score": "0.96",
"geo_type": "housenumber",
"geo_adresse": "2 Rue Girodet 45000 Orléans",
"geo_id": "45234_3240_00002",
"geo_ligne": "G",
"geo_l4": "2 RUE GIRODET",
"geo_l5": null,
"unite_legale_id": 216730241,
"created_at": "2021-06-03T04:13:13.380+02:00",
"updated_at": "2021-06-03T04:13:13.380+02:00"
},
{
"id": 1501441918,
"siren": "534886650",
"nic": "00033",
"siret": "53488665000033",
"statut_diffusion": "O",
"date_creation": "2014-11-01",
"tranche_effectifs": null,
"annee_effectifs": null,
"activite_principale_registre_metiers": null,
"date_dernier_traitement": "2017-02-28T14:59:25",
"etablissement_siege": "false",
"nombre_periodes": "2",
"complement_adresse": null,
"numero_voie": "46",
"indice_repetition": null,
"type_voie": "RUE",
"libelle_voie": "BANNIER",
"code_postal": "45000",
"libelle_commune": "ORLEANS",
"libelle_commune_etranger": null,
"distribution_speciale": null,
"code_commune": "45234",
"code_cedex": null,
"libelle_cedex": null,
"code_pays_etranger": null,
"libelle_pays_etranger": null,
"complement_adresse_2": null,
"numero_voie_2": null,
"indice_repetition_2": null,
"type_voie_2": null,
"libelle_voie_2": null,
"code_postal_2": null,
"libelle_commune_2": null,
"libelle_commune_etranger_2": null,
"distribution_speciale_2": null,
"code_commune_2": null,
"code_cedex_2": null,
"libelle_cedex_2": null,
"code_pays_etranger_2": null,
"libelle_pays_etranger_2": null,
"date_debut": "2015-07-01",
"etat_administratif": "F",
"enseigne_1": null,
"enseigne_2": null,
"enseigne_3": null,
"denomination_usuelle": null,
"activite_principale": "69.10Z",
"nomenclature_activite_principale": "NAFRev2",
"caractere_employeur": "N",
"longitude": "1.902991",
"latitude": "47.904217",
"geo_score": "0.88",
"geo_type": "housenumber",
"geo_adresse": "46 Rue du Faubourg Bannier 45000 Orléans",
"geo_id": "45234_0510_00046",
"geo_ligne": "G",
"geo_l4": "46 RUE DU FAUBOURG BANNIER",
"geo_l5": null,
"unite_legale_id": 216730241,
"created_at": "2021-06-03T04:13:13.380+02:00",
"updated_at": "2021-06-03T04:13:13.380+02:00"
},
{
"id": 1501441917,
"siren": "534886650",
"nic": "00025",
"siret": "53488665000025",
"statut_diffusion": "O",
"date_creation": "2014-01-01",
"tranche_effectifs": null,
"annee_effectifs": null,
"activite_principale_registre_metiers": null,
"date_dernier_traitement": "2014-11-24T10:21:17",
"etablissement_siege": "false",
"nombre_periodes": "2",
"complement_adresse": null,
"numero_voie": "6",
"indice_repetition": null,
"type_voie": "RUE",
"libelle_voie": "DU COLOMBIER",
"code_postal": "45000",
"libelle_commune": "ORLEANS",
"libelle_commune_etranger": null,
"distribution_speciale": null,
"code_commune": "45234",
"code_cedex": null,
"libelle_cedex": null,
"code_pays_etranger": null,
"libelle_pays_etranger": null,
"complement_adresse_2": null,
"numero_voie_2": null,
"indice_repetition_2": null,
"type_voie_2": null,
"libelle_voie_2": null,
"code_postal_2": null,
"libelle_commune_2": null,
"libelle_commune_etranger_2": null,
"distribution_speciale_2": null,
"code_commune_2": null,
"code_cedex_2": null,
"libelle_cedex_2": null,
"code_pays_etranger_2": null,
"libelle_pays_etranger_2": null,
"date_debut": "2014-11-01",
"etat_administratif": "F",
"enseigne_1": null,
"enseigne_2": null,
"enseigne_3": null,
"denomination_usuelle": null,
"activite_principale": "69.10Z",
"nomenclature_activite_principale": "NAFRev2",
"caractere_employeur": "N",
"longitude": "1.902405",
"latitude": "47.903641",
"geo_score": "0.96",
"geo_type": "housenumber",
"geo_adresse": "6 Rue du Colombier 45000 Orléans",
"geo_id": "45234_1850_00006",
"geo_ligne": "G",
"geo_l4": "6 RUE DU COLOMBIER",
"geo_l5": null,
"unite_legale_id": 216730241,
"created_at": "2021-06-03T04:13:13.380+02:00",
"updated_at": "2021-06-03T04:13:13.380+02:00"
},
{
"id": 1492870050,
"siren": "534886650",
"nic": "00017",
"siret": "53488665000017",
"statut_diffusion": "O",
"date_creation": "2011-10-01",
"tranche_effectifs": null,
"annee_effectifs": null,
"activite_principale_registre_metiers": null,
"date_dernier_traitement": "2013-12-19T10:47:47",
"etablissement_siege": "false",
"nombre_periodes": "2",
"complement_adresse": null,
"numero_voie": "130",
"indice_repetition": null,
"type_voie": "BD",
"libelle_voie": "LEROY",
"code_postal": "14000",
"libelle_commune": "CAEN",
"libelle_commune_etranger": null,
"distribution_speciale": null,
"code_commune": "14118",
"code_cedex": null,
"libelle_cedex": null,
"code_pays_etranger": null,
"libelle_pays_etranger": null,
"complement_adresse_2": null,
"numero_voie_2": null,
"indice_repetition_2": null,
"type_voie_2": null,
"libelle_voie_2": null,
"code_postal_2": null,
"libelle_commune_2": null,
"libelle_commune_etranger_2": null,
"distribution_speciale_2": null,
"code_commune_2": null,
"code_cedex_2": null,
"libelle_cedex_2": null,
"code_pays_etranger_2": null,
"libelle_pays_etranger_2": null,
"date_debut": "2012-06-01",
"etat_administratif": "F",
"enseigne_1": null,
"enseigne_2": null,
"enseigne_3": null,
"denomination_usuelle": null,
"activite_principale": "85.59B",
"nomenclature_activite_principale": "NAFRev2",
"caractere_employeur": "N",
"longitude": "-0.342479",
"latitude": "49.173431",
"geo_score": "0.81",
"geo_type": "housenumber",
"geo_adresse": "130 Boulevard Leroy 14000 Caen",
"geo_id": "14118_4470_00130",
"geo_ligne": "G",
"geo_l4": "130 BOULEVARD LEROY",
"geo_l5": null,
"unite_legale_id": 216730241,
"created_at": "2021-06-03T03:34:06.882+02:00",
"updated_at": "2021-06-03T03:34:06.882+02:00"
}
]
}
}

View File

@ -0,0 +1,233 @@
{
"unite_legale": {
"id": 219434137,
"siren": "800559064",
"statut_diffusion": "O",
"unite_purgee": null,
"date_creation": "2014-02-20",
"sigle": null,
"sexe": null,
"prenom_1": null,
"prenom_2": null,
"prenom_3": null,
"prenom_4": null,
"prenom_usuel": null,
"pseudonyme": null,
"identifiant_association": null,
"tranche_effectifs": "11",
"annee_effectifs": "2018",
"date_dernier_traitement": "2020-08-25T11:09:50",
"nombre_periodes": "4",
"categorie_entreprise": "PME",
"annee_categorie_entreprise": "2018",
"date_fin": null,
"date_debut": "2016-02-01",
"etat_administratif": "A",
"nom": null,
"nom_usage": null,
"denomination": "MENOZZI VAISE",
"denomination_usuelle_1": null,
"denomination_usuelle_2": null,
"denomination_usuelle_3": null,
"categorie_juridique": "5499",
"activite_principale": "56.10C",
"nomenclature_activite_principale": "NAFRev2",
"nic_siege": "00012",
"economie_sociale_solidaire": "N",
"caractere_employeur": "O",
"created_at": "2021-06-03T02:56:44.762+02:00",
"updated_at": "2021-06-03T02:56:44.762+02:00",
"etablissement_siege": {
"id": 1508036545,
"siren": "800559064",
"nic": "00012",
"siret": "80055906400012",
"statut_diffusion": "O",
"date_creation": "2014-02-20",
"tranche_effectifs": "11",
"annee_effectifs": "2018",
"activite_principale_registre_metiers": null,
"date_dernier_traitement": "2020-08-25T11:09:50",
"etablissement_siege": "true",
"nombre_periodes": "3",
"complement_adresse": null,
"numero_voie": "51",
"indice_repetition": "B",
"type_voie": "RUE",
"libelle_voie": "DE ST CYR",
"code_postal": "69009",
"libelle_commune": "LYON 9EME",
"libelle_commune_etranger": null,
"distribution_speciale": null,
"code_commune": "69389",
"code_cedex": null,
"libelle_cedex": null,
"code_pays_etranger": null,
"libelle_pays_etranger": null,
"complement_adresse_2": null,
"numero_voie_2": null,
"indice_repetition_2": null,
"type_voie_2": null,
"libelle_voie_2": null,
"code_postal_2": null,
"libelle_commune_2": null,
"libelle_commune_etranger_2": null,
"distribution_speciale_2": null,
"code_commune_2": null,
"code_cedex_2": null,
"libelle_cedex_2": null,
"code_pays_etranger_2": null,
"libelle_pays_etranger_2": null,
"date_debut": "2014-04-01",
"etat_administratif": "A",
"enseigne_1": "CLASS'CROUTE",
"enseigne_2": null,
"enseigne_3": null,
"denomination_usuelle": "CLASS'CROUTE",
"activite_principale": "56.10C",
"nomenclature_activite_principale": "NAFRev2",
"caractere_employeur": "O",
"longitude": "4.807071",
"latitude": "45.782404",
"geo_score": "0.49",
"geo_type": "housenumber",
"geo_adresse": "51 bis Rue de Saint-cyr 69009 Lyon",
"geo_id": "69389_6295_00051_bis",
"geo_ligne": "G",
"geo_l4": "51 BIS RUE DE SAINT CYR",
"geo_l5": null,
"unite_legale_id": 219434137,
"created_at": "2021-06-03T04:43:10.093+02:00",
"updated_at": "2021-06-03T04:43:10.093+02:00"
},
"numero_tva_intra": "FR78800559064",
"etablissements": [
{
"id": 1508036546,
"siren": "800559064",
"nic": "00020",
"siret": "80055906400020",
"statut_diffusion": "O",
"date_creation": "2016-02-01",
"tranche_effectifs": null,
"annee_effectifs": null,
"activite_principale_registre_metiers": null,
"date_dernier_traitement": "2019-12-20T03:51:22",
"etablissement_siege": "false",
"nombre_periodes": "2",
"complement_adresse": "41-43",
"numero_voie": "41",
"indice_repetition": null,
"type_voie": "RUE",
"libelle_voie": "DES CHARTREUX",
"code_postal": "69001",
"libelle_commune": "LYON 1ER",
"libelle_commune_etranger": null,
"distribution_speciale": null,
"code_commune": "69381",
"code_cedex": null,
"libelle_cedex": null,
"code_pays_etranger": null,
"libelle_pays_etranger": null,
"complement_adresse_2": null,
"numero_voie_2": null,
"indice_repetition_2": null,
"type_voie_2": null,
"libelle_voie_2": null,
"code_postal_2": null,
"libelle_commune_2": null,
"libelle_commune_etranger_2": null,
"distribution_speciale_2": null,
"code_commune_2": null,
"code_cedex_2": null,
"libelle_cedex_2": null,
"code_pays_etranger_2": null,
"libelle_pays_etranger_2": null,
"date_debut": "2018-12-31",
"etat_administratif": "F",
"enseigne_1": null,
"enseigne_2": null,
"enseigne_3": null,
"denomination_usuelle": null,
"activite_principale": "52.10B",
"nomenclature_activite_principale": "NAFRev2",
"caractere_employeur": "N",
"longitude": "4.825305",
"latitude": "45.771974",
"geo_score": "0.62",
"geo_type": "housenumber",
"geo_adresse": "41 Rue des Chartreux 69001 Lyon",
"geo_id": "69381_1550_00041",
"geo_ligne": "G",
"geo_l4": "41 RUE DES CHARTREUX",
"geo_l5": null,
"unite_legale_id": 219434137,
"created_at": "2021-06-03T04:43:10.093+02:00",
"updated_at": "2021-06-03T04:43:10.093+02:00"
},
{
"id": 1508036545,
"siren": "800559064",
"nic": "00012",
"siret": "80055906400012",
"statut_diffusion": "O",
"date_creation": "2014-02-20",
"tranche_effectifs": "11",
"annee_effectifs": "2018",
"activite_principale_registre_metiers": null,
"date_dernier_traitement": "2020-08-25T11:09:50",
"etablissement_siege": "true",
"nombre_periodes": "3",
"complement_adresse": null,
"numero_voie": "51",
"indice_repetition": "B",
"type_voie": "RUE",
"libelle_voie": "DE ST CYR",
"code_postal": "69009",
"libelle_commune": "LYON 9EME",
"libelle_commune_etranger": null,
"distribution_speciale": null,
"code_commune": "69389",
"code_cedex": null,
"libelle_cedex": null,
"code_pays_etranger": null,
"libelle_pays_etranger": null,
"complement_adresse_2": null,
"numero_voie_2": null,
"indice_repetition_2": null,
"type_voie_2": null,
"libelle_voie_2": null,
"code_postal_2": null,
"libelle_commune_2": null,
"libelle_commune_etranger_2": null,
"distribution_speciale_2": null,
"code_commune_2": null,
"code_cedex_2": null,
"libelle_cedex_2": null,
"code_pays_etranger_2": null,
"libelle_pays_etranger_2": null,
"date_debut": "2014-04-01",
"etat_administratif": "A",
"enseigne_1": "CLASS'CROUTE",
"enseigne_2": null,
"enseigne_3": null,
"denomination_usuelle": "CLASS'CROUTE",
"activite_principale": "56.10C",
"nomenclature_activite_principale": "NAFRev2",
"caractere_employeur": "O",
"longitude": "4.807071",
"latitude": "45.782404",
"geo_score": "0.49",
"geo_type": "housenumber",
"geo_adresse": "51 bis Rue de Saint-cyr 69009 Lyon",
"geo_id": "69389_6295_00051_bis",
"geo_ligne": "G",
"geo_l4": "51 BIS RUE DE SAINT CYR",
"geo_l5": null,
"unite_legale_id": 219434137,
"created_at": "2021-06-03T04:43:10.093+02:00",
"updated_at": "2021-06-03T04:43:10.093+02:00"
}
]
}
}

View File

@ -0,0 +1,170 @@
{
"unite_legale": {
"id": 221988588,
"siren": "834364291",
"statut_diffusion": "O",
"unite_purgee": null,
"date_creation": "2018-01-02",
"sigle": null,
"sexe": null,
"prenom_1": null,
"prenom_2": null,
"prenom_3": null,
"prenom_4": null,
"prenom_usuel": null,
"pseudonyme": null,
"identifiant_association": null,
"tranche_effectifs": "01",
"annee_effectifs": "2018",
"date_dernier_traitement": "2020-08-25T11:39:32",
"nombre_periodes": "2",
"categorie_entreprise": "PME",
"annee_categorie_entreprise": "2018",
"date_fin": null,
"date_debut": "2018-03-25",
"etat_administratif": "A",
"nom": null,
"nom_usage": null,
"denomination": "MENOZ",
"denomination_usuelle_1": null,
"denomination_usuelle_2": null,
"denomination_usuelle_3": null,
"categorie_juridique": "5710",
"activite_principale": "62.01Z",
"nomenclature_activite_principale": "NAFRev2",
"nic_siege": "00015",
"economie_sociale_solidaire": null,
"caractere_employeur": "O",
"created_at": "2021-06-03T03:05:16.648+02:00",
"updated_at": "2021-06-03T03:05:16.648+02:00",
"etablissement_siege": {
"id": 1512132578,
"siren": "834364291",
"nic": "00015",
"siret": "83436429100015",
"statut_diffusion": "O",
"date_creation": "2018-01-02",
"tranche_effectifs": "01",
"annee_effectifs": "2018",
"activite_principale_registre_metiers": null,
"date_dernier_traitement": "2020-08-25T11:39:32",
"etablissement_siege": "true",
"nombre_periodes": "2",
"complement_adresse": null,
"numero_voie": "55",
"indice_repetition": null,
"type_voie": "RUE",
"libelle_voie": "DES PYRENEES",
"code_postal": "75020",
"libelle_commune": "PARIS 20",
"libelle_commune_etranger": null,
"distribution_speciale": null,
"code_commune": "75120",
"code_cedex": null,
"libelle_cedex": null,
"code_pays_etranger": null,
"libelle_pays_etranger": null,
"complement_adresse_2": null,
"numero_voie_2": null,
"indice_repetition_2": null,
"type_voie_2": null,
"libelle_voie_2": null,
"code_postal_2": null,
"libelle_commune_2": null,
"libelle_commune_etranger_2": null,
"distribution_speciale_2": null,
"code_commune_2": null,
"code_cedex_2": null,
"libelle_cedex_2": null,
"code_pays_etranger_2": null,
"libelle_pays_etranger_2": null,
"date_debut": "2018-03-25",
"etat_administratif": "A",
"enseigne_1": null,
"enseigne_2": null,
"enseigne_3": null,
"denomination_usuelle": null,
"activite_principale": "62.01Z",
"nomenclature_activite_principale": "NAFRev2",
"caractere_employeur": "O",
"longitude": "2.406077",
"latitude": "48.851854",
"geo_score": "0.61",
"geo_type": "housenumber",
"geo_adresse": "55 Rue des Pyrénées 75020 Paris",
"geo_id": "75120_7904_00055",
"geo_ligne": "G",
"geo_l4": "55 RUE DES PYRENEES",
"geo_l5": null,
"unite_legale_id": 221988588,
"created_at": "2021-06-03T05:01:48.216+02:00",
"updated_at": "2021-06-03T05:01:48.216+02:00"
},
"numero_tva_intra": "FR28834364291",
"etablissements": [
{
"id": 1512132578,
"siren": "834364291",
"nic": "00015",
"siret": "83436429100015",
"statut_diffusion": "O",
"date_creation": "2018-01-02",
"tranche_effectifs": "01",
"annee_effectifs": "2018",
"activite_principale_registre_metiers": null,
"date_dernier_traitement": "2020-08-25T11:39:32",
"etablissement_siege": "true",
"nombre_periodes": "2",
"complement_adresse": null,
"numero_voie": "55",
"indice_repetition": null,
"type_voie": "RUE",
"libelle_voie": "DES PYRENEES",
"code_postal": "75020",
"libelle_commune": "PARIS 20",
"libelle_commune_etranger": null,
"distribution_speciale": null,
"code_commune": "75120",
"code_cedex": null,
"libelle_cedex": null,
"code_pays_etranger": null,
"libelle_pays_etranger": null,
"complement_adresse_2": null,
"numero_voie_2": null,
"indice_repetition_2": null,
"type_voie_2": null,
"libelle_voie_2": null,
"code_postal_2": null,
"libelle_commune_2": null,
"libelle_commune_etranger_2": null,
"distribution_speciale_2": null,
"code_commune_2": null,
"code_cedex_2": null,
"libelle_cedex_2": null,
"code_pays_etranger_2": null,
"libelle_pays_etranger_2": null,
"date_debut": "2018-03-25",
"etat_administratif": "A",
"enseigne_1": null,
"enseigne_2": null,
"enseigne_3": null,
"denomination_usuelle": null,
"activite_principale": "62.01Z",
"nomenclature_activite_principale": "NAFRev2",
"caractere_employeur": "O",
"longitude": "2.406077",
"latitude": "48.851854",
"geo_score": "0.61",
"geo_type": "housenumber",
"geo_adresse": "55 Rue des Pyrénées 75020 Paris",
"geo_id": "75120_7904_00055",
"geo_ligne": "G",
"geo_l4": "55 RUE DES PYRENEES",
"geo_l5": null,
"unite_legale_id": 221988588,
"created_at": "2021-06-03T05:01:48.216+02:00",
"updated_at": "2021-06-03T05:01:48.216+02:00"
}
]
}
}

View File

@ -0,0 +1,12 @@
{
"nom": "Mons",
"code": "34160",
"departement": {
"code": "34",
"nom": "Hérault"
},
"region": {
"code": "76",
"nom": "Occitanie"
}
}

View File

@ -0,0 +1,12 @@
{
"nom": "Paris 20e Arrondissement",
"code": "75120",
"departement": {
"code": "75",
"nom": "Paris"
},
"region": {
"code": "11",
"nom": "Île-de-France"
}
}

View File

@ -0,0 +1,6 @@
## mon-entreprise e2e test specs
Les jeux de tests qu'on souhaite faire tourner avec le langage FR et EN doivent aller dans le
sous-dossier `mon-entreprise/english`.
Les autres jeux ne seront testés qu'avent le langage FR.

View File

@ -1,7 +1,7 @@
describe('Pole emploi', function () {
it('should display an iframe of the simulateur', function () {
cy.on('uncaught:exception', (err) => {
return !err.message.contains('Unexpected token <')
return !err.message.includes("Unexpected token '<'")
})
cy.visit('https://entreprise.pole-emploi.fr/cout-salarie/')
cy.get('#simulateurEmbauche').iframe().contains('Salaire net')

View File

@ -10,7 +10,7 @@ describe('Page covid-19', function () {
if (!fr) {
return
}
before(() => cy.visit('/simulateurs/chômage-partiel'))
before(() => cy.visit(encodeURI('/simulateurs/chômage-partiel')))
it('should not crash', () => {
cy.contains('Salaire brut mensuel')
})
@ -23,6 +23,6 @@ describe('Page covid-19', function () {
it('should display 85 % de prise en charge pour un salaire médian', () => {
cy.contains('salaire médian').click()
testText('comparaison-net', 'Soit 85 % du revenu net')
testText('comparaison-total', 'Soit 8 % du coût habituel')
testText('comparaison-total', 'Soit 13 % du coût habituel')
})
})

View File

@ -1,112 +1,131 @@
const fr = Cypress.env('language') === 'fr'
describe(
'Formulaire demande mobilité',
{
retries: {
runMode: 3,
openMode: 0,
},
},
function () {
if (!fr) {
return
}
before(() => cy.visit('/gérer/demande-mobilité'))
it('should not crash', () => {
cy.contains('Demande de mobilité internationale')
})
it('should allow to complete "coordonnées" section', () => {
cy.contains('SIRET').click()
cy.focused()
.type('684 064 0011')
.tab()
.type('Deaux')
.tab()
.type('Jean')
.tab()
.type('Française')
cy.contains('sécurité sociale').click()
cy.focused().type('1 91 07 468 054 75').tab().type('1991-07-25')
const FIXTURES_FOLDER = 'cypress/fixtures'
const DEMANDE_MOBILITE_FIXTURES_FOLDER = `${FIXTURES_FOLDER}/demande-mobilité`
cy.get(
"input[name='coordonnées assuré . commune de naissance . étranger'][value='non']"
)
.next()
.click()
.wait(500)
const writeFixtures = Cypress.env('record_http') !== undefined
cy.focused().tab().type('Pouts').wait(1500).type('{enter}')
cy.get(
"input[name='coordonnées assuré . domicile personnel . commune . étranger'][value='non']"
)
.next()
.click()
cy.focused()
.tab()
.type('3 rue de la Rhumerie')
.tab()
.type('Brest')
.wait(1500)
.type('{enter}')
.tab()
.type('jean.deaux@gmail.com')
.tab()
.type('06 85 69 78 54')
.tab()
})
it('should allow to complete "activité en France" section', () => {
cy.focused()
.type('Deaux & Fils')
.tab()
.type('14 chemin des Docks')
.tab()
.type('Bre')
.wait(1500)
cy.contains('29240').click()
cy.contains('Organisme Urssaf').click()
cy.focused().type('Bretagne').tab().tab().type('Boulangerie')
})
it('should allow to complete "votre demande" section', () => {
cy.get("input[name='demande . pays unique'][value='oui']").next().click()
cy.get("input[name='demande . infrastructure sauvegardée'][value='oui']")
.next()
.click()
cy.get("input[name='demande . activité semblable'][value='oui']")
.next()
.click()
cy.get("input[name='demande . date de fin connue'][value='oui']")
.next()
.click()
cy.get('label[for="détachement . pays"]').wait(1500).click()
cy.focused()
.select('Irlande')
.tab()
.type('2020-11-06')
.tab()
.type('2021-04-09')
.tab()
.tab()
.type('Fabrications de gateaux bretons')
cy.get("input[name='détachement . base fixe'][value='non']")
.next()
.click()
cy.get(
"input[name='commentaires additionnels . commentaires'][value='non']"
)
.next()
.click()
})
it('should allow to download PDF', () => {
cy.contains(
'Je certifie lexactitude des informations communiquées ci-dessus'
).click()
cy.contains('Fait à').click()
cy.focused().type('Plougastel')
cy.contains('Générer la demande').click()
cy.contains('Télécharger le fichier').click()
})
describe(`Formulaire demande mobilité (${
writeFixtures ? 'record mode' : 'stubbed mode'
})`, function () {
if (!fr) {
return
}
)
let pendingRequests = new Set()
let responses = {}
const hostnamesToRecord = ['geo.api.gouv.fr']
beforeEach(() => {
pendingRequests = new Set()
responses = {}
cy.setInterceptResponses(
pendingRequests,
responses,
hostnamesToRecord,
DEMANDE_MOBILITE_FIXTURES_FOLDER
)
cy.visit(encodeURI('/gérer/demande-mobilité'))
})
afterEach(() => {
cy.writeInterceptResponses(
pendingRequests,
responses,
DEMANDE_MOBILITE_FIXTURES_FOLDER
)
})
it('should not crash', () => {
cy.contains('Demande de mobilité internationale')
})
it('should allow to complete and download', () => {
// "coordonnées" section
cy.contains('SIRET').click()
cy.focused()
.type('684 064 0011')
.tab()
.type('Deaux')
.tab()
.type('Jean')
.tab()
.type('Française')
cy.contains('sécurité sociale').click()
cy.focused().type('1 91 07 468 054 75').tab().type('1991-07-25')
cy.get(
"input[name='coordonnées assuré . commune de naissance . étranger'][value='non']"
)
.next()
.click()
.wait(500)
cy.focused().tab().type('Pouts').wait(1500).type('{enter}')
cy.get(
"input[name='coordonnées assuré . domicile personnel . commune . étranger'][value='non']"
)
.next()
.click()
cy.focused()
.tab()
.type('3 rue de la Rhumerie')
.tab()
.type('Brest')
.wait(1500)
.type('{enter}')
.tab()
.type('jean.deaux@gmail.com')
.tab()
.type('06 85 69 78 54')
.tab()
// "activité en France" section
cy.focused()
.type('Deaux & Fils')
.tab()
.type('14 chemin des Docks')
.tab()
.type('Bre')
.wait(1500)
cy.contains('29240').click()
cy.contains('Organisme Urssaf').click()
cy.focused().type('Bretagne').tab().tab().type('Boulangerie')
// "votre demande" section
cy.get("input[name='demande . pays unique'][value='oui']").next().click()
cy.get("input[name='demande . infrastructure sauvegardée'][value='oui']")
.next()
.click()
cy.get("input[name='demande . activité semblable'][value='oui']")
.next()
.click()
cy.get("input[name='demande . date de fin connue'][value='oui']")
.next()
.click()
cy.get('label[for="détachement . pays"]').wait(1500).click()
cy.focused()
.select('Irlande')
.tab()
.type('2020-11-06')
.tab()
.type('2021-04-09')
.tab()
.tab()
.type('Fabrications de gateaux bretons')
cy.get("input[name='détachement . base fixe'][value='non']").next().click()
cy.get(
"input[name='commentaires additionnels . commentaires'][value='non']"
)
.next()
.click()
// download PDF
cy.contains(
'Je certifie lexactitude des informations communiquées ci-dessus'
).click()
cy.contains('Fait à').click()
cy.focused().type('Plougastel')
cy.contains('Générer la demande').click()
cy.contains('Télécharger le fichier').click()
})
})

View File

@ -0,0 +1,64 @@
const fr = Cypress.env('language') === 'fr'
const FIXTURES_FOLDER = 'cypress/fixtures'
const GERER_FIXTURES_FOLDER = `${FIXTURES_FOLDER}/gérer`
const writeFixtures = Cypress.env('record_http') !== undefined
describe(`Manage page test (${
writeFixtures ? 'record mode' : 'stubbed mode'
})`, function () {
let pendingRequests = new Set()
let responses = {}
const hostnamesToRecord = ['entreprise.data.gouv.fr', 'geo.api.gouv.fr']
beforeEach(() => {
cy.clearLocalStorage() // Try to avoid flaky tests
pendingRequests = new Set()
responses = {}
cy.setInterceptResponses(
pendingRequests,
responses,
hostnamesToRecord,
GERER_FIXTURES_FOLDER
)
cy.visit(fr ? encodeURI('/gérer') : '/manage')
})
afterEach(() => {
cy.writeInterceptResponses(
pendingRequests,
responses,
GERER_FIXTURES_FOLDER
)
})
it('should not crash', function () {
cy.contains(fr ? 'Gérer mon activité' : 'Manage my business')
})
it('should allow to retrieve company and show link corresponding to the legal status', function () {
cy.get('button.cta').click()
cy.get('input').first().type('menoz')
cy.contains('834364291').click()
cy.contains(
fr ? 'Calculer mon revenu net de cotisations' : 'Calculate my net income'
).click()
cy.location().should((loc) => {
expect(loc.pathname).to.match(/sasu$/)
})
})
it('should allow auto entrepreneur to access the corresponding income simulator', function () {
cy.get('button.cta').click()
cy.get('input').first().type('johan girod')
cy.contains('MONSIEUR').click()
// ask if auto-entrepreneur
cy.contains(
fr ? 'Êtes-vous auto-entrepreneur ?' : 'Are you auto-entrepreneur?'
)
cy.contains(fr ? 'Oui' : 'Yes').click()
cy.contains(
fr ? 'simulateur auto-entrepreneur' : 'simulator for auto-entrepreneur'
).click()
cy.location().should((loc) => {
expect(loc.pathname).to.match(/auto-entrepreneur$/)
})
})
})

View File

@ -1,16 +1,18 @@
describe('Navigation', function () {
const fr = Cypress.env('language') === 'fr'
it('should enable switching site language', () => {
cy.visit(fr ? '/créer/auto-entrepreneur' : '/create/auto-entrepreneur')
cy.visit(
fr ? encodeURI('/créer/auto-entrepreneur') : '/create/auto-entrepreneur'
)
cy.contains(fr ? 'Switch to English' : 'Passer en français').click()
cy.url().should(
'include',
fr ? '/create/auto-entrepreneur' : '/cr%C3%A9er/auto-entrepreneur'
fr ? '/create/auto-entrepreneur' : encodeURI('/créer/auto-entrepreneur')
)
})
it('should go back to home when clicking on logo', () => {
cy.visit('/documentation/contrat-salarié')
cy.visit(encodeURI('/documentation/contrat-salarié'))
cy.get('img[alt^="logo mon-entreprise"]').click()
cy.url().should('match', new RegExp(`${Cypress.config().baseUrl}/?`))
})

View File

@ -1,7 +1,7 @@
describe('Status guide', function () {
const fr = Cypress.env('language') === 'fr'
beforeEach(() => {
cy.visit(fr ? '/créer' : '/create')
cy.visit(fr ? encodeURI('/créer') : '/create')
cy.get('.cta').click()
})

View File

@ -1,34 +0,0 @@
describe('Manage page test', function () {
const fr = Cypress.env('language') === 'fr'
beforeEach(() => {
cy.visit(fr ? '/gérer' : '/manage')
})
it('should not crash', function () {
cy.contains(fr ? 'Gérer mon activité' : 'Manage my business')
})
it('should allow to retrieve company and show link corresponding to the legal status', function () {
cy.get('button.cta').click()
cy.get('input').first().type('menoz')
cy.contains('834364291').click()
cy.contains(fr ? 'simulateur SASU' : 'simulator for SASU').click()
cy.location().should((loc) => {
expect(loc.pathname).to.match(fr ? /dirigeant-sasu$/ : /sasu-chairman$/)
})
})
it('should allow auto entrepreneur to access the corresponding income simulator', function () {
cy.get('button.cta').click()
cy.get('input').first().type('johan girod')
cy.contains('MONSIEUR').click()
// ask if auto-entrepreneur
cy.contains(
fr ? 'Êtes-vous auto-entrepreneur ?' : 'Are you auto-entrepreneur?'
)
cy.contains(fr ? 'Oui' : 'Yes').click()
cy.contains(
fr ? 'simulateur auto-entrepreneur' : 'simulator for auto-entrepreneur'
).click()
cy.location().should((loc) => {
expect(loc.pathname).to.match(/auto-entrepreneur$/)
})
})
})

View File

@ -5,7 +5,6 @@ describe('Iframe integration test', function () {
it('should display an iframe of the simulateur', function () {
cy.visit('/dev/integration-test')
cy.contains('Visualiser').click()
cy.wait(1000)
cy.get('#simulateurEmbauche').iframe().contains('Salaire net')
})
})

View File

@ -0,0 +1,19 @@
const fr = Cypress.env('language') === 'fr'
const inputSelector = 'input.currencyInput__input:not([name$="charges"])'
describe('Champs localisation (simulateur salarié)', () => {
if (!fr) {
return
}
before(() => cy.visit(encodeURI('/simulateurs/salarié')))
it('should not crash when selecting localisation', function () {
cy.get(inputSelector).first().type('{selectall}42')
cy.contains('Commune').click({ force: true })
cy.get('fieldset input[type="search"]').type('Steenvoorde')
cy.contains('Steenvoorde (59114)').click({ force: true })
cy.contains('Suivant').click({ force: true })
cy.contains('Voir mes paramètres').click({ force: true })
cy.contains('Steenvoorde')
})
})

View File

@ -0,0 +1,35 @@
const fr = Cypress.env('language') === 'fr'
describe('Partage (simulateur salarié)', () => {
const brutInputSelector =
'input.currencyInput__input[name="contrat salarié . rémunération . brut de base"]'
const simulatorUrl = '/simulateurs/salaire-brut-net'
const searchParams = new URLSearchParams({
'contrat salarié': "'CDD'",
'salaire-brut': '1539€/mois',
})
searchParams.set('utm_source', 'sharing')
const urlWithState = `${simulatorUrl}?${searchParams.toString()}`
if (!fr) {
return
}
it('should set input value from URL', function () {
cy.visit(urlWithState)
cy.get(brutInputSelector).first().invoke('val').should('eq', '1539')
cy.contains('Voir mes paramètres').click()
cy.get('span.answerContent').first().contains('CDD')
})
it('should set URL from input value', function () {
cy.visit(simulatorUrl)
cy.get(brutInputSelector).first().type('{selectall}1539')
cy.contains('De quel type de contrat').should('be.visible')
cy.get('.step').contains('CDD').should('be.visible').click()
cy.get('button').contains('Suivant').should('be.visible')
cy.contains('Générer un lien').click()
cy.get('.shareableLink')
.invoke('val')
.should('eq', Cypress.config().baseUrl + urlWithState)
})
})

View File

@ -0,0 +1,34 @@
const fr = Cypress.env('language') === 'fr'
const inputSelector = 'input.currencyInput__input:not([name$="charges"])'
describe('Persistence (simulateur salarié)', () => {
if (!fr) {
return
}
before(() => cy.visit(encodeURI('/simulateurs/salarié')))
beforeEach(() => {
cy.clearLocalStorage()
})
it('should persist the current simulation (persistSimulation)', function () {
cy.get(inputSelector).first().type('{selectall}42')
cy.contains('Passer').click()
cy.contains('Passer').click()
cy.contains('Passer').click()
cy.get('body').should(() => {
expect(
window.localStorage.getItem(
'mon-entreprise::persisted-simulation::v5::/simulateurs/salaire-brut-net'
)
).to.be.not.null
})
cy.visit('/simulateurs/auto-entrepreneur')
cy.get(inputSelector).first().type('{selectall}007')
cy.contains('Passer').click()
cy.contains('Passer').click()
cy.contains('Passer').click()
cy.visit(encodeURI('/simulateurs/salarié'))
cy.contains('Retrouver ma simulation').click()
cy.get(inputSelector).first().invoke('val').should('match', /42/)
})
})

View File

@ -0,0 +1,29 @@
const fr = Cypress.env('language') === 'fr'
const simulateursPath = '.ais-Hits-list'
const reglesPath = '.ais-InfiniteHits-list'
describe('Recherche globales', () => {
if (!fr) {
return
}
it('should display the search results when the magnifying glass is clicked', () => {
cy.visit('/')
cy.get('#search-display-button').click()
cy.wait(30)
cy.focused().should('have.attr', 'type', 'search')
cy.wait(100)
cy.get(simulateursPath).children().should('have.length', 6)
cy.get(reglesPath).children().should('have.length', 20)
cy.focused().type('avocat')
cy.wait(100)
cy.get(simulateursPath).children().should('have.length', 1)
cy.get(reglesPath).children().should('have.length', 2)
})
})

View File

@ -0,0 +1,28 @@
const fr = Cypress.env('language') === 'fr'
const inputSelector = 'input.currencyInput__input:not([name$="charges"])'
describe('Simulateur auto-entrepreneur', () => {
if (!fr) {
return
}
before(() => cy.visit('/simulateurs/auto-entrepreneur'))
it('should allow to enter the date of creation', () => {
cy.get(inputSelector).first().type('{selectall}50000')
cy.contains('Passer').click()
cy.contains('Passer').click()
cy.contains('Début 2021').click()
cy.contains('ACRE')
})
it('should not have negative value', () => {
cy.contains('Mensuel').click()
cy.wait(100)
cy.get(inputSelector).first().type('{selectall}5000')
cy.get(inputSelector).each(($input) => {
cy.wrap($input).should(($i) => {
const val = +$i.val().replace(/[\s,.]/g, '')
expect(val).not.to.be.below(4000)
})
})
})
})

View File

@ -0,0 +1,22 @@
const fr = Cypress.env('language') === 'fr'
const inputSelector = 'input.currencyInput__input:not([name$="charges"])'
const totalSelector = 'section#simulateur-dividendes-section-total'
describe('Simulateur auto-entrepreneur', () => {
if (!fr) {
return
}
before(() => cy.visit('/simulateurs/dividendes'))
it('should show by default the PFU calculation at 12.8 / 17.2', () => {
cy.get(inputSelector).first().type('{selectall}5000')
cy.get(totalSelector).contains(/[cC]otisations\s+17,2\s*%/)
cy.get(totalSelector).contains(/[Ii]mpôt\s+12,8\s*%/)
})
it('should allow switching PFU with barème', () => {
cy.get('input[name="impôt . méthode de calcul"]')
.eq(1)
.should('not.be.checked')
})
})

View File

@ -0,0 +1,41 @@
const fr = Cypress.env('language') === 'fr'
describe('Simulateur salarié', () => {
if (!fr) {
return
}
before(() => cy.visit(encodeURI('/simulateurs/salarié')))
describe('part time contract', () => {
before(() => {
cy.visit(encodeURI('/simulateurs/salarié'))
cy.get('input[name$="brut de base"]').click()
cy.get('button').contains('SMIC').click()
cy.contains('Voir mes paramètres').click()
cy.contains('Temps partiel').click()
cy.get('input[value="oui"]').parent().click()
cy.wait(100)
})
it('should permit selecting the smic before part-time contrat', () => {
cy.get('input[name$="brut de base"]').should(($input) => {
expect(+$input.val().replace(/[\s,.]/g, ''))
.to.be.above(1300)
.and.to.be.below(1500)
})
})
it('should permit customizing the number of worked hours and clear the input value', () => {
cy.contains('Suivant').click()
cy.get('fieldset input[type="text"]').type(25)
cy.get('input[name$="net après impôt"]').should(($input) => {
expect(+$input.val().replace(/[\s,.]/g, '')).to.be.below(1000)
})
cy.get('fieldset input[type="text"]').clear()
cy.get('input[name$="net après impôt"]').should(($input) => {
expect(+$input.val().replace(/[\s,.]/g, '')).to.be.above(1000)
})
})
})
})

View File

@ -0,0 +1,3 @@
import { runSimulateurTest } from '../../../support/simulateur'
runSimulateurTest('auto-entrepreneur')

View File

@ -0,0 +1,3 @@
import { runSimulateurTest } from '../../../support/simulateur'
runSimulateurTest('sasu')

View File

@ -0,0 +1,3 @@
import { runSimulateurTest } from '../../../support/simulateur'
runSimulateurTest('indépendant')

View File

@ -0,0 +1,3 @@
import { runSimulateurTest } from '../../../support/simulateur'
runSimulateurTest('profession-liberale')

View File

@ -0,0 +1,3 @@
import { runSimulateurTest } from '../../../../support/simulateur'
runSimulateurTest('profession-liberale/auxiliaire-medical')

View File

@ -0,0 +1,3 @@
import { runSimulateurTest } from '../../../../support/simulateur'
runSimulateurTest('profession-liberale/chirurgien-dentiste')

View File

@ -0,0 +1,3 @@
import { runSimulateurTest } from '../../../../support/simulateur'
runSimulateurTest('profession-liberale/medecin')

View File

@ -0,0 +1,3 @@
import { runSimulateurTest } from '../../../../support/simulateur'
runSimulateurTest('profession-liberale/sage-femme')

View File

@ -0,0 +1,3 @@
import { runSimulateurTest } from '../../../support/simulateur'
runSimulateurTest('salarié')

View File

@ -1,202 +0,0 @@
const fr = Cypress.env('language') === 'fr'
const inputSelector = 'input.currencyInput__input:not([name$="charges"])'
const chargeInputSelector = 'input.currencyInput__input[name$="charges"]'
describe('Simulateurs', function () {
if (!fr) {
return
}
;[
'indépendant',
'dirigeant-sasu',
'auto-entrepreneur',
'salarié',
'profession-liberale',
'profession-liberale/medecin',
'profession-liberale/sage-femme',
'profession-liberale/auxiliaire-medical',
'profession-liberale/chirurgien-dentiste',
].forEach((simulateur) =>
describe(simulateur, () => {
before(() => cy.visit(`/simulateurs/${simulateur}`))
it('should not crash', function () {
cy.get(inputSelector)
})
it('should display a result when entering a value in any of the currency input', () => {
cy.contains('€/an').click()
if (['indépendant', 'dirigeant-sasu'].includes(simulateur)) {
cy.get(chargeInputSelector).type(1000)
}
cy.get(inputSelector).each((testedInput, i) => {
cy.wrap(testedInput).type('{selectall}60111')
cy.wait(1500)
cy.contains('Cotisations')
cy.get(inputSelector).each(($input, j) => {
const val = $input.val().replace(/[\s,.]/g, '')
if (i != j) {
expect(val).not.to.be.eq('60111')
}
expect(val).to.match(/[1-9][\d]{3,6}$/)
})
})
})
it('should allow to change period', function () {
cy.contains('€/an').click()
cy.wait(200)
cy.get(inputSelector).first().type('{selectall}12000')
if (['indépendant', 'dirigeant-sasu'].includes(simulateur)) {
cy.get(chargeInputSelector).type('{selectall}6000')
}
cy.wait(800)
cy.contains('€/mois').click()
cy.get(inputSelector)
.first()
.invoke('val')
.should('match', /1[\s]000/)
if (['indépendant', 'dirigeant-sasu'].includes(simulateur)) {
cy.get(chargeInputSelector).first().invoke('val').should('eq', '500')
}
cy.contains('€/an').click()
})
it('should allow to navigate to a documentation page', function () {
cy.get(inputSelector).first().type('{selectall}2000')
cy.wait(700)
cy.contains('Cotisations').click()
cy.location().should((loc) => {
expect(loc.pathname).to.match(/\/documentation\/.*\/cotisations/)
})
})
it('should allow to go back to the simulation', function () {
cy.contains('← ').click()
cy.get(inputSelector).first().invoke('val').should('eq', '2000')
})
})
)
})
describe('Simulateur auto-entrepreneur', () => {
if (!fr) {
return
}
before(() => cy.visit('/simulateurs/auto-entrepreneur'))
it('should allow to enter the date of creation', () => {
cy.get(inputSelector).first().type('{selectall}50000')
cy.contains('Passer').click()
cy.contains('Passer').click()
cy.contains('Début 2021').click()
cy.contains('ACRE')
})
it('should not have negative value', () => {
cy.contains('€/mois').click()
cy.wait(100)
cy.get(inputSelector).first().type('{selectall}5000')
cy.wait(800)
cy.get(inputSelector).each(($input) => {
const val = +$input.val().replace(/[\s,.]/g, '')
expect(val).not.to.be.below(4000)
})
})
})
describe('Simulateur salarié mode partagé', () => {
const brutInputSelector =
'input.currencyInput__input[name="contrat salarié . rémunération . brut de base"]'
const simulatorUrl = '/simulateurs/salaire-brut-net'
const searchParams = new URLSearchParams({
'contrat salarié': "'CDD'",
'salaire-brut': '1539€/mois',
})
const urlWithState = `${simulatorUrl}?${searchParams.toString()}`
if (!fr) {
return
}
it('should set input value from URL', function () {
cy.visit(urlWithState)
cy.wait(800)
cy.get(brutInputSelector).first().invoke('val').should('eq', '1539')
cy.contains('Voir mes paramètres').click()
cy.get('span.answerContent').first().contains('CDD')
})
it('should set URL from input value', function () {
cy.visit(simulatorUrl)
cy.get(brutInputSelector).first().type('{selectall}1539')
cy.wait(1000)
cy.get('.step').find('input[value="\'CDD\'"]').click({ force: true })
cy.wait(1000)
cy.contains('Générer un lien').click()
cy.get('.shareableLink')
.invoke('val')
.should('eq', Cypress.config().baseUrl + urlWithState)
})
})
describe('Simulateur salarié', () => {
if (!fr) {
return
}
before(() => cy.visit('/simulateurs/salarié'))
it('should persist the current simulation (persistSimulation)', function () {
cy.get(inputSelector).first().type('{selectall}42')
cy.contains('Passer').click()
cy.contains('Passer').click()
cy.contains('Passer').click()
cy.wait(1600)
cy.visit('/simulateurs/auto-entrepreneur')
cy.get(inputSelector).first().type('{selectall}007')
cy.contains('Passer').click()
cy.contains('Passer').click()
cy.contains('Passer').click()
cy.wait(1600)
cy.visit('/simulateurs/salarié')
cy.contains('Retrouver ma simulation').click()
cy.get(inputSelector).first().invoke('val').should('match', /42/)
})
it('should not crash when selecting localisation', function () {
cy.contains('Commune').click()
cy.get('fieldset input[type="search"]').type('Steenvoorde')
cy.contains('Steenvoorde (59114)').click()
cy.contains('Suivant').click()
cy.contains('Voir mes paramètres').click()
cy.contains('Steenvoorde')
})
describe('part time contract', () => {
before(() => {
cy.visit('/simulateurs/salarié')
cy.get('input[name$="brut de base"]').click()
cy.get('button').contains('SMIC').click()
cy.contains('Voir mes paramètres').click()
cy.contains('Temps partiel').click()
cy.get('input[value="oui"]').parent().click()
cy.wait(100)
})
it('should permit selecting the smic before part-time contrat', () => {
cy.get('input[name$="brut de base"]').should(($input) => {
expect(+$input.val().replace(/[\s,.]/g, ''))
.to.be.above(1300)
.and.to.be.below(1500)
})
})
it('should permit customizing the number of worked hours and clear the input value', () => {
cy.contains('Suivant').click()
cy.get('fieldset input[type="text"]').type(25)
cy.get('input[name$="net après impôt"]').should(($input) => {
expect(+$input.val().replace(/[\s,.]/g, '')).to.be.below(1000)
})
cy.get('fieldset input[type="text"]').clear()
cy.get('input[name$="net après impôt"]').should(($input) => {
expect(+$input.val().replace(/[\s,.]/g, '')).to.be.above(1000)
})
})
})
})

View File

@ -9,7 +9,6 @@ describe('Navigation', function () {
})
it('bac à sable should work', function () {
cy.contains('Bac à sable').click()
cy.wait(5000)
cy.contains('Dépenses primeur')
cy.contains('11,50')
})

View File

@ -28,3 +28,59 @@ Cypress.Commands.add('iframe', { prevSubject: 'element' }, ($iframe) => {
setTimeout(() => resolve($iframe.contents().find('body')), 6000)
})
})
import 'cypress-wait-until'
Cypress.Commands.add(
'setInterceptResponses',
(pendingRequests, responses, hostnames, specFixturesFolder) => {
const FIXTURES_FOLDER = 'cypress/fixtures'
const writeFixtures = Cypress.env('record_http') !== undefined
const stubFixtures = !writeFixtures
if (writeFixtures) {
cy.intercept('*', (req) => {
if (!hostnames.includes(new URL(req.url).hostname)) return
pendingRequests.add(req.url)
req.on('after:response', (res) => {
pendingRequests.delete(req.url)
responses[res.url] = res.body
})
})
} else if (stubFixtures) {
const urlOfFilepath = (filename) => {
return atob(filename.slice(0, -'.json'.length))
}
cy.exec(`find ${specFixturesFolder} -type f`)
.then((result) => {
return result.stdout.split('\n')
})
.then((filepaths) => {
filepaths.forEach((filepath) => {
const shortPath = filepath.slice(FIXTURES_FOLDER.length + 1)
const filename = filepath.slice(specFixturesFolder.length + 1)
cy.intercept(urlOfFilepath(filename), { fixture: shortPath })
})
})
}
}
)
Cypress.Commands.add(
'writeInterceptResponses',
(pendingRequests, responses, specFixturesFolder) => {
const writeFixtures = Cypress.env('record_http') !== undefined
if (writeFixtures) {
// We need to wait on all catched requests to be fulfilled and recorded,
// otherwise the stubbed cy run might error when a request is not stubbed.
// Caveat: we assume request.url to be unique amongst recorded requests.
cy.waitUntil(() => pendingRequests.size === 0)
Object.keys(responses).map((url) => {
if (responses[url] === undefined) return
cy.writeFile(
`${specFixturesFolder}/${btoa(url)}.json`,
JSON.stringify(responses[url], null, 2)
)
})
}
}
)

View File

@ -0,0 +1,68 @@
const inputSelector = 'input.currencyInput__input:not([name$="charges"])'
const chargeInputSelector = 'input.currencyInput__input[name$="charges"]'
const fr = Cypress.env('language') === 'fr'
export const runSimulateurTest = (simulateur) => {
if (!fr) return
describe(`Simulateur ${simulateur}`, () => {
before(() => cy.visit(encodeURI(`/simulateurs/${simulateur}`)))
it('should not crash', function () {
cy.get(inputSelector)
})
it('should display a result when entering a value in any of the currency input', () => {
cy.contains('Annuel').click()
if (['indépendant', 'profession-liberale'].includes(simulateur)) {
cy.get(chargeInputSelector).type(1000)
}
cy.get(inputSelector).each(($testedInput) => {
cy.wrap($testedInput)
.type('{selectall}60111')
.and(($i) =>
expect($i.val().replace(/[\s,.]/g, '')).to.match(/[1-9][\d]{3,6}$/)
)
cy.get(inputSelector).each(($input) => {
if ($testedInput.get(0) === $input.get(0)) return
cy.wrap($input).and(($i) => {
const val = $i.val().replace(/[\s,.]/g, '')
expect(val).not.to.be.eq('60111')
expect(val).to.match(/[1-9][\d]{3,6}$/)
})
})
cy.contains('Cotisations')
})
})
it('should allow to change period', function () {
cy.contains('Annuel').click()
cy.get(inputSelector).first().type('{selectall}12000')
if (['indépendant', 'profession-liberale'].includes(simulateur)) {
cy.get(chargeInputSelector).type('{selectall}6000')
}
cy.get(inputSelector).eq(1).invoke('val').should('not.be.empty')
cy.contains('Mensuel').click()
cy.get(inputSelector)
.first()
.invoke('val')
.should('match', /1[\s]000/)
if (['indépendant', 'profession-liberale'].includes(simulateur)) {
cy.get(chargeInputSelector).first().invoke('val').should('eq', '500')
}
cy.contains('Annuel').click()
})
it('should allow to navigate to a documentation page', function () {
cy.get(inputSelector).first().type('{selectall}2000')
cy.contains('Cotisations').click()
cy.location().should((loc) => {
expect(loc.pathname).to.match(/\/documentation\/.*\/cotisations/)
})
})
it('should allow to go back to the simulation', function () {
cy.contains('← ').click()
cy.get(inputSelector).first().invoke('val').should('eq', '2000')
})
})
}

View File

@ -16,8 +16,8 @@ const rewrite = (basename) => ({
})
app.get('/', function (req, res) {
res.send(`<ul><li><a href="/mon-entreprise">mon-entreprise [fr]</a></li>
<li><a href="/infrance">infrance [en]</a></li>
res.send(`<ul style="font-size: 200%;"><li><a href="/mon-entreprise">mon-entreprise [fr]</a></li>
<li><a href="/infrance">mycompaninfrance [en]</a></li>
<li><a href="/mon-entreprise/dev/integration-test">intégration du simulateur sur site tiers [iframe fr]</a></li>
<li><a href="/publicodes">publicodes</a></li></ul>`)
})

View File

@ -208,7 +208,21 @@
var b = document.documentElement
b.setAttribute('data-useragent', navigator.userAgent)
</script>
<script>
// Hack to force styled components to render styles during prerender
if (window.__PRERENDER_INJECTED) {
window.onload = () => {
var el = document.createElement('style');
document.head.appendChild(el)
var styles = document.querySelectorAll('style[data-styled]')
for (style of styles.values()) {
for (rule of style.sheet.rules) {
el.appendChild(document.createTextNode(rule.cssText))
}
}
}
};
</script>
<!-- APP -->
<div id="js"></div>
@ -261,12 +275,6 @@
></script>
<% } %>
<!-- Polyfill and source for old browser -->
<!-- Add polyfill.io for a very narrow web feature
IntersectionObserver : SAFARI 11 & 12.0 https://caniuse.com/#search=intersectionobserver
Intl : SAFARI 9 & 10.0 https://caniuse.com/#search=Intl
-->
<script src="https://polyfill.io/v3/polyfill.min.js?features=Intl.~locale.en%2CIntl.~locale.fr%2CIntersectionObserver"></script>
<% for (var chunk in htmlWebpackPlugin.files.chunks) { %>
<script nomodule src="<%= chunk %>.legacy.bundle.js"></script>
<% } %>

View File

@ -27,14 +27,16 @@
"@babel/preset-typescript": "^7.9.0",
"@types/cheerio": "^0.22.18",
"@types/js-yaml": "^3.12.2",
"@types/mocha": "^8.2.2",
"@types/react": "^17.0.0",
"@types/react-color": "^3.0.1",
"@types/react-dom": "^17.0.0",
"@types/react-dom": "^17.0.9",
"@types/react-helmet": "^6.1.0",
"@types/react-redux": "^7.1.11",
"@types/react-router": "^5.1.2",
"@types/recharts": "^1.8.16",
"@types/redux-sentry-middleware": "^0.1.2",
"@types/styled-components": "^5.1.4",
"@types/styled-components": "^5.1.9",
"@types/webpack": "^4.41.10",
"@typescript-eslint/eslint-plugin": "^4.0.1",
"@typescript-eslint/parser": "^4.0.1",
@ -42,7 +44,9 @@
"autoprefixer": "^9.7.6",
"babel-plugin-styled-components": "^1.10.7",
"copy-webpack-plugin": "^4.5.2",
"cypress": "^7.4.0",
"cypress-plugin-tab": "^1.0.5",
"cypress-wait-until": "^1.7.1",
"eslint-plugin-react": "^7.12.4",
"html-webpack-plugin": "^3.2.0",
"i18next-parser": "^3.3.0",
@ -61,17 +65,20 @@
"@babel/runtime": "^7.3.4",
"@react-pdf/renderer": "^1.6.10",
"@rehooks/local-storage": "^2.1.1",
"@sentry/browser": "5.15.5",
"@types/react-helmet": "^6.1.0",
"@sentry/react": "^6.3.5",
"@sentry/tracing": "^6.3.5",
"@types/react-instantsearch-dom": "^6.10.1",
"algoliasearch": "^4.10.2",
"classnames": "^2.2.5",
"color-convert": "^1.9.2",
"core-js": "^3.2.1",
"focus-trap-react": "^3.1.2",
"fuse.js": "5.2.1",
"iframe-resizer": "^4.1.1",
"instantsearch.css": "^7.4.5",
"modele-social": "^0.2.0",
"publicodes": "^1.0.0-beta.12",
"publicodes-react": "^1.0.0-beta.12",
"publicodes": "^1.0.0-beta.15",
"publicodes-react": "^1.0.0-beta.15",
"ramda": "^0.27.0",
"react": "^17.0.0",
"react-color": "^2.14.0",
@ -79,6 +86,8 @@
"react-easy-emoji": "^1.2.0",
"react-helmet": "^6.1.0",
"react-i18next": "^11.0.0",
"react-instantsearch": "^6.11.2",
"react-instantsearch-dom": "^6.11.2",
"react-markdown": "^4.1.0",
"react-monaco-editor": "^0.40.0",
"react-number-format": "^4.3.1",
@ -93,7 +102,6 @@
"recharts": "^1.8.5",
"reduce-reducers": "^1.0.4",
"redux": "^4.0.4",
"redux-sentry-middleware": "^0.1.8",
"regenerator-runtime": "^0.13.3",
"reselect": "^4.0.0",
"styled-components": "^5.1.0",
@ -109,22 +117,24 @@
"build:stats": "webpack --config webpack.prod.js --profile --json > stats.json",
"build:analyze-bundle": "ANALYZE_BUNDLE=1 yarn run build",
"build:dev": "FR_BASE_URL='http://localhost:5000${path}' EN_BASE_URL='http://localhost:5001${path}' yarn run build",
"clean": "rimraf dist node_modules source/data",
"clean": "rimraf dist node_modules 'source/data/!(versement-transport.json)'",
"test": "yarn test:file \"./{,!(node_modules)/**/}!(webpack).test.{js,ts}\"",
"test:file": "yarn mocha-webpack --webpack-config ./webpack.dev.js --include test/componentTestSetup.js --require mock-local-storage --require test/helpers/browser.js",
"test:bundlesize": "bundlesize",
"test:dev-e2e:publicode": "cypress open --browser chromium --config baseUrl=http://localhost:8080/publicodes,integrationFolder=cypress/integration/publi.codes",
"test:dev-e2e:publicodes": "cypress open --browser chromium --config baseUrl=http://localhost:8080/publicodes,integrationFolder=cypress/integration/publi.codes",
"test:dev-e2e:mon-entreprise": "cypress open --browser chromium",
"test:dev-e2e:mycompanyinfrance": "cypress open --browser chromium --config baseUrl=http://localhost:8080/infrance",
"test:dev-e2e:mycompanyinfrance": "cypress open --browser chromium --config baseUrl=http://localhost:8080/infrance,integrationFolder=cypress/integration/mon-entreprise/english --env language=en",
"test:record-http-calls:mon-entreprise": "cypress run --env record_http=",
"i18n:rules:check": "node scripts/i18n/check-missing-rule-translation.js",
"i18n:rules:translate": "node scripts/i18n/translate-rules.js",
"i18n:ui:check": "yarn run i18next -c scripts/i18n/parser.config.js && node scripts/i18n/check-missing-UI-translation",
"i18n:ui:translate": "rm -rf source/locales/static-analysis-fr.json && yarn run i18next -c scripts/i18n/parser.config.js && node scripts/i18n/translate-ui.js",
"start": "node dev-server.js",
"serve:dev": "yarn run serve:dev:mon-entreprise & yarn run serve:dev:mycompanyinfrance & yarn run serve:dev:publicodes",
"serve:dev": "concurrently -k \"yarn run serve:dev:mon-entreprise\" \"yarn run serve:dev:mycompanyinfrance & yarn run serve:dev:publicodes\"",
"serve:dev:mon-entreprise": "PORT=5000 serve --config serve.mon-entreprise.json --no-clipboard",
"serve:dev:publicodes": "PORT=5002 serve --config serve.publicodes.json --no-clipboard",
"serve:dev:mycompanyinfrance": "PORT=5001 serve --config serve.infrance.json --no-clipboard",
"publish:publicodes": "yarn run lint && yarn run "
"algolia:update": "node scripts/search/update-data.js",
"algolia:clean": "node scripts/search/clean.js"
}
}

View File

@ -247,7 +247,14 @@ async function main() {
const visitesMois = await fetchMonthlyVisits()
const satisfaction = uniformiseData(
flattenPage(await fetchApi(buildSatisfactionQuery()))
)
).map((page) => {
// eslint-disable-next-line no-unused-vars
const { date, ...satisfactionPage } = {
month: new Date(new Date(page.date).setDate(1)),
...page,
}
return satisfactionPage
})
const retoursUtilisateurs = await fetchUserFeedbackIssues()
writeInDataDir('stats.json', {
visitesJours,

View File

@ -0,0 +1,10 @@
const fs = require('fs')
const packages = JSON.parse(fs.readFileSync(`${__dirname}/../package.json`))
console.log('cypress@' + packages.devDependencies.cypress)
for (const key of Object.keys(packages.devDependencies).filter(
(k) => k !== 'cypress' && k.startsWith('cypress')
)) {
console.log(key + '@' + packages.devDependencies[key])
}

View File

@ -5,28 +5,34 @@ var fs = require('fs')
const {
getUiMissingTranslations,
UiTranslationPath,
UiOriginalTranslationPath,
fetchTranslation,
} = require('./utils')
const missingTranslations = getUiMissingTranslations()
let translatedKeys = parse(fs.readFileSync(UiTranslationPath, 'utf-8'))
Object.entries(missingTranslations)
.map(([key, value]) => [key, value === 'NO_TRANSLATION' ? key : value])
.forEach(async ([key, value]) => {
try {
const translation = await fetchTranslation(value)
translatedKeys = R.assocPath(
key.split(/(?<=[A-zÀ-ü0-9])\.(?=[A-zÀ-ü0-9])/),
translation,
translatedKeys
)
fs.writeFileSync(
UiTranslationPath,
stringify(translatedKeys, { sortMapEntries: true })
)
} catch (e) {
console.log(e)
}
})
;(async function () {
const missingTranslations = getUiMissingTranslations()
let originalKeys = parse(fs.readFileSync(UiOriginalTranslationPath, 'utf-8'))
let translatedKeys = parse(fs.readFileSync(UiTranslationPath, 'utf-8'))
await Promise.all(
Object.entries(missingTranslations)
.map(([key, value]) => [key, value === 'NO_TRANSLATION' ? key : value])
.map(async ([key, originalTranslation]) => {
try {
const translation = await fetchTranslation(originalTranslation)
const path = key.split(/(?<=[A-zÀ-ü0-9])\.(?=[A-zÀ-ü0-9])/)
translatedKeys = R.assocPath(path, translation, translatedKeys)
originalKeys = R.assocPath(path, originalTranslation, originalKeys)
} catch (e) {
console.log(e)
}
})
)
fs.writeFileSync(
UiTranslationPath,
stringify(translatedKeys, { sortMapEntries: true })
)
fs.writeFileSync(
UiOriginalTranslationPath,
stringify(originalKeys, { sortMapEntries: true })
)
})()

View File

@ -4,11 +4,13 @@ var fs = require('fs')
var path = require('path')
let R = require('ramda')
var querystring = require('querystring')
require('../../../modele-social/build')
let rules = require('../../../modele-social')
let { parse } = require('yaml')
let rulesTranslationPath = path.resolve('source/locales/rules-en.yaml')
let UiTranslationPath = path.resolve('source/locales/ui-en.yaml')
let UiOriginalTranslationPath = path.resolve('source/locales/ui-fr.yaml')
let attributesToTranslate = [
'titre',
@ -95,14 +97,24 @@ const getUiMissingTranslations = () => {
'source/locales/static-analysis-fr.json'
))
const translatedKeys = parse(fs.readFileSync(UiTranslationPath, 'utf-8'))
const originalKeys = parse(
fs.readFileSync(UiOriginalTranslationPath, 'utf-8')
)
const missingTranslations = Object.entries(staticKeys)
.filter(([key, valueInSource]) => {
if (key.match(/^\{.*\}$/) || valueInSource === 'NO_TRANSLATION') {
return false
}
const keys = key.split(/(?<=[A-zÀ-ü0-9])\.(?=[A-zÀ-ü0-9])/)
const isNewKey = !R.path(keys, translatedKeys)
const isInvalidatedKey = R.path(keys, originalKeys) !== valueInSource
return isNewKey || isInvalidatedKey
}, staticKeys)
.map(([key]) => key)
const missingTranslations = Object.keys(staticKeys).filter((key) => {
if (key.match(/^\{.*\}$/)) {
return false
}
const keys = key.split(/(?<=[A-zÀ-ü0-9])\.(?=[A-zÀ-ü0-9])/)
return !R.path(keys, translatedKeys)
}, staticKeys)
return R.pick(missingTranslations, staticKeys)
}
@ -131,4 +143,5 @@ module.exports = {
getUiMissingTranslations,
rulesTranslationPath,
UiTranslationPath,
UiOriginalTranslationPath,
}

View File

@ -0,0 +1,17 @@
require('dotenv').config()
const algoliasearch = require('algoliasearch')
const {
ALGOLIA_APP_ID,
ALGOLIA_ADMIN_KEY,
ALGOLIA_INDEX_PREFIX = '',
} = process.env
const client = algoliasearch(ALGOLIA_APP_ID, ALGOLIA_ADMIN_KEY)
const rulesIndex = client.initIndex(`${ALGOLIA_INDEX_PREFIX}rules`)
const simulateursIndex = client.initIndex(`${ALGOLIA_INDEX_PREFIX}simulateurs`)
rulesIndex.delete()
simulateursIndex.delete()

View File

@ -0,0 +1,157 @@
require('dotenv').config()
const algoliasearch = require('algoliasearch')
const rawRules = require('modele-social')
const rules = require('publicodes').parsePublicodes(rawRules)
const getSimulationData = require('../../source/pages/Simulateurs/metadata-src')
const {
ALGOLIA_APP_ID,
ALGOLIA_ADMIN_KEY,
ALGOLIA_INDEX_PREFIX = '',
} = process.env
const client = algoliasearch(ALGOLIA_APP_ID, ALGOLIA_ADMIN_KEY)
const rulesIndex = client.initIndex(`${ALGOLIA_INDEX_PREFIX}rules`)
const simulateursIndex = client.initIndex(`${ALGOLIA_INDEX_PREFIX}simulateurs`)
const formatRulesToAlgolia = (rules) =>
Object.entries(rules)
.map(([n, rule]) => {
if (!rule) return
const path = n.split(' . ')
const {
title,
rawNode: { icônes = '', description, acronyme, résumé },
} = rule
const ruleName = `${title} ${' ' + icônes}`.trim()
const namespace = path.slice(0, -1)
return {
objectID: n,
path,
ruleName,
namespace,
pathDepth: path.length,
acronyme: acronyme,
titre: title,
icone: icônes,
description: description || résumé,
}
})
.filter(Boolean)
const formatSimulationDataToAlgolia = (simulations) =>
Object.entries(simulations).map(([id, simulation]) => ({
...simulation,
objectID: id,
title: simulation.title || simulation.shortName || simulation.meta.title,
tooltip: simulation.tooltip || '',
description: simulation.meta?.description,
}))
;(async function () {
try {
console.log('Algolia update START')
console.log('Clearing: rules')
await rulesIndex.clearObjects().wait()
console.log('Configure index: rules')
await rulesIndex
.setSettings({
// Parameters are documented on Algolia website https://www.algolia.com/doc/api-reference/api-parameters/
minWordSizefor1Typo: 4,
minWordSizefor2Typos: 8,
hitsPerPage: 20,
maxValuesPerFacet: 100,
attributesToIndex: ['unordered(ruleName)', 'unordered(namespace)'],
numericAttributesToIndex: null,
attributesToRetrieve: null,
unretrievableAttributes: null,
optionalWords: null,
attributesForFaceting: null,
attributesToSnippet: null,
attributesToHighlight: ['ruleName', 'namespace'],
paginationLimitedTo: 1000,
attributeForDistinct: null,
exactOnSingleWordQuery: 'attribute',
ranking: [
'typo',
'geo',
'words',
'filters',
'proximity',
'attribute',
'exact',
'custom',
],
customRanking: ['asc(pathDepth)'],
separatorsToIndex: '',
removeWordsIfNoResults: 'none',
queryType: 'prefixLast',
highlightPreTag: '<em>',
highlightPostTag: '</em>',
snippetEllipsisText: '',
alternativesAsExact: ['ignorePlurals', 'singleWordSynonym'],
})
.wait()
console.log('Uploading: rules')
await rulesIndex.saveObjects(formatRulesToAlgolia(rules)).wait()
console.log('Clearing: simulateurs')
await simulateursIndex.clearObjects().wait()
console.log('Configure index: simulateurs')
await simulateursIndex
.setSettings({
// Parameters are documented on Algolia website https://www.algolia.com/doc/api-reference/api-parameters/
minWordSizefor1Typo: 4,
minWordSizefor2Typos: 8,
hitsPerPage: 20,
maxValuesPerFacet: 100,
attributesToIndex: [
'unordered(title)',
'unordered(tooltip)',
'unordered(description)',
],
numericAttributesToIndex: null,
attributesToRetrieve: null,
unretrievableAttributes: null,
optionalWords: null,
attributesForFaceting: null,
attributesToSnippet: null,
attributesToHighlight: ['title'],
paginationLimitedTo: 1000,
attributeForDistinct: null,
exactOnSingleWordQuery: 'attribute',
ranking: [
'typo',
'geo',
'words',
'filters',
'proximity',
'attribute',
'exact',
'custom',
],
customRanking: null,
separatorsToIndex: '',
removeWordsIfNoResults: 'none',
queryType: 'prefixLast',
highlightPreTag: '<em>',
highlightPostTag: '</em>',
snippetEllipsisText: '',
alternativesAsExact: ['ignorePlurals', 'singleWordSynonym'],
})
.wait()
console.log('Updloading: simulateurs')
await simulateursIndex
.saveObjects(formatSimulationDataToAlgolia(getSimulationData()))
.wait()
console.log('Algolia update DONE')
} catch (e) {
console.log(JSON.stringify(e, null, 2))
}
})()

View File

@ -1,2 +1,2 @@
ignorePatterns:
- smarttag.js
ignorePatterns:
- smarttag.js

View File

@ -73,9 +73,7 @@ export function createTracker(siteId?: string, doNotTrack = false) {
}
constructor(options: { language: 'fr' | 'en' }) {
super({ site })
this.site[
INDICATOR.SITE.LANGAGE
] = `[${options.language}]` as CustomSiteIndicator[1]
this.site[INDICATOR.SITE.LANGAGE] = `[${options.language}]`
if (process.env.NODE_ENV === 'production' && doNotTrack) {
this.privacy.setVisitorOptout()
} else {

View File

@ -4,7 +4,7 @@ import { ATTracker, Log } from './Tracker'
export const TrackingContext = createContext<ATTracker>(new Log())
// From https://github.com/nclsmitchell/at-internet
function toAtString(string: string): string {
export function toAtString(string: string): string {
string = string.replace(/ /g, '_').toLowerCase()
string = string.replace(/[\300-\306]|[\340-\346]/g, 'a')
string = string.replace(/[\310-\313]|[\350-\353]/g, 'e')

View File

@ -82,7 +82,8 @@
: null
}
var c = this,
b = /(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g,
b =
/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g,
d = RegExp(
'^[\\x20\\t\\r\\n\\f]+|((?:^|[^\\\\])(?:\\\\.)*)[\\x20\\t\\r\\n\\f]+$',
'g'
@ -1506,12 +1507,13 @@
'undefined' !== typeof window &&
'undefined' !== typeof window.location
) {
h = (c.getConfig('urlPropertyQueryString')
? window.location.href
: window.location.protocol +
'//' +
window.location.host +
window.location.pathname
h = (
c.getConfig('urlPropertyQueryString')
? window.location.href
: window.location.protocol +
'//' +
window.location.host +
window.location.pathname
)
.replace(/[<>]/g, '')
.substring(0, 1600)
@ -1521,9 +1523,10 @@
c.setContext('page', l)
c.setParam('page_url', h, {
permanent: !0,
hitType: 'page click publisher selfPromotion onSiteAdsClick onSiteAdsImpression InternalSearch mvtesting richmedia'.split(
' '
),
hitType:
'page click publisher selfPromotion onSiteAdsClick onSiteAdsImpression InternalSearch mvtesting richmedia'.split(
' '
),
})
}
c.plugins.init()
@ -1641,8 +1644,13 @@
},
c = { search: 's', content: 'c' }
this.atMedium = 'sl'
this.atTerm = this.atNetwork = this.atVariant = this.atCreation = this.atPlatform = this.atCampaign =
''
this.atTerm =
this.atNetwork =
this.atVariant =
this.atCreation =
this.atPlatform =
this.atCampaign =
''
this.format = function () {
var a = 'sec',
h = b(this.atCampaign),
@ -1693,8 +1701,15 @@
this.Email = function () {
var e = { acquisition: 'erec', retention: 'epr', promotion: 'es' }
this.atMedium = 'email'
this.atSendTime = this.atRecipientList = this.atRecipientId = this.atLink = this.atSendDate = this.atCreation = this.atCampaign = this.atEmailtype =
''
this.atSendTime =
this.atRecipientList =
this.atRecipientId =
this.atLink =
this.atSendDate =
this.atCreation =
this.atCampaign =
this.atEmailtype =
''
this.format = function () {
var a = e[this.atEmailtype] || e.promotion,
c = b(this.atCampaign),
@ -1762,8 +1777,13 @@
}
this.Affiliate = function () {
this.atMedium = 'affiliate'
this.atVariant = this.atCreation = this.atFormat = this.atIdentifier = this.atType = this.atCampaign =
''
this.atVariant =
this.atCreation =
this.atFormat =
this.atIdentifier =
this.atType =
this.atCampaign =
''
this.format = function () {
var a = 'al',
f = b(this.atCampaign),
@ -1813,8 +1833,14 @@
}
this.Display = function () {
this.atMedium = 'display'
this.atDetailPlacement = this.atGeneralPlacement = this.atChannel = this.atFormat = this.atVariant = this.atCreation = this.atCampaign =
''
this.atDetailPlacement =
this.atGeneralPlacement =
this.atChannel =
this.atFormat =
this.atVariant =
this.atCreation =
this.atCampaign =
''
this.format = function () {
var a = 'ad',
f = b(this.atCampaign),
@ -1885,8 +1911,13 @@
}
}
this.Custom = function () {
this.atCustom4 = this.atCustom3 = this.atCustom2 = this.atCustom1 = this.atCampaign = this.atMedium =
''
this.atCustom4 =
this.atCustom3 =
this.atCustom2 =
this.atCustom1 =
this.atCampaign =
this.atMedium =
''
this.format = function () {
var a = ''
;/\d+$/.test(this.atMedium) && (a = /\d+$/.exec(this.atMedium)[0])

View File

@ -11,3 +11,18 @@
display: flex;
flex-direction: column;
}
/* Classe pour permettre la présence de labels pour les lecteur d'ecran
* Source: https://a11y-guidelines.orange.com/en/web/components-examples/accessible-hiding/
* */
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap; /* added line */
border: 0;
}

View File

@ -1,23 +1,20 @@
import * as Sentry from '@sentry/browser'
import Footer from 'Components/layout/Footer/Footer'
import Header from 'Components/layout/Header'
import Route404 from 'Components/Route404'
import 'Components/ui/index.css'
import {
engineOptions,
engineFactory,
EngineProvider,
Rules,
SituationProvider,
} from 'Components/utils/EngineContext'
import { SitePathsContext } from 'Components/utils/SitePathsContext'
import 'iframe-resizer'
import { DottedName } from 'modele-social'
import Engine, { Rule } from 'publicodes'
import { useContext, useMemo } from 'react'
import { Helmet } from 'react-helmet'
import { useTranslation } from 'react-i18next'
import { useSelector } from 'react-redux'
import { Route, Switch } from 'react-router-dom'
import createSentryMiddleware from 'redux-sentry-middleware'
import { Redirect, Route, Switch } from 'react-router-dom'
import {
configSituationSelector,
situationSelector,
@ -46,45 +43,19 @@ import {
} from './storage/persistInFranceApp'
import { setupSimulationPersistence } from './storage/persistSimulation'
if (process.env.NODE_ENV === 'production') {
let branch: string | undefined = process.env.GITHUB_REF?.split('/')?.slice(
-1
)?.[0]
if (branch === 'merge') {
branch = process.env.GITHUB_HEAD_REF
}
const release =
branch && `${branch}-` + process.env.GITHUB_SHA?.substring(0, 7)
const dsn = 'https://9051375f856646d694943532caf2b45f@sentry.data.gouv.fr/18'
Sentry.init({ dsn, release })
if (branch && branch !== 'master') {
console.log(
` Vous êtes sur la branche : %c${branch}`,
'font-weight: bold; text-decoration: underline;'
)
}
}
const middlewares = [createSentryMiddleware(Sentry as any)]
type RootProps = {
basename: ProviderProps['basename']
rules: Record<DottedName, Rule>
rules: Rules
}
export default function Root({ basename, rules }: RootProps) {
const { language } = useTranslation().i18n
const paths = constructLocalizedSitePath(language as 'fr' | 'en')
const engine = useMemo(() => new Engine(rules, engineOptions), [
rules,
engineOptions,
])
const engine = useMemo(() => engineFactory(rules), [rules])
return (
<Provider
basename={basename}
sitePaths={paths}
reduxMiddlewares={middlewares}
onStoreCreated={(store) => {
setupInFranceAppPersistence(store)
setupSimulationPersistence(store)
@ -114,6 +85,15 @@ const Router = () => {
<SituationProvider situation={situation}>
<Switch>
<Route exact path="/" component={Landing} />
{/* Removes trailing slashes */}
<Route
path={'/:url*(/+)'}
exact
strict
render={({ location }) => (
<Redirect to={location.pathname.replace(/\/+$/, location.search)} />
)}
/>
<Route path="/iframes" component={Iframes} />
<Route component={App} />
</Switch>

View File

@ -1,4 +1,6 @@
import { ErrorBoundary } from '@sentry/react'
import { ThemeColorsProvider } from 'Components/utils/colors'
import { DisableAnimationOnPrintProvider } from 'Components/utils/DisableAnimationContext'
import { SitePathProvider, SitePaths } from 'Components/utils/SitePathsContext'
import { createBrowserHistory } from 'history'
import i18next from 'i18next'
@ -18,6 +20,7 @@ import {
// ATInternet Tracking
import { TrackingContext } from './ATInternetTracking'
import { createTracker } from './ATInternetTracking/Tracker'
import logo from './static/images/logo.svg'
import safeLocalStorage from './storage/safeLocalStorage'
import { inIframe } from './utils'
@ -118,29 +121,55 @@ export default function Provider({
) ?? undefined
return (
// If IE < 11 display nothing
<ReduxProvider store={store}>
<ThemeColorsProvider
color={iframeCouleur && decodeURIComponent(iframeCouleur)}
>
<TrackingContext.Provider
value={
new ATTracker({
language: i18next.language as 'fr' | 'en',
})
}
<ErrorBoundary
showDialog
fallback={
<>
<div className="ui__ container">
<img
src={logo}
style={{ maxWidth: '200px', width: '100%', marginTop: '1rem' }}
></img>
<h1>Une erreur est survenue</h1>
<p>
L'équipe technique de mon-entreprise.fr a été automatiquement
prévenue. Vous pouvez également nous contacter directement à
l'adresse{' '}
<a href="mailto:contact@mon-entreprise.beta.gouv.fr">
contact@mon-entreprise.beta.gouv.fr
</a>{' '}
si vous souhaitez partager une remarque.
</p>
<p>Veuillez nous excuser pour la gêne occasionnée.</p>
</div>
</>
}
>
<ReduxProvider store={store}>
<ThemeColorsProvider
color={iframeCouleur && decodeURIComponent(iframeCouleur)}
>
<SiteNameContext.Provider value={basename}>
<SitePathProvider value={sitePaths}>
<I18nextProvider i18n={i18next}>
<Router history={history}>
<>{children}</>
</Router>
</I18nextProvider>
</SitePathProvider>
</SiteNameContext.Provider>
</TrackingContext.Provider>
</ThemeColorsProvider>
</ReduxProvider>
<TrackingContext.Provider
value={
new ATTracker({
language: i18next.language as 'fr' | 'en',
})
}
>
<DisableAnimationOnPrintProvider>
<SiteNameContext.Provider value={basename}>
<SitePathProvider value={sitePaths}>
<I18nextProvider i18n={i18next}>
<Router history={history}>
<>{children}</>
</Router>
</I18nextProvider>
</SitePathProvider>
</SiteNameContext.Provider>
</DisableAnimationOnPrintProvider>
</TrackingContext.Provider>
</ThemeColorsProvider>
</ReduxProvider>
</ErrorBoundary>
)
}

View File

@ -85,17 +85,22 @@ const fetchCommuneDetails = async function (codeCommune: string) {
export const useSetEntreprise = () => {
const dispatch = useDispatch()
return async (siren: string) => {
dispatch(setSiren(siren))
const companyDetails = await fetchCompanyDetails(siren)
if (companyDetails === null) {
return
}
dispatch(setSiren(siren))
dispatch(
setCompanyDetails(
companyDetails.categorie_juridique,
companyDetails.date_creation
)
)
const communeDetails: ApiCommuneJson = await fetchCommuneDetails(
companyDetails.etablissement_siege.code_commune
)
dispatch(addCommuneDetails(communeDetails))
if (companyDetails.etablissement_siege) {
const communeDetails: ApiCommuneJson = await fetchCommuneDetails(
companyDetails.etablissement_siege.code_commune
)
dispatch(addCommuneDetails(communeDetails))
}
}
}

View File

@ -2,11 +2,13 @@ const isSIREN = (input: string) => /^[\s]*([\d][\s]*){9}$/.exec(input)
const isSIRET = (input: string) => /^[\s]*([\d][\s]*){14}$/.exec(input)
export async function fetchCompanyDetails(siren: string) {
// Le paramètre `statut_diffusion` filtre les SIREN non diffusibles, cf.
// https://github.com/betagouv/mon-entreprise/issues/1399#issuecomment-770736525
const response = await fetch(
`https://entreprise.data.gouv.fr/api/sirene/v3/unites_legales/${siren.replace(
/[\s]/g,
''
)}`
)}?statut_diffusion=O`
)
if (!response.ok) {
return null

Some files were not shown because too many files have changed in this diff Show More