@tekkare/romulus 0.1.251 → 0.1.253
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/module.json +1 -1
- package/dist/runtime/utils/projects.d.ts +8 -0
- package/dist/runtime/utils/projects.js +8 -5
- package/layer/app/app.config.ts +6 -0
- package/layer/app/components/OipPubmedSummary.vue +223 -0
- package/layer/app/components/OipResourceDrawer.vue +331 -0
- package/layer/app/components/OipResourceDrawerLink.vue +40 -0
- package/layer/app/components/OipResourceField.vue +41 -0
- package/layer/app/components/OipResourceGenericCard.vue +54 -0
- package/layer/app/components/OipResourceSource.vue +50 -0
- package/layer/app/components/OipResourceTags.vue +65 -0
- package/layer/app/components/OipResourceView.vue +107 -0
- package/layer/app/components/oip-drugs/fiches/AssociationFiche.vue +775 -0
- package/layer/app/components/oip-drugs/fiches/BrandFiche.vue +1111 -0
- package/layer/app/components/oip-drugs/fiches/IndicationFiche.vue +182 -0
- package/layer/app/components/oip-drugs/fiches/JoFiche.vue +101 -0
- package/layer/app/components/oip-drugs/fiches/PndsFiche.vue +279 -0
- package/layer/app/components/oip-drugs/heart/JoCard.vue +314 -0
- package/layer/app/components/oip-drugs/heart/TextHighlight.vue +326 -0
- package/layer/app/components/oip-drugs/heart/ansm/BrandCard.vue +187 -0
- package/layer/app/components/oip-drugs/heart/ansm/CisDetail.vue +363 -0
- package/layer/app/components/oip-drugs/heart/ansm/CisTable.vue +167 -0
- package/layer/app/components/oip-drugs/heart/associations/NationalAssemblyCard.vue +373 -0
- package/layer/app/components/oip-drugs/heart/associations/NationalAssemblyFiche.vue +372 -0
- package/layer/app/components/oip-drugs/heart/associations/TranscriptionCard.vue +55 -0
- package/layer/app/components/oip-drugs/heart/elastic/SourceContainerElastic.vue +103 -0
- package/layer/app/components/oip-drugs/heart/france/BrandGroupCard.vue +450 -0
- package/layer/app/components/oip-drugs/heart/mitm/Card.vue +199 -0
- package/layer/app/components/oip-drugs/heart/mitm/Source.vue +23 -0
- package/layer/app/components/oip-drugs/heart/mitm/details/Overview.vue +381 -0
- package/layer/app/components/oip-drugs/heart/put/Card.vue +212 -0
- package/layer/app/components/oip-drugs/heart/results/AccesCard.vue +696 -0
- package/layer/app/components/oip-drugs/heart/results/AlertCard.vue +342 -0
- package/layer/app/components/oip-drugs/heart/results/AsmrCursor.vue +229 -0
- package/layer/app/components/oip-drugs/heart/results/EvalCard.vue +370 -0
- package/layer/app/components/oip-drugs/heart/results/IndicCard.vue +743 -0
- package/layer/app/components/oip-drugs/heart/results/MatchExplain.vue +243 -0
- package/layer/app/components/oip-drugs/heart/results/PrefRows.vue +105 -0
- package/layer/app/components/oip-drugs/heart/results/details/HasHistory.vue +487 -0
- package/layer/app/components/oip-drugs/heart/results/details/InternationalCountryCard.vue +461 -0
- package/layer/app/components/oip-drugs/heart/results/details/InternationalOverview.vue +200 -0
- package/layer/app/components/oip-drugs/heart/results/details/InternationalPriceDrawer.vue +647 -0
- package/layer/app/components/oip-drugs/heart/results/details/Monograph.vue +128 -0
- package/layer/app/components/oip-drugs/heart/results/details/OpinionDrawer.vue +535 -0
- package/layer/app/components/oip-drugs/heart/results/details/PresentationDrawer.vue +738 -0
- package/layer/app/components/oip-drugs/heart/results/details/Price.vue +227 -0
- package/layer/app/components/oip-drugs/heart/results/details/PriceOverview.vue +1261 -0
- package/layer/app/components/oip-drugs/heart/results/details/RecordDrawer.vue +494 -0
- package/layer/app/components/oip-drugs/heart/results/details/RecordList.vue +426 -0
- package/layer/app/components/oip-drugs/heart/results/les/Card.vue +340 -0
- package/layer/app/components/oip-drugs/heart/results/les/Drawer.vue +67 -0
- package/layer/app/components/oip-drugs/heart/results/les/IndicationDetail.vue +149 -0
- package/layer/app/components/oip-drugs/heart/results/les/Source.vue +20 -0
- package/layer/app/components/oip-drugs/heart/results/les/SourceTag.vue +39 -0
- package/layer/app/components/oip-drugs/heart/searchPage/DynamicSource.vue +29 -0
- package/layer/app/components/oip-drugs/medicam/market/Chart.vue +121 -0
- package/layer/app/components/oip-drugs/outpatient/ProductEvolution.vue +236 -0
- package/layer/app/components/oip-drugs/resources/Ansm.vue +75 -0
- package/layer/app/components/oip-drugs/resources/Association.vue +30 -0
- package/layer/app/components/oip-drugs/resources/Brand.vue +65 -0
- package/layer/app/components/oip-drugs/resources/Contribution.vue +216 -0
- package/layer/app/components/oip-drugs/resources/Hospital.vue +151 -0
- package/layer/app/components/oip-drugs/resources/Indication.vue +54 -0
- package/layer/app/components/oip-drugs/resources/Jo.vue +57 -0
- package/layer/app/components/oip-drugs/resources/Medicam.vue +140 -0
- package/layer/app/components/oip-drugs/resources/Mitm.vue +84 -0
- package/layer/app/components/oip-drugs/resources/NationalAssembly.vue +93 -0
- package/layer/app/components/oip-drugs/resources/Outpatient.vue +97 -0
- package/layer/app/components/oip-drugs/resources/Pnds.vue +24 -0
- package/layer/app/components/oip-drugs/resources/Price.vue +106 -0
- package/layer/app/components/oip-drugs/resources/Put.vue +143 -0
- package/layer/app/components/oip-science/appel-a-projet/Cards.vue +162 -0
- package/layer/app/components/oip-science/clinical-trials/Cards.vue +382 -0
- package/layer/app/components/oip-science/clinical-trials/CardsGlobal.vue +273 -0
- package/layer/app/components/oip-science/clinical-trials/LinkedList.vue +366 -0
- package/layer/app/components/oip-science/clinical-trials/PairBadge.vue +25 -0
- package/layer/app/components/oip-science/clinical-trials/PairBody.vue +182 -0
- package/layer/app/components/oip-science/clinical-trials/SitesDrawer.vue +95 -0
- package/layer/app/components/oip-science/common/Form.vue +73 -0
- package/layer/app/components/oip-science/common/MatchAvgTag.vue +283 -0
- package/layer/app/components/oip-science/common/NoData.vue +16 -0
- package/layer/app/components/oip-science/common/ScoreBadge.vue +35 -0
- package/layer/app/components/oip-science/common/Source.vue +31 -0
- package/layer/app/components/oip-science/common/TableTags.vue +279 -0
- package/layer/app/components/oip-science/common/Timeline.vue +104 -0
- package/layer/app/components/oip-science/common/ToolTips.vue +89 -0
- package/layer/app/components/oip-science/cross/publicationPubmed.vue +484 -0
- package/layer/app/components/oip-science/crossData/CrossDataLocations.vue +71 -0
- package/layer/app/components/oip-science/ctgov/Investigators.vue +148 -0
- package/layer/app/components/oip-science/ctgov/Locations.vue +102 -0
- package/layer/app/components/oip-science/ctgov/Publications.vue +52 -0
- package/layer/app/components/oip-science/ctgov/Sponsors.vue +66 -0
- package/layer/app/components/oip-science/ctgov/StudyDescription.vue +1136 -0
- package/layer/app/components/oip-science/ctgov-centers/ClinicalTrials.vue +40 -0
- package/layer/app/components/oip-science/ctgov-centers/Publications.vue +50 -0
- package/layer/app/components/oip-science/ctgov-investigators/ClinicalTrials.vue +43 -0
- package/layer/app/components/oip-science/ctgov-investigators/Informations.vue +171 -0
- package/layer/app/components/oip-science/ctgov-investigators/Publications.vue +44 -0
- package/layer/app/components/oip-science/elastic/DateRangeFilter.vue +209 -0
- package/layer/app/components/oip-science/elastic/Filter.vue +719 -0
- package/layer/app/components/oip-science/elastic/MatchExplain.vue +152 -0
- package/layer/app/components/oip-science/establishments/Cards.vue +183 -0
- package/layer/app/components/oip-science/establishments/ClinicalTrials.vue +62 -0
- package/layer/app/components/oip-science/establishments/Hcps.vue +227 -0
- package/layer/app/components/oip-science/establishments/Informations.vue +263 -0
- package/layer/app/components/oip-science/establishments/LinkedList.vue +153 -0
- package/layer/app/components/oip-science/establishments/MatchedLabels.vue +194 -0
- package/layer/app/components/oip-science/establishments/PublicFinance.vue +62 -0
- package/layer/app/components/oip-science/euct/Investigators.vue +125 -0
- package/layer/app/components/oip-science/euct/Locations.vue +102 -0
- package/layer/app/components/oip-science/euct/Products.vue +101 -0
- package/layer/app/components/oip-science/euct/Publications.vue +89 -0
- package/layer/app/components/oip-science/euct/Sponsors.vue +86 -0
- package/layer/app/components/oip-science/euct/StudyDescription.vue +1075 -0
- package/layer/app/components/oip-science/euct-centers/ClinicalTrials.vue +40 -0
- package/layer/app/components/oip-science/euct-centers/Publications.vue +55 -0
- package/layer/app/components/oip-science/euct-investigators/ClinicalTrials.vue +41 -0
- package/layer/app/components/oip-science/euct-investigators/Informations.vue +171 -0
- package/layer/app/components/oip-science/euct-investigators/Publications.vue +51 -0
- package/layer/app/components/oip-science/hcps/AppelsAProjet.vue +62 -0
- package/layer/app/components/oip-science/hcps/Cards.vue +237 -0
- package/layer/app/components/oip-science/hcps/ClinicalTrials.vue +78 -0
- package/layer/app/components/oip-science/hcps/Informations.vue +296 -0
- package/layer/app/components/oip-science/hcps/LinkedList.vue +153 -0
- package/layer/app/components/oip-science/hcps/MatchedLabels.vue +207 -0
- package/layer/app/components/oip-science/hcps/Pubmed.vue +128 -0
- package/layer/app/components/oip-science/local/SliderTabs.vue +99 -0
- package/layer/app/components/oip-science/local/SliderTabsFull.vue +135 -0
- package/layer/app/components/oip-science/pubmed/Authors.vue +128 -0
- package/layer/app/components/oip-science/pubmed/Cards.vue +417 -0
- package/layer/app/components/oip-science/pubmed/ClinicalTrials.vue +71 -0
- package/layer/app/components/oip-science/resources/Phrc.vue +39 -0
- package/layer/app/composables/useOipChapterScroll.ts +43 -0
- package/layer/app/composables/useOipResourceHooks.ts +27 -0
- package/layer/app/composables/useOipResourceNav.ts +66 -0
- package/layer/app/composables/useOipResourceViews.ts +117 -0
- package/layer/app/composables/useOipResources.ts +83 -0
- package/layer/app/oip-drugs/PORTING.md +120 -0
- package/layer/app/oip-drugs/composables/useAssociationDetail.ts +220 -0
- package/layer/app/oip-drugs/composables/useAssociationExport.ts +63 -0
- package/layer/app/oip-drugs/composables/useAssociationLookup.ts +105 -0
- package/layer/app/oip-drugs/composables/useCardPrefOptions.ts +201 -0
- package/layer/app/oip-drugs/composables/useCurrency.ts +121 -0
- package/layer/app/oip-drugs/composables/useDirectusSources.ts +224 -0
- package/layer/app/oip-drugs/composables/useHeartBrandMatches.ts +112 -0
- package/layer/app/oip-drugs/composables/useHeartDetailSearches.ts +479 -0
- package/layer/app/oip-drugs/composables/useHeartIntlApprovals.ts +661 -0
- package/layer/app/oip-drugs/composables/useHeartLesIndication.ts +168 -0
- package/layer/app/oip-drugs/composables/useHeartMatchExplain.ts +231 -0
- package/layer/app/oip-drugs/composables/useHeartReports.ts +239 -0
- package/layer/app/oip-drugs/composables/useHeartSearchFields.ts +233 -0
- package/layer/app/oip-drugs/composables/useMergeByKey.ts +23 -0
- package/layer/app/oip-drugs/composables/useOipDrugsElastic.ts +621 -0
- package/layer/app/oip-drugs/composables/usePageEmpty.ts +58 -0
- package/layer/app/oip-drugs/composables/v-useSalesSource.ts +64 -0
- package/layer/app/oip-drugs/drugs.css +500 -0
- package/layer/app/oip-drugs/esIndices.ts +322 -0
- package/layer/app/oip-drugs/kinds.ts +264 -0
- package/layer/app/oip-drugs/locales/en.json +1571 -0
- package/layer/app/oip-drugs/locales/fr.json +1571 -0
- package/layer/app/oip-drugs/monographs/blincyto-has.vue +289 -0
- package/layer/app/oip-drugs/monographs/darzalex-has.vue +276 -0
- package/layer/app/oip-drugs/monographs/dupixent-has.vue +216 -0
- package/layer/app/oip-drugs/monographs/enhertu-has.vue +280 -0
- package/layer/app/oip-drugs/monographs/has-sein-2023.vue +1649 -0
- package/layer/app/oip-drugs/monographs/ibrance-has.vue +277 -0
- package/layer/app/oip-drugs/monographs/imfinzi-has.vue +293 -0
- package/layer/app/oip-drugs/monographs/keytruda-has.vue +334 -0
- package/layer/app/oip-drugs/monographs/kisqali-has.vue +201 -0
- package/layer/app/oip-drugs/monographs/opdivo-has.vue +231 -0
- package/layer/app/oip-drugs/monographs/ozempic-has.vue +186 -0
- package/layer/app/oip-drugs/monographs/tecentriq-has.vue +312 -0
- package/layer/app/oip-drugs/monographs/yescarta-has.vue +272 -0
- package/layer/app/oip-drugs/types/elastic.ts +113 -0
- package/layer/app/oip-drugs/types/es/agencies.ts +152 -0
- package/layer/app/oip-drugs/types/es/directory.ts +54 -0
- package/layer/app/oip-drugs/types/es/docByIndex.ts +151 -0
- package/layer/app/oip-drugs/types/es/openmedic.ts +67 -0
- package/layer/app/oip-drugs/types/es/outpatient.ts +71 -0
- package/layer/app/oip-drugs/types/es/portal.ts +130 -0
- package/layer/app/oip-drugs/types/es/retail.ts +107 -0
- package/layer/app/oip-drugs/types/es/statistics.ts +29 -0
- package/layer/app/oip-drugs/types/heart/CurrencyRate.ts +16 -0
- package/layer/app/oip-drugs/types/heart/ansm.ts +106 -0
- package/layer/app/oip-drugs/types/heart/tag.ts +29 -0
- package/layer/app/oip-drugs/utils/associationFields.ts +118 -0
- package/layer/app/oip-drugs/utils/contributions.ts +36 -0
- package/layer/app/oip-drugs/utils/countryMapping.ts +387 -0
- package/layer/app/oip-drugs/utils/esHighlight.ts +21 -0
- package/layer/app/oip-drugs/utils/exportSheets.ts +57 -0
- package/layer/app/oip-drugs/utils/heartIntlPrice.ts +228 -0
- package/layer/app/oip-drugs/utils/heartStyleAndFormat.ts +262 -0
- package/layer/app/oip-drugs/utils/heartStyleAnsm.ts +71 -0
- package/layer/app/oip-drugs/utils/latestDate.ts +31 -0
- package/layer/app/oip-drugs/utils/p-heartCardTags.ts +53 -0
- package/layer/app/oip-drugs/utils/priceExport.ts +269 -0
- package/layer/app/oip-drugs/utils/q-hasRatings.ts +43 -0
- package/layer/app/oip-drugs/utils/s-openCard.ts +20 -0
- package/layer/app/oip-drugs/utils/sourceUuids.ts +155 -0
- package/layer/app/oip-drugs/utils/styleAndFormat.ts +40 -0
- package/layer/app/oip-drugs/utils/v-salesSeries.ts +156 -0
- package/layer/app/oip-drugs/utils/v-scopeTags.ts +23 -0
- package/layer/app/oip-science/PORTING.md +93 -0
- package/layer/app/oip-science/assets/smartSelection.json +428 -0
- package/layer/app/oip-science/composables/useAuthorMatching.ts +342 -0
- package/layer/app/oip-science/composables/useCTCenter.ts +107 -0
- package/layer/app/oip-science/composables/useCTInvestigators.ts +107 -0
- package/layer/app/oip-science/composables/useEstablishmentCrossData.ts +139 -0
- package/layer/app/oip-science/composables/useEstablishmentMatching.ts +176 -0
- package/layer/app/oip-science/composables/useEuct.ts +418 -0
- package/layer/app/oip-science/composables/useEuctCenter.ts +107 -0
- package/layer/app/oip-science/composables/useEuctInvestigators.ts +107 -0
- package/layer/app/oip-science/composables/useGlobalClinicalTrials.ts +624 -0
- package/layer/app/oip-science/composables/useLinkedTrials.ts +83 -0
- package/layer/app/oip-science/composables/useOipElastic.ts +658 -0
- package/layer/app/oip-science/composables/useOipSearchExplain.ts +166 -0
- package/layer/app/oip-science/composables/usePubmed.ts +487 -0
- package/layer/app/oip-science/composables/useSearchFields.ts +153 -0
- package/layer/app/oip-science/indexConfig.json +794 -0
- package/layer/app/oip-science/locales/en.json +483 -0
- package/layer/app/oip-science/locales/fr.json +483 -0
- package/layer/app/oip-science/science.css +1182 -0
- package/layer/app/oip-science/utils/a-openCard.ts +23 -0
- package/layer/app/oip-science/utils/b-openCard.ts +35 -0
- package/layer/app/oip-science/utils/c-filterContext.ts +81 -0
- package/layer/app/oip-science/utils/f-types.ts +241 -0
- package/layer/app/oip-science/utils/frDiseaseTerms.ts +269 -0
- package/layer/app/oip-science/utils/matchMethod.ts +53 -0
- package/layer/app/oip-science/utils/sliderTabs.ts +13 -0
- package/layer/app/oip-science/utils/sources.ts +15 -0
- package/layer/app/oip-science/utils/styleAndFormat.ts +608 -0
- package/layer/app/oip-science/utils/toPresets.ts +7 -0
- package/layer/app/oip-science/utils/valueTable.ts +126 -0
- package/layer/app/plugins/oip-science-i18n.ts +17 -0
- package/layer/app/utils/oipFicheRoutes.ts +118 -0
- package/layer/app/utils/oipResources.ts +440 -0
- package/layer/nuxt.config.ts +22 -2
- package/layer/public/reports/blincyto-has.html +292 -0
- package/layer/public/reports/blincyto-has.pdf +0 -0
- package/layer/public/reports/darzalex-has.html +279 -0
- package/layer/public/reports/darzalex-has.pdf +0 -0
- package/layer/public/reports/dupixent-has.html +217 -0
- package/layer/public/reports/dupixent-has.pdf +0 -0
- package/layer/public/reports/enhertu-has.html +283 -0
- package/layer/public/reports/enhertu-has.pdf +0 -0
- package/layer/public/reports/has-sein-2023.html +1639 -0
- package/layer/public/reports/ibrance-has.html +280 -0
- package/layer/public/reports/ibrance-has.pdf +0 -0
- package/layer/public/reports/imfinzi-has.html +297 -0
- package/layer/public/reports/imfinzi-has.pdf +0 -0
- package/layer/public/reports/keytruda-has.html +337 -0
- package/layer/public/reports/keytruda-has.pdf +0 -0
- package/layer/public/reports/kisqali-has.html +202 -0
- package/layer/public/reports/kisqali-has.pdf +0 -0
- package/layer/public/reports/opdivo-has.html +232 -0
- package/layer/public/reports/opdivo-has.pdf +0 -0
- package/layer/public/reports/ozempic-has.html +188 -0
- package/layer/public/reports/ozempic-has.pdf +0 -0
- package/layer/public/reports/tecentriq-has.html +315 -0
- package/layer/public/reports/tecentriq-has.pdf +0 -0
- package/layer/public/reports/yescarta-has.html +275 -0
- package/layer/public/reports/yescarta-has.pdf +0 -0
- package/layer/server/api/oip/es.post.ts +99 -0
- package/layer/server/api/oip/pdf.get.ts +70 -0
- package/layer/server/api/oip/reports.get.ts +98 -0
- package/layer/server/api/oip/resource-types.get.ts +22 -0
- package/package.json +1 -1
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Catalogue des index Elasticsearch de l'app.
|
|
3
|
+
*
|
|
4
|
+
* Chaque index est designe par l'id de sa ligne dans la collection Directus
|
|
5
|
+
* `ElasticIndices` : il ne change jamais, alors que le nom physique suit les
|
|
6
|
+
* versions (`_v2`), les alias et la bascule staging. Le proxy /api/es resout
|
|
7
|
+
* l'id au moment d'interroger le cluster (layer Romulus, resolveOipEsIndex).
|
|
8
|
+
* Le nom figure en commentaire, pour la lecture. Un index absent de Directus
|
|
9
|
+
* reste ecrit en clair : le proxy le laisse passer tel quel (c'est le cas des
|
|
10
|
+
* designations orphelines, qui n'existent pas encore dans le cluster).
|
|
11
|
+
*
|
|
12
|
+
* Un index ne s'ecrit qu'ici. Les pages passent une cle du catalogue, pas une
|
|
13
|
+
* chaine : une faute de frappe devient une erreur de compilation au lieu
|
|
14
|
+
* d'un `hits: []` silencieux a l'ecran. Les familles ou l'index depend d'un
|
|
15
|
+
* niveau choisi par l'utilisateur (ATC, marque, CIP13...) exposent en plus une
|
|
16
|
+
* table `*_BY_LEVEL`, qui remplace la construction par template string.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
export const ES_INDEX = {
|
|
20
|
+
// Repertoires et dictionnaires
|
|
21
|
+
BRAND_DIRECTORY: "ffd7c620-6064-4b31-ad99-8e614055ddd0", // ope_block402_fr__drugs__brand_directory
|
|
22
|
+
DRUG_DIRECTORY: "7adfeb55-6f51-4c72-a540-420ffabbf034", // ope_block402_fr__drugs__drug_directory
|
|
23
|
+
AGE_DICTIONARY: "1dd78e1b-2648-4aa8-b19d-93ca43252dfc", // ope_block402_fr__drugs__age_dictionary
|
|
24
|
+
GENDER_DICTIONARY: "0667a0a0-9d20-4376-a12c-3ddf44eb6588", // ope_block402_fr__drugs__gender_dictionary
|
|
25
|
+
REGION_DICTIONARY: "76383534-d6c6-4d2e-a863-ffa307e9eb16", // ope_block402_fr__drugs__region_dictionary
|
|
26
|
+
SPECIALTY_DICTIONARY: "298e321f-924b-43fe-8480-a8183518bddf", // ope_block402_fr__drugs__specialty_dictionary
|
|
27
|
+
|
|
28
|
+
// Dictionnaire des cancers de global_oncology_app (CIM-10) : suggestions de
|
|
29
|
+
// maladie de l'assistant de creation de projet.
|
|
30
|
+
ONCOLOGY_DICTIONARY: "8b505318-be8a-4a2a-8296-0b9b4fe53717", // ope__ww__oncology_dictionary__tekkare
|
|
31
|
+
|
|
32
|
+
// Ville, Medic'AM (mensuel et glissant)
|
|
33
|
+
RETAIL_MONTHLY_ATC1: "f541e8cc-6344-4b6c-8c3e-1b0b91c52539", // ope_block402_fr__drugs__retail_monthly__atc1__medicam
|
|
34
|
+
RETAIL_MONTHLY_ATC2: "29a84ea8-4cb8-464b-bd5e-32c918f27101", // ope_block402_fr__drugs__retail_monthly__atc2__medicam
|
|
35
|
+
RETAIL_MONTHLY_ATC3: "72650651-200b-4525-bf0f-be9ae5be5678", // ope_block402_fr__drugs__retail_monthly__atc3__medicam
|
|
36
|
+
RETAIL_MONTHLY_ATC4: "dce9b30a-2b6c-498e-92b4-229aae411f2e", // ope_block402_fr__drugs__retail_monthly__atc4__medicam
|
|
37
|
+
RETAIL_MONTHLY_ATC5: "97b28d4e-2ad7-4ee7-8c88-bfe58f038e53", // ope_block402_fr__drugs__retail_monthly__atc5__medicam
|
|
38
|
+
RETAIL_MONTHLY_BRAND: "68c47aa9-d101-4217-b399-1ca108e610b3", // ope_block402_fr__drugs__retail_monthly__brand__medicam
|
|
39
|
+
RETAIL_MONTHLY_CIP13: "0387bf4a-b191-4910-bfc7-0fa307b3b4be", // ope_block402_fr__drugs__retail_monthly__cip13__medicam
|
|
40
|
+
RETAIL_MONTHLY_COMPANY: "a63a7cf0-e843-4edb-85a0-5b2a6e4cd419", // ope_block402_fr__drugs__retail_monthly__company__medicam
|
|
41
|
+
RETAIL_ROLLING_ATC1: "7c3bc78e-6977-4670-8d39-53021c8dd332", // ope_block402_fr__drugs__retail_rolling__atc1__medicam
|
|
42
|
+
RETAIL_ROLLING_ATC2: "0295c9b1-3544-4a49-8e88-55b5aa4da570", // ope_block402_fr__drugs__retail_rolling__atc2__medicam
|
|
43
|
+
RETAIL_ROLLING_ATC3: "2c698e07-e7c8-471e-a4cf-4bc09d657b23", // ope_block402_fr__drugs__retail_rolling__atc3__medicam
|
|
44
|
+
RETAIL_ROLLING_ATC4: "fe4f3351-f3f9-499d-a913-966aca4ea4e8", // ope_block402_fr__drugs__retail_rolling__atc4__medicam
|
|
45
|
+
RETAIL_ROLLING_ATC5: "65e43287-e8b1-473d-ae6a-f85f972947b9", // ope_block402_fr__drugs__retail_rolling__atc5__medicam
|
|
46
|
+
RETAIL_ROLLING_BRAND: "0908a02c-0b78-4eb6-b8b9-bfa3ea54cc7d", // ope_block402_fr__drugs__retail_rolling__brand__medicam
|
|
47
|
+
RETAIL_ROLLING_CIP13: "2704d81c-6288-4e96-bb8a-109655390378", // ope_block402_fr__drugs__retail_rolling__cip13__medicam
|
|
48
|
+
RETAIL_ROLLING_COMPANY: "c33e8131-d818-4077-a801-721d3594493a", // ope_block402_fr__drugs__retail_rolling__company__medicam
|
|
49
|
+
|
|
50
|
+
// Ville, previsions Medic'AM (Holt-Winters et ETS)
|
|
51
|
+
HW_FORECAST_ATC1: "9a096a2a-2d08-459d-9a29-e5783ae37670", // ope_block402_fr__drugs__hw_forecast__atc1__medicam
|
|
52
|
+
HW_FORECAST_ATC2: "d2d9bc09-a989-4519-8efc-88f29ec83c42", // ope_block402_fr__drugs__hw_forecast__atc2__medicam
|
|
53
|
+
HW_FORECAST_ATC3: "2d12c45a-1ca8-4ad2-b18e-868ed6cc6532", // ope_block402_fr__drugs__hw_forecast__atc3__medicam
|
|
54
|
+
HW_FORECAST_ATC4: "219fdc79-190f-478b-b9fd-2906e7ce3087", // ope_block402_fr__drugs__hw_forecast__atc4__medicam
|
|
55
|
+
HW_FORECAST_ATC5: "16598a09-90f8-44ac-a983-710a5b74dba5", // ope_block402_fr__drugs__hw_forecast__atc5__medicam
|
|
56
|
+
HW_FORECAST_BRAND: "8f1420b0-6e6a-4bca-9cdf-bc2668b3e33c", // ope_block402_fr__drugs__hw_forecast__brand__medicam
|
|
57
|
+
HW_FORECAST_CIP13: "f70bb5b0-bd9c-4288-aeb3-99a1ea5db13c", // ope_block402_fr__drugs__hw_forecast__cip13__medicam
|
|
58
|
+
HW_FORECAST_COMPANY: "c14215d9-6731-40dc-8d29-21dc637fdfb0", // ope_block402_fr__drugs__hw_forecast__company__medicam
|
|
59
|
+
ETS_FORECAST_ATC1: "d65c9b2e-a2b5-4f13-b74b-00069d74384b", // ope_block402_fr__drugs__ets_forecast__atc1__medicam
|
|
60
|
+
ETS_FORECAST_ATC2: "fab5bb3d-4c00-44c9-b9bb-9fddf8aebc3c", // ope_block402_fr__drugs__ets_forecast__atc2__medicam
|
|
61
|
+
ETS_FORECAST_ATC3: "e69c3f7e-0ba2-4f08-ae32-48dd7f0393c5", // ope_block402_fr__drugs__ets_forecast__atc3__medicam
|
|
62
|
+
ETS_FORECAST_ATC4: "cb2d5335-35ab-41d1-8a32-64e8c0d22180", // ope_block402_fr__drugs__ets_forecast__atc4__medicam
|
|
63
|
+
ETS_FORECAST_ATC5: "382f482b-28e3-44b3-9b59-18333135857c", // ope_block402_fr__drugs__ets_forecast__atc5__medicam
|
|
64
|
+
ETS_FORECAST_BRAND: "d0eae7e3-edb8-48c8-819a-5ca34a9bf3c0", // ope_block402_fr__drugs__ets_forecast__brand__medicam
|
|
65
|
+
ETS_FORECAST_CIP13: "9155ab95-a54c-4a4c-80e9-9087039cb5fd", // ope_block402_fr__drugs__ets_forecast__cip13__medicam
|
|
66
|
+
ETS_FORECAST_COMPANY: "4e9974c0-6042-4471-92ed-3c1823123129", // ope_block402_fr__drugs__ets_forecast__company__medicam
|
|
67
|
+
|
|
68
|
+
// Ville, Open Medic (annuel, par croisement)
|
|
69
|
+
RETAIL_ANNUAL_UNSPECIFIED: "c744d7ad-e799-431d-844a-294bef8dd875", // ope_block402_fr__drugs__retail_annual__unspecified__openmedic
|
|
70
|
+
RETAIL_ANNUAL_AGE: "09bd021d-2085-43ac-9d58-d8d0cc742a75", // ope_block402_fr__drugs__retail_annual__age__openmedic
|
|
71
|
+
RETAIL_ANNUAL_GENDER: "f658247a-b691-432e-9440-ace7e9a09d1d", // ope_block402_fr__drugs__retail_annual__gender__openmedic
|
|
72
|
+
RETAIL_ANNUAL_REGION: "956d3650-fc80-4f73-9197-e3e43370a423", // ope_block402_fr__drugs__retail_annual__region__openmedic
|
|
73
|
+
RETAIL_ANNUAL_SPECIALTY: "cb9a8608-3e78-4a4d-a489-9ba75daf51b2", // ope_block402_fr__drugs__retail_annual__specialty__openmedic
|
|
74
|
+
RETAIL_ANNUAL_AGE_GENDER: "fa289392-a473-4e11-b70d-c01d4a2ca357", // ope_block402_fr__drugs__retail_annual__age_gender__openmedic
|
|
75
|
+
RETAIL_ANNUAL_AGE_REGION: "c6df806e-c186-4e6c-83a4-9758d8ce5ebf", // ope_block402_fr__drugs__retail_annual__age_region__openmedic
|
|
76
|
+
RETAIL_ANNUAL_AGE_SPECIALTY: "6f7d99c9-10e0-4274-9edf-1cd278d98c2a", // ope_block402_fr__drugs__retail_annual__age_specialty__openmedic
|
|
77
|
+
RETAIL_ANNUAL_AGE_GENDER_REGION: "4f24fa3d-0ef8-472c-b9e2-8173acf9c1d1", // ope_block402_fr__drugs__retail_annual__age_gender_region__openmedic
|
|
78
|
+
RETAIL_ANNUAL_GENDER_REGION: "ce25faea-c170-4d6f-8bf1-ce0517cb771b", // ope_block402_fr__drugs__retail_annual__gender_region__openmedic
|
|
79
|
+
RETAIL_ANNUAL_GENDER_SPECIALTY: "b58fc503-845d-4c5b-96a6-a530dc3215d2", // ope_block402_fr__drugs__retail_annual__gender_specialty__openmedic
|
|
80
|
+
RETAIL_ANNUAL_REGION_SPECIALTY: "b045cf6b-d7b6-45aa-bbb2-2ab8c7d99e76", // ope_block402_fr__drugs__retail_annual__region_specialty__openmedic
|
|
81
|
+
|
|
82
|
+
// Retrocession et retrocession hospitaliere en ville (SNIIRAM)
|
|
83
|
+
OUTPATIENT_ATC1: "01c15baa-7bb8-417c-9dc5-a8861741c718", // ope_block402_fr__drugs__outpatient__atc1__sniiram
|
|
84
|
+
OUTPATIENT_ATC2: "c4a21f46-7638-4f29-95ab-2a14b614daab", // ope_block402_fr__drugs__outpatient__atc2__sniiram
|
|
85
|
+
OUTPATIENT_ATC3: "7a6dfcbc-5a07-4dd0-98c0-5059dbba59a0", // ope_block402_fr__drugs__outpatient__atc3__sniiram
|
|
86
|
+
OUTPATIENT_ATC4: "07e89676-ca6c-470e-8808-3b46447a9fa7", // ope_block402_fr__drugs__outpatient__atc4__sniiram
|
|
87
|
+
OUTPATIENT_ATC5: "933db198-4826-4500-a6e4-98602803e1c9", // ope_block402_fr__drugs__outpatient__atc5__sniiram
|
|
88
|
+
OUTPATIENT_BRAND: "490126e3-edd2-48f5-81e4-b73a7db34d5a", // ope_block402_fr__drugs__outpatient__brand__sniiram
|
|
89
|
+
OUTPATIENT_CIP13: "b478b739-72f3-44ea-9475-be659c0f0a62", // ope_block402_fr__drugs__outpatient__cip13__sniiram
|
|
90
|
+
OUTPATIENT_OWNER: "f48bb777-c84f-4438-8e87-b09ac0e4e2dd", // ope_block402_fr__drugs__outpatient__owner__sniiram
|
|
91
|
+
OUTPATIENT_HOSPITAL: "070f131a-6398-436b-b5fb-a355c8b8e515", // ope_block402_fr__drugs__outpatient__hospital__sniiram
|
|
92
|
+
OUTPATIENT_GHT: "c7c23a08-4a69-4970-a540-18d3744c18e9", // ope_block402_fr__drugs__outpatient__ght__sniiram
|
|
93
|
+
|
|
94
|
+
// Hopital (annuel)
|
|
95
|
+
HOSPITAL_ANNUAL_SUS: "144caaf4-dbca-4a01-bd24-87d9550de043", // ope_block402_fr__drugs__hospital_annual__sus__atih
|
|
96
|
+
HOSPITAL_ANNUAL_RETROCESSION: "1e15bfd9-b69e-4827-b360-1f8472ed07b4", // ope_block402_fr__drugs__hospital_annual__retrocession__cnam
|
|
97
|
+
|
|
98
|
+
// Statistiques agregees
|
|
99
|
+
STATISTICS_COMPANY: "77b1fb1f-20f9-4ce9-b1dc-bec5ca62fda3", // ope_block402_fr__drug_statistics__company
|
|
100
|
+
STATISTICS_PORTFOLIO: "3238dccc-4411-4bc7-adac-cd0ca669ec00", // ope_block402_fr__drug_statistics__portfolio
|
|
101
|
+
STATISTICS_RETAIL_MONTHLY: "88abb03d-32ba-4d4d-a5df-63f73efe28a1", // ope_block402_fr__drug_statistics__retail_monthly__medicam
|
|
102
|
+
STATISTICS_RETAIL_ROLLING: "6170d618-7d73-4bb3-aa78-7539ca3eaee5", // ope_block402_fr__drug_statistics__retail_rolling__medicam
|
|
103
|
+
|
|
104
|
+
// Agences et avis (ANSM, HAS, BDPM)
|
|
105
|
+
CIS_ANSM: "aeb4414a-839c-4e79-bb0b-d4c912b88b5c", // ope_block402_fr__drugs__cis__ansm
|
|
106
|
+
MITM_BDPM: "ebff5db7-b4e4-46f3-9a79-2264e12e0849", // ope_block402_fr__drugs__mitm__bdpm
|
|
107
|
+
BRAND_HAS: "d736c6f0-0dc6-4bb6-94c4-644a7ad231e7", // ope_block402_fr__drugs__brand__has
|
|
108
|
+
// Une appreciation SMR ou ASMR par document (Dossier Playbook, retours d'experience).
|
|
109
|
+
SMR_ASMR_HAS: "a1218b4b-fc62-42a0-bc39-2ecc2e5b421d", // ope_block402_fr__drugs__smr_asmr__has
|
|
110
|
+
PUT_HAS: "79a2fd26-82a1-44d3-b9f8-d79a0e7352c3", // ope_block402_fr__drugs__put__has
|
|
111
|
+
INDICATION_SEARCH_HAS: "988a17af-b7a2-40af-941b-24116496c68e", // ope_block402_fr__drugs__indication__search__has
|
|
112
|
+
|
|
113
|
+
// Associations de patients. Sept index d'une meme famille, relies par
|
|
114
|
+
// `association_label_regroup` ; deux ne le portent pas et se rejoignent par
|
|
115
|
+
// `session_url` d'un cote, `has_code` + `transcription_url` de l'autre. Le
|
|
116
|
+
// dernier porte un compte rendu de commission de l'Assemblee nationale par
|
|
117
|
+
// document, avec les associations citees en tableau.
|
|
118
|
+
ASSOCIATION_DIRECTORY: "fr__association_directory",
|
|
119
|
+
ASSOCIATION_SESSION_ATTENDEE_ANSM: "fr__association_session_attendee__ansm",
|
|
120
|
+
ASSOCIATION_SESSION_ANSM: "fr__association_session__ansm",
|
|
121
|
+
ASSOCIATION_CONTRIBUTION_HAS: "fr__association_contribution__has",
|
|
122
|
+
ASSOCIATION_TRANSCRIPTION_HAS: "fr__association_transcription__has",
|
|
123
|
+
ASSOCIATION_TRANSCRIPTION_BLOCK_HAS: "fr__association_transcription_block__has",
|
|
124
|
+
ASSOCIATION_COMMISSION_SESSION_NATIONAL_ASSEMBLY:
|
|
125
|
+
"fr__association_commission_session__national_assembly",
|
|
126
|
+
|
|
127
|
+
// Portail (prix, approbations, sources)
|
|
128
|
+
DRUG_CARDS: "aa862a6e-0eb2-453a-b020-46756088e102", // ope_block303_drug_cards
|
|
129
|
+
DRUG_CARDS_PRICE_JO: "d26920da-c420-446b-b039-91dd6b7d52d2", // ope_block303_drug_cards__price__jo
|
|
130
|
+
CURRENCY_RATE: "355437fb-4ec8-4e17-82ab-d0fe76fe6e5f", // ope_block325_currency_rate
|
|
131
|
+
DRUG_APPROVALS: "6fc9e86a-6bac-4937-ab65-a3c17991dee0", // ope__drug_approvals__tekkare
|
|
132
|
+
EU_EMA_JCA_DRUG_APPROVALS: "623c9deb-96f3-4d0b-ac42-17a51094b5d4", // ope__eu_ema_jca_drug_approvals__tekkare
|
|
133
|
+
ORPHAN_DESIGNATION_EMA: "ope__orphan_designation_ema", // absent du cluster et de Directus ElasticIndices
|
|
134
|
+
ORPHAN_DESIGNATION_FDA: "ope__orphan_designation_fda", // absent du cluster et de Directus ElasticIndices
|
|
135
|
+
WW_PRICE_TRACKER: "fe806bee-7e4e-4714-a329-f25879ce1497", // ope__ww_price_tracker__tekkare
|
|
136
|
+
|
|
137
|
+
// Registres d'autorisation etrangers, lus par l'onglet « Regard
|
|
138
|
+
// international » de la fiche produit. Un index par agence.
|
|
139
|
+
APPROVAL_IT_AIFA: "it__drug_opinion__aifa",
|
|
140
|
+
APPROVAL_ES_AEMPS: "es__drug_opinion__aemps",
|
|
141
|
+
APPROVAL_DE_GBA: "67c772ab-0b4d-4dde-9f82-3cd3dc7a2672", // ope__de_gba_benefit_assessment_drug_approvals__tekkare
|
|
142
|
+
APPROVAL_UK_MHRA: "0cb3a88c-9139-48e1-bef2-9f6b9e0d1867", // ope__uk__mhra_drug_approval__tekkare
|
|
143
|
+
APPROVAL_EU_EMA: "eeb2ea64-e896-4586-a654-76e511ffe057", // oip-discovery-ema
|
|
144
|
+
APPROVAL_US_FDA: "3d1fa751-0e83-4007-a314-a86ea25853c6", // ope__us__fda_drug_approval__tekkare
|
|
145
|
+
PROVIDER: "1c3560fc-1ef7-49d3-92b6-1e083a7035a8", // ope_provider_tekkare
|
|
146
|
+
PNDS: "50ca5ef0-6892-4792-9a01-a2f135787609", // ope_block402_fr__drugs__pathology_protocol__pnds
|
|
147
|
+
TRIAL_NCT: "9ec0c673-7da4-4ead-8359-2d23b7b1318a", // oip_datamart_clinicaltrials_prod
|
|
148
|
+
TRIAL_EUCT: "c332f362-2311-4025-b5de-327f81913f7d", // ope_block374_clinical_trials_euct
|
|
149
|
+
|
|
150
|
+
// Dossier Playbook : referentiels des agences (HAS en V1), une entree par
|
|
151
|
+
// version de document, et leurs sections.
|
|
152
|
+
REG_DOCUMENTS: "9eacda12-43e5-4f43-8e10-382dae96491d", // ope__ww_reg_documents_tekkare
|
|
153
|
+
REG_PASSAGES: "271f482d-2290-496f-9498-ef54a02a1754", // ope__ww_reg_passages_tekkare
|
|
154
|
+
// Items structures (exigences, definitions, erreurs frequentes) des
|
|
155
|
+
// documents sans texte suivi, comme la checklist de validation EMA.
|
|
156
|
+
// Absent du registre Directus (ElasticIndices) : nom en clair.
|
|
157
|
+
REG_ITEMS: "ope__ww_reg_items_tekkare",
|
|
158
|
+
|
|
159
|
+
// Dispositifs medicaux, venus de fr_hospitals_app (cle esAuthMedicalDevices)
|
|
160
|
+
MD_SELECTION: "4ef4d490-f76b-4529-8978-2eaa52477be3", // ope__fr__medical_devices__selection__tekkare
|
|
161
|
+
MD_PRIMARY_CARE: "179bde5e-c915-4fca-97fd-0cd059b365d2", // ope__fr__medical_devices__primary_care__tekkare
|
|
162
|
+
} as const;
|
|
163
|
+
|
|
164
|
+
export type EsIndexKey = keyof typeof ES_INDEX;
|
|
165
|
+
export type EsIndexName = (typeof ES_INDEX)[EsIndexKey];
|
|
166
|
+
|
|
167
|
+
/** Niveaux d'analyse proposes sur les ecrans ville Medic'AM. */
|
|
168
|
+
export type MedicamLevel =
|
|
169
|
+
"atc1" | "atc2" | "atc3" | "atc4" | "atc5" | "brand" | "cip13" | "company";
|
|
170
|
+
/** Niveaux d'analyse proposes sur les ecrans retrocession (SNIIRAM). */
|
|
171
|
+
export type OutpatientLevel =
|
|
172
|
+
"atc1" | "atc2" | "atc3" | "atc4" | "atc5" | "brand" | "cip13" | "owner";
|
|
173
|
+
/** Croisements disponibles sur les index annuels Open Medic. */
|
|
174
|
+
export type OpenmedicCrossing =
|
|
175
|
+
| "unspecified"
|
|
176
|
+
| "age"
|
|
177
|
+
| "gender"
|
|
178
|
+
| "region"
|
|
179
|
+
| "specialty"
|
|
180
|
+
| "age_gender"
|
|
181
|
+
| "age_region"
|
|
182
|
+
| "age_specialty"
|
|
183
|
+
| "age_gender_region"
|
|
184
|
+
| "gender_region"
|
|
185
|
+
| "gender_specialty"
|
|
186
|
+
| "region_specialty";
|
|
187
|
+
|
|
188
|
+
export const RETAIL_MONTHLY_INDEX_BY_LEVEL = {
|
|
189
|
+
atc1: ES_INDEX.RETAIL_MONTHLY_ATC1,
|
|
190
|
+
atc2: ES_INDEX.RETAIL_MONTHLY_ATC2,
|
|
191
|
+
atc3: ES_INDEX.RETAIL_MONTHLY_ATC3,
|
|
192
|
+
atc4: ES_INDEX.RETAIL_MONTHLY_ATC4,
|
|
193
|
+
atc5: ES_INDEX.RETAIL_MONTHLY_ATC5,
|
|
194
|
+
brand: ES_INDEX.RETAIL_MONTHLY_BRAND,
|
|
195
|
+
cip13: ES_INDEX.RETAIL_MONTHLY_CIP13,
|
|
196
|
+
company: ES_INDEX.RETAIL_MONTHLY_COMPANY,
|
|
197
|
+
} as const;
|
|
198
|
+
|
|
199
|
+
export const RETAIL_ROLLING_INDEX_BY_LEVEL = {
|
|
200
|
+
atc1: ES_INDEX.RETAIL_ROLLING_ATC1,
|
|
201
|
+
atc2: ES_INDEX.RETAIL_ROLLING_ATC2,
|
|
202
|
+
atc3: ES_INDEX.RETAIL_ROLLING_ATC3,
|
|
203
|
+
atc4: ES_INDEX.RETAIL_ROLLING_ATC4,
|
|
204
|
+
atc5: ES_INDEX.RETAIL_ROLLING_ATC5,
|
|
205
|
+
brand: ES_INDEX.RETAIL_ROLLING_BRAND,
|
|
206
|
+
cip13: ES_INDEX.RETAIL_ROLLING_CIP13,
|
|
207
|
+
company: ES_INDEX.RETAIL_ROLLING_COMPANY,
|
|
208
|
+
} as const;
|
|
209
|
+
|
|
210
|
+
export const HW_FORECAST_INDEX_BY_LEVEL = {
|
|
211
|
+
atc1: ES_INDEX.HW_FORECAST_ATC1,
|
|
212
|
+
atc2: ES_INDEX.HW_FORECAST_ATC2,
|
|
213
|
+
atc3: ES_INDEX.HW_FORECAST_ATC3,
|
|
214
|
+
atc4: ES_INDEX.HW_FORECAST_ATC4,
|
|
215
|
+
atc5: ES_INDEX.HW_FORECAST_ATC5,
|
|
216
|
+
brand: ES_INDEX.HW_FORECAST_BRAND,
|
|
217
|
+
cip13: ES_INDEX.HW_FORECAST_CIP13,
|
|
218
|
+
company: ES_INDEX.HW_FORECAST_COMPANY,
|
|
219
|
+
} as const;
|
|
220
|
+
|
|
221
|
+
export const ETS_FORECAST_INDEX_BY_LEVEL = {
|
|
222
|
+
atc1: ES_INDEX.ETS_FORECAST_ATC1,
|
|
223
|
+
atc2: ES_INDEX.ETS_FORECAST_ATC2,
|
|
224
|
+
atc3: ES_INDEX.ETS_FORECAST_ATC3,
|
|
225
|
+
atc4: ES_INDEX.ETS_FORECAST_ATC4,
|
|
226
|
+
atc5: ES_INDEX.ETS_FORECAST_ATC5,
|
|
227
|
+
brand: ES_INDEX.ETS_FORECAST_BRAND,
|
|
228
|
+
cip13: ES_INDEX.ETS_FORECAST_CIP13,
|
|
229
|
+
company: ES_INDEX.ETS_FORECAST_COMPANY,
|
|
230
|
+
} as const;
|
|
231
|
+
|
|
232
|
+
export const OUTPATIENT_INDEX_BY_LEVEL = {
|
|
233
|
+
atc1: ES_INDEX.OUTPATIENT_ATC1,
|
|
234
|
+
atc2: ES_INDEX.OUTPATIENT_ATC2,
|
|
235
|
+
atc3: ES_INDEX.OUTPATIENT_ATC3,
|
|
236
|
+
atc4: ES_INDEX.OUTPATIENT_ATC4,
|
|
237
|
+
atc5: ES_INDEX.OUTPATIENT_ATC5,
|
|
238
|
+
brand: ES_INDEX.OUTPATIENT_BRAND,
|
|
239
|
+
cip13: ES_INDEX.OUTPATIENT_CIP13,
|
|
240
|
+
owner: ES_INDEX.OUTPATIENT_OWNER,
|
|
241
|
+
} as const;
|
|
242
|
+
|
|
243
|
+
export const RETAIL_ANNUAL_INDEX_BY_CROSSING = {
|
|
244
|
+
unspecified: ES_INDEX.RETAIL_ANNUAL_UNSPECIFIED,
|
|
245
|
+
age: ES_INDEX.RETAIL_ANNUAL_AGE,
|
|
246
|
+
gender: ES_INDEX.RETAIL_ANNUAL_GENDER,
|
|
247
|
+
region: ES_INDEX.RETAIL_ANNUAL_REGION,
|
|
248
|
+
specialty: ES_INDEX.RETAIL_ANNUAL_SPECIALTY,
|
|
249
|
+
age_gender: ES_INDEX.RETAIL_ANNUAL_AGE_GENDER,
|
|
250
|
+
age_region: ES_INDEX.RETAIL_ANNUAL_AGE_REGION,
|
|
251
|
+
age_specialty: ES_INDEX.RETAIL_ANNUAL_AGE_SPECIALTY,
|
|
252
|
+
age_gender_region: ES_INDEX.RETAIL_ANNUAL_AGE_GENDER_REGION,
|
|
253
|
+
gender_region: ES_INDEX.RETAIL_ANNUAL_GENDER_REGION,
|
|
254
|
+
gender_specialty: ES_INDEX.RETAIL_ANNUAL_GENDER_SPECIALTY,
|
|
255
|
+
region_specialty: ES_INDEX.RETAIL_ANNUAL_REGION_SPECIALTY,
|
|
256
|
+
} as const;
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* Unions par famille. Un composant dont l'index change avec le niveau
|
|
260
|
+
* choisi declare la famille, pas `EsIndexName` : ses documents gardent alors
|
|
261
|
+
* un type utilisable, tous les niveaux d'une famille partageant le meme
|
|
262
|
+
* schema.
|
|
263
|
+
*/
|
|
264
|
+
export type RetailMonthlyIndexName =
|
|
265
|
+
(typeof RETAIL_MONTHLY_INDEX_BY_LEVEL)[MedicamLevel];
|
|
266
|
+
export type RetailRollingIndexName =
|
|
267
|
+
(typeof RETAIL_ROLLING_INDEX_BY_LEVEL)[MedicamLevel];
|
|
268
|
+
export type MedicamRetailIndexName =
|
|
269
|
+
RetailMonthlyIndexName | RetailRollingIndexName;
|
|
270
|
+
export type ForecastIndexName =
|
|
271
|
+
| (typeof HW_FORECAST_INDEX_BY_LEVEL)[MedicamLevel]
|
|
272
|
+
| (typeof ETS_FORECAST_INDEX_BY_LEVEL)[MedicamLevel];
|
|
273
|
+
export type OpenmedicIndexName =
|
|
274
|
+
(typeof RETAIL_ANNUAL_INDEX_BY_CROSSING)[OpenmedicCrossing];
|
|
275
|
+
export type OutpatientIndexName =
|
|
276
|
+
| (typeof OUTPATIENT_INDEX_BY_LEVEL)[OutpatientLevel]
|
|
277
|
+
| typeof ES_INDEX.OUTPATIENT_HOSPITAL
|
|
278
|
+
| typeof ES_INDEX.OUTPATIENT_GHT;
|
|
279
|
+
export type HospitalAnnualIndexName =
|
|
280
|
+
| typeof ES_INDEX.HOSPITAL_ANNUAL_SUS
|
|
281
|
+
| typeof ES_INDEX.HOSPITAL_ANNUAL_RETROCESSION;
|
|
282
|
+
export type DirectoryIndexName =
|
|
283
|
+
typeof ES_INDEX.BRAND_DIRECTORY | typeof ES_INDEX.DRUG_DIRECTORY;
|
|
284
|
+
export type StatisticsIndexName =
|
|
285
|
+
| HospitalAnnualIndexName
|
|
286
|
+
| typeof ES_INDEX.STATISTICS_COMPANY
|
|
287
|
+
| typeof ES_INDEX.STATISTICS_PORTFOLIO
|
|
288
|
+
| typeof ES_INDEX.STATISTICS_RETAIL_MONTHLY
|
|
289
|
+
| typeof ES_INDEX.STATISTICS_RETAIL_ROLLING;
|
|
290
|
+
export type DictionaryIndexName =
|
|
291
|
+
| typeof ES_INDEX.AGE_DICTIONARY
|
|
292
|
+
| typeof ES_INDEX.GENDER_DICTIONARY
|
|
293
|
+
| typeof ES_INDEX.REGION_DICTIONARY
|
|
294
|
+
| typeof ES_INDEX.SPECIALTY_DICTIONARY;
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* Index pilote par l'environnement.
|
|
298
|
+
*
|
|
299
|
+
* Quelques index du portail sont surchargeables par variable d'environnement
|
|
300
|
+
* (`HAS_INDEX`, `PUT_INDEX`...). La configuration les rend en `string` : ce
|
|
301
|
+
* passage rappelle le defaut du catalogue quand la variable manque, et rend
|
|
302
|
+
* la valeur au type du catalogue.
|
|
303
|
+
*/
|
|
304
|
+
export function esIndexFromConfig(
|
|
305
|
+
value: unknown,
|
|
306
|
+
fallback: EsIndexName,
|
|
307
|
+
): EsIndexName {
|
|
308
|
+
return typeof value === "string" && value ? (value as EsIndexName) : fallback;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
/**
|
|
312
|
+
* Plusieurs index dans une meme requete.
|
|
313
|
+
*
|
|
314
|
+
* Le serveur transmet le parametre `index` tel quel, et Elasticsearch accepte
|
|
315
|
+
* une liste separee par des virgules (les essais cliniques interrogent les
|
|
316
|
+
* deux registres d'un coup). Le resultat reste typé comme un index : c'est ce
|
|
317
|
+
* que les composables attendent, et la liste est construite a partir du
|
|
318
|
+
* catalogue.
|
|
319
|
+
*/
|
|
320
|
+
export function esIndexList(...names: EsIndexName[]): EsIndexName {
|
|
321
|
+
return names.join(",") as EsIndexName;
|
|
322
|
+
}
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Les familles que fr_drugs_app range dans un projet, decrites pour tout le
|
|
3
|
+
* portail (cf. useHubrResourceKinds de fr_drugs_app) : index, titre,
|
|
4
|
+
* sous-titre et chemin de la fiche dans fr_drugs_app. Repris de la copie que
|
|
5
|
+
* France Augmented Science tenait (useDrugProjectKinds), index designes par
|
|
6
|
+
* le catalogue de fr_drugs_app (ids Directus).
|
|
7
|
+
*
|
|
8
|
+
* Les ventes s'ancrent sur la derniere periode de la marque et se relisent par
|
|
9
|
+
* elle (R-01 des projets Virtual Lab) : `titleFromId` titre la ligne meme
|
|
10
|
+
* quand l'ancre a quitte l'index.
|
|
11
|
+
*
|
|
12
|
+
* Importe aussi par le serveur : pas d'import propre a Vue ou a Nuxt ici.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import type { RmProjectKind } from "@tekkare/romulus/utils/projects";
|
|
16
|
+
import { ES_INDEX } from "./esIndices";
|
|
17
|
+
|
|
18
|
+
type Lang = "fr" | "en";
|
|
19
|
+
|
|
20
|
+
/** La fiche HAS d'un groupe de marque, dans fr_drugs_app. */
|
|
21
|
+
export function drugsBrandPath(brand: unknown) {
|
|
22
|
+
const value = String(brand ?? "").trim();
|
|
23
|
+
return value ? `/hubr/heart/details/${encodeURIComponent(value)}` : "";
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** La fiche d'une association de patients, par son nom regroupe. */
|
|
27
|
+
export function drugsAssociationPath(label: unknown) {
|
|
28
|
+
const value = String(label ?? "").trim();
|
|
29
|
+
return value ? `/hubr/heart/associations/${encodeURIComponent(value)}` : "";
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/** Valeur du champ selon la langue, avec repli sur le francais. */
|
|
33
|
+
function loc(source: any, base: string, lang: Lang): string {
|
|
34
|
+
const value = lang === "en" ? source?.[`${base}_en`] : source?.[`${base}_fr`];
|
|
35
|
+
const out = value ?? source?.[`${base}_fr`] ?? source?.[base];
|
|
36
|
+
return Array.isArray(out) ? out.filter(Boolean).join(", ") : String(out ?? "");
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** La derniere publication au JO (date, prix public), avec le nombre total. */
|
|
40
|
+
function joSubtitle(jo: unknown, lang: Lang): string {
|
|
41
|
+
if (!Array.isArray(jo) || !jo.length) return "";
|
|
42
|
+
const en = lang === "en";
|
|
43
|
+
const last = [...jo].sort((a, b) => String(b?.announce_date ?? "").localeCompare(String(a?.announce_date ?? "")))[0];
|
|
44
|
+
const date = new Date(last?.announce_date ?? "");
|
|
45
|
+
return [
|
|
46
|
+
Number.isNaN(date.getTime()) ? "" : `${en ? "Published on" : "Publié le"} ${date.toLocaleDateString(en ? "en-GB" : "fr-FR")}`,
|
|
47
|
+
typeof last?.public_price === "number"
|
|
48
|
+
? `${en ? "Public price" : "Prix public"} : ${last.public_price.toLocaleString(en ? "en-GB" : "fr-FR", { style: "currency", currency: "EUR" })}`
|
|
49
|
+
: "",
|
|
50
|
+
jo.length > 1 ? `${jo.length} publications` : "",
|
|
51
|
+
]
|
|
52
|
+
.filter(Boolean)
|
|
53
|
+
.join(" · ");
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const list = (value: unknown) => (Array.isArray(value) ? value.join(", ") : String(value ?? ""));
|
|
57
|
+
|
|
58
|
+
const HAS = { fr: "HAS", en: "HAS" };
|
|
59
|
+
const PRICES = { fr: "Prix", en: "Prices" };
|
|
60
|
+
const ASSOCIATIONS = { fr: "Associations de patients", en: "Patient associations" };
|
|
61
|
+
const HOSPITAL = { fr: "Hôpital", en: "Hospital" };
|
|
62
|
+
|
|
63
|
+
export const DRUG_PROJECT_KINDS: RmProjectKind[] = [
|
|
64
|
+
{
|
|
65
|
+
type: "FrHasBrand",
|
|
66
|
+
index: ES_INDEX.BRAND_HAS,
|
|
67
|
+
label: { fr: "Avis HAS", en: "HAS opinions" },
|
|
68
|
+
section: HAS,
|
|
69
|
+
icon: "Certificate",
|
|
70
|
+
// Molecule et ATC5 vivent dans chaque avis : le cadrage du projet les lit.
|
|
71
|
+
source: ["brand_group", "last_opinion_date", "brand_history.molecule", "brand_history.atc5_code"],
|
|
72
|
+
title: (s) => s?.brand_group ?? "",
|
|
73
|
+
subtitle: (s, l) => (s?.last_opinion_date ? `${l === "en" ? "Latest opinion" : "Dernier avis"} : ${s.last_opinion_date}` : ""),
|
|
74
|
+
path: (s) => drugsBrandPath(s?.brand_group),
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
type: "FrHasIndication",
|
|
78
|
+
index: ES_INDEX.INDICATION_SEARCH_HAS,
|
|
79
|
+
label: { fr: "Indications (LES / APAC)", en: "Indications (LES / APAC)" },
|
|
80
|
+
section: HAS,
|
|
81
|
+
icon: "ListChecks",
|
|
82
|
+
source: ["brand", "indication", "indication_fr", "indication_en", "indication_label_fr", "french_label", "card_id"],
|
|
83
|
+
title: (s, l) => loc(s, "indication", l) || s?.indication_label_fr || s?.french_label || "",
|
|
84
|
+
subtitle: (s) => list(s?.brand),
|
|
85
|
+
path: (s) => {
|
|
86
|
+
const code = Array.isArray(s?.indication) ? s.indication.find(Boolean) : s?.indication;
|
|
87
|
+
return code ? `/hubr/heart/indication/${code}` : "";
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
type: "FrHasPut",
|
|
92
|
+
index: ES_INDEX.PUT_HAS,
|
|
93
|
+
label: { fr: "P.U.T", en: "P.U.T" },
|
|
94
|
+
section: HAS,
|
|
95
|
+
icon: "ClipboardText",
|
|
96
|
+
source: ["brand", "dci", "aap_type_fr", "aap_type_en", "authorization_date"],
|
|
97
|
+
title: (s) => list(s?.brand),
|
|
98
|
+
subtitle: (s, l) => loc(s, "aap_type", l),
|
|
99
|
+
path: (_s, id) => `/hubr/heart/put/${id}`,
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
type: "FrMitm",
|
|
103
|
+
index: ES_INDEX.MITM_BDPM,
|
|
104
|
+
label: { fr: "MITM", en: "MITM" },
|
|
105
|
+
section: HAS,
|
|
106
|
+
icon: "FirstAid",
|
|
107
|
+
source: ["brand", "cis_label", "cis_code", "atc5_french_code_label", "atc5_english_code_label", "owner_regroup"],
|
|
108
|
+
title: (s) => s?.cis_label ?? s?.brand ?? "",
|
|
109
|
+
subtitle: (s, l) =>
|
|
110
|
+
[l === "en" ? s?.atc5_english_code_label : s?.atc5_french_code_label, s?.owner_regroup].filter(Boolean).join(" · "),
|
|
111
|
+
path: (s) => (s?.cis_code ? `/hubr/heart/mitm/${s.cis_code}` : ""),
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
type: "FrPnds",
|
|
115
|
+
index: ES_INDEX.PNDS,
|
|
116
|
+
label: { fr: "PNDS", en: "PNDS" },
|
|
117
|
+
section: HAS,
|
|
118
|
+
icon: "FileText",
|
|
119
|
+
source: ["pathology_fr", "pathology_en", "protocol_id", "protocol_date"],
|
|
120
|
+
title: (s, l) => loc(s, "pathology", l),
|
|
121
|
+
subtitle: (s) => s?.protocol_id ?? "",
|
|
122
|
+
path: (_s, id) => `/hubr/heart/pnds/${id}`,
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
type: "FrDrugPrice",
|
|
126
|
+
index: ES_INDEX.DRUG_CARDS,
|
|
127
|
+
label: { fr: "Prix", en: "Prices" },
|
|
128
|
+
section: PRICES,
|
|
129
|
+
icon: "CurrencyEur",
|
|
130
|
+
source: ["brand", "label", "local_drug_id", "last_price_update"],
|
|
131
|
+
title: (s) => s?.label ?? s?.brand ?? "",
|
|
132
|
+
subtitle: (s, l) => (s?.last_price_update ? `${l === "en" ? "Latest price" : "Dernier prix"} : ${s.last_price_update}` : ""),
|
|
133
|
+
path: (s) => (s?.local_drug_id ? `/hubr/heart/prices/details/${s.local_drug_id}` : ""),
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
type: "FrDrugPriceJo",
|
|
137
|
+
index: ES_INDEX.DRUG_CARDS_PRICE_JO,
|
|
138
|
+
label: { fr: "Publications JO", en: "Official journal" },
|
|
139
|
+
section: PRICES,
|
|
140
|
+
icon: "Newspaper",
|
|
141
|
+
source: ["brand", "label", "local_drug_id", "jo", "update_date"],
|
|
142
|
+
title: (s) => s?.label ?? s?.brand ?? "",
|
|
143
|
+
subtitle: (s, l) => joSubtitle(s?.jo, l),
|
|
144
|
+
path: (s) => (s?.local_drug_id ? `/hubr/heart/prices/jo/${s.local_drug_id}` : ""),
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
type: "FrAnsmProduct",
|
|
148
|
+
index: ES_INDEX.CIS_ANSM,
|
|
149
|
+
label: { fr: "Autorisations ANSM", en: "ANSM authorizations" },
|
|
150
|
+
section: { fr: "ANSM", en: "ANSM" },
|
|
151
|
+
icon: "Pill",
|
|
152
|
+
source: ["brand", "cis_label", "cis_code", "amm_status", "owner_regroup"],
|
|
153
|
+
title: (s) => s?.cis_label ?? s?.brand ?? "",
|
|
154
|
+
subtitle: (s) => s?.owner_regroup ?? "",
|
|
155
|
+
path: (_s, id) => `/hubr/heart/ansm/details/${id}`,
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
type: "FrPatientAssociation",
|
|
159
|
+
index: ES_INDEX.ASSOCIATION_DIRECTORY,
|
|
160
|
+
label: { fr: "Associations de patients", en: "Patient associations" },
|
|
161
|
+
section: ASSOCIATIONS,
|
|
162
|
+
icon: "UsersThree",
|
|
163
|
+
source: ["association_label_regroup", "association_label", "has_contribution_count"],
|
|
164
|
+
title: (s) => s?.association_label_regroup ?? "",
|
|
165
|
+
// Les appellations brutes sont collees par des « ; » : la premiere suffit.
|
|
166
|
+
subtitle: (s) => String(s?.association_label ?? "").split(";")[0]?.trim() ?? "",
|
|
167
|
+
// L'`_id` du document EST le nom regroupe.
|
|
168
|
+
path: (_s, id) => drugsAssociationPath(id),
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
type: "FrPatientContribution",
|
|
172
|
+
index: ES_INDEX.ASSOCIATION_CONTRIBUTION_HAS,
|
|
173
|
+
label: { fr: "Contributions patients", en: "Patient contributions" },
|
|
174
|
+
section: ASSOCIATIONS,
|
|
175
|
+
icon: "ChatsCircle",
|
|
176
|
+
source: ["association_label_regroup", "has_code", "request_nature", "contribution_date", "contribution_url"],
|
|
177
|
+
// `brand_group` vient de l'index HAS (cf. withContributionBrands).
|
|
178
|
+
title: (s, l) => {
|
|
179
|
+
const association = s?.association_label_regroup ?? "";
|
|
180
|
+
if (l === "en") return s?.brand_group ? `${s.brand_group}, contribution by ${association}` : `Contribution by ${association}`;
|
|
181
|
+
return s?.brand_group ? `${s.brand_group}, contribution de ${association}` : `Contribution de ${association}`;
|
|
182
|
+
},
|
|
183
|
+
subtitle: (s, l) => {
|
|
184
|
+
const date = new Date(s?.contribution_date ?? "");
|
|
185
|
+
return [s?.request_nature, Number.isNaN(date.getTime()) ? "" : date.toLocaleDateString(l === "en" ? "en-GB" : "fr-FR"), s?.has_code]
|
|
186
|
+
.filter((v) => v && v !== "None")
|
|
187
|
+
.join(" · ");
|
|
188
|
+
},
|
|
189
|
+
path: (s) => drugsAssociationPath(s?.association_label_regroup),
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
type: "FrNationalAssemblySession",
|
|
193
|
+
index: ES_INDEX.ASSOCIATION_COMMISSION_SESSION_NATIONAL_ASSEMBLY,
|
|
194
|
+
label: { fr: "Assemblée nationale", en: "National Assembly" },
|
|
195
|
+
section: ASSOCIATIONS,
|
|
196
|
+
icon: "Bank",
|
|
197
|
+
source: ["agenda", "parliamentary_session", "session_date"],
|
|
198
|
+
title: (s) => s?.agenda ?? "",
|
|
199
|
+
subtitle: (s) => s?.parliamentary_session ?? "",
|
|
200
|
+
path: () => "/hubr/heart/associations/national-assembly",
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
type: "FrMedicamBrand",
|
|
204
|
+
index: ES_INDEX.RETAIL_MONTHLY_BRAND,
|
|
205
|
+
label: { fr: "Medic'AM (marques)", en: "Medic'AM (brands)" },
|
|
206
|
+
section: { fr: "Médicaments", en: "Drugs" },
|
|
207
|
+
icon: "ChartLine",
|
|
208
|
+
source: ["code", "period"],
|
|
209
|
+
title: (s) => s?.code ?? "",
|
|
210
|
+
subtitle: (s, l) => {
|
|
211
|
+
const last = s?.period ? `, ${l === "en" ? "latest month" : "dernier mois"} : ${s.period}` : "";
|
|
212
|
+
return l === "en" ? `Retail sales of the brand${last}` : `Ventes en ville de la marque${last}`;
|
|
213
|
+
},
|
|
214
|
+
path: () => "/medicam/market",
|
|
215
|
+
titleFromId: (id) => id.replace(/_\d{4}-\d{2}_\d+$/, ""),
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
type: "FrOutpatientBrand",
|
|
219
|
+
index: ES_INDEX.OUTPATIENT_BRAND,
|
|
220
|
+
label: { fr: "Outpatient (marques)", en: "Outpatient (brands)" },
|
|
221
|
+
section: { fr: "Outpatient (PHMEV)", en: "Outpatient (PHMEV)" },
|
|
222
|
+
icon: "Hospital",
|
|
223
|
+
source: ["code", "max_period"],
|
|
224
|
+
title: (s) => s?.code ?? "",
|
|
225
|
+
subtitle: (s, l) => {
|
|
226
|
+
const until = s?.max_period ? `, ${l === "en" ? "latest year" : "dernière année"} : ${s.max_period}` : "";
|
|
227
|
+
return l === "en"
|
|
228
|
+
? `Hospital prescriptions of the brand filled in town${until}`
|
|
229
|
+
: `Prescriptions hospitalières de la marque délivrées en ville${until}`;
|
|
230
|
+
},
|
|
231
|
+
path: () => "/outpatient",
|
|
232
|
+
titleFromId: (id) => id.replace(/_TOTAL$/, ""),
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
type: "FrSusBrand",
|
|
236
|
+
index: ES_INDEX.HOSPITAL_ANNUAL_SUS,
|
|
237
|
+
label: { fr: "Liste en sus (marques)", en: "Inpatient list (brands)" },
|
|
238
|
+
section: HOSPITAL,
|
|
239
|
+
icon: "Bed",
|
|
240
|
+
source: ["code", "period"],
|
|
241
|
+
title: (s) => s?.code ?? "",
|
|
242
|
+
subtitle: (s, l) => {
|
|
243
|
+
const last = s?.period ? `, ${l === "en" ? "latest year" : "dernière année"} : ${s.period}` : "";
|
|
244
|
+
return l === "en" ? `Hospital billing on top of the GHS${last}` : `Facturation en sus des GHS${last}`;
|
|
245
|
+
},
|
|
246
|
+
path: () => "/hospital/sus",
|
|
247
|
+
titleFromId: (id) => id.replace(/_brand_\d{4}_TOTAL_TOTAL_\d+$/, ""),
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
type: "FrRetrocessionBrand",
|
|
251
|
+
index: ES_INDEX.HOSPITAL_ANNUAL_RETROCESSION,
|
|
252
|
+
label: { fr: "Rétrocession (marques)", en: "Retrocession (brands)" },
|
|
253
|
+
section: HOSPITAL,
|
|
254
|
+
icon: "FirstAid",
|
|
255
|
+
source: ["code", "period"],
|
|
256
|
+
title: (s) => s?.code ?? "",
|
|
257
|
+
subtitle: (s, l) => {
|
|
258
|
+
const last = s?.period ? `, ${l === "en" ? "latest year" : "dernière année"} : ${s.period}` : "";
|
|
259
|
+
return l === "en" ? `Hospital retrocession of the brand${last}` : `Rétrocession hospitalière de la marque${last}`;
|
|
260
|
+
},
|
|
261
|
+
path: () => "/hospital/retrocession",
|
|
262
|
+
titleFromId: (id) => id.replace(/_brand_\d{4}$/, ""),
|
|
263
|
+
},
|
|
264
|
+
];
|