@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,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Teintes d'etiquette du portail.
|
|
3
|
+
*
|
|
4
|
+
* C'est le jeu de variantes de `RmTag`. Romulus declare l'union dans son
|
|
5
|
+
* composant mais ne la publie pas sur un chemin importable : elle est
|
|
6
|
+
* redeclaree ici, a l'identique, pour que les fabriques d'etiquettes de l'app
|
|
7
|
+
* (couleurs de statut ANSM, preferences de carte, pastilles des agences)
|
|
8
|
+
* rendent une valeur que le composant accepte.
|
|
9
|
+
*/
|
|
10
|
+
export type HeartTagColor =
|
|
11
|
+
| "default"
|
|
12
|
+
| "transparent"
|
|
13
|
+
| "gray"
|
|
14
|
+
| "rose"
|
|
15
|
+
| "pink"
|
|
16
|
+
| "fushia"
|
|
17
|
+
| "purple"
|
|
18
|
+
| "violet"
|
|
19
|
+
| "indigo"
|
|
20
|
+
| "blue"
|
|
21
|
+
| "sky"
|
|
22
|
+
| "cyan"
|
|
23
|
+
| "teal"
|
|
24
|
+
| "emerald"
|
|
25
|
+
| "green"
|
|
26
|
+
| "lime"
|
|
27
|
+
| "yellow"
|
|
28
|
+
| "amber"
|
|
29
|
+
| "orange";
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Champs de l'annuaire des associations de patients
|
|
3
|
+
* (`ES_INDEX.ASSOCIATION_DIRECTORY`).
|
|
4
|
+
*
|
|
5
|
+
* Le nom regroupe est la cle de toute la famille : c'est lui qui relie
|
|
6
|
+
* l'annuaire aux comites d'interface ANSM et aux contributions HAS. Il sert
|
|
7
|
+
* aussi d'`_id` du document.
|
|
8
|
+
*
|
|
9
|
+
* Deux ecarts avec le reste de l'app, portes par le mapping de l'index :
|
|
10
|
+
* - les libelles sont des `keyword` SANS sous-champ `.text` ni `.keyword` :
|
|
11
|
+
* on les trie et on les filtre tels quels, et la recherche par morceau de
|
|
12
|
+
* nom passe par une regexp (cf. `substringKeywordFields`) ;
|
|
13
|
+
* - les drapeaux sont des `keyword` qui valent la chaine "0" ou "1", pas des
|
|
14
|
+
* booleens.
|
|
15
|
+
*/
|
|
16
|
+
export const ASSOCIATION_FIELDS = {
|
|
17
|
+
/** Nom regroupe, cle de jointure de la famille et `_id` du document. */
|
|
18
|
+
label: "association_label_regroup",
|
|
19
|
+
/** Variantes du nom telles qu'ecrites dans les sources, separees par `;`. */
|
|
20
|
+
labelVariants: "association_label",
|
|
21
|
+
/** Texte libre, analyseur francais. */
|
|
22
|
+
description: "association_description",
|
|
23
|
+
/** Membre de France Assos Sante. */
|
|
24
|
+
fasMember: "is_assos_sante",
|
|
25
|
+
/**
|
|
26
|
+
* Domaines d'intervention France Assos Sante (28 domaines officiels, en
|
|
27
|
+
* francais, plusieurs par association). Vide hors membres ; "Non renseigne"
|
|
28
|
+
* quand le site du membre ne le dit pas.
|
|
29
|
+
*/
|
|
30
|
+
fasDomain: "assos_sante_domain",
|
|
31
|
+
/** Membre du conseil d'administration de France Assos Sante. */
|
|
32
|
+
fasBoard: "is_assos_sante_board",
|
|
33
|
+
/** Membre du bureau de France Assos Sante. */
|
|
34
|
+
fasExecutive: "is_assos_sante_executive_committee",
|
|
35
|
+
/** A siege dans un comite d'interface ANSM. */
|
|
36
|
+
ansmCommittee: "is_ansm_committee",
|
|
37
|
+
/** A contribue par ecrit a une evaluation HAS. */
|
|
38
|
+
hasContribution: "is_has_contribution",
|
|
39
|
+
/** Est citee dans une transcription de debat HAS. */
|
|
40
|
+
hasTranscription: "is_has_transcription",
|
|
41
|
+
/** Nombre de sessions de comite d'interface ANSM. */
|
|
42
|
+
ansmSessionCount: "ansm_committee_session_count",
|
|
43
|
+
/** Nombre de contributions ecrites HAS. */
|
|
44
|
+
hasContributionCount: "has_contribution_count",
|
|
45
|
+
/** Nombre de transcriptions HAS citant l'association. */
|
|
46
|
+
hasTranscriptionCount: "has_transcription_count",
|
|
47
|
+
/** Est citee dans un compte rendu de commission de l'Assemblee nationale. */
|
|
48
|
+
nationalAssembly: "is_national_assembly_commission",
|
|
49
|
+
/** Nombre de comptes rendus de commission de l'Assemblee nationale qui la citent. */
|
|
50
|
+
nationalAssemblyCount: "national_assembly_commission_count",
|
|
51
|
+
} as const;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Champs des comptes rendus de commission de l'Assemblee nationale
|
|
55
|
+
* (`ES_INDEX.ASSOCIATION_COMMISSION_SESSION_NATIONAL_ASSEMBLY`), un document
|
|
56
|
+
* par compte rendu.
|
|
57
|
+
*
|
|
58
|
+
* Les associations citees sont un tableau de noms regroupes, en `keyword`
|
|
59
|
+
* sans sous-champ : un `term` dessus suffit. Le texte du compte rendu est un
|
|
60
|
+
* `text` analyse en francais (jusqu'a 200 000 caracteres) : il se cherche par
|
|
61
|
+
* `match` / `query_string`, pas par regexp.
|
|
62
|
+
*/
|
|
63
|
+
export const NATIONAL_ASSEMBLY_FIELDS = {
|
|
64
|
+
/** Identifiant du compte rendu, aussi `_id` du document. */
|
|
65
|
+
documentId: "document_id",
|
|
66
|
+
/** Numero du compte rendu dans la session. */
|
|
67
|
+
documentNumber: "document_number",
|
|
68
|
+
/** Associations citees, noms regroupes (cf. ASSOCIATION_FIELDS.label). */
|
|
69
|
+
associations: "association_label_regroup",
|
|
70
|
+
/** Texte complet du compte rendu, analyseur francais. */
|
|
71
|
+
text: "document_text",
|
|
72
|
+
/** Ordre du jour, analyseur francais. */
|
|
73
|
+
agenda: "agenda",
|
|
74
|
+
/** Date de la seance, vrai `date`. */
|
|
75
|
+
sessionDate: "session_date",
|
|
76
|
+
/** Numero de legislature (17). */
|
|
77
|
+
legislature: "legislature",
|
|
78
|
+
/** Session parlementaire (« 2025-2026 »), `keyword`. */
|
|
79
|
+
parliamentarySession: "parliamentary_session",
|
|
80
|
+
amendmentsAdopted: "amendment_adopted_count",
|
|
81
|
+
amendmentsRejected: "amendment_rejected_count",
|
|
82
|
+
/** Le compte rendu sur assemblee-nationale.fr. */
|
|
83
|
+
htmlUrl: "html_url",
|
|
84
|
+
/** La copie Tekkare du compte rendu (HTML). */
|
|
85
|
+
tekkareUrl: "tekkare_url",
|
|
86
|
+
/** Le compte rendu a une fiche de synthese (booleen). */
|
|
87
|
+
hasLlm: "has_llm",
|
|
88
|
+
/** Pertinence pharma de la fiche (Haute, Moyenne, Faible, Aucune), `keyword`. */
|
|
89
|
+
pharmaRelevance: "pertinence_pharma",
|
|
90
|
+
/** Themes pharma de la fiche, `keyword`. */
|
|
91
|
+
pharmaTags: "tags_pharma",
|
|
92
|
+
/**
|
|
93
|
+
* Associations du referentiel citees dans la fiche, memes libelles que
|
|
94
|
+
* `association_label_regroup` de l'annuaire, `keyword`.
|
|
95
|
+
*/
|
|
96
|
+
ficheAssociations: "tags_associations",
|
|
97
|
+
/** Projet de loi de financement de la securite sociale, lu dans l'ordre du jour (booleen). */
|
|
98
|
+
isPlfss: "is_plfss",
|
|
99
|
+
/** Controles de la fiche non passes, une phrase chacun. */
|
|
100
|
+
warnings: "warnings",
|
|
101
|
+
/** La fiche complete, non indexee (`enabled: false`) : se lit, ne se cherche pas. */
|
|
102
|
+
fiche: "fiche",
|
|
103
|
+
} as const;
|
|
104
|
+
|
|
105
|
+
/** Les drapeaux de l'annuaire valent la chaine "1" quand ils sont leves. */
|
|
106
|
+
export const ASSOCIATION_FLAG_ON = "1";
|
|
107
|
+
|
|
108
|
+
/** Les domaines d'un document, tels que l'index les ecrit (tableau ou valeur seule). */
|
|
109
|
+
export function associationDomains(doc: any): string[] {
|
|
110
|
+
const raw = doc?.[ASSOCIATION_FIELDS.fasDomain];
|
|
111
|
+
const list = Array.isArray(raw) ? raw : raw ? [raw] : [];
|
|
112
|
+
return list.map((value) => String(value).trim()).filter(Boolean);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/** La clause `term` d'un drapeau, pour les cases a cocher de la barre. */
|
|
116
|
+
export function associationFlagCheck(field: string) {
|
|
117
|
+
return { term: { [field]: ASSOCIATION_FLAG_ON } };
|
|
118
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { ES_INDEX } from "../esIndices";
|
|
2
|
+
import { oipEsSearch } from "../../composables/useOipResources";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* L'index des contributions ne porte pas la marque : elle se relit dans
|
|
6
|
+
* l'index HAS, par l'URL de la contribution, en une requete pour toutes
|
|
7
|
+
* (repris de France Augmented Science). Ecrit `brand_group` dans chaque
|
|
8
|
+
* document ; sans marque, la contribution se titre par son association.
|
|
9
|
+
*/
|
|
10
|
+
export async function withContributionBrands(docs: Record<string, any>[]) {
|
|
11
|
+
const urls = [...new Set(docs.map((doc) => doc?.contribution_url).filter(Boolean))];
|
|
12
|
+
if (!urls.length) return;
|
|
13
|
+
try {
|
|
14
|
+
const response: any = await oipEsSearch("drugs", ES_INDEX.BRAND_HAS, {
|
|
15
|
+
size: urls.length,
|
|
16
|
+
_source: ["brand_group"],
|
|
17
|
+
query: {
|
|
18
|
+
nested: {
|
|
19
|
+
path: "patient_contribution",
|
|
20
|
+
query: { terms: { "patient_contribution.contribution_url.keyword": urls } },
|
|
21
|
+
inner_hits: { size: 100, _source: ["patient_contribution.contribution_url"] },
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
const brandByUrl = new Map<string, string>();
|
|
26
|
+
for (const brand of response?.hits?.hits ?? []) {
|
|
27
|
+
for (const inner of brand.inner_hits?.patient_contribution?.hits?.hits ?? []) {
|
|
28
|
+
const url = inner._source?.contribution_url;
|
|
29
|
+
if (url && !brandByUrl.has(url)) brandByUrl.set(url, brand._source?.brand_group ?? brand._id);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
for (const doc of docs) if (doc) doc.brand_group = brandByUrl.get(doc.contribution_url) ?? "";
|
|
33
|
+
} catch {
|
|
34
|
+
// Sans la marque, la contribution se titre par son association.
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Portage du store `countryMapping` de fr_drugs_app (useCountryStore) : la
|
|
3
|
+
* table des pays du suivi international des prix, figee dans le code. Ce
|
|
4
|
+
* n'etait pas un etat mais une donnee de reference : plus de Pinia, une
|
|
5
|
+
* constante et des lecteurs de meme nom (`useCountryStore().getCountryName(id)`
|
|
6
|
+
* s'ecrit comme avant).
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
export interface CountryEntry {
|
|
10
|
+
name: string;
|
|
11
|
+
countryCode: string;
|
|
12
|
+
image: string;
|
|
13
|
+
sourceContent: string;
|
|
14
|
+
providerContent: string;
|
|
15
|
+
icon: string;
|
|
16
|
+
currencyCode: string;
|
|
17
|
+
currencySymbol: string;
|
|
18
|
+
currencyName: string;
|
|
19
|
+
source: string;
|
|
20
|
+
shortSource: string | string[];
|
|
21
|
+
reimbursementType: string;
|
|
22
|
+
nameFlag: string;
|
|
23
|
+
priceTypes: string[];
|
|
24
|
+
frProviderContent?: string;
|
|
25
|
+
frSourceContent?: string;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export const COUNTRY_DICTIONARY = {
|
|
29
|
+
ch: {
|
|
30
|
+
name: "Switzerland",
|
|
31
|
+
countryCode: "ch",
|
|
32
|
+
image:
|
|
33
|
+
"https://rcd-media.com/images/style/country/Flags/switzerland.png",
|
|
34
|
+
sourceContent:
|
|
35
|
+
"The list of specialties (LS) specifies the maximum price that pharmacists, doctors, hospitals and nursing homes can charge for medicines. This maximum price is made up of the manufacturer's price, the distribution portion and VAT.",
|
|
36
|
+
providerContent:
|
|
37
|
+
"As part of the Federal Department of Home Affairs, the Federal Office of Public Health (FOPH) is responsible for public health in Switzerland; it develops Switzerland’s health policy and works to ensure that the country has an efficient and affordable healthcare system in the long term.1) FOPH is responsible for determining which drugs are included in the mandatory basic insurance package. The main outpatient formulary for the mandatory insurance package is called the List of Pharmaceutical Specialties.",
|
|
38
|
+
icon: "https://rcd-media.com/images/style/country/switzerland.png",
|
|
39
|
+
currencyCode: "CHF",
|
|
40
|
+
currencySymbol: "CHF",
|
|
41
|
+
currencyName: "Swiss Franc",
|
|
42
|
+
source:
|
|
43
|
+
"Office Fédéral de la Santé Publique (OFSP) – List of specialties (LS) and list of specialties for congenital disabilities (LSIC)",
|
|
44
|
+
shortSource: "OFSP - LS & LSIC",
|
|
45
|
+
reimbursementType: "",
|
|
46
|
+
nameFlag: "🇨🇭 Switzerland",
|
|
47
|
+
priceTypes: ['ex', 'public']
|
|
48
|
+
},
|
|
49
|
+
it: {
|
|
50
|
+
countryCode: "it",
|
|
51
|
+
sourceContent:
|
|
52
|
+
"The transparency list history database provides the list of medicinal products and the relative reference prices including the reduction foreseen pursuant to the AIFA Resolution of 3 July 2006, the further reduction of 5% pursuant to the AIFA Resolution of 27 September 2006, art. 9 paragraph 1, of Law No. 31 of 28 February 2008 (payback) and paragraph 9 of article 11 of Legislative Decree 78/2010 converted with amendments by Law No. 122 of 30 July 2010. AIFA publishes the lists, in order to allow the Regions and Autonomous Provinces a homogeneous application of the provisions of art. 9, paragraph 5 of Law No. 178 of 8 August 2002.",
|
|
53
|
+
providerContent:
|
|
54
|
+
"AIFA is the national public body that regulates medicines for human use in Italy. AIFA governs pharmaceutical expenditure and follows the life cycle of the medicine to ensure its effectiveness, safety and appropriateness as well as access to the national territory.",
|
|
55
|
+
name: "Italy",
|
|
56
|
+
image: "https://rcd-media.com/images/style/country/Flags/italy.png",
|
|
57
|
+
icon: "https://rcd-media.com/images/style/country/italy.png",
|
|
58
|
+
currencyCode: "EUR",
|
|
59
|
+
currencySymbol: "€",
|
|
60
|
+
currencyName: "Euro",
|
|
61
|
+
source:
|
|
62
|
+
"AIFA Agenzia Italiana del Farmaco (AIFA) – Transparency List History Database",
|
|
63
|
+
shortSource: "AIFA - Transparency List History",
|
|
64
|
+
reimbursementType: "Maximum Reimbursement",
|
|
65
|
+
nameFlag: "🇨🇮 Italy",
|
|
66
|
+
priceTypes: ['ex', 'public']
|
|
67
|
+
},
|
|
68
|
+
de: {
|
|
69
|
+
sourceContent:
|
|
70
|
+
"The Yellow List Online and the Yellow List App are online services of Vidal MMI Germany GmbH (Vidal MMI) and offer medical and pharmaceutical news, information and databases for doctors, pharmacists and other medical professionals. The purpose of the company is to prepare and provide cross-media secure drug data, medical information, services and corresponding software solutions for medical and pharmaceutical professionals in Germany. These specialist groups include doctors, pharmacists, medical and pharmaceutical specialists, nursing and rescue workers as well as other health professionals and employees in the pharmaceutical industry.",
|
|
71
|
+
providerContent:
|
|
72
|
+
"Vidal MMI Germany GmbH (Vidal MMI) offers comprehensive and independently prepared drug data for doctors, clinics, nursing homes, pharmacies, authorities and healthcare companies.",
|
|
73
|
+
name: "Germany",
|
|
74
|
+
image: "https://rcd-media.com/images/style/country/Flags/germany.png",
|
|
75
|
+
icon: "https://rcd-media.com/images/style/country/germany.png",
|
|
76
|
+
currencyCode: "EUR",
|
|
77
|
+
currencySymbol: "€",
|
|
78
|
+
currencyName: "Euro",
|
|
79
|
+
source:
|
|
80
|
+
"Vidal MMI Germany GmbH - Yellow List Pharmindex (Gelbe Liste Pharmnidex) ",
|
|
81
|
+
shortSource: "Vidal GmbH - Yellow List Pharmindex ",
|
|
82
|
+
reimbursementType: "Maximum Reimbursement",
|
|
83
|
+
countryCode: "de",
|
|
84
|
+
nameFlag: "🇩🇪 Germany",
|
|
85
|
+
priceTypes: ['public']
|
|
86
|
+
},
|
|
87
|
+
dk: {
|
|
88
|
+
sourceContent:
|
|
89
|
+
"The medicine prices database provides access to the prices of medicines in the Danish market. In Denmark, medicines are sold at a fixed, uniform price at the country's pharmacies. This applies to prescription medicines and over-the-counter medicines reserved for pharmacies, which may only be sold in pharmacies. The pharmaceutical companies have the opportunity to report price changes every 14 days to the Danish Medicines Agency. ",
|
|
90
|
+
providerContent:
|
|
91
|
+
"eSundhed (eHealth) is the Danish Health and Data Protection Agency's data bank with health data, which should help to create greater insight into the Danish healthcare system through, among other things, availability and visibility of health data.",
|
|
92
|
+
name: "Denmark",
|
|
93
|
+
countryCode: "dk",
|
|
94
|
+
nameFlag: "🇩🇰 Denmark",
|
|
95
|
+
image: "https://rcd-media.com/images/style/country/Flags/denmark.png",
|
|
96
|
+
icon: "https://rcd-media.com/images/style/country/denmark.png",
|
|
97
|
+
currencyCode: "DKK",
|
|
98
|
+
currencySymbol: "kr",
|
|
99
|
+
currencyName: "Danish Krone",
|
|
100
|
+
source: "eSundhed - Medicine Prices Database",
|
|
101
|
+
shortSource: "eSundhed - Medicine Prices ",
|
|
102
|
+
reimbursementType: "",
|
|
103
|
+
priceTypes: ['aip', 'aup', 'aup_ddd', 'ddd']
|
|
104
|
+
},
|
|
105
|
+
es: {
|
|
106
|
+
sourceContent:
|
|
107
|
+
"Vademecum.es is officially recognized by the corresponding health authorities as a Valid Support to include advertising of prescription drugs or pharmaceutical specialties aimed at health professionals (S.V.nº09/10-W-CM), granted on December 3, 2010.",
|
|
108
|
+
providerContent:
|
|
109
|
+
"The VIDAL Vademecum databases and its Clinical Decision Support Modules have been created by a multinational team of health experts from 8 European countries (pharmacists, pharmacologists, physicians, scientists, database architects and medical informatics specialists) based on local official guidelines and taking into account internationally recognized official sources (EMA, FDA, ANSM, AEMPS, COFEPRIS, ISP, IHSS, MSP...). In Latin America and Spain, the contents of the databases created by VIDAL Vademecum comply with and are based on the documents and forms elaborated by the main drug regulatory agencies of these countries (AEMPS, COFEPRIS, ISP, IHSS, MSP, etc.) in order to provide the health professionals of these countries with a secure IT solution adapted to the local pharmacological products to which these professionals have access in their daily clinical practice.",
|
|
110
|
+
name: "Spain",
|
|
111
|
+
image: "https://rcd-media.com/images/style/country/Flags/spain.png",
|
|
112
|
+
icon: "https://rcd-media.com/images/style/country/spain.png",
|
|
113
|
+
currencyCode: "EUR",
|
|
114
|
+
currencySymbol: "€",
|
|
115
|
+
currencyName: "Euro",
|
|
116
|
+
source: "ViDAL Vademecum - Vademecum.es ",
|
|
117
|
+
shortSource: "ViDAL Vademecum - Vademecum.es",
|
|
118
|
+
reimbursementType: "",
|
|
119
|
+
countryCode: "es",
|
|
120
|
+
nameFlag: "🇪🇸 Spain",
|
|
121
|
+
priceTypes: ['ex', 'public']
|
|
122
|
+
},
|
|
123
|
+
fr: {
|
|
124
|
+
frSourceContent: "La base des médicaments et Informations Tarifaires (BdM_IT) comprend à la fois les médicaments : • remboursables aux assurés sociaux et agréés aux collectivités (identifiés par un code CIP). Ces données sont actualisés toutes les semaines. • rétrocédés et facturables en sus des GHS par les établissements de santé (identifiés par un code UCD). Ces données sont actualisées toutes les semaines en fonction des parutions au journal officiel.",
|
|
125
|
+
sourceContent:
|
|
126
|
+
"The drugs and pricing information database includes both drugs: • reimbursable by social security and approved for the public sector (identified by a CIP code). These data are updated weekly. • drugs that are retroceded and billed in addition to GHS by healthcare establishments (identified by a UCD CODE). These data are updated on a weekly basis in line with the Official Journal.",
|
|
127
|
+
frProviderContent:"La France dispose d'un système public d'assurance maladie appelé l'assurance maladie. Elle est gérée par la Sécurité sociale, qui gère les prestations sociales liées aux soins médicaux, à la retraite, à la famille et aux accidents. Elle accompagne plus de 66 millions d'assurés sociaux tout au long de leur vie, en prenant en charge leurs soins quels que soient leurs ressources, leur situation ou leur état de santé. Elle garantit ainsi l'accès universel aux droits et permet l'accès aux soins. Elle fait aussi beaucoup plus : elle agit en amont de la maladie et de ses complications, avec une offre de services préventifs qui ne cesse de s'étoffer. Sur le lieu de travail aussi, nous renforçons nos dispositifs pour protéger les salariés les plus exposés et les plus vulnérables.",
|
|
128
|
+
providerContent:"France has a public health insurance system called l'assurance maladie. It is administered by the French social security office (la sécurité sociale), which manages social benefits related to medical care, retirement, family matters, and accidents. It supports more than 66 million insured people throughout their lives, by paying for their care whatever their resources, situation or state of health. In this way, it guarantees universal access to rights and enables access to care. It also does much more: it acts upstream of illness and its complications, with an ever-expanding range of preventive services. In the workplace, too, we are strengthening our systems to protect the most exposed and vulnerable employees.",
|
|
129
|
+
name: "France",
|
|
130
|
+
image: "https://rcd-media.com/images/style/country/Flags/france.png",
|
|
131
|
+
icon: "https://rcd-media.com/images/style/country/france.png",
|
|
132
|
+
currencyCode: "EUR",
|
|
133
|
+
currencySymbol: "€",
|
|
134
|
+
currencyName: "Euro",
|
|
135
|
+
source:
|
|
136
|
+
"L’Assurance Maladie – Base des Médicaments et Informations Tarifaires (The Drugs and Pricing Information Database)",
|
|
137
|
+
shortSource:
|
|
138
|
+
"L’Assurance Maladie - Base des Médicaments et Informations Tarifaires ",
|
|
139
|
+
reimbursementType: "Reimbursement Rate",
|
|
140
|
+
countryCode: "fr",
|
|
141
|
+
nameFlag: "🇫🇷 France",
|
|
142
|
+
priceTypes: ['ex', 'public']
|
|
143
|
+
},
|
|
144
|
+
br: {
|
|
145
|
+
sourceContent:
|
|
146
|
+
"The Medicines Market Regulation Chamber (CMED) is the inter-ministerial body responsible for the economic regulation of the medicines market in Brazil and Anvisa acts as the Chamber's Executive Secretary. CMED sets price limits for medicines, adopts rules that stimulate competition in the sector, monitors marketing and applies penalties when its rules are breached. It is also responsible for setting and monitoring the application of the mandatory minimum discount for public purchases.",
|
|
147
|
+
providerContent:
|
|
148
|
+
"The Brazilian Health Regulatory Agency (Anvisa) is an autarchy linked to the Ministry of Health, part of the Brazilian National Health System (SUS) as the coordinator of the Brazilian Health Regulatory System (SNVS), present throughout the national territory. Anvisa's role is to promote the protection of the population's health by executing sanitary control of the production, marketing and use of products and services subject to health regulation, including related environments, processes, ingredients and technologies, as well as the control in ports, airports and borders.",
|
|
149
|
+
name: "Brazil",
|
|
150
|
+
image: "https://rcd-media.com/images/style/country/Flags/brazil.png",
|
|
151
|
+
icon: "https://rcd-media.com/images/style/country/brazil.png",
|
|
152
|
+
currencyCode: "BRL",
|
|
153
|
+
currencySymbol: "R$",
|
|
154
|
+
currencyName: "Brazilian Real",
|
|
155
|
+
source:
|
|
156
|
+
"Agência Nacional de Vigilância Sanitária (Anvisa) – Câmara de Regulação do Mercado de Medicamentos (CMED)",
|
|
157
|
+
shortSource: "Anvisa - CMED",
|
|
158
|
+
reimbursementType: "",
|
|
159
|
+
countryCode: "br",
|
|
160
|
+
nameFlag: "🇧🇷 Brazil",
|
|
161
|
+
priceTypes: ['ex', 'public', 'gov']
|
|
162
|
+
},
|
|
163
|
+
se: {
|
|
164
|
+
sourceContent:
|
|
165
|
+
"Tandvårds- och läkemedelsförmånsverket (TLV : The Dental and Pharmaceutical Benefits Agency) The Dental and Pharmaceutical Benefits Agency, TLV, is a central government agency whose remit is to determine whether a pharmaceutical product, medical device or dental care procedure shall be subsidized by the state. TLV also determine retail margins for all pharmacies in Sweden, regulate the substitution of medicines at the pharmacies and supervise certain areas of the pharmaceutical market.",
|
|
166
|
+
providerContent: "To complete",
|
|
167
|
+
name: "Sweden",
|
|
168
|
+
image: "https://rcd-media.com/images/style/country/Flags/sweden.png",
|
|
169
|
+
icon: "https://rcd-media.com/images/style/country/sweden.png",
|
|
170
|
+
currencyCode: "SEK",
|
|
171
|
+
currencySymbol: "kr(SEK)",
|
|
172
|
+
currencyName: "Swedish Krona",
|
|
173
|
+
source: "TLV",
|
|
174
|
+
shortSource: "TLV",
|
|
175
|
+
reimbursementType: "",
|
|
176
|
+
countryCode: "se",
|
|
177
|
+
nameFlag: "🇸🇪 Sweden",
|
|
178
|
+
priceTypes: ['wholesale', 'public']
|
|
179
|
+
},
|
|
180
|
+
gb: {
|
|
181
|
+
sourceContent: [
|
|
182
|
+
"The dm+d is a dictionary of descriptions and codes which represent medicines and devices in use across the NHS. The dm+d data is refreshed weekly and contains a huge variety of information, including: • whether a product will be reimbursed by NHSBSA, if submitted for reimbursement by a dispensing contractor • the indicative price of each pack of a product (where a price is maintained) • current and discontinued products and packs available from manufacturers and suppliers",
|
|
183
|
+
"The British National Formulary (BNF) is a pharmaceutical reference book that contains comprehensive information about prescribing, dispensing, and administering medicines. It is published jointly by the British Medical Association (BMA) and the Royal Pharmaceutical Society (RPS) of Great Britain. The BNF is widely used by healthcare professionals in the United Kingdom, including doctors, pharmacists, nurses, and other healthcare practitioners.",
|
|
184
|
+
"The BNF / Snomed mapping data published by the NHS Business Services Authority (NHS BSA) represents mapped data between the Dictionary of Medicines and Devices (dm+d) and the legacy Master Data Replacement (MDR) drug database. The dataset shows one row for every VMP / AMP / VMPP / AMPP record and a field showing which BNF code this maps to.",
|
|
185
|
+
],
|
|
186
|
+
providerContent: [
|
|
187
|
+
"The NHS (National Health Service) is the Government-funded medical and health care services that provides comprehensive healthcare service everyone living in the UK can use without being asked to pay the full cost of the service. The NHS was established in 1948. Each region (England/Scotland/Wales/Northern Ireland) runs their local publicly funded health care service (NHS England, NHS Wales, and NHS Scotland. For Northern Ireland, there is 'Health and Social care service', which provides publicly funded health care service working similar with NHS).",
|
|
188
|
+
"The NICE evaluates new health technologies for NHS use, considering clinical effectiveness and value for money. They also produce useful and usable guidance, helping health and care practitioners deliver the best care.",
|
|
189
|
+
"The NHS (National Health Service) is the Government-funded medical and health care services that provides comprehensive healthcare service everyone living in the UK can use without being asked to pay the full cost of the service. The NHS was established in 1948. Each region (England/Scotland/Wales/Northern Ireland) runs their local publicly funded health care service (NHS England, NHS Wales, and NHS Scotland. For Northern Ireland, there is 'Health and Social care service', which provides publicly funded health care service working similar with NHS).",
|
|
190
|
+
],
|
|
191
|
+
|
|
192
|
+
name: "United Kingdom",
|
|
193
|
+
image: "https://rcd-media.com/images/style/country/Flags/uk.png",
|
|
194
|
+
icon: "https://rcd-media.com/images/style/country/uk.png",
|
|
195
|
+
currencyCode: "GBP",
|
|
196
|
+
currencySymbol: "£",
|
|
197
|
+
currencyName: "British Pound",
|
|
198
|
+
source: [
|
|
199
|
+
"NHS - NHSBSA Dictionary of Medicines and Devices (dm+d)",
|
|
200
|
+
"The National Institute for Health and Care Excellence (NICE) – The British National Formulary (BNF)",
|
|
201
|
+
"NHS – BNF/SNOMED Mapping Database",
|
|
202
|
+
],
|
|
203
|
+
shortSource: [
|
|
204
|
+
"NHS – NHSBSA (dm+d)",
|
|
205
|
+
"NICE - BNF",
|
|
206
|
+
"NHS – BNF/SNOMED Mapping Database",
|
|
207
|
+
],
|
|
208
|
+
reimbursementType: "Maximum Reimbursement",
|
|
209
|
+
countryCode: "gb",
|
|
210
|
+
nameFlag: "🇬🇧 United Kingdom",
|
|
211
|
+
priceTypes: ['public']
|
|
212
|
+
},
|
|
213
|
+
no: {
|
|
214
|
+
sourceContent:
|
|
215
|
+
"The data is extracted from the price and reimbursement list database. ",
|
|
216
|
+
providerContent:
|
|
217
|
+
"NOMA is an agency under the Ministry of Health and Care Services. NoMA is resposnsible for various tasks for pharmaceutical system, such as assessment of medicines, market authorization, price determination, reimbursement, pharmacovigilance and supervising clinical trial.",
|
|
218
|
+
name: "Norway",
|
|
219
|
+
image: "https://rcd-media.com/images/style/country/Flags/norway.png",
|
|
220
|
+
icon: "https://rcd-media.com/images/style/country/norway.png",
|
|
221
|
+
currencyCode: "NOK",
|
|
222
|
+
currencySymbol: "kr(NOK)",
|
|
223
|
+
currencyName: "Norwegian Krone",
|
|
224
|
+
source:
|
|
225
|
+
"Statens legemiddelverk (NoMA: The Norwegian Medicines Agency) – Price and Reimbursement List Database",
|
|
226
|
+
shortSource: "NoMA - Price & Reimbursement List",
|
|
227
|
+
reimbursementType: "Maximum Reimbursement",
|
|
228
|
+
countryCode: "no",
|
|
229
|
+
nameFlag: "🇳🇴 Norway",
|
|
230
|
+
priceTypes: ['wholesale', 'public']
|
|
231
|
+
},
|
|
232
|
+
au: {
|
|
233
|
+
name: "Australia",
|
|
234
|
+
image:
|
|
235
|
+
"https://rcd-media.com/images/style/country/Flags/australia.png",
|
|
236
|
+
sourceContent:
|
|
237
|
+
"The Pharmaceutical Benefits Scheme (PBS) began as a limited scheme in 1948, with free medicines for pensioners and a list of 139 ‘life-saving and disease preventing’ medicines free of charge for others in the community. Today the PBS provides timely, reliable and affordable access to necessary medicines for Australians. The PBS is part of the Australian Government’s broader National Medicines Policy. The aim of the National Medicines Policy is to meet medication and related service needs, so that both optimal health outcomes and economic objectives are achieved. Under the PBS, the government subsidises the cost of medicine for most medical conditions. Most of the listed medicines are dispensed by pharmacists, and used by patients at home.",
|
|
238
|
+
providerContent:
|
|
239
|
+
"The Australian Government’s Department of Health and Aged Care develops and delivers policies and programs and advise the Australian Government on health, aged care and sport. They work with a wide range of stakeholders to ensure better health for all Australians.",
|
|
240
|
+
icon: "https://rcd-media.com/images/style/country/australia.png",
|
|
241
|
+
currencyCode: "AUD",
|
|
242
|
+
currencySymbol: "A$",
|
|
243
|
+
currencyName: "Australian Dollar",
|
|
244
|
+
source:
|
|
245
|
+
"Department of Health and Aged Care - The Pharmaceutical Benefits Scheme (PBS)",
|
|
246
|
+
shortSource: "Department of Health and Aged Care - PBS",
|
|
247
|
+
reimbursementType: "",
|
|
248
|
+
countryCode: "au",
|
|
249
|
+
nameFlag: "🇦🇺 Australia",
|
|
250
|
+
priceTypes: ['ex']
|
|
251
|
+
},
|
|
252
|
+
us: {
|
|
253
|
+
sourceContent: [
|
|
254
|
+
"The quarterly drug pricing files provide the Average Sales Price (ASP) of some Part B-covered drugs and biologicals.",
|
|
255
|
+
"Since July 2015, on its website every two weeks, the VA National Acquisition Center posts and updates its negotiated pharmaceutical prices with vendors. ",
|
|
256
|
+
],
|
|
257
|
+
providerContent: [
|
|
258
|
+
"The Centers for Medicare and Medicaid Services (CMS) provides health coverage to more than 100 million people through Medicare, Medicaid, the Children’s Health Insurance Program, and the Health Insurance Marketplace. The CMS seeks to strengthen and modernize the Nation’s health care system, to provide access to high quality care and improved health at lower costs.",
|
|
259
|
+
"The Department of Veterans Affairs (VA) runs programs benefiting veterans and members of their families. It offers education opportunities and rehabilitation services and provides compensation payments for disabilities or death related to military service, home loan guaranties, pensions, burials, and health care that includes the services of nursing homes, clinics, and medical centers.",
|
|
260
|
+
],
|
|
261
|
+
name: "United States",
|
|
262
|
+
image: "https://rcd-media.com/images/style/country/Flags/usa.png",
|
|
263
|
+
icon: "https://rcd-media.com/images/style/country/usa.png",
|
|
264
|
+
currencyCode: "USD",
|
|
265
|
+
currencySymbol: "$",
|
|
266
|
+
currencyName: "Dollar",
|
|
267
|
+
source: [
|
|
268
|
+
"CMS – ASP Pricing Files",
|
|
269
|
+
"U.S. Department of Veterans Affairs – Historical VA Pharmaceutical Prices",
|
|
270
|
+
],
|
|
271
|
+
shortSource: [
|
|
272
|
+
"CMS – ASP Pricing Files",
|
|
273
|
+
"Department of Veterans Affairs",
|
|
274
|
+
],
|
|
275
|
+
reimbursementType: "",
|
|
276
|
+
countryCode: "us",
|
|
277
|
+
nameFlag: "🇺🇸 United States",
|
|
278
|
+
priceTypes: ['fss', 'big4', 'nc', 'asp']
|
|
279
|
+
},
|
|
280
|
+
pl: {
|
|
281
|
+
sourceContent:
|
|
282
|
+
"The data is extracted from the Announcements of the Minister of Health - list of reimbursed drugs database, which is renewed every two months.",
|
|
283
|
+
providerContent:
|
|
284
|
+
"The Ministry of Health is the governmental administration office that supports the minister of health. As part of this service, it performs tasks such as in terms of:• supervision over the National Health Fund; • reimbursement of drugs, medical devices and foodstuffs for particular nutritional uses; • supervision over the performance of medical professions; • developing and coordinating the implementation of health programs; • organization and supervision of the State Medical Rescue system; • implementation of tasks related to spa treatment.",
|
|
285
|
+
name: "Poland",
|
|
286
|
+
image: "https://rcd-media.com/images/style/country/Flags/poland.png",
|
|
287
|
+
icon: "https://rcd-media.com/images/style/country/poland.png",
|
|
288
|
+
currencyCode: "PLN",
|
|
289
|
+
currencySymbol: "zł",
|
|
290
|
+
currencyName: "Polish Zloty",
|
|
291
|
+
source:
|
|
292
|
+
"Ministerstwo Zdrowia (Ministry of Health) - Announcements of the Minister of Health, List of Reimbursed Drugs Database",
|
|
293
|
+
shortSource: "Ministry of Health - List of Reimbursed Drugs",
|
|
294
|
+
reimbursementType: "",
|
|
295
|
+
countryCode: "pl",
|
|
296
|
+
nameFlag: "🇵🇱 Poland",
|
|
297
|
+
priceTypes: ['ex', 'wholesale', 'public']
|
|
298
|
+
},
|
|
299
|
+
jp: {
|
|
300
|
+
sourceContent:
|
|
301
|
+
"This data is based on the list of drugs listed on National Health Insurance Drug Price Standards provided by Ministry of Health, Labor and Welfare (MHLW) / 厚生労働省. The list shows approximately 14,000 ethical drugs that are used by medical institutions for medical treatment under the National Health Insurance (NHI), which means drugs listed on the National Health Insurance (NHI) Drug Price Standards.",
|
|
302
|
+
providerContent:
|
|
303
|
+
"The Ministry of Health, Labour and Welfare (MHLW) is an administrative body in Japan that is responsible for health, medical care, child care, welfare, nursing care, employment, labor, and pensions. As for specific operations related to medical and pharmaceutical products, MHLW carry out consistent regulations from manufacturing to marketing and post-marketing safety measures in accordance with relevant laws and regulations, in order to ensure the efficacy and safety of pharmaceuticals and medical devices.",
|
|
304
|
+
name: "Japan",
|
|
305
|
+
image: "https://rcd-media.com/images/style/country/Flags/japan.png",
|
|
306
|
+
icon: "https://rcd-media.com/images/style/country/japan.png",
|
|
307
|
+
currencyCode: "JPY",
|
|
308
|
+
currencySymbol: "¥",
|
|
309
|
+
currencyName: "Japanese Yen",
|
|
310
|
+
source:
|
|
311
|
+
"The Ministry of Health, Labour and Welfare – The NHI Drug Price Standards and Information on Generic Drugs Database",
|
|
312
|
+
shortSource:
|
|
313
|
+
"Ministry of Health, Labour and Welfare – NHI Drug Price Standards",
|
|
314
|
+
reimbursementType: "",
|
|
315
|
+
nameFlag: "🇯🇵 Japan",
|
|
316
|
+
countryCode: "jp",
|
|
317
|
+
priceTypes: ['public']
|
|
318
|
+
},
|
|
319
|
+
|
|
320
|
+
// "be": {
|
|
321
|
+
// name: "Belgium",
|
|
322
|
+
// image: "https://rcd-media.com/images/style/country/Flags/belgium.png",
|
|
323
|
+
// currencyCode: "EUR",
|
|
324
|
+
// source: "INAMI",
|
|
325
|
+
// },
|
|
326
|
+
} as unknown as Record<string, CountryEntry>;
|
|
327
|
+
|
|
328
|
+
function codeWhere(test: (entry: CountryEntry) => boolean): string | undefined {
|
|
329
|
+
let id: string | undefined;
|
|
330
|
+
Object.keys(COUNTRY_DICTIONARY).forEach((code) => {
|
|
331
|
+
const entry = COUNTRY_DICTIONARY[code];
|
|
332
|
+
if (entry && test(entry)) id = code;
|
|
333
|
+
});
|
|
334
|
+
return id;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
/** Les lecteurs du store d'origine, memes noms et memes signatures. */
|
|
338
|
+
export function useCountryStore() {
|
|
339
|
+
const dict = COUNTRY_DICTIONARY;
|
|
340
|
+
const getCountryCode = (country: string) => codeWhere((entry) => entry.name === country);
|
|
341
|
+
return {
|
|
342
|
+
countryDictionary: dict,
|
|
343
|
+
getCountryDict: dict,
|
|
344
|
+
getCountryReimbursementType: (id: string) => dict[id]?.reimbursementType,
|
|
345
|
+
getCountryName: (id: string) => dict[id]?.name,
|
|
346
|
+
getCountryNameFlag: (id: string) => (id === undefined ? undefined : dict[id]?.nameFlag),
|
|
347
|
+
getCountryImage: (id: string) => dict[id]?.image,
|
|
348
|
+
getCountryIcon: (id: string) => dict[id]?.icon,
|
|
349
|
+
getCurrencyCode: (id: string) => dict[id]?.currencyCode,
|
|
350
|
+
getCountrySource: (id: string) => dict[id]?.source,
|
|
351
|
+
getCountryShortSource: (id: string) => {
|
|
352
|
+
const sources = dict[id]?.shortSource;
|
|
353
|
+
return typeof sources === "string" ? sources : sources !== undefined ? sources.join(" | ") : "";
|
|
354
|
+
},
|
|
355
|
+
getCountryProviderContent: (id: string, isFrance: boolean, locale: string) =>
|
|
356
|
+
isFrance && locale === "fr" ? dict[id]?.frProviderContent : dict[id]?.providerContent,
|
|
357
|
+
getCountrySourceContent: (id: string, isFrance: boolean, locale: string) =>
|
|
358
|
+
isFrance && locale === "fr" ? dict[id]?.frSourceContent : dict[id]?.sourceContent,
|
|
359
|
+
getCountryCode,
|
|
360
|
+
getTypes: (name: string) => {
|
|
361
|
+
const id = getCountryCode(name);
|
|
362
|
+
return id === undefined ? undefined : dict[id]?.priceTypes;
|
|
363
|
+
},
|
|
364
|
+
getAll: (field: keyof CountryEntry) => {
|
|
365
|
+
const allData: CountryEntry[keyof CountryEntry][] = [];
|
|
366
|
+
for (const countryCode in dict) {
|
|
367
|
+
const countryData = dict[countryCode];
|
|
368
|
+
if (countryData) allData.push(countryData[field]);
|
|
369
|
+
}
|
|
370
|
+
return allData;
|
|
371
|
+
},
|
|
372
|
+
getCountryNameFromCurrency: (currency: string) => {
|
|
373
|
+
const id = codeWhere((entry) => entry.currencyCode === currency);
|
|
374
|
+
return id === undefined ? undefined : dict[id]?.nameFlag;
|
|
375
|
+
},
|
|
376
|
+
getCurrencyFromCountryCode: (country: string) => {
|
|
377
|
+
const id = codeWhere((entry) => entry.countryCode === country);
|
|
378
|
+
return id === undefined ? undefined : dict[id]?.currencyName;
|
|
379
|
+
},
|
|
380
|
+
getCurrencySymbolFromCountryCode: (country: string) => {
|
|
381
|
+
const id = codeWhere((entry) => entry.countryCode === country);
|
|
382
|
+
return id === undefined ? undefined : dict[id]?.currencySymbol;
|
|
383
|
+
},
|
|
384
|
+
getCurrencySymbol: (id: string) => dict[id]?.currencySymbol,
|
|
385
|
+
getCurrencyName: (id: string) => dict[id]?.currencyName,
|
|
386
|
+
};
|
|
387
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Coupe un fragment de surlignage ES en segments, sans `v-html` : le texte
|
|
3
|
+
* vient d'un document externe, il ne passe jamais par le parseur HTML.
|
|
4
|
+
*/
|
|
5
|
+
export const HIGHLIGHT_PRE = "\u0001";
|
|
6
|
+
export const HIGHLIGHT_POST = "\u0002";
|
|
7
|
+
|
|
8
|
+
export function highlightSegments(fragment: string): { text: string; hit: boolean }[] {
|
|
9
|
+
const out: { text: string; hit: boolean }[] = [];
|
|
10
|
+
// Une phrase cherchee peut etre coupee par la fin du fragment : ES pose alors
|
|
11
|
+
// la balise ouvrante sans la fermante, le surlignage court jusqu'au bout.
|
|
12
|
+
const re = new RegExp(`${HIGHLIGHT_PRE}([^${HIGHLIGHT_POST}]*)(?:${HIGHLIGHT_POST}|$)`, "g");
|
|
13
|
+
let last = 0;
|
|
14
|
+
for (const m of fragment.matchAll(re)) {
|
|
15
|
+
if (m.index! > last) out.push({ text: fragment.slice(last, m.index), hit: false });
|
|
16
|
+
out.push({ text: m[1] ?? "", hit: true });
|
|
17
|
+
last = m.index! + m[0].length;
|
|
18
|
+
}
|
|
19
|
+
if (last < fragment.length) out.push({ text: fragment.slice(last), hit: false });
|
|
20
|
+
return out;
|
|
21
|
+
}
|