diff --git a/app/models/Organisation.scala b/app/models/Organisation.scala index 010a257d6..efd8e1a30 100644 --- a/app/models/Organisation.scala +++ b/app/models/Organisation.scala @@ -55,22 +55,47 @@ object Organisation { def byId(id: Id): Option[Organisation] = byIdMap.get(id) val association: Organisation = Organisation("Association", "Association") + val bdf: Organisation = Organisation("BDF", "Banque de France") val cafId: Id = Organisation.Id("CAF") val caf: Organisation = Organisation(cafId, "CAF", "Caisse d’allocations familiales") val carsatId: Id = Organisation.Id("CARSAT") + + val carsat: Organisation = + Organisation(carsatId, "CARSAT", "Caisse d'assurance retraite et de la santé au travail") + + val ccas: Organisation = Organisation("CCAS", "Centre communal d'action sociale") val cpamId: Id = Organisation.Id("CPAM") val cpam: Organisation = Organisation(cpamId, "CPAM", "Caisse primaire d'assurance maladie") val cnavId: Id = Organisation.Id("CNAV") + val cnav: Organisation = Organisation(cnavId, "CNAV", "Caisse nationale d'assurance vieillesse") val cnamId: Id = Organisation.Id("CNAM") val cramId: Id = Organisation.Id("CRAM") + val cram: Organisation = Organisation(cramId, "CRAM", "Caisse régionale d'assurance maladie") val ddfipId: Id = Organisation.Id("DDFIP") + + val ddfip: Organisation = Organisation( + ddfipId, + "DDFIP", + "Direction départementale des Finances publiques" + ) + + val departement: Organisation = Organisation("Département", "Conseil départemental") val drfipId: Id = Organisation.Id("DRFIP") + + val drfip: Organisation = + Organisation(drfipId, "DRFIP", "Direction régionale des Finances publiques") + val franceServicesId: Id = Organisation.Id("MFS") val franceServices: Organisation = Organisation(franceServicesId, "FS", "France Services") + val mairie: Organisation = Organisation("Mairie", "Mairie") + val mdph: Organisation = Organisation("MDPH", "Maison départementale des personnes handicapées") + val missionLocale: Organisation = Organisation("Mission locale", "Mission locale") val msaId: Id = Organisation.Id("MSA") + val msa: Organisation = Organisation(msaId, "MSA", "Mutualité sociale agricole") val msap: Organisation = Organisation("MSAP", "Maison de services au public") val hopital: Organisation = Organisation("Hôpital", "Hôpital") val poleEmploiId: Id = Organisation.Id("Pôle emploi") + val poleEmploi: Organisation = Organisation(poleEmploiId, "Pôle emploi", "Pôle emploi") val prefId: Id = Organisation.Id("Préf") val pref: Organisation = Organisation(prefId, "Préf", "Préfecture") val sousPrefId: Id = Organisation.Id("Sous-Préf") @@ -87,33 +112,29 @@ object Organisation { Organisation("ANAH", "Agence nationale de l'habitat"), Organisation("ANTS", "Agence nationale des titres sécurisés"), association, - Organisation("BDF", "Banque de France"), + bdf, caf, // Département - Organisation(carsatId, "CARSAT", "Caisse d'assurance retraite et de la santé au travail"), - Organisation("CCAS", "Centre communal d'action sociale"), // Ville + carsat, + ccas, // Ville Organisation("CDAD", "Conseils départementaux d'accès au droit"), // Département Organisation("Chèque énergie", "Chèque énergie"), - Organisation(cnavId, "CNAV", "Caisse nationale d'assurance vieillesse"), // Département + cnav, // Département cpam, // Département Organisation(cnamId, "CNAM", "Caisse nationale d'assurance maladie"), - Organisation(cramId, "CRAM", "Caisse régionale d'assurance maladie"), // Région - Organisation( - ddfipId, - "DDFIP", - "Direction départementale des Finances publiques" - ), // Département - Organisation("Département", "Conseil départemental"), - Organisation(drfipId, "DRFIP", "Direction régionale des Finances publiques"), // Région + cram, // Région + ddfip, // Département + departement, + drfip, // Région hopital, // Ville Organisation("OFPRA", "Office français de protection des réfugiés et apatrides"), // Nationale Organisation("La Poste", "La Poste"), - Organisation("Mairie", "Mairie"), // Ville - Organisation("MDPH", "Maison départementale des personnes handicapées"), + mairie, // Ville + mdph, franceServices, - Organisation("Mission locale", "Mission locale"), // Ville - Organisation(msaId, "MSA", "Mutualité sociale agricole"), + missionLocale, // Ville + msa, msap, // Ville - Organisation(poleEmploiId, "Pôle emploi", "Pôle emploi"), + poleEmploi, pref, // Département sousPref, Organisation( diff --git a/app/services/OrganisationService.scala b/app/services/OrganisationService.scala index 2f43f830b..39ee98cf8 100644 --- a/app/services/OrganisationService.scala +++ b/app/services/OrganisationService.scala @@ -2,42 +2,13 @@ package services import cats.syntax.all._ import com.github.tototoshi.csv.{CSVReader, DefaultCSVFormat} +import javax.inject.Singleton import models.Organisation -import models.Organisation.{Category, Subject} -import net.jcazevedo.moultingyaml.{ - deserializationError, - DefaultYamlProtocol, - PimpedString, - YamlFormat, - YamlString, - YamlValue -} +import models.Organisation.Category import scala.io.Source object OrganisationService { - private object CustomYaml extends DefaultYamlProtocol { - - implicit object organisationFormat extends YamlFormat[Organisation] { - - def write(x: Organisation): YamlString = { - require(x ne null) - YamlString(x.shortName) - } - - def read(value: YamlValue): Organisation = - value match { - case YamlString(x) => Organisation.fromShortName(x).get - case x => - deserializationError("Expected String as YamlString, but got " + x) - } - - } - - implicit val subjectFormat: YamlFormat[Subject] = yamlFormat2(Subject.apply) - implicit val categoryFormat: YamlFormat[Category] = yamlFormat4(Category.apply) - } - implicit private object fsCsvFormat extends DefaultCSVFormat { override val delimiter = ';' } @@ -59,16 +30,10 @@ object OrganisationService { } -@javax.inject.Singleton +@Singleton class OrganisationService { import OrganisationService._ - import CustomYaml._ - - val categories: List[Category] = { - val yaml = Source.fromFile("data/categories.yaml").getLines().mkString("\n") - yaml.parseYaml.convertTo[List[Category]] - } val franceServiceInfos: FranceServiceInfos = { // To see what we extend, see: @@ -108,4 +73,161 @@ class OrganisationService { FranceServiceInfos(lines) } + val categories: List[Category] = { + import Organisation._ + List( + Category( + name = "Social / Famille", + description = "Allocations familiales, aides et prestations sociales, etc.", + defaultOrganisations = Seq(caf, msa), + subjects = Seq( + Subject( + subject = "Trop perçu à la suite d'un contrôle", + organisations = Seq(caf, msa) + ), + Subject( + subject = "Délai d'étude ou de versement d'une aide anormalement long", + organisations = Seq(caf, msa) + ), + Subject( + subject = "Accompagnement pour la naissance ou le décès d'un proche", + organisations = Seq(caf, msa, cpam, cram) + ) + ) + ), + Category( + name = "Santé / Handicap", + description = "Sécurité sociale, CSS, AME, etc.", + defaultOrganisations = Seq(cpam, cram, msa, mdph), + subjects = Seq( + Subject( + subject = "Première inscription à la Sécurité Sociale", + organisations = Seq(cpam, cram, msa) + ), + Subject( + subject = "Remboursement de soins médicaux", + organisations = Seq(cpam, cram, msa) + ), + Subject( + subject = "Renouvellement CSS (anciennement CMU-C et ACS)", + organisations = Seq(cpam, cram, msa) + ), + Subject( + subject = "Aide médicale de l'État (AME) pour les personnes en situation irrégulière", + organisations = Seq(cpam, cram) + ), + Subject( + subject = "Reconnaissance Handicap", + organisations = Seq(mdph) + ) + ) + ), + Category( + name = "Emploi / Formation", + description = "Démarches Pôle emploi, allocations chômage, etc.", + defaultOrganisations = Seq(poleEmploi, missionLocale), + subjects = Seq( + Subject( + subject = "Inscription à Pôle Emploi", + organisations = Seq(poleEmploi) + ), + Subject( + subject = "Suivi d'un dossier Pôle Emploi complexe", + organisations = Seq(poleEmploi) + ), + Subject( + subject = "Radiation de Pôle Emploi", + organisations = Seq(poleEmploi) + ), + Subject( + subject = "Demande et suivi de formation", + organisations = Seq(poleEmploi, missionLocale) + ) + ) + ), + Category( + name = "Logement", + description = "Allocations logement, hébergement d'urgence, etc.", + defaultOrganisations = Seq(caf, msa, pref, sousPref, mairie), + subjects = Seq( + Subject( + subject = "Demande d'une allocation logement (APL, ALS, ALF)", + organisations = Seq(caf, msa) + ), + Subject( + subject = "Demande d'un hébergement d'urgence", + organisations = Seq(mairie, ccas, departement) + ), + Subject( + subject = "Expulsion du logement", + organisations = Seq(mairie, pref, sousPref) + ) + ) + ), + Category( + name = "Retraite", + description = "Droits et demande de retraite, ASPA, pension de réversion, etc.", + defaultOrganisations = Seq(cnav, carsat, msa), + subjects = Seq( + Subject( + subject = "Préparation de la retraite et première demande", + organisations = Seq(cnav, carsat, msa) + ), + Subject( + subject = "Demande de l'allocation de solidarité aux personnes âgées (ASPA)", + organisations = Seq(cnav, carsat, msa) + ), + Subject( + subject = "Versement de la pension de retraite", + organisations = Seq(cnav, carsat, msa) + ), + Subject( + subject = "Pension de réversion", + organisations = Seq(cnav, carsat, msa) + ) + ) + ), + Category( + name = "Impôts / Argent", + description = "Fiscalité, surendettement, précarité financière, etc.", + defaultOrganisations = Seq(ddfip, drfip, bdf), + subjects = Seq( + Subject( + subject = "Demande d'un justificatif des impôts ou d'un avis fiscal", + organisations = Seq(ddfip, drfip) + ), + Subject( + subject = "Dossier de surendettement", + organisations = Seq(bdf) + ) + ) + ), + Category( + name = "Papiers / Titres", + description = "Carte d'identité, passeport, titre de séjour, etc.", + defaultOrganisations = Seq(pref, sousPref, mairie), + subjects = Seq( + Subject( + subject = "Vol, perte, renouvellement de papiers", + organisations = Seq(mairie) + ), + Subject( + subject = "Première demande de carte d'identité ou passeport", + organisations = Seq(mairie) + ), + Subject( + subject = "Renouvellement du titre de séjour", + organisations = Seq(pref, sousPref) + ) + ) + ), + Category( + name = "Autre", + description = "Ma demande concerne un autre sujet", + defaultOrganisations = Seq.empty, + subjects = Seq.empty + ) + ) + } + } diff --git a/build.sbt b/build.sbt index aa75b57bb..67be58557 100644 --- a/build.sbt +++ b/build.sbt @@ -85,7 +85,6 @@ libraryDependencies ++= Seq( "org.playframework" %% "play-mailer" % "10.0.1", "org.playframework" %% "play-json" % "3.0.4", "com.sun.mail" % "javax.mail" % "1.6.2", - "net.jcazevedo" %% "moultingyaml" % "0.4.2" cross CrossVersion.for3Use2_13, "com.github.tototoshi" %% "scala-csv" % "2.0.0", ws, "com.lihaoyi" %% "scalatags" % "0.13.1", @@ -122,12 +121,6 @@ libraryDependencies ++= Seq( "org.typelevel" %% "cats-effect-testing-specs2" % "1.5.0" % Test, ) -// Overrides -dependencyOverrides += "org.apache.commons" % "commons-text" % "1.10.0" - -// Note: we force snakeyaml version here because moultingyaml is not updated -dependencyOverrides += "org.yaml" % "snakeyaml" % "1.33" - // Sync with scala-steward pin val jacksonVersion = "2.14.3" val jacksonDatabindVersion = "2.14.3" diff --git a/data/categories.yaml b/data/categories.yaml deleted file mode 100644 index 0b98b3b3f..000000000 --- a/data/categories.yaml +++ /dev/null @@ -1,81 +0,0 @@ ---- -- name: Social / Famille - description: Allocations familiales, aides et prestations sociales, etc. - defaultOrganisations: [CAF, MSA] - subjects: - - subject: Trop perçu à la suite d'un contrôle - organisations: [CAF, MSA] - - subject: Délai d'étude ou de versement d'une aide anormalement long - organisations: [CAF, MSA] - - subject: Accompagnement pour la naissance ou le décès d'un proche - organisations: [CAF, MSA, CPAM, CRAM] -- name: Santé / Handicap - description: Sécurité sociale, CSS, AME, etc. - defaultOrganisations: [CPAM, CRAM, MSA, MDPH] - subjects: - - subject: Première inscription à la Sécurité Sociale - organisations: [CPAM, CRAM, MSA] - - subject: Remboursement de soins médicaux - organisations: [CPAM, CRAM, MSA] - - subject: Renouvellement CSS (anciennement CMU-C et ACS) - organisations: [CPAM, CRAM, MSA] - - subject: Aide médicale de l'État (AME) pour les personnes en situation irrégulière - organisations: [CPAM, CRAM] - - subject: Reconnaissance Handicap - organisations: [MDPH] -- name: Emploi / Formation - description: Démarches Pôle emploi, allocations chômage, etc. - defaultOrganisations: [Pôle emploi, Mission locale] - subjects: - - subject: Inscription à Pôle Emploi - organisations: [Pôle emploi] - - subject: Suivi d'un dossier Pôle Emploi complexe - organisations: [Pôle emploi] - - subject: Radiation de Pôle Emploi - organisations: [Pôle emploi] - - subject: Demande et suivi de formation - organisations: [Pôle emploi, Mission locale] -- name: Logement - description: Allocations logement, hébergement d'urgence, etc. - defaultOrganisations: [CAF, MSA, Préf, Sous-Préf, Mairie] - subjects: - - subject: Demande d'une allocation logement (APL, ALS, ALF) - organisations: [CAF, MSA] - - subject: Demande d'un hébergement d'urgence - organisations: [Mairie,CCAS,Département] - - subject: Expulsion du logement - organisations: [Mairie,Préf,Sous-Préf] -- name: Retraite - description: Droits et demande de retraite, ASPA, pension de réversion, etc. - defaultOrganisations: [CNAV, CARSAT, MSA] - subjects: - - subject: Préparation de la retraite et première demande - organisations: [CNAV,CARSAT,MSA] - - subject: Demande de l'allocation de solidarité aux personnes âgées (ASPA) - organisations: [CNAV, CARSAT, MSA] - - subject: Versement de la pension de retraite - organisations: [CNAV, CARSAT, MSA] - - subject: Pension de réversion - organisations: [CNAV, CARSAT, MSA] -- name: Impôts / Argent - description: Fiscalité, surendettement, précarité financière, etc. - defaultOrganisations: [DDFIP, DRFIP, BDF] - subjects: - - subject: Demande d'un justificatif des impôts ou d'un avis fiscal - organisations: [DDFIP, DRFIP] - - subject: Dossier de surendettement - organisations: [BDF] -- name: Papiers / Titres - description: Carte d'identité, passeport, titre de séjour, etc. - defaultOrganisations: [Préf, Sous-Préf, Mairie] - subjects: - - subject: Vol, perte, renouvellement de papiers - organisations: [Mairie] - - subject: Première demande de carte d'identité ou passeport - organisations: [Mairie] - - subject: Renouvellement du titre de séjour - organisations: [Préf,Sous-Préf] -- name: Autre - description: Ma demande concerne un autre sujet - defaultOrganisations: [] - subjects: []