Skip to content

add motifs.sectorisation_level to allow desectorisation

Vincent Agnano requested to merge feature/desectorise-motif into master

Created by: adipasquale

Changements

Cette PR introduit un changement conceptuel assez profond de la sectorisation.

Actuellement la secto est activée ou désactivée à l'échelle d'un département via une variable d'env. Sur les départements activés, les règles d'attribution des secteurs (à l'agent ou à l'orga) s'appliquent à tous les motifs.

Pour rappel, un secteur =

  • un ensemble de communes (ou de rues)
  • attribuées à
  • un ensemble d'organisations entières OU d'agents spécifiques

Dans cette PR on introduit un sectorisation_level au niveau des motifs qui peut avoir trois valeurs :

  • departement : les créneaux proposés pour ce motif seront dispos pour tout le département
  • organisation: les créneaux proposés pour ce motif seront dispos uniquement pour les secteurs attribués à des orgas entières
  • agent : les créneaux proposés pour ce motif seront dispos uniquement pour les secteurs attribués à des agents spécifiques

On supprime donc le besoin de la variable d'environnement et on permet plus d'autonomie aux départements souhaitant se lancer. C'est aussi moins compliqué qu'aujourd'hui que de commencer à sectoriser, puisqu'on peut sectoriser uniquement un motif, sans que d'un coup les autres ne soient plus accessibles par défaut

Implémentation

Premier commit de refacto préliminaire des specs de geo_search

  • split en deux fichiers . un de specs plus ou moins unitaires, un de specs d'integration avec des scenarios plus complets et plusieurs méthodes testées
  • inlining de la majeure partie des contextes, ça devrait te plaire @yaf ! je commence à me convertir.

Contextualisations

J'ai rajouté pas mal d'infos contextuelles pour aider à la configuration :

  • dans les vues motifs#index, motifs#edit et sectors#show
  • dans les vues motifs le but est d'avertir s'il existe des secteurs correspondants au niveau choisi. C'est à dire que pour un motif sectorisé niveau orga on va afficher le nombre de secteurs attribués à l'orga du motif. Pour un motif sectorisé niveau agent, on va afficher le nombre de secteurs attribués à des agents du service du motif.
  • dans les vues secteurs, c'est l'opposé, on veut informer sur l'existence de motifs correspondants au secteur affiché.

Migration

Reduction du scope :

## en prod:

irb(main):010:0> ENV["SECTORISATION_ENABLED_DEPARTMENT_LIST"].split
=> ["62", "77", "12"]

irb(main):008:0> SectorAttribution.where(organisation: Organisation.where(departement: ENV["SECTORISATION_ENABLED_DEPARTMENT_LIST"].split)).level_agent.count
=> 0

## sur demo

irb(main):002:0> ENV["SECTORISATION_ENABLED_DEPARTMENT_LIST"]&.split
=> nil

Donc pour bien migrer il suffit de :

  • pour les départements où la secto est desactivée : on passe tous les motifs en sectorisation_level = departement
  • pour les départements où la secto est activée : on passe tous les motifs en sectorisation_level = organisation

après simulation de migration sur la prod :

pp Motif.includes(:organisation).to_a.group_by { _1.organisation.departement }.transform_values{ |motifs| motifs.group_by(&:sectorisation_level).transform_valu
es { _1.count } }; nil

{"77"=>{"organisation"=>478},
 "62"=>{"organisation"=>99},
 "12"=>{"organisation"=>34},
 "14"=>{"departement"=>32},
 "64"=>{"departement"=>89},
 "55"=>{"departement"=>34},
 "26"=>{"departement"=>37},
 "80"=>{"departement"=>255},
 "92"=>{"departement"=>32},
 "22"=>{"departement"=>52},
 "33"=>{"departement"=>1},
 "86"=>{"departement"=>40},
 "08"=>{"departement"=>1},
 "95"=>{"departement"=>2}}

puis j'ai testé des recherches usagers dans un dpt sectorisé, et dans un autre non sectorisé ça correspond aux résultats en prod

Documentation

J'ai adapté la doc : https://doc.rdv-solidarites.fr/sectorisation-geographique

Review Apps Tests

il faut s'accrocher pour tester faut avoir le contexte bien en tete pour detecter des pbs :)

Voici un superbe schéma de l'état sur la review app. J'ai créé et découpé paris en deux secteurs nord et sud associés à deux orgas différentes. j'ai aussi créé des sous-secteurs attribués à des agents pour quelques départements, avec certains motifs uniquement sectorisés à l'agent.

Screenshot_2020-11-26_at_15 50 19

On peut donc faire des recherches usagers avec ce genre d'adresses :

  • rue du louvre (2e, nord)
  • rue des pyrénées (20e, nord)
  • métro trocadéro (16e nord)
  • pernéty (14e sud)
  • place d'italie (13e sud)

je n'ai pas vu d'erreurs pour l'instant

Merge request reports