✨ Ajoute la recherche par code postal pour les communes
parent
168e4105cb
commit
c2a6dce3bf
|
@ -1,6 +1,6 @@
|
|||
import Input from 'Components/conversation/Input'
|
||||
import Question from 'Components/conversation/Question'
|
||||
import SelectGéo from 'Components/conversation/select/SelectGeo'
|
||||
import SelectCommune from 'Components/conversation/select/SelectCommune'
|
||||
import SelectAtmp from 'Components/conversation/select/SelectTauxRisque'
|
||||
import CurrencyInput from 'Components/CurrencyInput/CurrencyInput'
|
||||
import PercentageField from 'Components/PercentageField'
|
||||
|
@ -66,9 +66,9 @@ export default function RuleInput({
|
|||
/>
|
||||
)
|
||||
}
|
||||
if (rule.API && rule.API === 'géo')
|
||||
return <SelectGéo {...commonProps} onSubmit={onSubmit} />
|
||||
if (rule.API) throw new Error("Le seul API implémenté est l'API géo")
|
||||
if (rule.API && rule.API === 'commune')
|
||||
return <SelectCommune {...commonProps} onSubmit={onSubmit} />
|
||||
if (rule.API) throw new Error("Les seules API implémentées sont 'commune'")
|
||||
|
||||
if (rule.dottedName == 'contrat salarié . ATMP . taux collectif ATMP')
|
||||
return <SelectAtmp {...commonProps} onSubmit={onSubmit} />
|
||||
|
|
|
@ -14,20 +14,30 @@ async function tauxVersementTransport(codeCommune) {
|
|||
const json = await response.json()
|
||||
return json
|
||||
}
|
||||
|
||||
function formatCommune(value) {
|
||||
return value && `${value.nom} (${value.codePostal})`
|
||||
}
|
||||
async function searchCommunes(input) {
|
||||
const number = input.match(/[\d]+/)?.join('') ?? ''
|
||||
const text = input.match(/[^\d]+/)?.join(' ') ?? ''
|
||||
const response = await fetch(
|
||||
`https://geo.api.gouv.fr/communes?nom=${input}&fields=nom,code,departement,region&boost=population`
|
||||
`https://geo.api.gouv.fr/communes?fields=nom,code,departement,region,codesPostaux${
|
||||
text ? `&nom=${text}` : ''
|
||||
}${number.match(/[\d]{5}/) ? `&codePostal=${number}` : ''}&boost=population`
|
||||
)
|
||||
if (!response.ok) {
|
||||
return null
|
||||
}
|
||||
const json = await response.json()
|
||||
return json
|
||||
return json.flatMap(({ codesPostaux, ...commune }) =>
|
||||
codesPostaux
|
||||
.map(codePostal => ({ ...commune, codePostal }))
|
||||
.filter(({ codePostal }) => codePostal.includes(number))
|
||||
)
|
||||
}
|
||||
|
||||
export default function Select({ onChange, onSubmit, value }) {
|
||||
const [name, setName] = useState(value?.nom)
|
||||
const [name, setName] = useState(formatCommune(value))
|
||||
const [searchResults, setSearchResults] = useState()
|
||||
const [isLoading, setLoadingState] = useState(false)
|
||||
|
||||
|
@ -67,7 +77,7 @@ export default function Select({ onChange, onSubmit, value }) {
|
|||
.finally(() => {
|
||||
onSubmit() // eslint-disable-line no-console
|
||||
setSearchResults(null)
|
||||
setName(option.nom)
|
||||
setName(formatCommune(option))
|
||||
})
|
||||
}
|
||||
const noResult = !isLoading && searchResults && searchResults.length === 0
|
||||
|
@ -105,11 +115,11 @@ export default function Select({ onChange, onSubmit, value }) {
|
|||
<Animate.fromTop>
|
||||
{searchResults &&
|
||||
searchResults.map(result => {
|
||||
const { nom, departement } = result
|
||||
const nom = formatCommune(result)
|
||||
return (
|
||||
<button
|
||||
onClick={() => submitOnChange(result)}
|
||||
key={nom + departement?.nom}
|
||||
key={nom}
|
||||
css={`
|
||||
text-align: left;
|
||||
display: block;
|
||||
|
@ -130,7 +140,7 @@ export default function Select({ onChange, onSubmit, value }) {
|
|||
padding: 0.6rem;
|
||||
`}
|
||||
>
|
||||
{nom + ` (${departement?.nom})`}
|
||||
{nom}
|
||||
</button>
|
||||
)
|
||||
})}
|
|
@ -2233,7 +2233,7 @@ contrat salarié . lodeom . secteurs d'activité:
|
|||
titre.fr: secteurs d'activité
|
||||
contrat salarié . lodeom . zone un:
|
||||
titre.en: Geographical area 1 (Guadeloupe, Martinique, Reunion Island, French Guiana)
|
||||
titre.fr: Zone géographique 1 (Guadeloupe, Martinique, La Réunion, Guyane)
|
||||
titre.fr: Zone communegraphique 1 (Guadeloupe, Martinique, La Réunion, Guyane)
|
||||
contrat salarié . lodeom . écart au plafond de l'assiette:
|
||||
titre.en: deviation from the base ceiling
|
||||
titre.fr: écart au plafond de l'assiette
|
||||
|
@ -4808,10 +4808,10 @@ entreprise . rattachée à la CIPAV:
|
|||
Les auto-entrepreneurs exerçant une activité de profession libérale
|
||||
règlementée sont affiliés pour leur assurance retraite à la Cipav. Ces
|
||||
professions libérales règlementées sont : architectes, architectes
|
||||
d’intérieur, économistes de la construction, géomètres, ingénieurs-conseils,
|
||||
maîtres d’oeuvre, psychologues, psychothérapeutes, ostéopathes,
|
||||
ergothérapeutes, chiropracteurs, diététiciens, artistes autres que les
|
||||
artistes-auteurs, experts devant les tribunaux, experts automobiles,
|
||||
d’intérieur, économistes de la construction, communemètres,
|
||||
ingénieurs-conseils, maîtres d’oeuvre, psychologues, psychothérapeutes,
|
||||
ostéopathes, ergothérapeutes, chiropracteurs, diététiciens, artistes autres
|
||||
que les artistes-auteurs, experts devant les tribunaux, experts automobiles,
|
||||
mandataires judiciaires à la protection des majeurs, courtiers en valeur,
|
||||
guides-conférenciers, guides de haute montagne, accompagnateurs de moyenne
|
||||
montagne et moniteurs de ski.
|
||||
|
|
|
@ -481,7 +481,7 @@ entreprise . auto entreprise impossible:
|
|||
Lorsqu'une entreprise dispose de plusieurs établissements, certaines cotisations sont
|
||||
calculées à l'échelle de l'établissement et sont fonction de règlementations locales.
|
||||
question: Dans quelle commune l'établissement est-il implanté ?
|
||||
API: géo
|
||||
API: commune
|
||||
par défaut:
|
||||
code: 29019
|
||||
nom: Non renseignée
|
||||
|
|
|
@ -75,10 +75,22 @@ function FormPDF({ fields, title, description }) {
|
|||
{fields.map(field => (
|
||||
<View style={styles.field} key={field.dottedName} wrap={false}>
|
||||
{field.type === 'groupe' ? (
|
||||
<Text style={styles.subtitle}>{field.title}</Text>
|
||||
<>
|
||||
<Text style={styles.subtitle}>
|
||||
{field.title}{' '}
|
||||
{field.note && (
|
||||
<Text style={styles.fieldNumber}>({field.note})</Text>
|
||||
)}
|
||||
</Text>
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
<Text style={styles.name}>{field.question ?? field.title}</Text>
|
||||
<Text style={styles.name}>
|
||||
{field.question ?? field.title}{' '}
|
||||
{field.note && (
|
||||
<Text style={styles.fieldNumber}>({field.note})</Text>
|
||||
)}
|
||||
</Text>
|
||||
{field.nodeValue != null && (
|
||||
<Text style={styles.value}>{formatValue(field)}</Text>
|
||||
)}
|
||||
|
@ -108,6 +120,9 @@ const styles = StyleSheet.create({
|
|||
paddingBottom: 65,
|
||||
paddingHorizontal: 35
|
||||
},
|
||||
fieldNumber: {
|
||||
opacity: 0.7
|
||||
},
|
||||
title: {
|
||||
fontSize: 20,
|
||||
marginBottom: 20,
|
||||
|
|
|
@ -2,18 +2,25 @@ coordonnées assuré:
|
|||
titre: Vos coordonnées
|
||||
type: groupe
|
||||
formule: oui
|
||||
note: 1
|
||||
coordonnées assuré . nom:
|
||||
type: texte
|
||||
note: 1.2
|
||||
coordonnées assuré . prénoms:
|
||||
type: texte
|
||||
note: 1.3
|
||||
coordonnées assuré . nationalité:
|
||||
type: texte
|
||||
note: 1.6
|
||||
coordonnées assuré . date de naissance:
|
||||
type: date
|
||||
note: 1.5
|
||||
coordonnées assuré . commune de naissance:
|
||||
API: géo
|
||||
API: commune
|
||||
note: 1.7
|
||||
coordonnées assuré . numéro de sécurité sociale:
|
||||
type: texte
|
||||
note: 1.1
|
||||
coordonnées assuré . organisme urssaf:
|
||||
type: texte
|
||||
description: >
|
||||
|
@ -22,24 +29,32 @@ coordonnées assuré . organisme urssaf:
|
|||
coordonnées assuré . domicile personnel:
|
||||
type: groupe
|
||||
formule: oui
|
||||
note: 1.8
|
||||
coordonnées assuré . domicile personnel . adresse:
|
||||
type: texte
|
||||
note: 1.9.1
|
||||
coordonnées assuré . domicile personnel . commune:
|
||||
API: géo
|
||||
API: commune
|
||||
note: 1.9.2 / 1.9.3
|
||||
|
||||
activité france:
|
||||
note: 4 / 4.1.2
|
||||
type: groupe
|
||||
formule: oui
|
||||
titre: Votre activité indépendante en France
|
||||
activité france . SIREN:
|
||||
note: 4.2
|
||||
type: texte
|
||||
activité france . nom:
|
||||
note: 4.3
|
||||
titre: Nom de l'entreprise
|
||||
type: texte
|
||||
activité france . adresse:
|
||||
note: 4.4.1
|
||||
type: texte
|
||||
activité france . commune:
|
||||
API: géo
|
||||
API: commune
|
||||
note:: 4.4.3 / 4.4.4
|
||||
|
||||
demande:
|
||||
question: Quelle demande souhaitez-vous effectuer ?
|
||||
|
@ -51,6 +66,7 @@ demande:
|
|||
- activité transfrontalière simultanée
|
||||
|
||||
demande . détachement:
|
||||
note: 3.3
|
||||
type: groupe
|
||||
formule: oui
|
||||
applicable si: demande = 'détachement'
|
||||
|
@ -100,6 +116,7 @@ demande . détachement . période . date de fin:
|
|||
type: date
|
||||
|
||||
demande . activité transfrontalière simultanée:
|
||||
note: 3.4
|
||||
applicable si: demande = 'activité transfrontalière simultanée'
|
||||
type: groupe
|
||||
formule: oui
|
||||
|
|
|
@ -37,7 +37,7 @@ const useFields = (engine: Engine<string>, fieldNames: Array<string>) => {
|
|||
return fields
|
||||
}
|
||||
|
||||
const VERSION = hash(JSON.stringify(Object.keys(formulaire)))
|
||||
const VERSION = hash(JSON.stringify(formulaire))
|
||||
function FormulairePublicodes({ engine }) {
|
||||
const [situation, setSituation] = usePersistingState(
|
||||
`formulaire-détachement:${VERSION}`,
|
||||
|
|
|
@ -488,7 +488,7 @@ synchronisation:
|
|||
description: Pour éviter trop de saisies à l'utilisateur, certaines informations sont
|
||||
récupérées à partir de ce que l'on appelle des API. Ce sont des services
|
||||
auxquels ont fait appel pour obtenir des informations sur un sujet précis.
|
||||
Par exemple, l'État français fournit gratuitement l'API géo, qui permet à
|
||||
Par exemple, l'État français fournit gratuitement l'API commune, qui permet à
|
||||
partir du nom d'une ville, d'obtenir son code postal, son département, la
|
||||
population etc.
|
||||
|
||||
|
|
Loading…
Reference in New Issue