Il faut au moins disposer des rsa et des données anohosp. Pour valoriser les suppléments, les tables porg, pie et diap sont aussi nécessaires.
Deux possibilités pour préparer les données rsa et ano afin de calculer la valorisation : les importer spécifiquement, ou les collecter depuis une base de données, voir pour cela éventuellement les fonctions autour des bases de données dans pmeasyr
.
Ici, on utilise les fonctions vvr_rsa
et vvr_ano_mco
pour importer les données depuis les fichiers bruts du out et sélectionner les variables dont nous avons besoins.
library(pmeasyr)
noyau_pmeasyr(
finess = '750100042',
annee = 2018,
mois = 12,
path = '~/Documents/data/mco',
progress = FALSE,
lib = FALSE,
tolower_names = TRUE
) -> p
adezip(p, type = "out")
vrsa <- vvr_rsa(p)
vano <- vvr_ano_mco(p)
Cela produit deux tables vrsa
et vano
.
Autre possibilité donc, le recours à une base de données où les tables préexistent, ici, on les collecte en ne sélectionnant que les variables utiles.
library(MonetDBLite)
dbdir <- "~/Documents/data/monetdb"
con <- src_monetdblite(dbdir)
vrsa <- vvr_rsa(con, 18)
vano <- vvr_ano_mco(con, 18)
Cela produit de manière identique deux tables vrsa
et vano
.
Pour valoriser les séjours, nous avons besoin des tarifs officiels. Comme d’autres tables référentiels classiques du PMSI, on peut trouver ces informations tarifaires pour les établissements ex-DGF dans le package nomensland.
# devtools::install_github('GuillaumePressiat/nomensland')
library(nomensland)
Il reste possible d’utiliser des tables tarifs et suppléments provenant d’une autre source, mais cela nécessite d’avoir les mêmes noms de colonnes que dans les tables de nomensland.
Charger ce package donne accès aux fonctions get_table
et get_dictionnaire_tables
.
Nous ne tenons pas compte de la rubrique “minoration forfaitaire liste en SUS” volontairement car cela nécessite de maintenir la liste des MO en SUS pour 2016 et 2017.
Pour les RSA transmis hors période (année précédente, mois d’après, souvent causés par des dossiers à cheval), on force le groupage en erreur comme epmsi le fait. C’est fait avec la fonction vvr_rsa_hors_periode
:
vrsa <- vrsa %>%
vvr_rsa_hors_periode(as.character(p$annee), stringr::str_pad(p$mois, 2, "left", '0'))
Ici, on se concentre sur la valorisation dite BEE pour “Base + Extrême haut - Extrême bas”. En effet par défaut le paramètre bee
est à TRUE
dans l’appel de fonction, et les tables vano, porg et diap sont renseignés à vide.
# Importer les tarifs GHS
tarifs_ghs <- dplyr::distinct(get_table('tarifs_mco_ghs'), ghs, anseqta, .keep_all = TRUE)
resu <- vvr_mco(
vvr_ghs_supp(rsa = vrsa, ano = vano, tarifs = tarifs_ghs, cgeo = 1L),
vvr_mco_sv(vrsa, vano)
)
La table resu
contient une ligne par rsa avec les variables suivantes :
cle_rsa
rec_totale
rec_base
rec_exb
rec_exh
rec_bee
type_fin
typvidhosp
On peut libeller ces variables en faisant appel à la fonction vvr_libelles_valo
, voir ci-dessous.
# Importer les tarifs des suppléments
tarifs_supp <- get_table('tarifs_mco_supplements') %>% mutate_if(is.numeric, tidyr::replace_na, 0) %>%
select(-cgeo)
resu <- vvr_mco(
vvr_ghs_supp(rsa = vrsa,
tarifs = tarifs_ghs,
supplements = tarifs_supp,
ano = vano,
porg = ipo(p),
diap = idiap(p),
pie = ipie(p),
mo = imed_mco(p),
full = FALSE,
cgeo = 1L,
prudent = NULL,
bee = FALSE),
vvr_mco_sv(vrsa, vano, ipo(p))
)
La table resu
contient une ligne par rsa avec les variables suivantes :
cle_rsa
moissor
anseqta
rec_totale
rec_bee
rec_base
rec_exb
rec_exh
rec_rep
rec_rea
rec_stf
rec_src
rec_nn1
rec_nn2
rec_nn3
rec_dialhosp
rec_caishyp
rec_aph
rec_ant
rec_rap
rec_rehosp_ghm
rec_rdt_tot
rec_sdc
rec_po_tot
type_fin
typvidhosp
On peut libeller ces variables en faisant appel à la fonction vvr_libelles_valo
, voir ci-dessous.
Les variables présentes dans la table resu
permettent à la fois de dénombrer les séjours par type de valorisation, c’est-à-dire :
knitr::kable(pmeasyr::vvr_libelles_valo('lib_type_sej'))
type_fin | lib_type |
---|---|
0 | Séjours valorisés |
1 | Séjours en CM 90 |
2 | Séjours en prestation inter-établissement |
3 | Séjours en GHS 9999 |
4 | Séjours avec pb de chainage (hors NN, rdth et PO) |
5 | Séjours avec pb de codage des variables bloquantes |
6 | Séjours en attente de décision sur les droits du patient |
7 | Séjours non facturable à l’AM hors PO |
8 | Séjours avec PO sur patient arrivé décédé ou avec PO non facturables à l’AM |
et de reproduire les rubriques de valorisation par type de recette:
knitr::kable(pmeasyr::vvr_libelles_valo('lib_valo'))
ordre_epmsi | var | lib_valo |
---|---|---|
22 | rec_totale | Valorisation 100% T2A globale |
1 | rec_base | Valorisation des GHS de base |
0 | rec_bee | Valorisation base + exb + exh |
2 | rec_exb | Valorisation extrême bas (à déduire) |
3 | rec_rehosp_ghm | Valorisation séjours avec rehosp dans même GHM |
4 | rec_mino_sus | Valorisation séjours avec minoration forfaitaire liste en sus |
5 | rec_exh | Valorisation journées extrême haut |
6 | rec_aph | Valorisation actes GHS 9615 en Hospit. |
7 | rec_rap | Valorisation suppléments radiothérapie pédiatrique |
8 | rec_ant | Valorisation suppléments antepartum |
9 | rec_rdt_tot | Valorisation actes RDTH en Hospit. |
10 | rec_rea | Valorisation suppléments de réanimation |
11 | rec_rep | Valorisation suppléments de réa pédiatrique |
12 | rec_nn1 | Valorisation suppléments de néonat sans SI |
13 | rec_nn2 | Valorisation suppléments de néonat avec SI |
14 | rec_nn3 | Valorisation suppléments de réanimation néonat |
15 | rec_po_tot | Valorisation prélévements d organe |
16 | rec_caishyp | Valorisation des actes de caissons hyperbares en sus |
17 | rec_dialhosp | Valorisation suppléments de dialyse |
18 | rec_sdc | Valorisation supplément défibrilateur cardiaque |
19 | rec_i04 | Valorisation suppléments Forfait Innovation I04 |
20 | rec_src | Valorisation suppléments de surveillance continue |
21 | rec_stf | Valorisation suppléments de soins intensifs |
La table resu contient également une colonne typvidhosp
qui correspond à un type de séjour, croisant plusieurs modalités (factam, nouveaux-nés, séances, 0 jour, autres, etc.)
knitr::kable(pmeasyr::vvr_libelles_valo('lib_vidhosp'))
typvidhosp | lib_typvidhosp |
---|---|
1 | 0 : non pris en charge |
2 | 3 : En attente des droits du patient |
3 | 2 : En attente sur le taux de prise en charge |
4 | 1 : Nouveau-né |
5 | 1 : Radiothérapie |
6 | 1 : Séances hors radiothérapie |
7 | 1 : Durée de séjour = 0 |
8 | 1 : Autre type de séjour |
Les séjours sont distribués et les recettes BR * coeffs sont sommées en fonction du type de séjours (lib_type_sej).
epmsi_mco_sv(resu) %>%
bind_rows(summarise_if(., is.numeric, sum))
Les séjours sont distribués et les recettes BR * coeffs sont sommées en fonction du type de séjours et du type de recette (lib_type_sej * lib_valo).
epmsi_mco_rav(resu)
Il est possible de garder toutes les variables intermédiaires du calcul de valorisation, c’est le cas en précisant le paramètre full = TRUE
:
resu <- vvr_mco(
vvr_ghs_supp(rsa = vrsa,
tarifs = tarifs_ghs,
supplements = tarifs_supp,
ano = vano,
porg = ipo(p),
diap = idiap(p),
pie = ipie(p),
full = TRUE,
cgeo = 1L,
prudent = NULL,
bee = FALSE),
vvr_mco_sv(vrsa, vano, ipo(p))
)
Dans ce cas, les variables suivantes deviennent accessibles au niveau de chaque séjour :
resu %>%
summarise_at(vars(starts_with('rec_')), sum) %>%
names() %>%
cat(sep = "\n")
rec_base
rec_exh
rec_exb
rec_bee
rec_totale
rec_rep
rec_rea
rec_stf
rec_src
rec_nn1
rec_nn2
rec_nn3
rec_hhs
rec_edpahs
rec_edpcahs
rec_ehhs
rec_dip
rec_dialhosp
rec_caishyp
rec_aph
rec_ant
rec_rap
rec_sdc
rec_rdt5
rec_prot
rec_ict
rec_cyb
rec_gam
rec_rcon1
rec_rcon2
rec_tciea
rec_tcies
rec_aie
rec_rcon3
rec_rdt_tot
rec_poi
rec_poii
rec_poiii
rec_poiv
rec_pov
rec_povi
rec_povii
rec_poviii
rec_poix
rec_poa
rec_po_tot
rec_rehosp_ghm
rec_pie_src
rec_pie_stf
rec_pie_rea
rec_pie_rep
rec_pie_nn1
rec_pie_nn2
rec_pie_nn3
La valorisation des rsa est assez mécanique (c’est un programme), le détail de ce mécanisme peut-être lu en regardant le code source de pmeasyr
(bien sûr, ce n’est pas le programme officiel). En peu de mots, la logique est celle-ci :
Si cette mécanique vaut pour la grande majorité, on note quelques exceptions, d’où les deux adaptations suivantes :