Note préalable
J’utilise de moins en moins la librairie ci-dessous, j’écris mes propres traitements avec des besoins qui, dorénavant, dépassent progressivement ce qu’elle peut me fournir. Mais je vous la présente car c’est un bon moyen de commencer avec des données ou des fonctions “toutes faites” et éviter de réinventer la roue pour des traitements simples.
Une prochaine fois, je vous parlerai de pmeasyr
.
Refpmsi
Refpmsi est une librairie écrite et diffusée par Denis Gustin, disponible sur GitHub à l’adresse https://github.com/denisGustin/refpmsi/. L’installation est décrite dans la page.
La documentation officielle est disponible à https://denisgustin.github.io/refpmsi/index.html.
A quoi ça sert ?
Refpmsi est un ensemble de tables provenant de diverses origines en rapport avec le PMSI.
A l’heure de l’écriture de cet article, 77 sources officielles sont compilées couvrant les divers champs.
Comment ça marche ?
Comme d’habitude, on charge la librairie via un :
library(refpmsi)
Ce qui nous donne accès à 2 fonctions :
liste_refpmsi()
qui se contente de fournir une table contenant les informations minimales sur les données disponibles dans chaque jeu de données. Les caractéristiques listées pour chaque jeu sont :
- le nom (à utiliser dans
refpmsi()
) : refpmsi - un libellé plus convivial et explicatif : refpmsi_lib
- l’origine des données : refpmsi_source
- les années ou la version disponibles dans le package : refpmsi_periodepmsi
- et enfin un commentaire contenant le nom d’un article disponible sur le site de documentation donné ci-dessus.
et la fonction principale refpmsi()
, qui permet de charger réellement les données. Le prototype d’appel de refpmsi() attend deux paramètres dont un obligatoire :
- le nom du référentiel attendu en 1er ou sous le nom de paramètre
referentiel
- et un vecteur de versions/années sous le paramètre nommé
periodepmsi
.
En retour, refpmsi renvoie un dataframe contenant les données demandées. Le format de chaque retour dépendant du referentiel
demandé.
Attention si vous demandez plusieurs periodepmsi
, il vous faudra faire attention à bien croiser vos données avec la bonne version en fonction des règles de validité du PMSI.
Les référentiels contenus
Voici la liste des référentiels contenus à la date d’écriture de l’article.
La liste complète, à jour, est trouvable à https://denisgustin.github.io/refpmsi/articles/liste_ref.html.
> refpmsi::liste_refpmsi()
# A tibble: 77 x 2
refpmsi refpmsi_lib
<chr> <chr>
1 anticancereux_intraghs "Médicaments anticancéreux intra-GHS : Expérimentation article 51"
2 atu "Médicament en Autorisation Temporaire d<U+0092>Utilisation (ATU) ou en post-ATU"
3 autorisation_mco "Autorisations MCO"
4 autorisation_ssr "Autorisations SSR"
5 base_mco_ccam "Dénombrement variables base PMSI MCO : actes CCAM"
6 base_mco_diag "Dénombrement variables base PMSI MCO : diagnostics"
7 base_ssr_ae "Dénombrement variables base PMSI SSR : AE"
8 base_ssr_ccam "Dénombrement variables base PMSI SSR : actes CCAM"
9 base_ssr_csarr "Dénombrement variables base PMSI SSR : actes CSARR"
10 base_ssr_das "Dénombrement variables base PMSI SSR : DAS"
11 base_ssr_mp "Dénombrement variables base PMSI SSR : MPP"
12 ccam_ameli "Actes CCAM AMELI"
13 ccam_cma_ssr "Actes CCAM CMA SSR"
14 ccam_codification "Système de codification CCAM"
15 ccam_icr "ICR"
16 ccam_pmsi "CCAM à usage PMSI"
17 ccam_regroupement_lib "Libellé des codes regroupement CCAM"
18 ccam_ssr_ponderation "Pondérations RR CCAM"
19 cim "CIM-10 FR à usage PMSI "
20 cim_chapitre "Chapitres CIM-10"
21 cim_groupe "Groupes CIM-10"
22 cim_polyhandicap "Codes CIM-10 polyhandicap lourd"
23 cim_precarite "Codes CIM-10 de précarité"
24 cm "Catégories Majeures SSR"
25 cma_mco "Codes CIM-10 CMA MCO"
26 cma_ssr "Codes CIM-10 CMA SSR"
27 cmd "Catégories Majeures de Diagnostics"
28 csarr_code "Actes CSARR"
29 csarr_code_note "Notes liées aux actes CSARR"
30 csarr_eval "Actes CSARR d'évaluation"
31 csarr_extdoc "Extensions documentaires CSARR"
32 csarr_gestcompl "Gestes complémentaires CSARR"
33 csarr_hier "Hiérarchie CSARR"
34 csarr_hier_note "Notes liées aux hiérarchies CSARR"
35 csarr_incompatibilite_intervenant "Incompatibilités CSARR / intervenants"
36 csarr_intervenant "Intervenants CSARR"
37 csarr_modulateur "Modulateurs CSARR"
38 csarr_ponderation "Pondérations RR CSARR"
39 csarr_ref "Type d'actes CSARR"
40 csarr_topographie "Libellés codes topographiques CSARR"
41 dmi_en_sus "DMI pris en charge en sus"
42 ghm_intermediaire "GHM avec GHS intermédiaires"
43 ghm_monorum_uhcd_prive "GHM mono-RUM UHCD - secteur OQN"
44 ghm_monorum_uhcd_public "GHM mono-RUM UHCD - secteur DGF"
45 ghm_regroupement "Regroupements GHM"
46 ghm_regroupement_lib "Libellés DA, GP, GA"
47 ghs_prive "GHM et GHS - secteur OQN"
48 ghs_public "GHM et GHS - secteur DGF"
49 ght_prive "GHT - secteur OQN"
50 ght_public "GHT - secteur DGF"
51 gl "Groupes de Lourdeur (V2022 SSR)"
52 gme_prive "GME et GMT. Secteur exOQN"
53 gme_public "GME et GMT. Secteur exDGF"
54 gn "Groupes Nosologiques SSR"
55 gr "Groupes de Réadaptation (V2022 SSR)"
56 had "Nature du séjour, Type de lieu de domicile, Mode de Prise en Charge (MPC)"
57 lpp "LPP"
58 mco_fg_listes "Listes de groupage en D et en A"
59 me_ms_had "Modes d'entrée, modes de sortie, provenances, destinations HAD"
60 me_ms_mco "Modes d'entrée, modes de sortie, provenances, destinations MCO"
61 me_ms_psy "Modes d'entrée, modes de sortie, provenances, destinations PSY"
62 me_ms_ssr "Modes d'entrée, modes de sortie, provenances, destinations SSR"
63 open_ccam "Open CCAM : acte CCAM de la base nationale MCO"
64 ovalide_ccaminfo "CCAMInfo : table des caractéristiques des codes actes CCAM"
65 ovalide_diaginfo "DiagInfo : table des caractéristiques des codes diagnostics CIM-10"
66 ovalide_ghminfo_dgf "GHMInfo : Informations relatives aux GHM. Secteur exDGF"
67 ovalide_ghminfo_oqn "GHMInfo : Informations relatives aux GHM. Secteur exOQN"
68 ovalide_racineinfo_dgf "RacineInfo : Informations relatives aux racines de GHM. Secteur exDGF"
69 ovalide_racineinfo_oqn "RacineInfo : Informations relatives aux racines de GHM. Secteur exOQN"
70 psy "Formes d'Activité, Mode légal de soins, Intervenants, Lieu acte, EDGAR"
71 rghm_regroupement "Regroupements racines GHM"
72 rgme "Racines GME"
73 spe_pharma_ssr "Spécialités pharmaceutiques SSR"
74 supp_mco_prive "Libellés et tarifs des suppléments MCO. Secteur exOQN"
75 supp_mco_public "Libellés et tarifs des suppléments MCO. Secteur exDGF"
76 ucd "UCD en sus"
77 ucd_indication "Codes indications UCD en sus"
Les limites
Le principal inconvénient est la périodicité de mise à jour. Par exemple en ce mois de septembre 2022, la version disponible inclut uniquement des données de 2021.
Les données sont souvent disponibles pour plusieurs années d’antériorité (la CIM par exemple est disponible en version 2017 à 2021). Il faut regarder le champ correspondant : refpmsi_periode_version
de la liste_pmsi()
. Cependant si exceptionnellement, vous avez besoin de plus ancien ou plus récent, il faut vous tourner ailleurs.
La liste est conséquente mais malheureusement, il manque à mes yeux des référentiels que j’utilise régulièrement(et c’est normal !). C’est la raison pour laquelle je l’abandonne petit à petit.
Ne sont pas présents des référentiels à modification infra-annuelle tels que les données de DMI ou des UCD qui varient régulièrement de prix.
Un exemple :
Chargeons la CIM10 pour l’année 2021 dans un table nommée CIM10 :
library(refpmsi)
CIM10 <- refpmsi("cim",2021)
CIM10
# A tibble: 42,880 x 11
cim_code cim_tmco cim_pssr cim_tpsy cim_lib cim_c~1 cim_c~2 cim_c~3 cim_g~4 cim_p~5 annee~6
<chr> <int> <chr> <int> <chr> <int> <chr> <chr> <chr> <lgl> <chr>
1 A00 3 NNNN 3 Choléra 1 A00 1 A00-A09 FALSE 2021
2 A000 0 NOOO 0 Choléra à Vibrio cholerae 01, bi~ 1 A00 1 A00-A09 TRUE 2021
3 A001 0 NOOO 0 Choléra à Vibrio cholerae 01, bi~ 1 A00 1 A00-A09 TRUE 2021
4 A009 0 NOOO 0 Choléra, sans précision 1 A00 1 A00-A09 TRUE 2021
5 A01 3 NNNN 3 Fièvres typhoïde et paratyphoïde 1 A01 1 A00-A09 FALSE 2021
6 A010 0 NOOO 0 Fièvre typhoïde 1 A01 1 A00-A09 TRUE 2021
7 A011 0 NOOO 0 Paratyphoïde A 1 A01 1 A00-A09 TRUE 2021
8 A012 0 NOOO 0 Paratyphoïde B 1 A01 1 A00-A09 TRUE 2021
9 A013 0 NOOO 0 Paratyphoïde C 1 A01 1 A00-A09 TRUE 2021
10 A014 0 NOOO 0 Paratyphoïde, sans précision 1 A01 1 A00-A09 TRUE 2021
# ... with 42,870 more rows, and abbreviated variable names 1: cim_code_actif, 2: cim_categorie, 3: cim_chapitre,
# 4: cim_groupe, 5: cim_precision, 6: annee_pmsi
# i Use `print(n = ...)` to see more rows
Il nous est alors possible d’utiliser cette table comme bon nous semble, par exemple pour croiser avec le champ DP d’un RSS et en obtenir le libellé ; par exemple en faisant :
rss %>% left_join(CIM10,by=c(DP = cim_code))
Attention de bien préciser l’année ou la version sinon vous allez vous retrouver avec des doublons (1 ligne par année).
Si vous travaillez avec des rss sur plusieurs années, il faut alors faire (en supposant que rss$ANNEE
contient l’année en question :
# On prend les entrées cim10 de 2020 et 2021
CIM10 <- refpmsi("cim",c(2020,2021))
# Et on croise avec une jointure sur 2 variables
rss %>% left_join(CIM10,by=c(DP = cim_code,ANNEE = annee_pmsi))
Par ailleurs, la fonction refpmsi()
va lire les données sur le disque, cela veut dire que, par exemple dans le cas de la CIM-10 (42880 lignes, en 2021, depuis un fichier json à traiter de façon interne pour le mettre au format), chaque appel refmpsi("cim",2021)
va prendre “un certain temps”… Il est donc impératif de stocker le data.frame dans une variable pour ne pas s’obliger un rechargement qui va ralentir votre traitement. N’hésitez donc pas à faire un subset sans écraser le data.frame original car il pourra resservir :
CIM10 <- refpmsi("cim",2021)
# On ne s'intéresse qu'aux codes autorisés en DP :
DP <- CIM10 %>% filter(cim_tmco == 0)
#<... suite du traitement ...>
# On a besoin cette fois uniquement des diagnostics acceptés en DAS.
# Vu que nous avons gardé CIM10, pas besoin de recharger via refpmsi()
DAS <- CIM10 %>% filter(cim_tmco %in% c(0,1,2,4))
#<... et on peut continuer ...>
Enfin, attention au type de variable de votre jointure, mais R saura vous le reprocher en cas de besoin.