Voici ma méthode et mon code R pour retrouver les échographies de grossesse :
Tout d’abord, je retrace les accouchements, par la fiche Chaînage Mère-Enfants, pour retrouver les NIR et dates d’accouchement (je prends le mois de sortie de séjour) et crée une borne basse de début de grossesse (accouchement - 9 mois). Je fais un map (equivalent d’une boucle for) pour faire chaque année de 2017 à 2021.
acchmts<- map_dfr(
paste0(17:21),
~return(
tbl(conn,paste0("T_MCO", .x, "A")) %>%
filter(CDC_ACT %in% c("JQGA002",
"JQGA003",
"JQGA004",
"JQGA005",
"JQGD001",
"JQGD002",
"JQGD003",
"JQGD004",
"JQGD005",
"JQGD007",
"JQGD008",
"JQGD010",
"JQGD012",
"JQGD013")) %>%
mutate(acte_acchmt = "1") %>%
distinct(ETA_NUM, RSA_NUM, acte_acchmt) %>%
right_join(tbl(conn,paste0("T_MCO", .x, "B"))) %>%
filter(DGN_PAL == "Z3900" | acte_acchmt == "1") %>%
select(ETA_NUM, RSA_NUM, SOR_MOI, SOR_ANN) %>%
inner_join(tbl(conn, paste0("T_MCO", .x, "D")) %>%
filter(str_sub(ASS_DGN, 1, 3) == "Z37")) %>%
left_join(tbl(conn, paste0("T_MCO", .x, "C")) %>%
select(ETA_NUM, RSA_NUM, NIR_ANO_17, RNG_BEN)) %>%
collect()
) %>%
ungroup() %>%
distinct(NIR_ANO_17, RNG_BEN, SOR_ANN, SOR_MOI)
)
acchmts <- acchmts %>%
mutate(debut_grossesse = dmy(paste("01", SOR_MOI, SOR_ANN, sep = "-")) - months(9))
A côté, je récupère les codes CCAM correspondant à de l’échographie foetale/de grossesse/d’utérus gravide, qui me servira tant pour la requête DCIR que PMSI.
ccam_echos <- c('JNQM001',
'JNQK001',
'JNQD001',
'JQQP001',
'JQQM010',
'JQQM015',
'JQQM018',
'JQQM016',
'JQQM019',
'JQQM017',
'JQQM002',
'JQQM007',
'JQQM001',
'JQQM003',
'JQQM008' )
Je requête le DCIR pour n’avoir que les consultations avec ces codes CCAM, récupère les consultations, en filtrant out les établissements publics en FIDES, les consultations en public non-FIDES (et les lignes dédoublées pour les suppléments).
################
################ Echos ds DCIR : Part One
################
#Table des Actes CCAM : 1 ligne = 1 'séjour' * Nb d'actes
echos <- tbl(conn, "ER_CAM_F") %>%
filter(CAM_PRS_IDE %in% ccam_echos,
FLX_DIS_DTD > TO_DATE('31/12/16', 'DD/MM/RR')) %>%
distinct(FLX_DIS_DTD,
FLX_TRT_DTD,
FLX_EMT_TYP,
FLX_EMT_NUM,
FLX_EMT_ORD,
ORG_CLE_NUM,
DCT_ORD_NUM,
PRS_ORD_NUM,
REM_TYP_AFF) %>%
collect()
dbWriteTable(conn, "ECHOS", echos, overwrite = TRUE)
###########
########### Echos ds DCIR : Part Two
########### Requêtage des consults pour échographie
########### Attention, met environ 6 heures à tourner
###########
for (annee in paste0(17:22)) {
print(annee)
#Mensualisation de la requête (dataframe avec une ligne = 1er du mois en début, 1er du mois suivant en fin
debut_fin <- expand_grid(jourmois = paste0("01/", c(paste0("0", seq(1:9)), "10", "11", "12"), "/"),
ann = annee) %>%
transmute(debut = paste0(jourmois, ann)) %>%
mutate(fin = as.character(dmy(debut)+months(1)),
fin = paste(str_sub(fin, 9), str_sub(fin, 6, 7), str_sub(fin, 3, 4), sep = "/")) %>%
arrange(dmy(debut))
tmp <- map2_dfr(
debut_fin$debut,
debut_fin$fin,
~return(tbl(conn, "ECHOS") %>% #Table créée ci-dessus
filter(FLX_DIS_DTD >= TO_DATE(.x, 'DD/MM/RR'), #Mensualisation
FLX_DIS_DTD < TO_DATE(.y, 'DD/MM/RR')) %>%
distinct(FLX_DIS_DTD,
FLX_TRT_DTD,
FLX_EMT_TYP,
FLX_EMT_NUM,
FLX_EMT_ORD,
ORG_CLE_NUM,
DCT_ORD_NUM,
PRS_ORD_NUM,
REM_TYP_AFF) %>%
left_join(tbl(conn, "ER_ETE_F")) %>% #Jointure référentiel établissement pour...
filter(ETE_IND_TAA != 1) %>% #...enlever le public en FIDES
left_join(
tbl(conn, "ER_PRS_F") %>%
filter(FLX_DIS_DTD >= TO_DATE(.x, 'DD/MM/RR'), #Mensualisation
FLX_DIS_DTD < TO_DATE(.y, 'DD/MM/RR'),
EXE_SOI_DTD > TO_DATE('31/12/16', 'DD/MM/RR'), #Bornes temporelles de mon analyse
EXE_SOI_DTD < TO_DATE('01/01/22', 'DD/MM/RR'),
CPL_MAJ_TOP < 2, #Enlève les compléments d'actes qui dédoublent des lignes
DPN_QLF != 71) #Enlève les ACE du public non-FIDES
) %>%
distinct(EXE_SOI_DTD, #Récupère les infos pertinentes pour mon analyse
BEN_CDI_NIR,
BEN_NIR_PSA,
BEN_RNG_GEM,
BEN_RES_DPT,
PRS_PPU_SEC) %>%
collect()
))
# Je crée une table sur ORAUSER directement
if (annee == "17") {
dbWriteTable(conn, "ECHOSDCIR", tmp, overwrite = TRUE) #
} else {
dbWriteTable(conn, "ECHOSDCIR", tmp, append = TRUE)
}
rm(tmp)
}
Puis pareil pour le PMSI : ACE avec un acte CCAM d’échographie. J’ai aussi une version de T_FINESS pour avoir le statut juridique de l’établissement (au delà du ex-OQN/ex-DG donné dans le référentiel établissement).
#######################################################
####################################################### Echos ds PMSI
#######################################################
#Les échos étant des consultations externes
# On n'a que le public dans le PMSI (activité libérale dans le privé)
# Donc on retirera le public du DCIR plus bas
list_doublons <- c('130780521', '130783236', '130783293', '130784234', '130804297','600100101', '750041543',
'750100018', '750100042', '750100075', '750100083', '750100091', '750100109', '750100125',
'750100166', '750100208', '750100216', '750100232', '750100273', '750100299' , '750801441',
'750803447', '750803454', '910100015', '910100023', '920100013', '920100021', '920100039',
'920100047', '920100054', '920100062', '930100011', '930100037', '930100045', '940100027',
'940100035', '940100043', '940100050', '940100068', '950100016', '690783154', '690784137',
'690784152', '690784178', '690787478', '830100558')
# Utilise le vecteur ccam_echos créé en début de script
echos_PMSI <- map_dfr(paste0(17:21), #Pour les années 2017 à 2021
~return(tbl(conn, paste0("T_MCO", .x, "FMSTC")) %>% #Table actes CCAM
filter(CCAM_COD %in% ccam_echos,
!ETA_NUM %in% list_doublons) %>%
distinct(ETA_NUM,
ETA_NUM_GEO,
SEQ_NUM) %>%
left_join(tbl(conn, paste0("T_MCO", .x, "FASTC")) %>%
distinct(ETA_NUM,
ETA_NUM_GEO,
SEQ_NUM,
BDI_DEP)) %>%
left_join(tbl(conn, "T_FINESS") %>% #Version de t-finess que j'ai mise sur mon ORAUSER
rename(ETA_NUM = FINESS) %>%
select(ETA_NUM, CATEG_LIB, STATUT_JUR_NIV2_LIB)) %>%
left_join(tbl(conn, paste0("T_MCO", .x, "CSTC")) %>% #Table patients : 1 ligne = 1 séjour (par ETA_NUM)
select(ETA_NUM, SEQ_NUM, NIR_ANO_17, EXE_SOI_DTD)) %>%
collect()))
Ma jointure pour voir les doublons entre PMSI et DCIR, et les DCIR qui sont du public :
echos_total <- echos_dcir %>%
group_by(NIR_ANO_17 = BEN_NIR_PSA, EXE_SOI_DTD) %>%
summarise(PRS_PPU_SEC = first(PRS_PPU_SEC)) %>%
ungroup() %>%
mutate(dcir = 1) %>%
full_join(echos_PMSI %>%
distinct(NIR_ANO_17, EXE_SOI_DTD) %>%
mutate(pmsi = 1))
echos_total %>% count(dcir, pmsi, PRS_PPU_SEC)
Si tout cela est juste, voici comme je compte faire, je compte faire une jointure totale entre mes accouchements et ma table echos_total, et filtrer pour n’avoir que les échographies ayant lieu entre la borne basse de début de grossesse et l’accouchement.
Je pourrais poster le reste de mon code si il est juste et que ça en intéresse certain-e-s.
Bonne journée !
Baptiste