0
OR CLI_CODE_SPECIALITE = ANY (ARRAY(SELECT CLI_CODE_SPECIALITE FROM prod_clinicom.FB_MVTS_MEDECETB GROUP BY 1)::text[])
ORDER BY CLI_CODE_SPECIALITE
;
INSERT INTO pmsi.t_specialites_internes_medecin(code, texte)
SELECT
spe_cti,
w_CLI_DONN_DESCRIPTION
FROM w_specialite
LEFT JOIN pmsi.t_specialites_internes_medecin ON t_specialites_internes_medecin.code = spe_cti
WHERE t_specialites_internes_medecin.code IS NULL
;
INSERT INTO pmsi.t_medecins(code, nom, prenom, specialite_id, no_adeli, specialite_interne_id)
SELECT
CLI_CODE_MEDECIN,
MAX(CLI_DONN_NOM),
MAX(COALESCE(CLI_DONN_PRENOM,'')) AS CLI_DONN_PRENOM,
MAX(COALESCE(t_specialites_medecin.oid,0)),
MAX(CASE WHEN COALESCE(CLI_CODE_ADELI,0) IS DISTINCT FROM 0 THEN to_char(CLI_CODE_ADELI,'FM000000000') ELSE '' END) AS CLI_CODE_ADELI,
MAX(COALESCE(t_specialites_internes_medecin.oid,0))
FROM prod_clinicom.FB_MVTS_MEDECETB
LEFT JOIN pmsi.t_specialites_medecin ON t_specialites_medecin.code = FB_MVTS_MEDECETB.CLI_CODE_SPECIALITE
LEFT JOIN w_specialite ON w_specialite.w_CLI_CODE_SPECIALITE = FB_MVTS_MEDECETB.CLI_CODE_SPECIALITE
LEFT JOIN pmsi.t_specialites_internes_medecin ON w_specialite.spe_cti = t_specialites_internes_medecin.code
LEFT JOIN pmsi.t_medecins ON CLI_CODE_MEDECIN = t_medecins.code
WHERE t_medecins.code IS NULL
GROUP BY 1
ORDER BY 1;
UPDATE pmsi.t_medecins SET
specialite_interne_id = COALESCE(t_specialites_internes_medecin.oid, 0)
FROM
prod_clinicom.FB_MVTS_MEDECETB
LEFT JOIN w_specialite ON w_specialite.w_CLI_CODE_SPECIALITE = FB_MVTS_MEDECETB.CLI_CODE_SPECIALITE
LEFT JOIN pmsi.t_specialites_internes_medecin ON w_specialite.spe_cti = t_specialites_internes_medecin.code
WHERE 1=1
AND FB_MVTS_MEDECETB.CLI_CODE_MEDECIN = t_medecins.code
AND t_medecins.specialite_interne_id != COALESCE(t_specialites_internes_medecin.oid, 0);
DROP TABLE IF EXISTS w_um;
CREATE TEMP TABLE w_um AS
SELECT
CASE
WHEN char_length(CLI_CODE_UM) <= 4 THEN CLI_CODE_UM
WHEN char_length(CLI_CODE_UM) = 5 THEN substr(CLI_CODE_UM, 2, 4)
ELSE ''::text END as um_code
,CLI_DONN_DESCRIPTION as um_texte
FROM prod_clinicom.FS_MVTS_UM
WHERE 1=1
AND cli_code_suppression = 0
AND char_length(CLI_CODE_UM) <= 5
ORDER BY 1;
INSERT INTO pmsi.t_unites_medicales(code, texte, type_autorisation)
SELECT
um_code::text
,um_texte::text
,''::text
FROM w_um
WHERE um_code != ALL(ARRAY(SELECT code FROM pmsi.t_unites_medicales)::text[])
ORDER BY 1;
]]>
'' AND
FD_PMSI_RUM.CLI_Code_MedecinResponsable <> 'NR'
GROUP BY 1;
ALTER TABLE w_FD_PMSI_RUM ADD CONSTRAINT w_FD_PMSI_RUM_pkey PRIMARY KEY(CLI_Donn_RSSReference);
DROP TABLE IF EXISTS w_MVTS_EPISODES_medecin_acte;
CREATE TEMP TABLE w_MVTS_EPISODES_medecin_acte AS
SELECT FD_ACTES_ENTETE.CLI_DONN_NOABSEPISODE,
(MAX(Array[FD_ACTES_ENTETE.CLI_DATE_SAISIE::text, FD_ACTES_ENTETE.CLI_CODE_MEDECIN1]))[2] AS CLI_CODE_MEDECIN
FROM prod_clinicom.FD_ACTES_ENTETE
JOIN prod_clinicom.FD_MVTS_EPISODES ON FD_ACTES_ENTETE.CLI_DONN_NOABSEPISODE = FD_MVTS_EPISODES.CLI_DONN_NOABSEPISODE AND
(CLI_CODE_MEDECINRESPONSABLE = '' OR CLI_CODE_MEDECINRESPONSABLE = 'NR')
WHERE CLI_CODE_MEDECIN1 <> '' AND CLI_CODE_MEDECIN1 <> 'NR'
GROUP BY 1;
ALTER TABLE w_MVTS_EPISODES_medecin_acte ADD CONSTRAINT w_MVTS_EPISODES_medecin_acte_pkey PRIMARY KEY(CLI_DONN_NOABSEPISODE);
DROP TABLE IF EXISTS w_MVTS_EPISODES_medecin;
CREATE TEMP TABLE w_MVTS_EPISODES_medecin AS
SELECT FD_MVTS_MOUVEMENTS.CLI_DONN_NOABSEPISODE,
(MAX(Array[CLI_DATE_MOUVEMENT::text, CLI_CODE_MEDECIN]))[2] AS CLI_CODE_MEDECIN
FROM prod_clinicom.FD_MVTS_MOUVEMENTS
JOIN prod_clinicom.FD_MVTS_EPISODES ON FD_MVTS_MOUVEMENTS.CLI_DONN_NOABSEPISODE = FD_MVTS_EPISODES.CLI_DONN_NOABSEPISODE AND
(CLI_CODE_MEDECINRESPONSABLE = '' OR CLI_CODE_MEDECINRESPONSABLE = 'NR')
WHERE CLI_CODE_MEDECIN <> '' AND CLI_CODE_MEDECIN <> 'NR'
GROUP BY 1;
ALTER TABLE w_MVTS_EPISODES_medecin ADD CONSTRAINT w_MVTS_EPISODES_medecin_pkey PRIMARY KEY(CLI_DONN_NOABSEPISODE);
DROP TABLE IF EXISTS w_FD_PMSI_RSS;
CREATE TEMP TABLE w_FD_PMSI_RSS AS
SELECT FD_PMSI_RSS.CLI_Donn_RSSReference,
CLI_DONN_NOEXTEPISODE,
date(CLI_Date_Entree) AS CLI_Date_Entree,
date(CLI_Date_Sortie) AS CLI_Date_Sortie,
CLI_Donn_NoIPPExterne,
CLI_DONN_NOM,
CLI_DONN_NOMNAISSANCE,
CLI_DONN_PRENOM,
COALESCE(
w_FD_PMSI_RUM.CLI_Code_MedecinResponsable,
CASE WHEN FD_MVTS_EPISODES.CLI_Code_MedecinResponsable <> '' AND FD_MVTS_EPISODES.CLI_Code_MedecinResponsable <> 'NR' THEN FD_MVTS_EPISODES.CLI_Code_MedecinResponsable ELSE NULL END,
w_MVTS_EPISODES_medecin.CLI_CODE_MEDECIN,
w_MVTS_EPISODES_medecin_acte.CLI_CODE_MEDECIN
) AS CLI_Code_MedecinResponsable
FROM prod_clinicom.FD_PMSI_RSS
JOIN prod_clinicom.FD_MVTS_EPISODES ON FD_PMSI_RSS.CLI_Donn_NoAbsEpisode = FD_MVTS_EPISODES.CLI_Donn_NoAbsEpisode
JOIN prod_clinicom.FD_MVTS_PATIENTS ON FD_MVTS_PATIENTS.CLI_Code_NoIPP = FD_MVTS_EPISODES.CLI_Code_NoIPP
LEFT JOIN w_MVTS_EPISODES_medecin ON FD_PMSI_RSS.CLI_Donn_NoAbsEpisode = w_MVTS_EPISODES_medecin.CLI_Donn_NoAbsEpisode
LEFT JOIN w_MVTS_EPISODES_medecin_acte ON FD_PMSI_RSS.CLI_Donn_NoAbsEpisode = w_MVTS_EPISODES_medecin_acte.CLI_Donn_NoAbsEpisode
LEFT JOIN w_FD_PMSI_RUM ON w_FD_PMSI_RUM.CLI_Donn_RSSReference = FD_PMSI_RSS.CLI_Donn_RSSReference;
CREATE INDEX w_FD_PMSI_RSS_i1
ON w_FD_PMSI_RSS
USING btree
(CLI_Donn_RSSReference);
CREATE INDEX w_FD_PMSI_RSS_i2
ON w_FD_PMSI_RSS
USING btree
(CLI_Code_MedecinResponsable);
UPDATE [SCHEMA].p_rss
SET no_sejour_administratif = CLI_DONN_NOEXTEPISODE
FROM w_FD_PMSI_RSS
WHERE CLI_Donn_RSSReference = no_rss AND
date_trunc('year',CLI_Date_Sortie) = date_trunc('year',date_sortie) AND
trim(no_sejour_administratif) IS DISTINCT FROM CLI_DONN_NOEXTEPISODE AND
en_cours LIKE '0' AND
ghm_id <> 0
;
UPDATE [SCHEMA].p_identites
SET nom = CLI_DONN_NOM,
nom_naissance = CLI_DONN_NOMNAISSANCE,
prenom = CLI_DONN_PRENOM
FROM [SCHEMA].p_rss
JOIN w_FD_PMSI_RSS ON CLI_Donn_RSSReference = no_rss AND
(CLI_Date_Sortie = date_sortie OR CLI_Date_Entree = date_entree OR CLI_DONN_NOEXTEPISODE = substr(no_sejour_administratif,1,8) AND date_trunc('month',CLI_Date_Sortie) = date_trunc('month',date_sortie))
WHERE p_identites.rss_id = p_rss.oid AND
en_cours LIKE '0' AND
(
nom IS DISTINCT FROM CLI_DONN_NOM OR
nom_naissance IS DISTINCT FROM CLI_DONN_NOMNAISSANCE OR
prenom IS DISTINCT FROM CLI_DONN_PRENOM
);
UPDATE [SCHEMA].p_rss
SET medecin_rss_id = COALESCE(t_medecins.oid,0),
no_patient = to_number(CLI_Donn_NoIPPExterne,'000000000000')
FROM w_FD_PMSI_RSS
LEFT JOIN pmsi.t_medecins ON CLI_Code_MedecinResponsable = t_medecins.code
WHERE CLI_Donn_RSSReference = no_rss AND
(CLI_Date_Sortie = date_sortie OR CLI_Date_Entree = date_entree OR CLI_DONN_NOEXTEPISODE = substr(no_sejour_administratif,1,8) AND date_trunc('month',CLI_Date_Sortie) = date_trunc('month',date_sortie)) AND
en_cours LIKE '0' AND
(
medecin_rss_id IS DISTINCT FROM COALESCE(t_medecins.oid,0) OR
no_patient IS DISTINCT FROM to_number(CLI_Donn_NoIPPExterne,'000000000000')
)
;
-- Traitement Externes
DROP TABLE IF EXISTS w_FD_MVTS_EPISODES;
CREATE TEMP TABLE w_FD_MVTS_EPISODES AS
SELECT
FD_MVTS_EPISODES.CLI_DONN_NOABSEPISODE,
CLI_DONN_NOEXTEPISODE,
date(CLI_Date_Entree) AS CLI_Date_Entree,
date(CLI_Date_Sortie) AS CLI_Date_Sortie,
CLI_Donn_NoIPPExterne,
CLI_DONN_NOM,
CLI_DONN_NOMNAISSANCE,
CLI_DONN_PRENOM,
COALESCE(
CASE WHEN FD_MVTS_EPISODES.CLI_Code_MedecinResponsable <> '' THEN FD_MVTS_EPISODES.CLI_Code_MedecinResponsable ELSE NULL END,
w_MVTS_EPISODES_medecin.CLI_CODE_MEDECIN,
w_MVTS_EPISODES_medecin_acte.CLI_CODE_MEDECIN
) AS CLI_Code_MedecinResponsable,
FD_MVTS_SORTIES.CLI_CODE_UF,
CASE WHEN CLI_CODE_UM <> '' THEN CLI_CODE_UM ELSE FD_MVTS_SORTIES.CLI_CODE_UF END AS CLI_CODE_UM
FROM prod_clinicom.FD_MVTS_EPISODES
JOIN prod_clinicom.FD_MVTS_PATIENTS ON FD_MVTS_PATIENTS.CLI_Code_NoIPP = FD_MVTS_EPISODES.CLI_Code_NoIPP
JOIN prod_clinicom.FD_MVTS_SORTIES ON FD_MVTS_SORTIES.CLI_DONN_NOABSEPISODE = FD_MVTS_EPISODES.CLI_DONN_NOABSEPISODE
JOIN [SCHEMA].p_rss ON no_sejour_administratif = CLI_DONN_NOEXTEPISODE AND ghm_id = 0
LEFT JOIN w_MVTS_EPISODES_medecin ON FD_MVTS_EPISODES.CLI_Donn_NoAbsEpisode = w_MVTS_EPISODES_medecin.CLI_Donn_NoAbsEpisode
LEFT JOIN w_MVTS_EPISODES_medecin_acte ON FD_MVTS_EPISODES.CLI_Donn_NoAbsEpisode = w_MVTS_EPISODES_medecin_acte.CLI_Donn_NoAbsEpisode
LEFT JOIN prod_clinicom.FS_MVTS_UF ON FD_MVTS_SORTIES.CLI_CODE_UF = FS_MVTS_UF.CLI_CODE_UF;
CREATE INDEX w_FD_MVTS_EPISODES_i1
ON w_FD_MVTS_EPISODES
USING btree
(CLI_DONN_NOEXTEPISODE);
CREATE INDEX w_FD_MVTS_EPISODES_i2
ON w_FD_MVTS_EPISODES
USING btree
(CLI_DONN_NOABSEPISODE);
CREATE INDEX w_FD_MVTS_EPISODES_i3
ON w_FD_MVTS_EPISODES
USING btree
(CLI_Code_MedecinResponsable);
CREATE INDEX w_FD_MVTS_EPISODES_i4
ON w_FD_MVTS_EPISODES
USING btree
(CLI_CODE_UM);
UPDATE w_FD_MVTS_EPISODES SET CLI_Code_MedecinResponsable = CLI_CODE_MEDECIN1
FROM prod_clinicom.FD_ACTES_ENTETE
WHERE CLI_CODE_MEDECINRESPONSABLE = '' AND
w_FD_MVTS_EPISODES.CLI_DONN_NOABSEPISODE = FD_ACTES_ENTETE.CLI_DONN_NOABSEPISODE;
UPDATE [SCHEMA].p_identites
SET nom = CLI_DONN_NOM,
nom_naissance = CLI_DONN_NOMNAISSANCE,
prenom = CLI_DONN_PRENOM
FROM [SCHEMA].p_rss
JOIN w_FD_MVTS_EPISODES ON CLI_DONN_NOEXTEPISODE = no_sejour_administratif AND CLI_Date_Sortie = date_sortie
WHERE ghm_id = 0 AND
en_cours LIKE '0' AND
p_identites.rss_id = p_rss.oid AND
(
nom IS DISTINCT FROM CLI_DONN_NOM OR
nom_naissance IS DISTINCT FROM CLI_DONN_NOMNAISSANCE OR
prenom IS DISTINCT FROM CLI_DONN_PRENOM
);
UPDATE [SCHEMA].p_rss
SET medecin_rss_id = COALESCE(t_medecins.oid,0),
no_patient = to_number(CLI_Donn_NoIPPExterne,'000000000000')
FROM w_FD_MVTS_EPISODES
LEFT JOIN pmsi.t_medecins ON CLI_Code_MedecinResponsable = t_medecins.code
WHERE ghm_id = 0 AND
CLI_DONN_NOEXTEPISODE = no_sejour_administratif AND
en_cours LIKE '0' AND
CLI_Date_Sortie = date_sortie AND
(
medecin_rss_id IS DISTINCT FROM COALESCE(t_medecins.oid,0) OR
no_patient IS DISTINCT FROM to_number(CLI_Donn_NoIPPExterne,'000000000000')
)
;
INSERT INTO pmsi.t_unites_medicales(code, texte, type_autorisation)
SELECT
w_FD_MVTS_EPISODES.CLI_CODE_UM,
CLI_DONN_DESCRIPTION,
''
FROM w_FD_MVTS_EPISODES
JOIN prod_clinicom.FS_MVTS_UF ON w_FD_MVTS_EPISODES.CLI_CODE_UF = FS_MVTS_UF.CLI_CODE_UF
WHERE w_FD_MVTS_EPISODES.CLI_CODE_UF = w_FD_MVTS_EPISODES.CLI_CODE_UM AND
w_FD_MVTS_EPISODES.CLI_CODE_UM NOT IN (SELECT code FROM pmsi.t_unites_medicales)
GROUP BY 1,2
ORDER BY 1;
UPDATE [SCHEMA].p_rss_rum
SET unite_medicale_id = t_unites_medicales.oid
FROM [SCHEMA].p_rss
JOIN w_FD_MVTS_EPISODES ON CLI_DONN_NOEXTEPISODE = no_sejour_administratif AND CLI_Date_Sortie = date_sortie
JOIN pmsi.t_unites_medicales ON CLI_CODE_UM = t_unites_medicales.code
WHERE ghm_id = 0 AND
en_cours LIKE '0' AND
p_rss_rum.rss_id = p_rss.oid AND
(
unite_medicale_id IS DISTINCT FROM t_unites_medicales.oid
);
UPDATE [SCHEMA].p_rss_actes
SET unite_medicale_id = t_unites_medicales.oid
FROM [SCHEMA].p_rss
JOIN w_FD_MVTS_EPISODES ON CLI_DONN_NOEXTEPISODE = no_sejour_administratif AND CLI_Date_Sortie = date_sortie
JOIN pmsi.t_unites_medicales ON CLI_CODE_UM = t_unites_medicales.code
WHERE ghm_id = 0 AND
en_cours LIKE '0' AND
p_rss_actes.rss_id = p_rss.oid AND
(
unite_medicale_id IS DISTINCT FROM t_unites_medicales.oid
);
]]>
'0' THEN CLI_CODE_PROVENANCEPMSI ELSE '' END AS CLI_CODE_PROVENANCEPMSI,
CLI_CODE_MODESORTIEPMSI,
CASE WHEN CLI_CODE_DESTINATIONPMSI <> '0' THEN CLI_CODE_DESTINATIONPMSI ELSE '' END AS CLI_CODE_DESTINATIONPMSI,
CLI_CODE_MEDECINRESPONSABLE,
CLI_DONN_IGS2,
MAX(CASE WHEN CLI_CODE_TYPEDIAGNOSTIC = '1' THEN CLI_CODE_DIAG ELSE '' END) AS CLI_CODE_DIAG_DP,
MAX(CASE WHEN CLI_CODE_TYPEDIAGNOSTIC = '2' THEN CLI_CODE_DIAG ELSE '' END) AS CLI_CODE_DIAG_DR
FROM
prod_clinicom.FD_PMSI_RUM
LEFT JOIN prod_clinicom.FD_PMSI_DIAG ON FD_PMSI_RUM.CLI_DONN_NOABSEPISODE = FD_PMSI_DIAG.CLI_DONN_NOABSEPISODE AND
FD_PMSI_RUM.CLI_DONN_LIEN = FD_PMSI_DIAG.CLI_DONN_LIEN
WHERE CLI_DATE_SORTIEUM >= '[ANNEE]0101'
GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14;
CREATE INDEX w_FD_PMSI_RUM_i1 ON w_FD_PMSI_RUM USING btree (CLI_DONN_NOABSEPISODE);
DROP TABLE IF EXISTS w_FD_PMSI_RSS;
CREATE TEMP TABLE w_FD_PMSI_RSS AS
SELECT
'HOS'::text AS rss_type,
w_finess.finess,
0::bigint AS rss_id,
FD_PMSI_RSS.CLI_DONN_NOABSEPISODE,
FD_PMSI_RSS.CLI_DONN_NORSS,
MAX(CLI_DONN_NOIPPEXTERNE) AS CLI_DONN_NOIPPEXTERNE,
MAX(CLI_DONN_NOM) AS CLI_DONN_NOM,
MAX(CLI_DONN_NOMNAISSANCE) AS CLI_DONN_NOMNAISSANCE,
MAX(CLI_DONN_PRENOM) AS CLI_DONN_PRENOM,
MAX(CLI_DATE_NAISSANCE) AS CLI_DATE_NAISSANCE,
MAX(CLI_CODE_POSTAL) AS CLI_CODE_POSTAL,
MAX(CASE WHEN FB_MVTS_SEXE.CLI_DONN_DESCRIPTIONCOURTE ILIKE 'F%' THEN '2' ELSE '1' END) AS CLI_CODE_SEXE,
MAX(CASE WHEN FD_PMSI_RSS.CLI_DONN_RSSREFERENCE <> 0 THEN FD_PMSI_RSS.CLI_DONN_RSSREFERENCE ELSE 99000000000 + to_number(FD_PMSI_RSS.CLI_DONN_NOABSEPISODE,'0000000') * 100 + FD_PMSI_RSS.CLI_DONN_NORSS END) AS CLI_DONN_RSSREFERENCE,
MAX(CLI_DONN_NOEXTEPISODE) AS CLI_DONN_NOEXTEPISODE,
MAX(FD_PMSI_RSS.CLI_DATE_ENTREE) AS CLI_DATE_ENTREE,
MAX(FD_PMSI_RSS.CLI_DATE_SORTIE) AS CLI_DATE_SORTIE,
MAX(FD_PMSI_RSS.CLI_CODE_GHM) AS CLI_CODE_GHM,
MAX(FD_PMSI_RSS.CLI_CODE_GHS) AS CLI_CODE_GHS,
MAX(CLI_FLAG_CODAGERSS) AS CLI_FLAG_CODAGERSS,
count(*) AS nb_rum,
SUM(CLI_DONN_NBSEANCES) AS RSS_CLI_DONN_NBSEANCES,
(min(array[CLI_DATE_ENTREEUM::text,CLI_CODE_MODEENTREEPMSI::text]))[2] AS RSS_CLI_CODE_MODEENTREEPMSI,
(min(array[CLI_DATE_ENTREEUM::text,CLI_CODE_PROVENANCEPMSI::text]))[2] AS RSS_CLI_CODE_PROVENANCEPMSI,
(max(array[CLI_DATE_SORTIEUM::text,CLI_CODE_MODESORTIEPMSI::text]))[2] AS RSS_CLI_CODE_MODESORTIEPMSI,
(max(array[CLI_DATE_SORTIEUM::text,CLI_CODE_DESTINATIONPMSI::text]))[2] AS RSS_CLI_CODE_DESTINATIONPMSI,
(max(array[CLI_DATE_SORTIEUM::text,w_FD_PMSI_RUM.CLI_CODE_MEDECINRESPONSABLE::text]))[2] AS RSS_CLI_CODE_MEDECINRESPONSABLE,
''::text AS CLI_CODE_UM
FROM w_finess,
prod_clinicom.FD_PMSI_RSS
JOIN w_FD_PMSI_RUM ON FD_PMSI_RSS.CLI_DONN_NOABSEPISODE = w_FD_PMSI_RUM.CLI_DONN_NOABSEPISODE AND
FD_PMSI_RSS.CLI_DONN_NORSS = w_FD_PMSI_RUM.CLI_DONN_NORSS
JOIN prod_clinicom.FD_MVTS_EPISODES ON FD_PMSI_RSS.CLI_DONN_NOABSEPISODE = FD_MVTS_EPISODES.CLI_DONN_NOABSEPISODE
JOIN prod_clinicom.FD_MVTS_PATIENTS ON FD_MVTS_EPISODES.CLI_CODE_NOIPP = FD_MVTS_PATIENTS.CLI_CODE_NOIPP
JOIN prod_clinicom.FB_MVTS_SEXE ON FD_MVTS_PATIENTS.CLI_CODE_SEXE = FB_MVTS_SEXE.CLI_CODE_SEXE
LEFT JOIN pmsi.p_rss ON CLI_DONN_RSSREFERENCE = no_rss AND date_trunc('month',CLI_DATE_SORTIE) = date_trunc('month',date_sortie)
WHERE CLI_DATE_SORTIE >= '[ANNEE]0101' AND p_rss.oid IS NULL
GROUP BY 2,4,5;
INSERT INTO w_FD_PMSI_RSS
SELECT
'EXT'::text AS rss_type,
w_finess.finess,
0::bigint AS rss_id,
FD_ACTES_NGAP.CLI_DONN_NOABSEPISODE,
0 AS CLI_DONN_NORSS,
MAX(CLI_DONN_NOIPPEXTERNE) AS CLI_DONN_NOIPPEXTERNE,
MAX(CLI_DONN_NOM) AS CLI_DONN_NOM,
MAX(CLI_DONN_NOMNAISSANCE) AS CLI_DONN_NOMNAISSANCE,
MAX(CLI_DONN_PRENOM) AS CLI_DONN_PRENOM,
MAX(CLI_DATE_NAISSANCE) AS CLI_DATE_NAISSANCE,
MAX(CLI_CODE_POSTAL) AS CLI_CODE_POSTAL,
MAX(FD_MVTS_PATIENTS.CLI_CODE_SEXE) AS CLI_CODE_SEXE,
MAX(99000000000 + to_number(FD_ACTES_NGAP.CLI_DONN_NOABSEPISODE,'0000000') * 100) AS CLI_DONN_RSSREFERENCE,
MAX(CLI_DONN_NOEXTEPISODE) AS CLI_DONN_NOEXTEPISODE,
MAX(FD_MVTS_SORTIES.CLI_DATE_ENTREE) AS CLI_DATE_ENTREE,
MAX(FD_MVTS_SORTIES.CLI_DATE_SORTIE) AS CLI_DATE_SORTIE,
''::text AS CLI_CODE_GHM,
0::numeric AS CLI_CODE_GHS,
0::numeric AS CLI_FLAG_CODAGERSS,
1::numeric AS nb_rum,
0::numeric AS RSS_CLI_DONN_NBSEANCES,
'8' AS RSS_CLI_CODE_MODEENTREEPMSI,
'' AS RSS_CLI_CODE_PROVENANCEPMSI,
'8' AS RSS_CLI_CODE_MODESORTIEPMSI,
'' AS RSS_CLI_CODE_DESTINATIONPMSI,
MAX(CASE WHEN CLI_CODE_MEDECINRESPONSABLE <> '' THEN CLI_CODE_MEDECINRESPONSABLE ELSE FD_MVTS_SORTIES.CLI_CODE_MEDECIN END) AS RSS_CLI_CODE_MEDECINRESPONSABLE,
MAX(CASE WHEN CLI_CODE_UM <> '' THEN CLI_CODE_UM ELSE FD_MVTS_SORTIES.CLI_CODE_UF END) AS CLI_CODE_UM
FROM w_finess,
prod_clinicom.FD_ACTES_NGAP
JOIN prod_clinicom.FD_MVTS_EPISODES ON FD_ACTES_NGAP.CLI_DONN_NOABSEPISODE = FD_MVTS_EPISODES.CLI_DONN_NOABSEPISODE
JOIN prod_clinicom.FD_MVTS_SORTIES ON FD_ACTES_NGAP.CLI_DONN_NOABSEPISODE = FD_MVTS_SORTIES.CLI_DONN_NOABSEPISODE
JOIN prod_clinicom.FD_MVTS_PATIENTS ON FD_MVTS_EPISODES.CLI_CODE_NOIPP = FD_MVTS_PATIENTS.CLI_CODE_NOIPP
JOIN prod_clinicom.FS_MVTS_UF ON FD_MVTS_SORTIES.CLI_CODE_UF = FS_MVTS_UF.CLI_CODE_UF
LEFT JOIN pmsi.p_rss ON CLI_DONN_NOEXTEPISODE = no_sejour_administratif AND
p_rss.ghm_id = 0 AND date(CLI_DATE_SORTIE) = date(date_sortie) AND
en_cours LIKE '0'
WHERE FD_MVTS_SORTIES.CLI_DATE_SORTIE >= '[ANNEE]0101' AND date(FD_MVTS_SORTIES.CLI_DATE_SORTIE) = date(FD_MVTS_SORTIES.CLI_DATE_ENTREE) AND p_rss.oid IS NULL
GROUP BY 2,4,5;
UPDATE w_FD_PMSI_RSS SET rss_id = nextval('pmsi.s_rss'::regclass);
CREATE INDEX w_FD_PMSI_RSS_i1 ON w_FD_PMSI_RSS USING btree (CLI_DONN_NOABSEPISODE);
INSERT INTO pmsi.t_unites_medicales(code, texte, type_autorisation)
SELECT
w_FD_PMSI_RSS.CLI_CODE_UM,
CLI_DONN_DESCRIPTION,
''
FROM w_FD_PMSI_RSS
JOIN prod_clinicom.FS_MVTS_UF ON w_FD_PMSI_RSS.CLI_CODE_UM = FS_MVTS_UF.CLI_CODE_UF
WHERE rss_type = 'EXT' AND
w_FD_PMSI_RSS.CLI_CODE_UM NOT IN (SELECT code FROM pmsi.t_unites_medicales)
GROUP BY 1,2
ORDER BY 1;
INSERT INTO pmsi.p_rss (
finess,
oid,
no_rss,
no_patient,
version_groupage,
date_naissance,
sexe,
date_entree,
date_sortie,
mode_entree,
provenance,
mode_sortie,
destination,
code_postal,
poids_bebe,
igs2,
cma,
groupe_ghm,
duree_sejour,
nb_rsa,
age,
supprime,
date_import,
nb_rum,
secteur,
no_sejour_administratif,
nb_seances,
ghm_fg9,
ghm_id,
medecin_rss_id,
ghs_id,
mois_sortie,
diagnostic_principal_id,
diagnostic_relie_id,
ghm_production_id,
no_rum_principal,
unite_medicale_principale_id,
import_id,
etat,
acte_principal_id,
code_postal_id,
patient_id,
prestation_principale_id,
severite_fg11_simulation_code,
en_cours,
en_cours_etat,
base_remboursement,
sejour_facture,
honoraires_factures,
t2a_facture,
dmi_facture,
phc_facture,
ca_ghs_theorique,
nb_ghs,
ca_ghs,
nb_exb,
ca_exb,
nb_exh,
ca_exh,
nb_si,
ca_si,
nb_sur,
ca_sur,
nb_rea,
ca_rea,
nb_neonat,
ca_neonat,
traitement_epmsi,
code_retour_groupage,
comite_medical_id,
rehosp_meme_ghm,
from_oid
)
SELECT
finess,
rss_id AS oid,
CLI_DONN_RSSREFERENCE AS no_rss,
to_number(CLI_DONN_NOIPPEXTERNE, '000000000000000')::bigint AS no_patient,
'' AS version_groupage,
date(CLI_DATE_NAISSANCE) AS date_naissance,
CLI_CODE_SEXE AS sexe,
date(CLI_DATE_ENTREE) AS date_entree,
date(CLI_DATE_SORTIE) AS date_sortie,
COALESCE(RSS_CLI_CODE_MODEENTREEPMSI,'8') AS mode_entree,
COALESCE(RSS_CLI_CODE_PROVENANCEPMSI,'') AS provenance,
COALESCE(RSS_CLI_CODE_MODESORTIEPMSI,'8') AS mode_sortie,
COALESCE(RSS_CLI_CODE_DESTINATIONPMSI,'') AS destination,
SUBSTR(CLI_CODE_POSTAL,1,5) AS code_postal,
0 AS poids_bebe,
0 AS igs2,
'' AS cma,
substr(CLI_CODE_GHM , 3 , 1) AS groupe_ghm,
CASE WHEN CLI_DATE_SORTIE > CLI_DATE_ENTREE THEN date(CLI_DATE_SORTIE) - date(CLI_DATE_ENTREE) ELSE 0 END AS duree_sejour,
CASE WHEN substr(CLI_CODE_GHM,1,2) = '28' THEN 1 ELSE 1 END AS nb_rsa,
CASE WHEN CLI_DATE_ENTREE > CLI_DATE_NAISSANCE THEN trunc((date(CLI_DATE_ENTREE) - date(CLI_DATE_NAISSANCE)) / 365.25,0) ELSE 0 END AS age,
'' AS supprime,
now() AS date_import,
nb_rum,
'' AS secteur,
CLI_DONN_NOEXTEPISODE AS no_sejour_administratif,
CASE WHEN substr(CLI_CODE_GHM,1,2) = '28' THEN RSS_CLI_DONN_NBSEANCES ELSE 0 END AS nb_seances,
'' AS ghm_fg9,
COALESCE(t_ghm.oid, 0) AS ghm_id,
COALESCE(t_medecins.oid, 0) AS medecin_rss_id,
COALESCE(t_ghs.oid, 0) AS ghs_id,
date_part('year', CLI_DATE_SORTIE) * 100 + date_part('month', CLI_DATE_SORTIE) AS mois_sortie,
0::bigint AS diagnostic_principal_id,
0::bigint AS diagnostic_relie_id,
COALESCE(t_ghm.oid, 0) AS ghm_production_id,
CASE WHEN nb_rum > 1 THEN 0::bigint ELSE 1 END AS no_rum_principal,
0::bigint AS unite_medicale_principale_id,
-1 AS import_id,
'' AS etat,
0 AS acte_principal_id,
0 AS code_postal_id,
0 AS patient_id,
0 AS prestation_principale_id,
'' AS severite_fg11_simulation_code,
'1' AS en_cours,
CASE
WHEN length(CLI_CODE_GHM) = 6 AND substr(CLI_CODE_GHM,1,2) <> '90' AND '1' <> '1' THEN 'V'
WHEN length(CLI_CODE_GHM) = 6 AND substr(CLI_CODE_GHM,1,2) <> '90' THEN 'G'
WHEN rss_type = 'EXT' THEN 'G'
ELSE 'S' END AS en_cours_etat,
0 AS base_remboursement,
0 AS sejour_facture,
0 AS honoraires_factures,
0 AS t2a_facture,
0 AS dmi_facture,
0 AS phc_facture,
0 AS ca_ghs_theorique,
0 AS nb_ghs,
0 AS ca_ghs,
0 AS nb_exb,
0 AS ca_exb,
0 AS nb_exh,
0 AS ca_exh,
0 AS nb_si,
0 AS ca_si,
0 AS nb_sur,
0 AS ca_sur,
0 AS nb_rea,
0 AS ca_rea,
0 AS nb_neonat,
0 AS ca_neonat,
'' AS traitement_epmsi,
'' AS code_retour_groupage,
0 AS comite_medical_id,
'0' AS rehosp_meme_ghm,
0 AS from_oid
FROM w_FD_PMSI_RSS
LEFT JOIN pmsi.t_ghm ON (CLI_CODE_GHM = t_ghm.code)
LEFT JOIN pmsi.t_ghs ON (CLI_CODE_GHS = t_ghs.code)
LEFT JOIN pmsi.t_medecins ON RSS_CLI_CODE_MEDECINRESPONSABLE = t_medecins.code;
]]>
CLI_DONN_NOM THEN CLI_DONN_NOMNAISSANCE ELSE '' END AS nom_naissance
FROM w_FD_PMSI_RSS;
UPDATE pmsi.p_rss
SET no_patient = to_number(CLI_Donn_NoIPPExterne,'000000000000')
FROM w_FD_PMSI_RSS
WHERE CLI_Donn_RSSReference = no_rss AND
(CLI_Date_Sortie = date_sortie OR CLI_Date_Entree = date_entree OR CLI_DONN_NOEXTEPISODE = substr(no_sejour_administratif,1,8) AND date_trunc('month',CLI_Date_Sortie) = date_trunc('month',date_sortie)) AND
en_cours LIKE '0' AND
(
no_patient IS DISTINCT FROM to_number(CLI_Donn_NoIPPExterne,'000000000000')
)
;
]]>
CLI_DATE_ENTREEUM THEN date(CLI_DATE_SORTIEUM) - date(CLI_DATE_ENTREEUM) ELSE 0 END AS duree_sejour,
CASE WHEN substr(CLI_CODE_GHM,1,2) = '28' THEN CLI_DONN_NBSEANCES ELSE 0 END AS nb_seances,
''::text AS unite_medicale,
COALESCE(t_diagnostics_dp.oid, 0) AS diagnostic_principal_id,
COALESCE(t_diagnostics_dr.oid, 0) AS diagnostic_relie_id,
COALESCE(t_unites_medicales.oid,0) AS unite_medicale_id,
'' AS type_autorisation,
CLI_DONN_IGS2 AS igs2,
'' AS type_autorisation_lit_dedie,
'' AS supplement_code
FROM w_FD_PMSI_RSS
JOIN w_FD_PMSI_RUM ON w_FD_PMSI_RSS.CLI_DONN_NOABSEPISODE = w_FD_PMSI_RUM.CLI_DONN_NOABSEPISODE AND
w_FD_PMSI_RSS.CLI_DONN_NORSS = w_FD_PMSI_RUM.CLI_DONN_NORSS
LEFT JOIN pmsi.t_unites_medicales ON (w_FD_PMSI_RUM.CLI_CODE_UM = t_unites_medicales.code)
LEFT JOIN pmsi.t_diagnostics t_diagnostics_dp ON CLI_CODE_DIAG_DP = t_diagnostics_dp.code
LEFT JOIN pmsi.t_diagnostics t_diagnostics_dr ON CLI_CODE_DIAG_DR = t_diagnostics_dr.code;
]]>
0 THEN FD_ACTES_NGAP.CLI_DONN_TARIF ELSE FB_FAC_HISTOLETTRECLE.CLI_DONN_TARIF END AS CLI_DONN_TARIF,
CASE WHEN FB_FAC_LETTRECLE.CLI_CODE_IMPRESSION <> '' THEN FB_FAC_LETTRECLE.CLI_CODE_IMPRESSION ELSE FD_ACTES_NGAP.CLI_DONN_LETTRECLE END AS CLI_CODE_IMPRESSION,
CASE WHEN CASE WHEN FB_FAC_LETTRECLE.CLI_CODE_IMPRESSION <> '' THEN FB_FAC_LETTRECLE.CLI_CODE_IMPRESSION ELSE FD_ACTES_NGAP.CLI_DONN_LETTRECLE END
IN ('ATU', 'FTN', 'FTR', 'PHH', 'PHS', 'PII', 'PME', 'SE1', 'SE2', 'SE3', 'SE4', 'SE5', 'SE6', 'APE', 'AP2', 'FPI', 'FFM', 'REA', 'SRC', 'STF', 'PJ', 'TM')
THEN 'B' ELSE 'C' END AS CLI_DONN_LETTRECLE_TYPE
FROM w_FD_PMSI_RSS
JOIN w_FD_PMSI_RUM ON w_FD_PMSI_RSS.CLI_DONN_NOABSEPISODE = w_FD_PMSI_RUM.CLI_DONN_NOABSEPISODE AND
w_FD_PMSI_RSS.CLI_DONN_NORSS = w_FD_PMSI_RUM.CLI_DONN_NORSS
JOIN prod_clinicom.FD_ACTES_ENTETE ON w_FD_PMSI_RUM.CLI_DONN_NOABSEPISODE = FD_ACTES_ENTETE.CLI_DONN_NOABSEPISODE AND
FD_ACTES_ENTETE.CLI_DATE_SAISIE BETWEEN CLI_DATE_ENTREEUM AND CLI_DATE_SORTIEUM
JOIN prod_clinicom.FD_ACTES_NGAP ON FD_ACTES_ENTETE.CLI_DONN_NOABSEPISODE = FD_ACTES_NGAP.CLI_DONN_NOABSEPISODE AND
FD_ACTES_ENTETE.CLI_DONN_LIEN = FD_ACTES_NGAP.CLI_DONN_LIEN
JOIN prod_clinicom.FB_FAC_LETTRECLE ON FD_ACTES_NGAP.CLI_DONN_LETTRECLE = FB_FAC_LETTRECLE.CLI_CODE_LETTRECLE
JOIN prod_clinicom.FB_FAC_HISTOLETTRECLE ON FD_ACTES_NGAP.CLI_DONN_LETTRECLE = FB_FAC_HISTOLETTRECLE.CLI_CODE_LETTRECLE AND
CLI_DATE_SAISIE BETWEEN CLI_DATE_EFFET AND COALESCE(CLI_DATE_FINEFFET,'2099-12-31 00:00:00') - interval '1 second'
WHERE rss_type = 'EXT';
INSERT INTO pmsi.p_rsf_total(
finess,
rss_id,
no_rss,
code_pec,
rang_beneficiaire,
regime,
nature_pec,
justificatif_exo,
no_facture,
code_regularisation,
matricule_assure,
cle_matricule_assure,
base_remboursement,
sejour_facture,
sejour_remboursable,
honoraires_factures,
honoraires_remboursable,
t2a_facture,
dmi_facture,
phc_facture,
participation_assure_avant_oc,
sejour_remboursable_2,
honoraires_remboursable_2,
montant_dmi_ghs2006,
nb_si,
ca_si,
nb_sur,
ca_sur,
nb_rea,
ca_rea,
nb_neonat,
ca_neonat,
nb_exh,
ca_exh,
nb_exb,
ca_exb,
nb_ghs,
ca_ghs,
ca_ghs_theorique,
taux_remboursement)
SELECT
finess,
rss_id,
CLI_DONN_RSSREFERENCE AS no_rss,
'1' AS code_pec,
'' AS rang_beneficiaire,
'' AS regime,
'' AS nature_pec,
'' AS justificatif_exo,
CLI_DONN_NOEXTEPISODE AS no_facture,
'1' AS code_regularisation,
'' AS matricule_assure,
'' AS cle_matricule_assure,
SUM(CASE WHEN CLI_DONN_LETTRECLE_TYPE = 'B' THEN round(CLI_DONN_NBACTESSTATISTIQUES * CLI_DONN_COEFF * CLI_DONN_TARIF,2) ELSE 0 END) AS base_remboursement,
SUM(CASE WHEN CLI_DONN_LETTRECLE_TYPE = 'B' THEN round(CLI_DONN_NBACTESSTATISTIQUES * CLI_DONN_COEFF * CLI_DONN_TARIF,2) ELSE 0 END) AS sejour_facture,
SUM(CASE WHEN CLI_DONN_LETTRECLE_TYPE = 'B' THEN round(CLI_DONN_NBACTESSTATISTIQUES * CLI_DONN_COEFF * CLI_DONN_TARIF,2) ELSE 0 END) AS sejour_remboursable,
SUM(CASE WHEN CLI_DONN_LETTRECLE_TYPE = 'C' THEN round(CLI_DONN_NBACTESSTATISTIQUES * CLI_DONN_COEFF * CLI_DONN_TARIF,2) ELSE 0 END) AS honoraires_factures,
SUM(CASE WHEN CLI_DONN_LETTRECLE_TYPE = 'C' THEN round(CLI_DONN_NBACTESSTATISTIQUES * CLI_DONN_COEFF * CLI_DONN_TARIF,2) ELSE 0 END) AS honoraires_remboursable,
0 AS t2a_facture,
0 AS dmi_facture,
0 AS phc_facture,
0 AS participation_assure_avant_oc,
0 AS sejour_remboursable_2,
0 AS honoraires_remboursable_2,
0 AS montant_dmi_ghs2006,
0 AS nb_si,
0 AS ca_si,
0 AS nb_sur,
0 AS ca_sur,
0 AS nb_rea,
0 AS ca_rea,
0 AS nb_neonat,
0 AS ca_neonat,
0 AS nb_exh,
0 AS ca_exh,
0 AS nb_exb,
0 AS ca_exb,
0 AS nb_ghs,
0 AS ca_ghs,
0 AS ca_ghs_theorique,
0 AS taux_remboursement
FROM w_FD_ACTES_NGAP
JOIN pmsi.t_prestations ON CLI_CODE_IMPRESSION = t_prestations.code
GROUP BY finess,
rss_id,
CLI_DONN_RSSREFERENCE,
CLI_DONN_NOEXTEPISODE;
INSERT INTO pmsi.p_rsf_total(
finess, no_rss, code_pec, rang_beneficiaire, regime, nature_pec,
justificatif_exo, no_facture, code_regularisation, base_remboursement,
sejour_facture, sejour_remboursable, honoraires_factures, honoraires_remboursable,
t2a_facture, dmi_facture, phc_facture, participation_assure_avant_oc,
sejour_remboursable_2, honoraires_remboursable_2, montant_dmi_ghs2006,
nb_si, ca_si, nb_sur, ca_sur, nb_rea, ca_rea, nb_neonat, ca_neonat,
nb_exh, ca_exh, nb_exb, ca_exb, nb_ghs, ca_ghs, rss_id, ca_ghs_theorique)
SELECT
p_rss.finess, p_rss.no_rss, '', '', '', '', '', '', '', 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, p_rss.oid, 0
FROM pmsi.p_rss LEFT JOIN pmsi.p_rsf_total ON (p_rsf_total.rss_id = p_rss.oid)
WHERE en_cours = '1' AND p_rsf_total.rss_id IS NULL;
]]>
0;
]]>