= '[ENV_ADM_ANNEEDEBUT]0101' AND NDOSSIER_T IS NULL
GROUP BY 1;
INSERT INTO w_DOSSIERS_atraiter
SELECT VENTIL_PAIEMENT.N_HOSPI,
''::text AS type_sejour_force,
SUBSTR(to_char(VENTIL_PAIEMENT.N_HOSPI,'FM00000000'),1,1) AS prefixe,
''::text AS type_sejour_defaut
FROM prod_qsp.VENTIL_PAIEMENT
JOIN prod_qsp.HOSPI ON VENTIL_PAIEMENT.N_HOSPI= HOSPI.N_HOSPI
LEFT JOIN w_DOSSIERS_atraiter ON VENTIL_PAIEMENT.N_HOSPI = NDOSSIER_T
WHERE DT_VENT >= '[ENV_ADM_ANNEEDEBUT]0101' AND NDOSSIER_T IS NULL AND TRANS_CPTA <> 0
GROUP BY 1;
-- Type de séjour forcé selon actes saisis
DROP TABLE IF EXISTS w_DOSSIER_type;
CREATE TEMP TABLE w_DOSSIER_type AS
SELECT SAISIE.N_HOSPI,
CASE
WHEN SUM(CASE WHEN CODE_NORM IN ('GHS','PJ','FJ') THEN QTE ELSE 0 END) > 0 THEN '12'
WHEN SUM(CASE WHEN CODE_NORM IN ('D09','D10','D11','D12','D13') THEN QTE ELSE 0 END) > 0 THEN '5'
WHEN SUM(CASE WHEN CODE_NORM IN ('SE1','SE2','SE3','SE4','SE5', 'SE6', 'SE7','ATU', 'FPU','FFM') THEN QTE ELSE 0 END) > 0 THEN '3'
ELSE '' END AS type_sejour_selon_saisie
FROM prod_qsp.SAISIE
JOIN w_DOSSIERS_atraiter ON SAISIE.N_HOSPI = NDOSSIER_T
JOIN prod_qsp.PRESTATION ON SAISIE.CODE_PREST = PRESTATION.CODE_PREST
WHERE SUPPRIME <> 1
GROUP BY 1
;
UPDATE w_DOSSIERS_atraiter
SET type_sejour_force = type_sejour_selon_saisie
FROM w_DOSSIER_type
WHERE w_DOSSIER_type.N_HOSPI = NDOSSIER_T AND
type_sejour_selon_saisie <> ''
;
UPDATE w_DOSSIERS_atraiter
SET type_sejour_defaut = t_divers.valeur
FROM activite.t_divers
WHERE t_divers.code = 'QSP_TYPESEJ_'||prefixe AND
type_sejour_force = '' AND
t_divers.valeur <> ''
;
]]>
'';
UPDATE cti_histolit
SET C_SECT = etage_code
FROM w_lit_force
WHERE NUM_LIT ILIKE ANY (lit_force_array);
]]>
now() + interval '5 year');
UPDATE prod_qsp.SAISIE
SET D_DEB = date(DATE_SORTIE), D_FIN = date(DATE_SORTIE)
FROM prod_qsp.DOSSIER
WHERE SAISIE.N_HOSPI = DOSSIER.NDOSSIER AND
date(D_DEB) > date(DATE_SORTIE) AND
DATE_SORTIE IS NOT NULL AND QTE = 1
;
UPDATE prod_qsp.SAISIE
SET D_DEB = date(DATE_ENTREE), D_FIN = date(DATE_ENTREE)
FROM prod_qsp.DOSSIER
WHERE SAISIE.N_HOSPI = DOSSIER.NDOSSIER AND
date(D_DEB) < date(DATE_ENTREE) AND QTE = 1
;
UPDATE prod_qsp.SAISIE
SET D_FIN = date(DATE_SORTIE)
FROM prod_qsp.DOSSIER
WHERE SAISIE.N_HOSPI = DOSSIER.NDOSSIER AND
date(D_FIN) > date(DATE_SORTIE) AND
DATE_SORTIE IS NOT NULL
;
]]>
9999
LEFT JOIN base.t_ghm ON PMSI_RESULT.GHM = t_ghm.code AND t_ghm.code NOT LIKE '90%'
WHERE PMSI_RESULT.N_SEQ = 0
GROUP BY 1;
CREATE INDEX W_PMSI_RESULT_i1
ON W_PMSI_RESULT
USING btree
(NDOSSIER);
-- Type de séjour forcé selon actes saisis
DROP TABLE IF EXISTS w_DOSSIER_type;
CREATE TEMP TABLE w_DOSSIER_type AS
SELECT SAISIE.N_HOSPI,
CASE
WHEN SUM(CASE WHEN CODE_NORM IN ('GHS','PJ','FJ') THEN QTE ELSE 0 END) > 0 THEN '12'
WHEN SUM(CASE WHEN CODE_NORM IN ('D09','D10','D11','D12','D13') THEN QTE ELSE 0 END) > 0 THEN '5'
WHEN SUM(CASE WHEN CODE_NORM IN ('SE1','SE2','SE3','SE4','SE5', 'SE6', 'SE7','ATU', 'FPU','FFM') THEN QTE ELSE 0 END) > 0 THEN '3'
ELSE '' END AS type_sejour_selon_saisie
FROM prod_qsp.SAISIE
JOIN prod_qsp.PRESTATION ON SAISIE.CODE_PREST = PRESTATION.CODE_PREST
WHERE SUPPRIME <> 1
GROUP BY 1
;
DROP TABLE IF EXISTS w_sejours;
CREATE TEMP TABLE w_sejours AS
SELECT
DOSSIER.NDOSSIER as no_sejour,
DOSSIER.NDOSSIER as code_original,
DOSSIER.NPATIENT as no_patient,
date(DOSSIER.DATE_ENTREE) as date_entree,
extract('hour' FROM DOSSIER.DATE_ENTREE) * 10000 + extract('minute' FROM DOSSIER.DATE_ENTREE) * 100 + extract('second' FROM DOSSIER.DATE_ENTREE) as heure_entree,
CASE WHEN DOSSIER.DATE_SORTIE IS NOT NULL THEN date(DOSSIER.DATE_SORTIE) ELSE '20991231' END::date as date_sortie,
CASE WHEN DOSSIER.DATE_SORTIE IS NOT NULL THEN extract('hour' FROM DOSSIER.DATE_SORTIE) * 10000 + extract('minute' FROM DOSSIER.DATE_SORTIE) * 100 + extract('second' FROM DOSSIER.DATE_SORTIE) ELSE 0 END as heure_sortie,
CASE WHEN PATIENT.SEXE = '2' THEN '2' ELSE '1' END as code_sexe,
0 AS age,
CASE WHEN DOSSIER.DATE_SORTIE IS NOT NULL THEN 1 ELSE 0 END as code_sorti,
0 as code_prevu,
CASE
WHEN DOSSIER.IN_TRANSIT = 1 OR HOSPI.ADMISSION = 1 THEN '9'
WHEN t_services_facturation.type_sejour IN ('1','2','3','5') THEN t_services_facturation.type_sejour
WHEN w_DOSSIERS_atraiter.type_sejour_force = '12' AND date(DOSSIER.DATE_ENTREE) = date(DOSSIER.DATE_SORTIE) THEN '2'
WHEN w_DOSSIERS_atraiter.type_sejour_force = '12' THEN '1'
WHEN w_DOSSIERS_atraiter.type_sejour_force = '3' AND date(DOSSIER.DATE_ENTREE) = date(DOSSIER.DATE_SORTIE) THEN '3'
WHEN w_DOSSIERS_atraiter.type_sejour_force = '5' AND date(DOSSIER.DATE_ENTREE) = date(DOSSIER.DATE_SORTIE) THEN '5'
WHEN w_DOSSIERS_atraiter.type_sejour_defaut = '1' AND date(DOSSIER.DATE_ENTREE) = date(DOSSIER.DATE_SORTIE) THEN '2'
WHEN w_DOSSIERS_atraiter.type_sejour_defaut = '1' THEN '1'
WHEN w_DOSSIERS_atraiter.type_sejour_defaut = '2' AND date(DOSSIER.DATE_ENTREE) = date(DOSSIER.DATE_SORTIE) THEN '2'
WHEN w_DOSSIERS_atraiter.type_sejour_defaut = '2' AND DOSSIER.DATE_SORTIE IS NULL THEN '2'
WHEN w_DOSSIERS_atraiter.type_sejour_defaut = '2' THEN '1'
WHEN w_DOSSIERS_atraiter.type_sejour_defaut = '3' AND date(DOSSIER.DATE_ENTREE) = date(DOSSIER.DATE_SORTIE) THEN '3'
WHEN w_DOSSIERS_atraiter.type_sejour_defaut = '3' AND DOSSIER.DATE_SORTIE IS NULL THEN '3'
WHEN w_DOSSIERS_atraiter.type_sejour_defaut = '5' AND date(DOSSIER.DATE_ENTREE) = date(DOSSIER.DATE_SORTIE) THEN '5'
WHEN w_DOSSIERS_atraiter.type_sejour_defaut = '5' AND DOSSIER.DATE_SORTIE IS NULL THEN '5'
WHEN t_modes_traitement.code IN ('07') OR t_dmt.code In ('958') THEN '3'
WHEN t_modes_traitement.code IN ('19', '23') AND date(DOSSIER.DATE_ENTREE) = date(DOSSIER.DATE_SORTIE) THEN '2'
WHEN t_modes_traitement.code IN ('04') AND date(DOSSIER.DATE_ENTREE) = date(DOSSIER.DATE_SORTIE) THEN '2'
WHEN t_modes_traitement.code IN ('03') AND date(DOSSIER.DATE_ENTREE) = date(DOSSIER.DATE_SORTIE) THEN '2'
WHEN date(DOSSIER.DATE_ENTREE) = date(DOSSIER.DATE_SORTIE) THEN '2'
ELSE '1' END as type_sejour,
COALESCE(t_medecins_administratifs.oid,0) as medecin_sejour_id,
COALESCE(w_PMSI_RESULT.ghs_id,0) AS ghs_id,
COALESCE(w_PMSI_RESULT.ghm_id,0) AS ghm_id,
COALESCE(w_PMSI_RESULT.date_groupage, '20991231') AS date_groupage,
CASE WHEN DOSSIER.DEM_CHP = 'O' THEN '1' ELSE '0' END as code_cp_demandee,
COALESCE(t_modes_traitement.oid,0) as mode_traitement_id,
COALESCE(w_PMSI_RESULT.mode_entree,'8') AS mode_entree,
COALESCE(w_PMSI_RESULT.provenance,'') AS provenance,
COALESCE(w_PMSI_RESULT.mode_sortie,'8') AS mode_sortie,
COALESCE(w_PMSI_RESULT.destination,'') AS destination,
COALESCE(t_tiers_payant_0.oid,0) AS tiers_payant_0_id,
COALESCE(t_tiers_payant_1.oid,0) AS tiers_payant_1_id,
COALESCE(t_tiers_payant_2.oid,0) AS tiers_payant_2_id,
0 AS tiers_payant_22_id,
COALESCE(t_codes_postaux.oid, 0) AS code_postal_id
FROM prod_qsp.DOSSIER
JOIN w_DOSSIERS_atraiter ON DOSSIER.NDOSSIER = NDOSSIER_T
JOIN prod_qsp.HOSPI ON DOSSIER.NDOSSIER = HOSPI.N_HOSPI
LEFT JOIN w_HISTOLIT_SERVICE ON DOSSIER.NDOSSIER = w_HISTOLIT_SERVICE.NDOSSIER
LEFT JOIN activite[PX].t_services_facturation ON w_HISTOLIT_SERVICE.C_SERV_CTI = t_services_facturation.code_original
LEFT JOIN base.t_modes_traitement ON t_services_facturation.mode_traitement_id = t_modes_traitement.oid
LEFT JOIN base.t_dmt ON t_services_facturation.dmt_id = t_dmt.oid
LEFT JOIN prod_qsp.PATIENT ON DOSSIER.NPATIENT = PATIENT.NPATIENT
LEFT JOIN base.t_codes_postaux on t_codes_postaux.code = PATIENT.CPO_PAT
LEFT JOIN w_PMSI_RESULT ON DOSSIER.NDOSSIER = w_PMSI_RESULT.NDOSSIER
LEFT JOIN activite[PX].t_medecins_administratifs ON MEDSUIV = t_medecins_administratifs.code_original
LEFT JOIN activite[PX].t_tiers_payant t_tiers_payant_0 ON 'PATIENT' = t_tiers_payant_0.code
LEFT JOIN activite[PX].t_tiers_payant t_tiers_payant_1 ON HOSPI.CAISSE_DESTINATAIRE = t_tiers_payant_1.code_original
LEFT JOIN activite[PX].t_tiers_payant t_tiers_payant_2 ON HOSPI.MUT_CODE = t_tiers_payant_2.code_original
WHERE DOSSIER.ANNULE = 0;
UPDATE w_sejours
SET no_patient = subview.NPATIENT_GARDE
FROM (
SELECT NPATIENT_FUSIONE, MAX(NPATIENT_GARDE) AS NPATIENT_GARDE FROM prod_qsp.HISTORIQUE_FUSIONS GROUP BY 1
) subview
WHERE w_sejours.no_patient = subview.NPATIENT_FUSIONE;
SELECT base.cti_disable_index('activite[PX]', 'i_sejours_2');
SELECT base.cti_disable_index('activite[PX]', 'i_sejours_3');
SELECT base.cti_disable_index('activite[PX]', 'i_sejours_4');
SELECT base.cti_disable_index('activite[PX]', 'i_sejours_5');
SELECT base.cti_disable_index('activite[PX]', 'i_sejours_6');
SELECT base.cti_disable_index('activite[PX]', 'i_sejours_7');
SELECT base.cti_disable_index('activite[PX]', 'i_sejours_8');
SELECT base.cti_disable_index('activite[PX]', 'i_sejours_9');
SELECT base.cti_disable_index('activite[PX]', 'i_sejours_10');
SELECT base.cti_disable_index('activite[PX]', 'i_sejours_11');
SELECT base.cti_disable_index('activite[PX]', 'i_sejours_12');
SELECT base.cti_disable_index('activite[PX]', 'i_sejours_13');
-- Forcage type selon séjour
UPDATE w_sejours
SET type_sejour = t_sejour.type_sejour
FROM activite.t_sejour
WHERE t_sejour.no_sejour = '[CPX]' || w_sejours.no_sejour AND
t_sejour.type_sejour IN ('1','2','3','4','5','6','9');
UPDATE w_sejours
SET type_sejour = t_sejour.type_sejour
FROM activite.t_sejour
WHERE t_sejour.no_sejour ILIKE ('QS_' || w_sejours.no_sejour) AND
t_sejour.type_sejour IN ('1','2','3','4','5','6','9');
UPDATE activite[PX].p_sejours SET
code_original = w_sejours.code_original,
no_patient = w_sejours.no_patient,
date_entree = w_sejours.date_entree,
heure_entree = w_sejours.heure_entree,
date_sortie = w_sejours.date_sortie,
heure_sortie = w_sejours.heure_sortie,
code_sexe = w_sejours.code_sexe,
age = w_sejours.age,
code_sorti = w_sejours.code_sorti,
code_prevu = w_sejours.code_prevu,
type_sejour = w_sejours.type_sejour,
medecin_sejour_id = w_sejours.medecin_sejour_id,
code_cp_demandee = w_sejours.code_cp_demandee,
mode_traitement_id = w_sejours.mode_traitement_id,
mode_entree = w_sejours.mode_entree,
provenance = w_sejours.provenance,
mode_sortie = w_sejours.mode_sortie,
destination = w_sejours.destination,
tiers_payant_0_id = w_sejours.tiers_payant_0_id,
tiers_payant_1_id = w_sejours.tiers_payant_1_id,
tiers_payant_2_id = w_sejours.tiers_payant_2_id,
tiers_payant_22_id = w_sejours.tiers_payant_22_id,
ghs_id = w_sejours.ghs_id,
ghm_id = w_sejours.ghm_id,
date_groupage = w_sejours.date_groupage,
code_postal_id = w_sejours.code_postal_id
FROM w_sejours
WHERE w_sejours.no_sejour = p_sejours.no_sejour
AND (
w_sejours.code_original IS DISTINCT FROM p_sejours.code_original OR
w_sejours.no_patient IS DISTINCT FROM p_sejours.no_patient OR
w_sejours.date_entree IS DISTINCT FROM p_sejours.date_entree OR
w_sejours.heure_entree IS DISTINCT FROM p_sejours.heure_entree OR
w_sejours.date_sortie IS DISTINCT FROM p_sejours.date_sortie OR
w_sejours.heure_sortie IS DISTINCT FROM p_sejours.heure_sortie OR
w_sejours.code_sexe IS DISTINCT FROM p_sejours.code_sexe OR
w_sejours.age IS DISTINCT FROM p_sejours.age OR
w_sejours.code_sorti IS DISTINCT FROM p_sejours.code_sorti OR
w_sejours.code_prevu IS DISTINCT FROM p_sejours.code_prevu OR
w_sejours.type_sejour IS DISTINCT FROM p_sejours.type_sejour OR
w_sejours.medecin_sejour_id IS DISTINCT FROM p_sejours.medecin_sejour_id OR
w_sejours.code_cp_demandee IS DISTINCT FROM p_sejours.code_cp_demandee OR
w_sejours.mode_traitement_id IS DISTINCT FROM p_sejours.mode_traitement_id OR
w_sejours.mode_entree IS DISTINCT FROM p_sejours.mode_entree OR
w_sejours.provenance IS DISTINCT FROM p_sejours.provenance OR
w_sejours.mode_sortie IS DISTINCT FROM p_sejours.mode_sortie OR
w_sejours.destination IS DISTINCT FROM p_sejours.destination OR
w_sejours.tiers_payant_0_id IS DISTINCT FROM p_sejours.tiers_payant_0_id OR
w_sejours.tiers_payant_1_id IS DISTINCT FROM p_sejours.tiers_payant_1_id OR
w_sejours.tiers_payant_2_id IS DISTINCT FROM p_sejours.tiers_payant_2_id OR
w_sejours.tiers_payant_22_id IS DISTINCT FROM p_sejours.tiers_payant_22_id OR
w_sejours.ghs_id IS DISTINCT FROM p_sejours.ghs_id OR
w_sejours.ghm_id IS DISTINCT FROM p_sejours.ghm_id OR
w_sejours.date_groupage IS DISTINCT FROM p_sejours.date_groupage OR
w_sejours.code_postal_id IS DISTINCT FROM p_sejours.code_postal_id
);
INSERT INTO activite[PX].p_sejours (
no_sejour,
code_original,
no_patient,
date_entree,
heure_entree,
date_sortie,
heure_sortie,
code_sexe,
age,
code_sorti,
code_prevu,
type_sejour,
medecin_sejour_id,
ghs_id,
ghm_id,
date_groupage,
code_cp_demandee,
mode_traitement_id,
mode_entree,
provenance,
mode_sortie,
destination,
tiers_payant_0_id,
tiers_payant_1_id,
tiers_payant_2_id,
tiers_payant_22_id,
code_postal_id
)
SELECT
w_sejours.no_sejour,
w_sejours.code_original,
w_sejours.no_patient,
w_sejours.date_entree,
w_sejours.heure_entree,
w_sejours.date_sortie,
w_sejours.heure_sortie,
w_sejours.code_sexe,
w_sejours.age,
w_sejours.code_sorti,
w_sejours.code_prevu,
w_sejours.type_sejour,
w_sejours.medecin_sejour_id,
w_sejours.ghs_id,
w_sejours.ghm_id,
w_sejours.date_groupage,
w_sejours.code_cp_demandee,
w_sejours.mode_traitement_id,
w_sejours.mode_entree,
w_sejours.provenance,
w_sejours.mode_sortie,
w_sejours.destination,
w_sejours.tiers_payant_0_id,
w_sejours.tiers_payant_1_id,
w_sejours.tiers_payant_2_id,
w_sejours.tiers_payant_22_id,
w_sejours.code_postal_id
FROM w_sejours LEFT JOIN activite[PX].p_sejours ON (w_sejours.no_sejour = p_sejours.no_sejour)
WHERE p_sejours.no_sejour IS NULL;
DELETE FROM activite[PX].p_sejours WHERE no_sejour NOT IN (SELECT no_sejour FROM w_sejours);
-- Séjours ignorés
UPDATE activite[PX].p_sejours
SET etat = 'I'
FROM activite.t_sejour
WHERE t_sejour.no_sejour = p_sejours.no_sejour AND
est_ignore = '1' AND
etat <> 'I' AND
'[PX]' = '';
UPDATE activite[PX].p_sejours
SET etat = ''
WHERE etat = 'I' AND
no_sejour NOT IN (SELECT no_sejour FROM activite.t_sejour WHERE est_ignore = '1') AND
'[PX]' = '';
-- Médecin séjour forcé
UPDATE activite[PX].p_sejours
SET medecin_sejour_id = t_sejour.medecin_sejour_id
FROM activite.t_sejour
WHERE t_sejour.no_sejour = p_sejours.no_sejour AND
t_sejour.medecin_sejour_id <> 0 AND
p_sejours.medecin_sejour_id IS DISTINCT FROM t_sejour.medecin_sejour_id AND
'[PX]' = '';
-- recréation index
SELECT base.cti_enable_index('activite[PX]', 'i_sejours_2');
SELECT base.cti_enable_index('activite[PX]', 'i_sejours_3');
SELECT base.cti_enable_index('activite[PX]', 'i_sejours_4');
SELECT base.cti_enable_index('activite[PX]', 'i_sejours_5');
SELECT base.cti_enable_index('activite[PX]', 'i_sejours_6');
SELECT base.cti_enable_index('activite[PX]', 'i_sejours_7');
SELECT base.cti_enable_index('activite[PX]', 'i_sejours_8');
SELECT base.cti_enable_index('activite[PX]', 'i_sejours_9');
SELECT base.cti_enable_index('activite[PX]', 'i_sejours_10');
SELECT base.cti_enable_index('activite[PX]', 'i_sejours_11');
SELECT base.cti_enable_index('activite[PX]', 'i_sejours_12');
SELECT base.cti_enable_index('activite[PX]', 'i_sejours_13');
]]>
= DOSSIER.DATE_ENTREE THEN cti_histolit.DATECHG ELSE DOSSIER.DATE_ENTREE END AS DATECHG, MAX(N_UNIQUE) AS N_UNIQUE
FROM cti_histolit JOIN prod_qsp.DOSSIER ON DOSSIER.NDOSSIER = cti_histolit.NDOSSIER
GROUP BY 1,2;
CREATE INDEX w_HISTOLIT_DOUBLONS_i1
ON w_HISTOLIT_DOUBLONS
USING btree
(N_UNIQUE);
DROP SEQUENCE IF EXISTS w_HISTOLIT_seq;
CREATE TEMP SEQUENCE w_HISTOLIT_seq
INCREMENT 1
MINVALUE 1;
DROP TABLE IF EXISTS w_HISTOLIT;
CREATE TEMP TABLE w_HISTOLIT AS
SELECT nextval('w_HISTOLIT_seq'::regclass) AS sequence,
subview.NDOSSIER,
subview.DATE_ENTREE_DOSSIER,
'1'::text AS CODE_ENTREE,
subview.DATE_SORTIE_DOSSIER,
CASE WHEN date(DATE_SORTIE_DOSSIER) <> '20991231' THEN '1'::text ELSE '0' END AS CODE_SORTIE,
subview.DATECHG,
date(subview.DATECHG) AS DATECHG_DAT,
extract('hour' FROM DATECHG) * 10000 + extract('minute' FROM DATECHG) * 100 + extract('second' FROM DATECHG) AS DATECHG_TIM,
date(subview.DATECHG) AS DATECHG_FIN,
date(DATE_SORTIE_DOSSIER) AS DATECHG_FIN_DAT,
extract('hour' FROM DATE_SORTIE_DOSSIER) * 10000 + extract('minute' FROM DATE_SORTIE_DOSSIER) * 100 + extract('second' FROM DATE_SORTIE_DOSSIER) AS DATECHG_FIN_TIM,
subview.C_SERV_CTI,
subview.C_UF_CTI,
subview.C_SECT,
subview.NUM_LIT,
subview.NUM_LIT_LIT,
subview.C_SERV_CTI AS C_SERV_before,
subview.C_SECT AS C_SECT_before,
subview.NUM_LIT AS NUM_LIT_before,
subview.C_SERV_CTI AS C_SERV_next,
subview.C_SECT AS C_SECT_next,
subview.NUM_LIT AS NUM_LIT_next,
medecin_sejour_id
FROM
(
SELECT
DOSSIER.NDOSSIER,
DOSSIER.DATE_ENTREE AS DATE_ENTREE_DOSSIER,
CASE WHEN DOSSIER.DATE_SORTIE IS NOT NULL THEN DOSSIER.DATE_SORTIE ELSE '20991231' END AS DATE_SORTIE_DOSSIER,
CASE WHEN cti_histolit.DATECHG >= DOSSIER.DATE_ENTREE THEN cti_histolit.DATECHG ELSE DOSSIER.DATE_ENTREE END AS DATECHG,
C_SERV_CTI,
C_UF_CTI,
CASE WHEN C_SECT <> '' THEN COALESCE(C_SECT, C_SERV_CTI) ELSE C_SERV_CTI END AS C_SECT,
CASE WHEN NUM_LIT <> '' THEN CASE WHEN C_SECT <> '' THEN COALESCE(C_SECT, C_SERV_CTI) ELSE C_SERV_CTI END || '|' || REPLACE(UPPER(COALESCE(NUM_LIT,'')),' ', '') ELSE '' END AS NUM_LIT,
REPLACE(UPPER(COALESCE(NUM_LIT,'')),' ', '') AS NUM_LIT_LIT,
N_PREAD,
medecin_sejour_id
FROM cti_histolit, w_HISTOLIT_DOUBLONS, activite[PX].p_sejours, prod_qsp.DOSSIER
JOIN prod_qsp.HOSPI ON DOSSIER.NDOSSIER = HOSPI.N_HOSPI
JOIN w_DOSSIERS_atraiter ON DOSSIER.NDOSSIER = NDOSSIER_T
WHERE cti_histolit.N_UNIQUE = w_HISTOLIT_DOUBLONS.N_UNIQUE AND
cti_histolit.NDOSSIER = p_sejours.code_original AND
DOSSIER.NDOSSIER = cti_histolit.NDOSSIER AND ANNULE = 0
ORDER BY DOSSIER.NDOSSIER, CASE WHEN cti_histolit.DATECHG >= DOSSIER.DATE_ENTREE THEN cti_histolit.DATECHG ELSE DOSSIER.DATE_ENTREE END
) subview;
CREATE INDEX w_HISTOLIT_i1
ON w_HISTOLIT
USING btree
(NDOSSIER);
UPDATE w_HISTOLIT
SET
CODE_SORTIE = '0',
DATECHG_FIN = w_HISTOLIT_next.DATECHG - interval '1 second',
DATECHG_FIN_DAT = date(w_HISTOLIT_next.DATECHG - interval '1 second'),
DATECHG_FIN_TIM = extract('hour' FROM w_HISTOLIT_next.DATECHG - interval '1 second') * 10000 +
extract('minute' FROM w_HISTOLIT_next.DATECHG - interval '1 second') * 100 +
extract('second' FROM w_HISTOLIT_next.DATECHG - interval '1 second'),
C_SERV_next = w_HISTOLIT_next.C_SERV_CTI,
C_SECT_next = w_HISTOLIT_next.C_SECT,
NUM_LIT_next = w_HISTOLIT_next.NUM_LIT
FROM w_HISTOLIT w_HISTOLIT_next
WHERE w_HISTOLIT.NDOSSIER = w_HISTOLIT_next.NDOSSIER
AND w_HISTOLIT.sequence = w_HISTOLIT_next.sequence - 1;
UPDATE w_HISTOLIT
SET
CODE_ENTREE = '0',
C_SERV_before = w_HISTOLIT_before.C_SERV_CTI,
C_SECT_before = w_HISTOLIT_before.C_SECT,
NUM_LIT_before = w_HISTOLIT_before.NUM_LIT
FROM w_HISTOLIT w_HISTOLIT_before
WHERE w_HISTOLIT.NDOSSIER = w_HISTOLIT_before.NDOSSIER
AND w_HISTOLIT.sequence = w_HISTOLIT_before.sequence + 1;
CREATE INDEX w_HISTOLIT_i2
ON w_HISTOLIT
USING btree
(NUM_LIT);
CREATE INDEX w_HISTOLIT_i3
ON w_HISTOLIT
USING btree
(C_SERV_CTI);
INSERT INTO activite[PX].t_etages(code_original, code, texte, texte_court)
SELECT DISTINCT C_SECT, C_SECT, C_SECT, C_SECT
FROM w_histolit
WHERE C_SECT <> '' AND C_SECT NOT IN (SELECT code_original FROM activite[PX].t_etages);
INSERT INTO activite[PX].t_lits(code_original, code, texte, texte_court, etage_id, chambre_particuliere)
SELECT DISTINCT NUM_LIT, NUM_LIT_LIT, NUM_LIT_LIT, NUM_LIT_LIT, COALESCE(t_etages.oid,0), 'N'
FROM w_histolit LEFT JOIN activite[PX].t_etages ON C_SECT = t_etages.code_original
WHERE NUM_LIT NOT IN (SELECT code_original FROM activite[PX].t_lits) ORDER BY 1;
ANALYSE w_HISTOLIT;
DELETE
FROM activite[PX].t_lieux
USING
(
SELECT
code_original_1, code_original_2, code_original_3, code_original_4, code_original_5 , code_original_6 , code_original_7 , count(*), min(ctid) AS keep_ctid from activite[PX].t_lieux
group by 1,2,3,4,5,6,7
HAVING count(*) > 1
) subview
WHERE t_lieux.code_original_1 = subview.code_original_1 AND
t_lieux.code_original_2 = subview.code_original_2 AND
t_lieux.code_original_3 = subview.code_original_3 AND
t_lieux.code_original_4 = subview.code_original_4 AND
t_lieux.code_original_5 = subview.code_original_5 AND
t_lieux.code_original_6 = subview.code_original_6 AND
t_lieux.code_original_7 = subview.code_original_7 AND
t_lieux.CTID <> subview.keep_CTID
;
DROP TABLE IF EXISTS w_mouvements_sejour;
CREATE TEMP TABLE w_mouvements_sejour AS
SELECT
w_HISTOLIT.NDOSSIER AS no_sejour,
sequence,
p_calendrier.date,
p_calendrier.jour_semaine,
p_calendrier.is_weekend,
CASE WHEN p_calendrier.date = DATECHG_DAT THEN DATECHG_TIM ELSE 0 END AS heure_debut,
CASE WHEN p_calendrier.date = DATECHG_FIN_DAT THEN DATECHG_FIN_TIM ELSE 240000 END AS heure_fin,
CASE WHEN p_calendrier.date = DATECHG_DAT AND CODE_ENTREE = '1' AND p_sejours.type_sejour = '1' THEN 1 ELSE 0 END AS nb_entrees_directes,
CASE WHEN p_calendrier.date = DATECHG_FIN_DAT AND CODE_SORTIE = '1' AND p_sejours.type_sejour = '1' THEN 1 ELSE 0 END AS nb_sorties_directes,
CASE WHEN p_calendrier.date = DATECHG_DAT AND CODE_ENTREE = '1' AND p_sejours.type_sejour = '1' THEN '1' ELSE '0' END AS est_jour_entree,
CASE WHEN p_calendrier.date = DATECHG_FIN_DAT AND CODE_SORTIE = '1' AND p_sejours.type_sejour = '1' THEN '1' ELSE '0' END AS est_jour_sortie,
CASE WHEN p_sejours.type_sejour = '1' THEN '1' ELSE '0' END AS est_jour_hospitalisation,
CASE WHEN p_calendrier.date = DATECHG_DAT AND CODE_ENTREE = '1' AND p_sejours.type_sejour = '2' THEN 1 ELSE 0 END AS nb_ambulatoires,
CASE WHEN p_calendrier.date = DATECHG_DAT AND CODE_ENTREE = '1' AND p_sejours.type_sejour = '3' THEN 1 ELSE 0 END AS nb_externes,
CASE WHEN p_calendrier.date = DATECHG_DAT AND CODE_ENTREE = '1' AND (t_dmt.code IN ('303', '307', '308', '401', '402', '403', '404', '405', '406', '407', '408', '409') OR DOSSIER.URGENCE > 1 OR HOSPI.ENTREE_URG = 1) THEN 1 ELSE 0 END AS nb_urgences,
0 as nb_seances,
0 as nb_bebes,
CASE WHEN p_calendrier.date = DATECHG_DAT AND p_sejours.type_sejour = '1' AND C_SERV_CTI <> C_SERV_before THEN 1 ELSE 0 END AS nb_entrees_mutation_service,
CASE WHEN p_calendrier.date = DATECHG_FIN_DAT AND p_sejours.type_sejour = '1' AND C_SERV_CTI <> C_SERV_next THEN 1 ELSE 0 END AS nb_sorties_mutation_service,
CASE WHEN p_calendrier.date = DATECHG_DAT AND p_sejours.type_sejour = '1' AND C_SECT <> C_SECT_before THEN 1 ELSE 0 END AS nb_entrees_mutation_etage,
CASE WHEN p_calendrier.date = DATECHG_FIN_DAT AND p_sejours.type_sejour = '1' AND C_SECT <> C_SECT_next THEN 1 ELSE 0 END AS nb_sorties_mutation_etage,
0 AS nb_entrees_mutation_activite,
0 AS nb_sorties_mutation_activite,
0 AS nb_entrees_mutation_unite_medicale,
0 AS nb_sorties_mutation_unite_medicale,
CASE WHEN p_sejours.type_sejour = '1' AND (p_calendrier.date <> DATECHG_FIN_DAT OR CODE_SORTIE = '1') THEN 1 ELSE 0 END AS nb_jours_js_inclus,
CASE WHEN p_sejours.type_sejour = '1' AND p_calendrier.date <> DATECHG_FIN_DAT THEN 1 ELSE 0 END AS nb_jours_js_non_inclus,
CASE WHEN p_sejours.type_sejour = '1' AND t_lits.chambre_particuliere = 'O' THEN '1' ELSE '0' END AS est_chambre_particuliere,
CASE WHEN p_sejours.type_sejour = '1' AND t_lits.chambre_particuliere = 'O' AND (p_calendrier.date <> DATECHG_FIN_DAT OR CODE_SORTIE = '1') THEN 1 ELSE 0 END AS nb_chambres_particulieres,
C_SERV_CTI,
C_UF_CTI,
C_SECT,
NUM_LIT,
COALESCE(t_lieux.oid,0) AS lieu_id,
p_sejours.medecin_sejour_id as medecin_sejour_id,
CASE WHEN p_sejours.code_prevu = '1' OR p_calendrier.date > date(now()) THEN '1' ELSE '0' END AS est_mouvement_previsionnel,
p_sejours.oid as sejour_id
FROM w_HISTOLIT
JOIN activite[PX].p_sejours ON w_HISTOLIT.NDOSSIER = p_sejours.no_sejour AND p_sejours.etat = ''
LEFT JOIN activite[PX].t_lieux ON (t_lieux.code_original_1 = C_SERV_CTI AND t_lieux.code_original_4 = NUM_LIT )
, prod_qsp.DOSSIER, prod_qsp.HOSPI, base.p_calendrier, activite[PX].t_lits, activite[PX].t_services_facturation, base.t_dmt
WHERE
w_HISTOLIT.NDOSSIER = DOSSIER.NDOSSIER
AND w_HISTOLIT.NDOSSIER = HOSPI.N_HOSPI
AND NUM_LIT = t_lits.code_original
AND C_SERV_CTI = t_services_facturation.code_original
AND t_services_facturation.dmt_id = t_dmt.oid
AND (p_calendrier.date BETWEEN DATECHG_DAT AND DATECHG_FIN_DAT AND p_calendrier.date <= now() OR (p_calendrier.date = p_sejours.date_entree AND CODE_ENTREE = '1'))
AND p_calendrier.date <= now()
AND p_sejours.code_prevu <> '1'
ORDER BY sequence, p_calendrier.date;
-- seances
DROP TABLE IF EXISTS w_SAISIE_seances;
CREATE TEMP TABLE w_SAISIE_seances AS
SELECT
SAISIE.N_HOSPI,
date(D_DEB) AS D_DEB,
1 AS nb_seances
FROM prod_qsp.SAISIE
JOIN w_DOSSIERS_atraiter ON (SAISIE.N_HOSPI = w_DOSSIERS_atraiter.NDOSSIER_T )
WHERE SUPPRIME <> 1 AND
(CODE_PREST = 'GHS' AND N_GHS IN
(
SELECT code FROM base.t_ghs WHERE ghm_id IN (SELECT oid FROM base.t_ghm WHERE code like '28%')
)
) OR
CODE_PREST IN ('D01', 'D02', 'D03', 'D04', 'D05', 'D06', 'D07', 'D08', 'D09', 'D10', 'D11', 'D12', 'D13', 'D14', 'D15', 'D16', 'D17', 'D18', 'D19')
GROUP BY 1,2
HAVING SUM(QTE) > 0;
CREATE INDEX w_SAISIE_seances_i1
ON w_SAISIE_seances
USING btree
(N_HOSPI);
INSERT INTO w_SAISIE_seances
SELECT * FROM (
SELECT
SAISIE.N_HOSPI,
date(D_DEB) AS D_DEB,
1 AS nb_seances
FROM prod_qsp.SAISIE
JOIN w_DOSSIERS_atraiter ON (SAISIE.N_HOSPI = w_DOSSIERS_atraiter.NDOSSIER_T )
WHERE SUPPRIME <> 1 AND CODE_PREST IN ('K15')
GROUP BY 1,2
HAVING SUM(QTE) > 0) subview
WHERE N_HOSPI NOT IN (SELECT N_HOSPI FROM w_SAISIE_seances);
UPDATE w_mouvements_sejour
SET nb_seances = w_SAISIE_seances.nb_seances
FROM w_SAISIE_seances
WHERE w_SAISIE_seances.N_HOSPI = w_mouvements_sejour.no_sejour AND D_DEB = w_mouvements_sejour.date;
-- bébés
DROP TABLE IF EXISTS w_DOSSIER_CCAM_bebes;
CREATE TEMP TABLE w_DOSSIER_CCAM_bebes AS
SELECT
NDOSSIER,
MAX(CASE WHEN t_actes.texte ILIKE '%multiple%' THEN 2 ELSE 1 END) AS nb_bebes
FROM prod_qsp.DOSSIER_CCAM
JOIN w_DOSSIERS_atraiter ON NDOSSIER = NDOSSIER_T
JOIN base.t_actes ON substring(CODE_ACTE, 1, 7) = t_actes.code AND
CODE_ACTE LIKE 'JQG%' AND
t_actes.texte ILIKE 'accouchement%'
GROUP BY 1;
CREATE INDEX w_DOSSIER_CCAM_bebes_i1
ON w_DOSSIER_CCAM_bebes
USING btree
(NDOSSIER);
UPDATE w_mouvements_sejour
SET nb_bebes = w_DOSSIER_CCAM_bebes.nb_bebes
FROM w_DOSSIER_CCAM_bebes
WHERE w_DOSSIER_CCAM_bebes.NDOSSIER = w_mouvements_sejour.no_sejour AND
(nb_entrees_directes = 1 OR nb_externes = 1 OR nb_ambulatoires = 1);
UPDATE activite[PX].t_lieux SET
service_facturation_id = t_services_facturation.oid,
lit_id = t_lits.oid,
unite_fonctionnelle_id = t_unites_fonctionnelles.oid,
mode_traitement_id = t_services_facturation.mode_traitement_id
FROM activite[PX].t_services_facturation, activite[PX].t_lits, activite[PX].t_unites_fonctionnelles
WHERE
code_original_1 = t_services_facturation.code_original
AND code_original_4 = t_lits.code_original
AND code_original_6 = t_unites_fonctionnelles.code_original;
INSERT INTO activite[PX].t_lieux(
code_original_1,
code_original_2,
code_original_3,
code_original_4,
code_original_5,
code_original_6,
code_original_7,
service_facturation_id,
activite_id,
lit_id,
unite_medicale_id,
unite_fonctionnelle_id,
mode_traitement_id)
SELECT DISTINCT
C_SERV_CTI,
'',
'',
NUM_LIT,
'',
C_UF_CTI,
'',
t_services_facturation.oid,
0,
t_lits.oid,
0,
t_unites_fonctionnelles.oid,
t_services_facturation.mode_traitement_id
FROM w_mouvements_sejour
LEFT JOIN activite[PX].t_lieux ON (t_lieux.code_original_1 = C_SERV_CTI AND t_lieux.code_original_4 = NUM_LIT AND t_lieux.code_original_6 = C_UF_CTI )
, activite[PX].t_services_facturation, activite[PX].t_lits, activite[PX].t_unites_fonctionnelles
WHERE
C_SERV_CTI = t_services_facturation.code_original
AND NUM_LIT = t_lits.code_original
AND C_UF_CTI = t_unites_fonctionnelles.code_original
AND t_lieux.oid IS NULL;
UPDATE w_mouvements_sejour SET lieu_id = t_lieux.oid
FROM activite[PX].t_lieux
WHERE t_lieux.code_original_1 = C_SERV_CTI
AND t_lieux.code_original_4 = NUM_LIT
AND t_lieux.code_original_6 = C_UF_CTI
AND w_mouvements_sejour.lieu_id = 0;
DROP TABLE IF EXISTS w_mouvements_sejour_key;
CREATE TEMP TABLE w_mouvements_sejour_key AS
SELECT
no_sejour,
SUM(1 +
extract('day' FROM date) * 2 +
heure_debut * 3 +
heure_fin * 4 +
medecin_sejour_id * 5 +
lieu_id * 6 +
nb_jours_js_non_inclus * 7 +
nb_entrees_directes * 8 +
nb_entrees_directes * 9 +
nb_sorties_directes * 10 +
nb_urgences * 11 +
nb_externes * 12 +
nb_ambulatoires * 13 +
nb_jours_js_inclus * 14 +
nb_seances * 15 +
nb_entrees_mutation_service * 16 +
nb_sorties_mutation_service * 17 +
nb_entrees_mutation_activite * 18 +
nb_sorties_mutation_activite * 19 +
nb_entrees_mutation_etage * 20 +
nb_sorties_mutation_etage * 21 +
nb_chambres_particulieres * 22 +
nb_entrees_mutation_unite_medicale * 23 +
nb_sorties_mutation_unite_medicale * 24
) AS key
FROM w_mouvements_sejour
GROUP BY 1;
CREATE INDEX w_mouvements_sejour_key_i1
ON w_mouvements_sejour_key
USING btree
(no_sejour);
DROP TABLE IF EXISTS p_mouvements_sejour_key;
CREATE TEMP TABLE p_mouvements_sejour_key AS
SELECT
no_sejour,
SUM(1 +
extract('day' FROM date) * 2 +
heure_debut * 3 +
heure_fin * 4 +
medecin_sejour_id * 5 +
lieu_id * 6 +
nb_jours_js_non_inclus * 7 +
nb_entrees_directes * 8 +
nb_entrees_directes * 9 +
nb_sorties_directes * 10 +
nb_urgences * 11 +
nb_externes * 12 +
nb_ambulatoires * 13 +
nb_jours_js_inclus * 14 +
nb_seances * 15 +
nb_entrees_mutation_service * 16 +
nb_sorties_mutation_service * 17 +
nb_entrees_mutation_activite * 18 +
nb_sorties_mutation_activite * 19 +
nb_entrees_mutation_etage * 20 +
nb_sorties_mutation_etage * 21 +
nb_chambres_particulieres * 22 +
nb_entrees_mutation_unite_medicale * 23 +
nb_sorties_mutation_unite_medicale * 24
) AS key
FROM activite[PX].p_mouvements_sejour
GROUP BY 1;
CREATE INDEX p_mouvements_sejour_key_i1
ON p_mouvements_sejour_key
USING btree
(no_sejour);
DROP TABLE IF EXISTS w_ecarts_mouvements;
CREATE TEMP TABLE w_ecarts_mouvements AS
SELECT w_mouvements_sejour_key.no_sejour
FROM w_mouvements_sejour_key LEFT JOIN p_mouvements_sejour_key ON p_mouvements_sejour_key.no_sejour = w_mouvements_sejour_key.no_sejour
WHERE p_mouvements_sejour_key.key IS DISTINCT FROM w_mouvements_sejour_key.key;
DELETE FROM activite[PX].p_mouvements_sejour WHERE no_sejour IN (SELECt no_sejour FROM w_ecarts_mouvements);
-- generation
SELECT base.cti_disable_index('activite[PX]', 'i_mouvements_sejour_1');
SELECT base.cti_disable_index('activite[PX]', 'i_mouvements_sejour_2');
SELECT base.cti_disable_index('activite[PX]', 'i_mouvements_sejour_3');
SELECT base.cti_disable_index('activite[PX]', 'i_mouvements_sejour_4');
SELECT base.cti_disable_index('activite[PX]', 'i_mouvements_sejour_5');
INSERT INTO activite[PX].p_mouvements_sejour(
sejour_id, no_sejour, date, nb_jours_js_non_inclus,
lieu_id, nb_entrees_directes, nb_sorties_directes,
nb_urgences, nb_externes, nb_ambulatoires, medecin_sejour_id,
nb_jours_js_inclus, nb_seances, nb_entrees_mutation_service,
nb_sorties_mutation_service, nb_entrees_mutation_activite, nb_sorties_mutation_activite,
nb_entrees_mutation_etage, nb_sorties_mutation_etage, nb_chambres_particulieres,
heure_debut, heure_fin, est_jour_entree, est_jour_sortie, est_jour_hospitalisation,
est_chambre_particuliere,
nb_entrees_mutation_unite_medicale, nb_sorties_mutation_unite_medicale, nb_bebes, jour_semaine, is_weekend, est_mouvement_previsionnel)
SELECT sejour_id, no_sejour, date,nb_jours_js_non_inclus,
lieu_id, nb_entrees_directes, nb_sorties_directes,
nb_urgences, nb_externes, nb_ambulatoires, medecin_sejour_id,
nb_jours_js_inclus, nb_seances, nb_entrees_mutation_service,
nb_sorties_mutation_service, nb_entrees_mutation_activite, nb_sorties_mutation_activite,
nb_entrees_mutation_etage, nb_sorties_mutation_etage, nb_chambres_particulieres,
heure_debut, heure_fin, est_jour_entree, est_jour_sortie, est_jour_hospitalisation,
est_chambre_particuliere,
nb_entrees_mutation_unite_medicale, nb_sorties_mutation_unite_medicale, nb_bebes, jour_semaine, is_weekend, est_mouvement_previsionnel
FROM w_mouvements_sejour WHERE no_sejour IN (SELECT no_sejour FROM w_ecarts_mouvements)
ORDER BY no_sejour, sequence;
SELECT base.cti_enable_index('activite[PX]', 'i_mouvements_sejour_1');
SELECT base.cti_enable_index('activite[PX]', 'i_mouvements_sejour_2');
SELECT base.cti_enable_index('activite[PX]', 'i_mouvements_sejour_3');
SELECT base.cti_enable_index('activite[PX]', 'i_mouvements_sejour_4');
SELECT base.cti_enable_index('activite[PX]', 'i_mouvements_sejour_5');
UPDATE activite[PX].p_sejours SET lieu_sortie_id = p_mouvements_sejour.lieu_id
FROM activite[PX].p_mouvements_sejour
WHERE p_sejours.no_sejour = p_mouvements_sejour.no_sejour
AND p_mouvements_sejour.date = p_sejours.date_sortie
AND lieu_sortie_id IS DISTINCT FROM p_mouvements_sejour.lieu_id;
UPDATE activite[PX].p_sejours SET lieu_sortie_id = p_mouvements_sejour.lieu_id
FROM activite[PX].p_mouvements_sejour
WHERE p_sejours.no_sejour = p_mouvements_sejour.no_sejour
AND p_mouvements_sejour.date = p_sejours.date_sortie AND p_mouvements_sejour.nb_sorties_directes = 1
AND (lieu_sortie_id <> p_mouvements_sejour.lieu_id OR lieu_sortie_id IS NULL);
UPDATE activite[PX].p_sejours SET lieu_sortie_id = p_mouvements_sejour.lieu_id
FROM activite[PX].p_mouvements_sejour
WHERE p_sejours.no_sejour = p_mouvements_sejour.no_sejour
AND (p_sejours.lieu_sortie_id = 0 OR lieu_sortie_id IS NULL);
UPDATE activite[PX].p_sejours SET lieu_sortie_id = 0
WHERE lieu_sortie_id IS NULL;
UPDATE activite[PX].p_sejours SET lieu_sortie_id = 0
WHERE p_sejours.code_prevu = '1' AND (p_sejours.lieu_sortie_id = 0 OR lieu_sortie_id IS NULL);
UPDATE activite[PX].p_sejours
SET type_sejour = '5'
WHERE type_sejour <> '5' AND
type_sejour <> '1' AND
type_sejour <> '9' AND
no_sejour IN (
SELECT no_sejour
FROM activite[PX].p_mouvements_sejour
WHERE nb_seances > 0);
UPDATE activite[PX].p_mouvements_sejour
SET nb_externes = 0, nb_ambulatoires = 0
FROM activite[PX].p_sejours
WHERE p_mouvements_sejour.no_sejour = p_sejours.no_sejour AND
p_sejours.type_sejour = '5' AND
(
nb_externes <> 0 OR
nb_ambulatoires <> 0
)
;
-- Présence HDJ
UPDATE activite.p_mouvements_sejour
SET est_jour_hospitalisation = '0'
FROM
(
SELECT no_sejour, date
FROM activite.p_mouvements_sejour
LEFT JOIN prod_qsp.HOSPI_PLANNING ON no_sejour = N_HOSPI AND
code_journee = 'P' AND
code_calendrier = 'HDJ' AND
date = date(date_jour)
WHERE no_sejour IN (SELECT N_HOSPI FROM prod_qsp.HOSPI_PLANNING WHERE code_journee = 'P' AND code_calendrier = 'HDJ') AND
est_jour_hospitalisation = '1' AND
N_HOSPI IS NULL
ORDER BY 1,2
) subview
WHERE p_mouvements_sejour.no_sejour = subview.no_sejour AND
p_mouvements_sejour.date = subview.date
;
]]>
'H' THEN DT_VENT ELSE '00010101' END) AS DT_VENT_C,
MAX(CASE WHEN PRESTATION.TYPE_PREST = 'H' THEN DT_VENT ELSE '00010101' END) AS DT_VENT_H
FROM prod_qsp.VENTIL_PAIEMENT
JOIN prod_qsp.DET_VENT ON VENTIL_PAIEMENT.PAIEMENT_LIG = DET_VENT.PAIEMENT_LIG
JOIN prod_qsp.SAISIE ON DET_VENT.N_SAISIE = SAISIE.N_SAISIE
JOIN prod_qsp.PRESTATION ON SAISIE.CODE_PREST = PRESTATION.CODE_PREST
WHERE TRANS_CPTA <> 0
GROUP BY 1;
CREATE INDEX w_FACTURE_QSP_REG_i1
ON w_FACTURE_QSP_REG
USING btree
(NUM_FACT);
DROP TABLE IF EXISTS w_FACTURE_QSP_DATES;
CREATE TEMP TABLE w_FACTURE_QSP_DATES AS
(SELECT NUM_FACT_AMO AS NUM_FACT, MIN(SAISIE.D_DEB) AS D_DEB, MAX(GREATEST(SAISIE.D_FIN,SAISIE.D_DEB)) AS D_FIN
FROM prod_qsp.FACT_LIGNE JOIN prod_qsp.SAISIE ON FACT_LIGNE.N_SAISIE = SAISIE.N_SAISIE
WHERE NUM_FACT_AMO <> 0
GROUP BY 1);
INSERT INTO w_FACTURE_QSP_DATES
(SELECT NUM_FACT_AMC AS NUM_FACT, MIN(SAISIE.D_DEB) AS D_DEB, MAX(GREATEST(SAISIE.D_FIN,SAISIE.D_DEB)) AS D_FIN
FROM prod_qsp.FACT_LIGNE JOIN prod_qsp.SAISIE ON FACT_LIGNE.N_SAISIE = SAISIE.N_SAISIE
WHERE NUM_FACT_AMC <> 0
GROUP BY 1);
INSERT INTO w_FACTURE_QSP_DATES
(SELECT NUM_FACT_ASS AS NUM_FACT, MIN(SAISIE.D_DEB) AS D_DEB, MAX(GREATEST(SAISIE.D_FIN,SAISIE.D_DEB)) AS D_FIN
FROM prod_qsp.FACT_LIGNE JOIN prod_qsp.SAISIE ON FACT_LIGNE.N_SAISIE = SAISIE.N_SAISIE
WHERE NUM_FACT_ASS <> 0
GROUP BY 1);
CREATE INDEX w_FACTURE_QSP_DATES_i1
ON w_FACTURE_QSP_DATES
USING btree
(NUM_FACT);
DROP TABLE IF EXISTS w_FACTURE_QSP_AVOIR;
CREATE TEMP TABLE w_FACTURE_QSP_AVOIR AS
SELECT
N_HOSPI,
NUM_FACT,
trim(to_char(to_number(substr(FACTURE.NUM_FACT,2,7),999999999), '00000000')) AS no_facture_od_avoir
FROM prod_qsp.FACTURE
JOIN w_sejours_orga ON FACTURE.N_HOSPI = w_sejours_orga.code_original
WHERE NUM_FACT > 90000000
UNION ALL
SELECT
N_HOSPI,
to_number(substr(FACTURE.NUM_FACT,2,7),999999999) AS NUM_FACT,
trim(to_char(FACTURE.NUM_FACT, '00000000')) AS no_facture_od_avoir
FROM prod_qsp.FACTURE
JOIN w_sejours_orga ON FACTURE.N_HOSPI = w_sejours_orga.code_original
WHERE NUM_FACT > 90000000;
CREATE INDEX w_FACTURE_QSP_AVOIR_i1
ON w_FACTURE_QSP_AVOIR
USING btree
(NUM_FACT);
DROP TABLE IF EXISTS w_FACTURE_QSP_REF;
CREATE TEMP TABLE w_FACTURE_QSP_REF AS
SELECT
FACTURE.N_HOSPI,
MAX(CASE WHEN TIERS = '1' AND w_FACTURE_QSP_AVOIR IS NULL THEN FACTURE.NUM_FACT ELSE NULL END) AS NUM_FACT_REFERENCE,
MAX(CASE WHEN TIERS = '1' AND w_FACTURE_QSP_AVOIR IS NULL THEN FACTURE.NUM_FACT ELSE NULL END) AS NUM_FACT_1,
MAX(CASE WHEN TIERS = '2' AND w_FACTURE_QSP_AVOIR IS NULL THEN FACTURE.NUM_FACT ELSE NULL END) AS NUM_FACT_2,
MAX(CASE WHEN TIERS = '3' AND w_FACTURE_QSP_AVOIR IS NULL THEN FACTURE.NUM_FACT ELSE NULL END) AS NUM_FACT_0,
MAX(CASE WHEN TIERS = '1' AND ETAT IN (1, 2) THEN FACTURE.NUM_FACT ELSE NULL END) AS NUM_FACT_1_B,
MAX(CASE WHEN TIERS = '2' AND ETAT IN (1, 2) THEN FACTURE.NUM_FACT ELSE NULL END) AS NUM_FACT_2_B,
MAX(CASE WHEN TIERS = '3' AND ETAT IN (1, 2) THEN FACTURE.NUM_FACT ELSE NULL END) AS NUM_FACT_0_B
FROM prod_qsp.FACTURE
LEFT JOIN w_FACTURE_QSP_AVOIR ON FACTURE.NUM_FACT = w_FACTURE_QSP_AVOIR.NUM_FACT
GROUP BY 1;
UPDATE w_FACTURE_QSP_REF SET NUM_FACT_REFERENCE = NUM_FACT_2 WHERE NUM_FACT_REFERENCE IS NULL AND NUM_FACT_2 IS NOT NULL;
UPDATE w_FACTURE_QSP_REF SET NUM_FACT_REFERENCE = NUM_FACT_0 WHERE NUM_FACT_REFERENCE IS NULL AND NUM_FACT_0 IS NOT NULL;
UPDATE w_FACTURE_QSP_REF SET NUM_FACT_REFERENCE = NUM_FACT_1_B WHERE NUM_FACT_REFERENCE IS NULL AND NUM_FACT_1_B IS NOT NULL;
UPDATE w_FACTURE_QSP_REF SET NUM_FACT_REFERENCE = NUM_FACT_2_B WHERE NUM_FACT_REFERENCE IS NULL AND NUM_FACT_2_B IS NOT NULL;
UPDATE w_FACTURE_QSP_REF SET NUM_FACT_REFERENCE = NUM_FACT_0_B WHERE NUM_FACT_REFERENCE IS NULL AND NUM_FACT_0_B IS NOT NULL;
CREATE INDEX w_FACTURE_QSP_REF_i1
ON w_FACTURE_QSP_REF
USING btree
(N_HOSPI);
DROP TABLE IF EXISTS w_FACTURE_QSP;
CREATE TEMP TABLE w_FACTURE_QSP AS
SELECT
trim(to_char(FACTURE.NUM_FACT, '00000000')) AS no_facture,
CASE
WHEN ETAT IN (1, 2) AND w_FACTURE_QSP_AVOIR.no_facture_od_avoir IS NOT NULL THEN 'X'
WHEN ETAT IN (1) THEN '0'
WHEN ETAT IN (2) THEN '2'
WHEN ETAT IN (3) THEN '1'
ELSE '0' END AS type_facture,
'1'::text AS code_facture,
date(FACTURE.DATE_SYS) AS date_facture,
trim(to_char(NUM_FACT_REFERENCE, '00000000')) AS no_facture_reference,
COALESCE(w_FACTURE_QSP_AVOIR.no_facture_od_avoir,'') AS no_facture_od_avoir,
CASE WHEN TRANS_CMPTA = '1' THEN '1' ELSE '0' END AS code_vente,
CASE WHEN TRANS_CMPTA = '1' THEN date(FACTURE.DT_FACT) ELSE COALESCE(date(FACTURE.DT_FACT),'20991231') END AS date_vente,
CASE WHEN TRANS_CMPTA = '1' THEN extract('year' FROM FACTURE.DT_FACT) * 100 + extract('month' FROM FACTURE.DT_FACT) ELSE 209912 END AS mois_vente,
TOT_SEJ AS montant_facture_c,
CASE WHEN tiers = '1' THEN TOT_SEJ ELSE 0 END AS montant_facture_1_c,
CASE WHEN tiers = '2' THEN TOT_SEJ ELSE 0 END AS montant_facture_2_c,
0::numeric AS montant_facture_22_c,
CASE WHEN tiers = '3' THEN TOT_SEJ ELSE 0 END AS montant_facture_0_c,
TOT_HON AS montant_facture_h,
CASE WHEN tiers = '1' THEN TOT_HON ELSE 0 END AS montant_facture_1_h,
CASE WHEN tiers = '2' THEN TOT_HON ELSE 0 END AS montant_facture_2_h,
0::numeric AS montant_facture_22_h,
CASE WHEN tiers = '3' THEN TOT_HON ELSE 0 END AS montant_facture_0_h,
TOT_SEJ AS montant_comptabilise_c,
CASE WHEN tiers = '1' THEN TOT_SEJ ELSE 0 END AS montant_comptabilise_1_c,
CASE WHEN tiers = '2' THEN TOT_SEJ ELSE 0 END AS montant_comptabilise_2_c,
0::numeric AS montant_comptabilise_22_c,
CASE WHEN tiers = '3' THEN TOT_SEJ ELSE 0 END AS montant_comptabilise_0_c,
TOT_HON AS montant_comptabilise_h,
CASE WHEN tiers = '1' THEN TOT_HON ELSE 0 END AS montant_comptabilise_1_h,
CASE WHEN tiers = '2' THEN TOT_HON ELSE 0 END AS montant_comptabilise_2_h,
0::numeric AS montant_comptabilise_22_h,
CASE WHEN tiers = '3' THEN TOT_HON ELSE 0 END AS montant_comptabilise_0_h,
ENC_SEJ AS montant_regle_c,
CASE WHEN tiers = '1' THEN ENC_SEJ ELSE 0 END AS montant_regle_1_c,
CASE WHEN tiers = '2' THEN ENC_SEJ ELSE 0 END AS montant_regle_2_c,
0::numeric AS montant_regle_22_c,
CASE WHEN tiers = '3' THEN ENC_SEJ ELSE 0 END AS montant_regle_0_c,
ENC_HON AS montant_regle_h,
CASE WHEN tiers = '1' THEN ENC_HON ELSE 0 END AS montant_regle_1_h,
CASE WHEN tiers = '2' THEN ENC_HON ELSE 0 END AS montant_regle_2_h,
0::numeric AS montant_regle_22_h,
CASE WHEN tiers = '3' THEN ENC_HON ELSE 0 END AS montant_regle_0_h,
CASE WHEN ghs_id <> 0 THEN date_entree
WHEN date_sortie - date_entree < 8 THEN date_entree
ELSE date(D_DEB) END AS date_debut,
CASE WHEN ghs_id <> 0 THEN date_sortie
WHEN date_sortie - date_entree < 8 THEN date_sortie
ELSE date(D_FIN) END AS date_fin,
CASE WHEN tiers = '1' THEN COALESCE(LOT.DATE_BORD,'00010101') ELSE '00010101' END AS date_expedition,
CASE WHEN tiers = '1' THEN COALESCE(LOT.DATE_BORD,'00010101') ELSE '00010101' END AS date_expedition_1,
CASE WHEN tiers = '2' THEN COALESCE(LOT.DATE_BORD,'00010101') ELSE '00010101' END AS date_expedition_2,
'00010101'::date AS date_expedition_22,
CASE WHEN tiers = '3' THEN COALESCE(LOT.DATE_BORD,'00010101') ELSE '00010101' END AS date_expedition_0,
CASE WHEN tiers = '1' THEN COALESCE(w_FACTURE_QSP_LOT.N_LOT::text,'') ELSE '' END AS no_bordereau_1,
CASE WHEN tiers = '2' THEN COALESCE(w_FACTURE_QSP_LOT.N_LOT::text,'') ELSE '' END AS no_bordereau_2,
''::text AS no_bordereau_22,
CASE WHEN tiers = '3' THEN COALESCE(w_FACTURE_QSP_LOT.N_LOT::text,'') ELSE '' END AS no_bordereau_0,
CASE WHEN tiers = '1' AND w_FACTURE_QSP_LOT.N_LOT IS NOT NULL THEN '1' ELSE '0' END AS code_expedie_1,
CASE WHEN tiers = '2' AND w_FACTURE_QSP_LOT.N_LOT IS NOT NULL THEN '1' ELSE '0' END AS code_expedie_2,
'0'::text AS code_expedie_22,
CASE WHEN tiers = '3' AND w_FACTURE_QSP_LOT.N_LOT IS NOT NULL THEN '1' ELSE '0' END AS code_expedie_0,
GREATEST(COALESCE(w_FACTURE_QSP_REG.DT_VENT_C,'00010101'), COALESCE(w_FACTURE_QSP_REG.DT_VENT_H,'00010101')) AS date_solde,
COALESCE(w_FACTURE_QSP_REG.DT_VENT_C,'00010101') AS date_solde_c,
COALESCE(w_FACTURE_QSP_REG.DT_VENT_H,'00010101') AS date_solde_h,
CASE WHEN tiers = '1' THEN COALESCE(w_FACTURE_QSP_REG.DT_VENT_C,'00010101') ELSE '00010101' END AS date_solde_1_c,
CASE WHEN tiers = '1' THEN COALESCE(w_FACTURE_QSP_REG.DT_VENT_H,'00010101') ELSE '00010101' END AS date_solde_1_h,
CASE WHEN tiers = '2' THEN COALESCE(w_FACTURE_QSP_REG.DT_VENT_C,'00010101') ELSE '00010101' END AS date_solde_2_c,
CASE WHEN tiers = '2' THEN COALESCE(w_FACTURE_QSP_REG.DT_VENT_H,'00010101') ELSE '00010101' END AS date_solde_2_h,
'00010101'::date AS date_solde_22_c,
'00010101'::date AS date_solde_22_h,
CASE WHEN tiers = '3' THEN COALESCE(w_FACTURE_QSP_REG.DT_VENT_C,'00010101') ELSE '00010101' END AS date_solde_0_c,
CASE WHEN tiers = '3' THEN COALESCE(w_FACTURE_QSP_REG.DT_VENT_H,'00010101') ELSE '00010101' END AS date_solde_0_h,
GREATEST(COALESCE(w_FACTURE_QSP_REG.DT_VENT_C,'00010101'), COALESCE(w_FACTURE_QSP_REG.DT_VENT_H,'00010101')) AS date_solde_reference,
COALESCE(w_FACTURE_QSP_REG.DT_VENT_C,'00010101') AS date_solde_reference_c,
COALESCE(w_FACTURE_QSP_REG.DT_VENT_H,'00010101') AS date_solde_reference_h,
CASE WHEN tiers = '1' THEN COALESCE(w_FACTURE_QSP_REG.DT_VENT_C,'00010101') ELSE '00010101' END AS date_solde_reference_1_c,
CASE WHEN tiers = '1' THEN COALESCE(w_FACTURE_QSP_REG.DT_VENT_H,'00010101') ELSE '00010101' END AS date_solde_reference_1_h,
CASE WHEN tiers = '2' THEN COALESCE(w_FACTURE_QSP_REG.DT_VENT_C,'00010101') ELSE '00010101' END AS date_solde_reference_2_c,
CASE WHEN tiers = '2' THEN COALESCE(w_FACTURE_QSP_REG.DT_VENT_H,'00010101') ELSE '00010101' END AS date_solde_reference_2_h,
'00010101'::date AS date_solde_reference_22_c,
'00010101'::date AS date_solde_reference_22_h,
CASE WHEN tiers = '3' THEN COALESCE(w_FACTURE_QSP_REG.DT_VENT_C,'00010101') ELSE '00010101' END AS date_solde_reference_0_c,
CASE WHEN tiers = '3' THEN COALESCE(w_FACTURE_QSP_REG.DT_VENT_H,'00010101') ELSE '00010101' END AS date_solde_reference_0_h,
FACTURE.*,
w_sejours_orga.*
FROM prod_qsp.FACTURE
JOIN w_sejours_orga ON FACTURE.N_HOSPI = w_sejours_orga.code_original
LEFT JOIN w_FACTURE_QSP_DATES ON FACTURE.NUM_FACT = w_FACTURE_QSP_DATES.NUM_FACT
LEFT JOIN w_FACTURE_QSP_LOT ON FACTURE.NUM_FACT = w_FACTURE_QSP_LOT.NUM_FACT
LEFT JOIN w_FACTURE_QSP_REG ON FACTURE.NUM_FACT = w_FACTURE_QSP_REG.NUM_FACT
LEFT JOIN prod_qsp.LOT ON w_FACTURE_QSP_LOT.N_LOT = LOT.N_LOT
LEFT JOIN w_FACTURE_QSP_AVOIR ON FACTURE.NUM_FACT = w_FACTURE_QSP_AVOIR.NUM_FACT
JOIN w_FACTURE_QSP_REF ON FACTURE.N_HOSPI = w_FACTURE_QSP_REF.N_HOSPI;
CREATE INDEX w_FACTURE_QSP_i1
ON w_FACTURE_QSP
USING btree
(NUM_FACT);
CREATE INDEX w_FACTURE_QSP_i2
ON w_FACTURE_QSP
USING btree
(no_facture);
CREATE INDEX w_FACTURE_QSP_i3
ON w_FACTURE_QSP
USING btree
(no_facture_od_avoir);
CREATE INDEX w_FACTURE_QSP_i4
ON w_FACTURE_QSP
USING btree
(no_facture_reference);
DROP TABLE IF EXISTS w_ods_avoir;
CREATE TEMP TABLE w_ods_avoir AS
SELECT p_factures.no_facture, p_factures.no_facture_od_avoir, p_factures_avoir.date_facture AS date_od_avoir,
SUM(p_factures.montant_comptabilise_c + p_factures.montant_comptabilise_h) AS montant_comptabilise,
SUM(p_factures.montant_regle_c + p_factures.montant_regle_h) AS montant_regle,
SUM(p_factures_avoir.montant_comptabilise_c + p_factures_avoir.montant_comptabilise_h) AS montant_facture_avoir,
SUM(p_factures_avoir.montant_regle_c + p_factures_avoir.montant_regle_h) AS montant_regle_avoir
FROM w_FACTURE_QSP p_factures JOIN w_FACTURE_QSP p_factures_avoir ON p_factures.no_facture = p_factures_avoir.no_facture_od_avoir
WHERE p_factures.type_facture = 'X' AND p_factures_avoir.type_facture = '1'
GROUP BY 1,2,3
HAVING SUM(p_factures.montant_comptabilise_c + p_factures.montant_comptabilise_h) = 0 - SUM(p_factures_avoir.montant_comptabilise_c + p_factures_avoir.montant_comptabilise_h)
AND SUM(p_factures.montant_regle_c + p_factures.montant_regle_h) = 0
AND SUM(p_factures_avoir.montant_regle_c + p_factures_avoir.montant_regle_h) = 0;
CREATE INDEX w_ods_avoir_i1
ON w_ods_avoir
USING btree
(no_facture);
CREATE INDEX w_ods_avoir_i2
ON w_ods_avoir
USING btree
(no_facture_od_avoir);
UPDATE w_FACTURE_QSP SET
date_solde_c = date_od_avoir,
date_solde_0_c = date_od_avoir,
date_solde_1_c = date_od_avoir,
date_solde_2_c = date_od_avoir,
date_solde_22_c = date_od_avoir,
date_solde_h = date_od_avoir,
date_solde_0_h = date_od_avoir,
date_solde_1_h = date_od_avoir,
date_solde_2_h = date_od_avoir,
date_solde_22_h = date_od_avoir,
montant_regle_c = montant_comptabilise_c,
montant_regle_0_c = montant_comptabilise_0_c,
montant_regle_1_c = montant_comptabilise_1_c,
montant_regle_2_c = montant_comptabilise_2_c,
montant_regle_22_c = montant_comptabilise_22_c,
montant_regle_h = montant_comptabilise_h,
montant_regle_0_h = montant_comptabilise_0_h,
montant_regle_1_h = montant_comptabilise_1_h,
montant_regle_2_h = montant_comptabilise_2_h,
montant_regle_22_h = montant_comptabilise_22_h
FROM w_ods_avoir
WHERE w_FACTURE_QSP.no_facture = w_ods_avoir.no_facture AND w_FACTURE_QSP.no_facture_od_avoir <> '';
UPDATE w_FACTURE_QSP SET
date_solde_c = date_od_avoir,
date_solde_0_c = date_od_avoir,
date_solde_1_c = date_od_avoir,
date_solde_2_c = date_od_avoir,
date_solde_22_c = date_od_avoir,
date_solde_h = date_od_avoir,
date_solde_0_h = date_od_avoir,
date_solde_1_h = date_od_avoir,
date_solde_2_h = date_od_avoir,
date_solde_22_h = date_od_avoir,
montant_regle_c = montant_comptabilise_c,
montant_regle_0_c = montant_comptabilise_0_c,
montant_regle_1_c = montant_comptabilise_1_c,
montant_regle_2_c = montant_comptabilise_2_c,
montant_regle_22_c = montant_comptabilise_22_c,
montant_regle_h = montant_comptabilise_h,
montant_regle_0_h = montant_comptabilise_0_h,
montant_regle_1_h = montant_comptabilise_1_h,
montant_regle_2_h = montant_comptabilise_2_h,
montant_regle_22_h = montant_comptabilise_22_h
FROM w_ods_avoir
WHERE w_FACTURE_QSP.no_facture = w_ods_avoir.no_facture_od_avoir AND w_FACTURE_QSP.no_facture_od_avoir <> '';
UPDATE w_FACTURE_QSP
SET
date_solde_0_c = CASE WHEN montant_comptabilise_0_c = 0 THEN '00010101' WHEN montant_comptabilise_0_c = montant_regle_0_c THEN date_solde_0_c ELSE '00010101' END,
date_solde_0_h = CASE WHEN montant_comptabilise_0_h = 0 THEN '00010101' WHEN montant_comptabilise_0_h = montant_regle_0_h THEN date_solde_0_h ELSE '00010101' END,
date_solde_1_c = CASE WHEN montant_comptabilise_1_c = 0 THEN '00010101' WHEN montant_comptabilise_1_c = montant_regle_1_c THEN date_solde_1_c ELSE '00010101' END,
date_solde_1_h = CASE WHEN montant_comptabilise_1_h = 0 THEN '00010101' WHEN montant_comptabilise_1_h = montant_regle_1_h THEN date_solde_1_h ELSE '00010101' END,
date_solde_2_c = CASE WHEN montant_comptabilise_2_c = 0 THEN '00010101' WHEN montant_comptabilise_2_c = montant_regle_2_c THEN date_solde_2_c ELSE '00010101' END,
date_solde_2_h = CASE WHEN montant_comptabilise_2_h = 0 THEN '00010101' WHEN montant_comptabilise_2_h = montant_regle_2_h THEN date_solde_2_h ELSE '00010101' END,
date_solde_22_c = CASE WHEN montant_comptabilise_22_c = 0 THEN '00010101' WHEN montant_comptabilise_22_c = montant_regle_22_c THEN date_solde_22_c ELSE '00010101' END,
date_solde_22_h = CASE WHEN montant_comptabilise_22_h = 0 THEN '00010101' WHEN montant_comptabilise_22_h = montant_regle_22_h THEN date_solde_22_h ELSE '00010101' END
WHERE
(
date_solde_0_c <> CASE WHEN montant_comptabilise_0_c = 0 THEN '00010101' WHEN montant_comptabilise_0_c = montant_regle_0_c THEN date_solde_0_c ELSE '00010101' END OR
date_solde_0_h <> CASE WHEN montant_comptabilise_0_h = 0 THEN '00010101' WHEN montant_comptabilise_0_h = montant_regle_0_h THEN date_solde_0_h ELSE '00010101' END OR
date_solde_1_c <> CASE WHEN montant_comptabilise_1_c = 0 THEN '00010101' WHEN montant_comptabilise_1_c = montant_regle_1_c THEN date_solde_1_c ELSE '00010101' END OR
date_solde_1_h <> CASE WHEN montant_comptabilise_1_h = 0 THEN '00010101' WHEN montant_comptabilise_1_h = montant_regle_1_h THEN date_solde_1_h ELSE '00010101' END OR
date_solde_2_c <> CASE WHEN montant_comptabilise_2_c = 0 THEN '00010101' WHEN montant_comptabilise_2_c = montant_regle_2_c THEN date_solde_2_c ELSE '00010101' END OR
date_solde_2_h <> CASE WHEN montant_comptabilise_2_h = 0 THEN '00010101' WHEN montant_comptabilise_2_h = montant_regle_2_h THEN date_solde_2_h ELSE '00010101' END OR
date_solde_22_c <> CASE WHEN montant_comptabilise_22_c = 0 THEN '00010101' WHEN montant_comptabilise_22_c = montant_regle_22_c THEN date_solde_22_c ELSE '00010101' END OR
date_solde_22_h <> CASE WHEN montant_comptabilise_22_h = 0 THEN '00010101' WHEN montant_comptabilise_22_h = montant_regle_22_h THEN date_solde_22_h ELSE '00010101' END
)
;
UPDATE w_FACTURE_QSP
SET
date_solde = GREATEST(date_solde_0_c, date_solde_0_h, date_solde_1_c, date_solde_1_h, date_solde_2_c, date_solde_2_h, date_solde_22_c, date_solde_22_h),
date_solde_c = GREATEST(date_solde_0_c, date_solde_1_c, date_solde_2_c, date_solde_22_c),
date_solde_h = GREATEST(date_solde_0_h, date_solde_1_h, date_solde_2_h, date_solde_22_h)
WHERE (
date_solde IS DISTINCT FROM GREATEST(date_solde_0_c, date_solde_0_h, date_solde_1_c, date_solde_1_h, date_solde_2_c, date_solde_2_h, date_solde_22_c, date_solde_22_h) OR
date_solde_c IS DISTINCT FROM GREATEST(date_solde_0_c, date_solde_1_c, date_solde_2_c, date_solde_22_c) OR
date_solde_h IS DISTINCT FROM GREATEST(date_solde_0_h, date_solde_1_h, date_solde_2_h, date_solde_22_h)
)
;
DROP TABLE IF EXISTS w_FACTURE_QSP_REF;
CREATE TEMP TABLE w_FACTURE_QSP_REF AS
SELECT
no_facture_reference,
MAX(date_solde) AS date_solde_reference,
MAX(date_solde_c) AS date_solde_reference_c,
MAX(date_solde_h) AS date_solde_reference_h,
MAX(date_solde_0_c) AS date_solde_reference_0_c,
MAX(date_solde_0_h) AS date_solde_reference_0_h,
MAX(date_solde_1_c) AS date_solde_reference_1_c,
MAX(date_solde_1_h) AS date_solde_reference_1_h,
MAX(date_solde_2_c) AS date_solde_reference_2_c,
MAX(date_solde_2_h) AS date_solde_reference_2_h,
MAX(date_solde_22_c) AS date_solde_reference_22_c,
MAX(date_solde_22_h) AS date_solde_reference_22_h
FROM w_FACTURE_QSP
GROUP BY no_facture_reference;
CREATE INDEX w_FACTURE_QSP_REF_1
ON w_FACTURE_QSP_REF
USING btree
(no_facture_reference);
UPDATE w_FACTURE_QSP
SET
date_expedition = CASE WHEN date_expedition <> '00010101' THEN date_expedition ELSE '20991231' END,
date_expedition_0 = CASE WHEN date_expedition_0 <> '00010101' THEN date_expedition_0 ELSE '20991231' END,
date_expedition_1 = CASE WHEN date_expedition_1 <> '00010101' THEN date_expedition_1 ELSE '20991231' END,
date_expedition_2 = CASE WHEN date_expedition_2 <> '00010101' THEN date_expedition_2 ELSE '20991231' END,
date_expedition_22 = CASE WHEN date_expedition_22 <> '00010101' THEN date_expedition_22 ELSE '20991231' END,
date_solde = CASE WHEN date_solde <> '00010101' THEN date_solde ELSE '20991231' END,
date_solde_c = CASE WHEN date_solde_c <> '00010101' THEN date_solde_c ELSE '20991231' END,
date_solde_h = CASE WHEN date_solde_h <> '00010101' THEN date_solde_h ELSE '20991231' END,
date_solde_0_c = CASE WHEN date_solde_0_c <> '00010101' THEN date_solde_0_c ELSE '20991231' END,
date_solde_0_h = CASE WHEN date_solde_0_h <> '00010101' THEN date_solde_0_h ELSE '20991231' END,
date_solde_1_c = CASE WHEN date_solde_1_c <> '00010101' THEN date_solde_1_c ELSE '20991231' END,
date_solde_1_h = CASE WHEN date_solde_1_h <> '00010101' THEN date_solde_1_h ELSE '20991231' END,
date_solde_2_c = CASE WHEN date_solde_2_c <> '00010101' THEN date_solde_2_c ELSE '20991231' END,
date_solde_2_h = CASE WHEN date_solde_2_h <> '00010101' THEN date_solde_2_h ELSE '20991231' END,
date_solde_22_c = CASE WHEN date_solde_22_c <> '00010101' THEN date_solde_22_c ELSE '20991231' END,
date_solde_22_h = CASE WHEN date_solde_22_h <> '00010101' THEN date_solde_22_h ELSE '20991231' END,
date_solde_reference = CASE WHEN w_FACTURE_QSP_REF.date_solde_reference <> '00010101' THEN w_FACTURE_QSP_REF.date_solde_reference ELSE '20991231' END,
date_solde_reference_c = CASE WHEN w_FACTURE_QSP_REF.date_solde_reference_c <> '00010101' THEN w_FACTURE_QSP_REF.date_solde_reference_c ELSE '20991231' END,
date_solde_reference_h = CASE WHEN w_FACTURE_QSP_REF.date_solde_reference_h <> '00010101' THEN w_FACTURE_QSP_REF.date_solde_reference_h ELSE '20991231' END,
date_solde_reference_0_c = CASE WHEN w_FACTURE_QSP_REF.date_solde_reference_0_c <> '00010101' THEN w_FACTURE_QSP_REF.date_solde_reference_0_c ELSE '20991231' END,
date_solde_reference_0_h = CASE WHEN w_FACTURE_QSP_REF.date_solde_reference_0_h <> '00010101' THEN w_FACTURE_QSP_REF.date_solde_reference_0_h ELSE '20991231' END,
date_solde_reference_1_c = CASE WHEN w_FACTURE_QSP_REF.date_solde_reference_1_c <> '00010101' THEN w_FACTURE_QSP_REF.date_solde_reference_1_c ELSE '20991231' END,
date_solde_reference_1_h = CASE WHEN w_FACTURE_QSP_REF.date_solde_reference_1_h <> '00010101' THEN w_FACTURE_QSP_REF.date_solde_reference_1_h ELSE '20991231' END,
date_solde_reference_2_c = CASE WHEN w_FACTURE_QSP_REF.date_solde_reference_2_c <> '00010101' THEN w_FACTURE_QSP_REF.date_solde_reference_2_c ELSE '20991231' END,
date_solde_reference_2_h = CASE WHEN w_FACTURE_QSP_REF.date_solde_reference_2_h <> '00010101' THEN w_FACTURE_QSP_REF.date_solde_reference_2_h ELSE '20991231' END,
date_solde_reference_22_c = CASE WHEN w_FACTURE_QSP_REF.date_solde_reference_22_c <> '00010101' THEN w_FACTURE_QSP_REF.date_solde_reference_22_c ELSE '20991231' END,
date_solde_reference_22_h = CASE WHEN w_FACTURE_QSP_REF.date_solde_reference_22_h <> '00010101' THEN w_FACTURE_QSP_REF.date_solde_reference_22_h ELSE '20991231' END
FROM w_FACTURE_QSP_REF
WHERE w_FACTURE_QSP.no_facture_reference = w_FACTURE_QSP_REF.no_facture_reference;
INSERT INTO activite[PX].p_factures(
no_sejour,
sejour_id,
no_facture,
date_debut,
date_fin,
type_facture,
code_facture,
date_facture,
code_vente,
date_vente,
mois_vente,
montant_facture_c,
montant_facture_h,
montant_regle_c,
montant_regle_h,
delai_facture,
delai_solde,
date_expedition,
delai_expedition,
tiers_payant_0_id,
tiers_payant_1_id,
tiers_payant_2_id,
tiers_payant_22_id,
date_solde,
date_solde_c,
date_solde_h,
date_solde_0_c,
date_solde_0_h,
date_solde_1_c,
date_solde_1_h,
date_solde_2_c,
date_solde_2_h,
date_solde_22_c,
date_solde_22_h,
date_expedition_0,
date_expedition_1,
date_expedition_2,
date_expedition_22,
code_expedie_0,
code_expedie_1,
code_expedie_2,
code_expedie_22,
no_bordereau_0,
no_bordereau_1,
no_bordereau_2,
no_bordereau_22,
montant_facture_0_c,
montant_facture_0_h,
montant_facture_1_c,
montant_facture_1_h,
montant_facture_2_c,
montant_facture_2_h,
montant_facture_22_c,
montant_facture_22_h,
montant_regle_0_c,
montant_regle_0_h,
montant_regle_1_c,
montant_regle_1_h,
montant_regle_2_c,
montant_regle_2_h,
montant_regle_22_c,
montant_regle_22_h,
delai_expedition_0,
delai_expedition_1,
delai_expedition_2,
delai_expedition_22,
delai_solde_0_c,
delai_solde_0_h,
delai_solde_1_c,
delai_solde_1_h,
delai_solde_2_c,
delai_solde_2_h,
delai_solde_22_c,
delai_solde_22_h,
ghs_id,
particularite_t2a,
code_cloture,
code_cp_demandee,
ghs_bebe1_id,
ghs_bebe2_id,
ghs_bebe3_id,
montant_comptabilise_c,
montant_comptabilise_h,
montant_comptabilise_0_c,
montant_comptabilise_0_h,
montant_comptabilise_1_c,
montant_comptabilise_1_h,
montant_comptabilise_2_c,
montant_comptabilise_2_h,
montant_comptabilise_22_c,
montant_comptabilise_22_h,
nb_rejets,
no_facture_od_avoir,
no_facture_reference,
date_solde_reference,
date_solde_reference_c,
date_solde_reference_h,
date_solde_reference_0_c,
date_solde_reference_0_h,
date_solde_reference_1_c,
date_solde_reference_1_h,
date_solde_reference_2_c,
date_solde_reference_2_h,
date_solde_reference_22_c,
date_solde_reference_22_h
)
SELECT
no_sejour,
sejour_id,
no_facture,
date_debut,
date_fin,
type_facture,
code_facture,
date_facture,
code_vente,
date_vente,
mois_vente,
montant_facture_c,
montant_facture_h,
montant_regle_c,
montant_regle_h,
0::numeric as delai_facture,
0::numeric as delai_solde,
date_expedition,
0::numeric as delai_expedition,
tiers_payant_0_id,
tiers_payant_1_id,
tiers_payant_2_id,
tiers_payant_22_id,
date_solde,
date_solde_c,
date_solde_h,
date_solde_0_c,
date_solde_0_h,
date_solde_1_c,
date_solde_1_h,
date_solde_2_c,
date_solde_2_h,
date_solde_22_c,
date_solde_22_h,
date_expedition_0,
date_expedition_1,
date_expedition_2,
date_expedition_22,
code_expedie_0,
code_expedie_1,
code_expedie_2,
'0'::text AS code_expedie_22,
no_bordereau_0,
no_bordereau_1,
no_bordereau_2,
''::text AS no_bordereau_22,
montant_facture_0_c,
montant_facture_0_h,
montant_facture_1_c,
montant_facture_1_h,
montant_facture_2_c,
montant_facture_2_h,
0::numeric AS montant_facture_22_c,
0::numeric AS montant_facture_22_h,
montant_regle_0_c,
montant_regle_0_h,
montant_regle_1_c,
montant_regle_1_h,
montant_regle_2_c,
montant_regle_2_h,
0::numeric AS montant_regle_22_c,
0::numeric AS montant_regle_22_h,
0 AS delai_expedition_0,
0 AS delai_expedition_1,
0 AS delai_expedition_2,
0 AS delai_expedition_22,
0 AS delai_solde_0_c,
0 AS delai_solde_0_h,
0 AS delai_solde_1_c,
0 AS delai_solde_1_h,
0 AS delai_solde_2_c,
0 AS delai_solde_2_h,
0 AS delai_solde_22_c,
0 AS delai_solde_22_h,
ghs_id,
'' as particularite_t2a,
'0' as code_cloture,
'0' as code_cp_demandee,
0 AS ghs_bebe1_id,
0 AS ghs_bebe2_id,
0 AS ghs_bebe3_id,
montant_comptabilise_c,
montant_comptabilise_h,
montant_comptabilise_0_c,
montant_comptabilise_0_h,
montant_comptabilise_1_c,
montant_comptabilise_1_h,
montant_comptabilise_2_c,
montant_comptabilise_2_h,
0::numeric AS montant_comptabilise_22_c,
0::numeric AS montant_comptabilise_22_h,
COALESCE(w_FACTURE_QSP.REJET,0) AS nb_rejets,
no_facture_od_avoir,
no_facture_reference,
date_solde_reference,
date_solde_reference_c,
date_solde_reference_h,
date_solde_reference_0_c,
date_solde_reference_0_h,
date_solde_reference_1_c,
date_solde_reference_1_h,
date_solde_reference_2_c,
date_solde_reference_2_h,
date_solde_reference_22_c,
date_solde_reference_22_h
FROM w_FACTURE_QSP;
SELECT base.cti_enable_index('activite[PX]', 'i_factures_1');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_2');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_3');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_4');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_5');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_6');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_7');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_8');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_9');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_10');
-- Séjours sans facturation
UPDATE activite[PX].p_sejours
SET est_sans_facturation = '1'
WHERE lieu_sortie_id IN
(SELECT oid FROM activite[PX].t_lieux WHERE
service_facturation_id IN
(SELECT oid FROM activite[PX].t_services_facturation WHERE est_sans_facturation = '1') OR
unite_fonctionnelle_id IN
(SELECT oid FROM activite[PX].t_unites_fonctionnelles WHERE est_sans_facturation = '1')
);
-- Séjours facturés partiellement
CREATE TEMP TABLE w_sejours_factures_partiellement AS
SELECT no_sejour
FROM activite[PX].p_sejours
JOIN activite[PX].t_lieux ON p_sejours.lieu_sortie_id = t_lieux.oid
JOIN activite[PX].t_services_facturation ON t_lieux.service_facturation_id = t_services_facturation.oid
JOIN base.t_ghm ON p_sejours.ghm_id = t_ghm.oid
WHERE tiers_payant_1_id <> 0 AND
no_sejour in (select no_sejour from activite[PX].p_factures where code_facture = '1') AND
no_sejour not in (select no_sejour from activite[PX].p_factures where montant_facture_1_c <> 0 OR montant_facture_1_h <> 0) AND
date_sortie >= '20130101' AND
p_sejours.type_sejour IN ('1','2') AND
t_services_facturation.texte NOT ILIKE '%ESTHETIQUE%'AND
t_ghm.code <> '09Z02A'
ORDER BY 1;
DELETE FROM w_sejours_factures_partiellement
USING prod_qsp.FACT_LIGNE
JOIN prod_qsp.SAISIE ON SAISIE.N_SAISIE = fact_ligne.N_SAISIE AND CODE_PREST IN ('GHS','PJ') AND (NUM_FACT_AMO <> 0 OR NUM_FACT_AMC <> 0 OR NUM_FACT_ASS <> 0 AND TAUX = 0)
WHERE FACT_LIGNE.N_HOSPI = w_sejours_factures_partiellement.no_sejour;
-- Séjours sans facture
DROP TABLE IF EXISTS w_factures_trous;
CREATE TEMP TABLE w_factures_trous AS
SELECT
p_sejours.finess,
p_sejours.no_sejour,
p_sejours.oid as sejour_id,
p_sejours.date_entree,
p_sejours.ghs_id,
p_sejours.tiers_payant_0_id,
p_sejours.tiers_payant_1_id,
p_sejours.tiers_payant_2_id,
p_sejours.tiers_payant_22_id,
p_sejours.code_cp_demandee,
COALESCE(t_services_facturation.avec_facturation_intermediaire,'') AS avec_facturation_intermediaire,
p_sejours.code_sorti,
CASE WHEN code_sorti = '1' THEN date_sortie ELSE date(now()) END AS date_sortie,
MAX(
CASE
WHEN p_factures.date_fin IS NOT NULL AND date_sortie - date_entree < 30 THEN date_sortie
ELSE p_factures.date_fin
END
) AS date_fin_facture,
date(MAX(COALESCE(
CASE
WHEN w_sejours_factures_partiellement.no_sejour IS NOT NULL THEN NULL
WHEN p_factures.date_fin IS NOT NULL AND date_sortie - date_entree < 30 THEN date_sortie
ELSE p_factures.date_fin
END + interval '1 day', p_sejours.date_entree))) AS date_debut_encours,
CASE WHEN code_sorti = '1' THEN date_sortie ELSE date(now()) END AS date_fin_encours
FROM activite[PX].p_sejours
LEFT JOIN activite[PX].p_factures ON p_sejours.no_sejour = p_factures.no_sejour AND no_facture NOT LIKE 'E%'
LEFT JOIN w_sejours_factures_partiellement ON p_sejours.no_sejour = w_sejours_factures_partiellement.no_sejour
JOIN activite[PX].t_lieux ON lieu_sortie_id = t_lieux.oid
JOIN activite[PX].t_services_facturation ON t_lieux.service_facturation_id = t_services_facturation.oid
WHERE p_sejours.etat = '' AND
p_sejours.est_sans_facturation IS DISTINCT FROM '1' AND
date_entree <= now() AND
p_sejours.type_sejour <> '6' AND
p_sejours.type_sejour <> '9'
GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13;
INSERT INTO activite[PX].p_factures(
finess,
no_sejour,
sejour_id,
no_facture,
no_facture_reference,
type_facture,
code_facture,
date_facture,
ghs_id,
tiers_payant_0_id, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id,
code_cp_demandee,
date_debut,
date_fin)
SELECT finess,
no_sejour,
sejour_id,
'E' || no_sejour || CASE WHEN avec_facturation_intermediaire = '1' THEN '_' || p_calendrier.mois ELSE '' END,
'E' || no_sejour || CASE WHEN avec_facturation_intermediaire = '1' THEN '_' || p_calendrier.mois ELSE '' END,
'E',
'0',
'20991231'::date,
ghs_id,
tiers_payant_0_id, tiers_payant_1_id, tiers_payant_2_id, tiers_payant_22_id,
code_cp_demandee ,
MIN(GREATEST(date_debut_encours, p_calendrier.date)),
MAX(LEAST(date_fin_encours, p_calendrier.date))
FROM w_factures_trous
JOIN base.p_calendrier ON p_calendrier.date BETWEEN date_debut_encours AND date_fin_encours
WHERE (date_debut_encours <= date_fin_encours or date_fin_facture is null)
GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14;
UPDATE activite[PX].p_factures SET
date_debut = date_entree,
date_fin = CASE WHEN code_sorti = '1' THEN date_sortie ELSE date_fin END
FROM activite[PX].p_sejours
JOIN activite[PX].t_lieux ON lieu_sortie_id = t_lieux.oid
JOIN activite[PX].t_services_facturation ON t_lieux.service_facturation_id = t_services_facturation.oid AND
avec_facturation_intermediaire IS DISTINCT FROM '1'
WHERE p_factures.no_sejour = p_sejours.no_sejour AND
CASE WHEN code_sorti = '1' THEN date_sortie ELSE date(now()) END - date_entree < 30 AND
(
p_factures.date_debut <> date_entree OR
p_factures.date_fin <> CASE WHEN code_sorti = '1' THEN date_sortie ELSE date_fin END
);
]]>
'20991231' THEN date_expedition_1 ELSE '00010101' END,
CASE WHEN date_facture <> '20991231' THEN date_facture ELSE '00010101' END,
date_sortie
) AS date_rejet,
''::text AS code_rejet,
TRIM(MOTIF_REJ) AS texte_rejet
FROM w_FACTURE_QSP
WHERE REJET <> 0
ORDER BY MOTIF_REJ;
UPDATE w_REJETS SET
code_rejet = split_part(texte_rejet, ' ', 1),
texte_rejet = trim(substr(texte_rejet, length(split_part(texte_rejet, ' ', 1))+1, 9999));
UPDATE w_REJETS SET
texte_rejet = trim(substr(texte_rejet, 4, 9999))
WHERE split_part(texte_rejet, ' ', 1) = '000';
UPDATE w_REJETS SET
code_rejet = code_rejet || '-' || split_part(texte_rejet, ' ', 1),
texte_rejet = trim(substr(texte_rejet, length(split_part(texte_rejet, ' ', 1))+1, 9999))
WHERE split_part(texte_rejet, ' ', 1) BETWEEN '0' AND '9';
UPDATE w_REJETS SET
texte_rejet = trim(replace(texte_rejet, ':', ''))
WHERE texte_rejet like '%:%';
INSERT INTO activite[PX].p_factures_rejets(
no_facture, date_rejet, rejet_id, rejet_code, rejet_texte)
SELECT
no_facture ,
date_rejet ,
0,
code_rejet ,
texte_rejet
FROM w_REJETS;
INSERT INTO activite.t_rejets_noemie (texte, code)
SELECT DISTINCT rejet_texte, MAX(rejet_code)
FROM activite[PX].p_factures_rejets
LEFT JOIN activite.t_rejets_noemie ON (rejet_texte = t_rejets_noemie.texte)
WHERE t_rejets_noemie.oid IS NULL
GROUP BY 1;
UPDATE activite[PX].p_factures_rejets SET rejet_id = t_rejets_noemie.oid
FROM activite.t_rejets_noemie
WHERE rejet_texte = t_rejets_noemie.texte;
]]>
0 THEN DET_TIPS.PU ELSE DET_TIPS.PU_TTC_TIPS END, PRIX_PREST, 0) AS prix_unitaire,
p_sejours.lieu_sortie_id AS lieu_id
FROM prod_qsp.SAISIE
LEFT JOIN prod_qsp.DET_TIPS ON DET_TIPS.N_SAISIE = SAISIE.N_SAISIE
LEFT JOIN w_PRIX_PREST ON
SAISIE.N_DIS = w_PRIX_PREST.N_DIS AND
SAISIE.CODE_PREST = w_PRIX_PREST.CODE_PREST AND
date(SAISIE.D_DEB) BETWEEN w_PRIX_PREST.DATE_PRIX AND w_PRIX_PREST.DATE_PRIX_fin
LEFT JOIN prod_qsp.FACT_LIGNE ON FACT_LIGNE.N_SAISIE = SAISIE.N_SAISIE AND
(
NUM_FACT_AMO <> 0 OR
NUM_FACT_AMC <> 0 OR
NUM_FACT_ASS <> 0
)
JOIN activite[PX].p_factures ON SAISIE.N_HOSPI = p_factures.no_sejour AND
date(SAISIE.D_DEB) BETWEEN p_factures.date_debut AND p_factures.date_fin
JOIN activite[PX].p_sejours ON p_factures.no_sejour = p_sejours.code_original AND p_sejours.etat = ''
JOIN prod_qsp.PRESTATION ON SAISIE.CODE_PREST = PRESTATION.CODE_PREST
LEFT JOIN activite[PX].t_rubriques_facturation ON PRESTATION.CODE_PREST = t_rubriques_facturation.code_original
LEFT JOIN activite.t_prestations ON PRESTATION.CODE_NORM = t_prestations.code_original
WHERE type_facture = 'E' AND
SUPPRIME <> '1' AND
SAISIE.CODE_PREST <> 'GHS' AND
PRESTATION.TYPE_PREST <> 'H' AND
FACT_LIGNE.N_SAISIE IS NULL AND
NOT (SAISIE.QTE > 1 AND
(
(date(SAISIE.D_FIN) - date(SAISIE.D_DEB) + 1) = SAISIE.QTE OR
(date(SAISIE.D_FIN) - date(SAISIE.D_DEB) ) = SAISIE.QTE
)
);
-- Multi prestations
INSERT INTO activite[PX].p_factures_lignes_non_facturees_c(
no_facture,
date_debut,
date_fin,
nb_rubrique,
coefficient,
rubrique_facturation_id,
prestation_id,
prix_unitaire,
lieu_id)
SELECT
p_factures.no_facture,
p_calendrier.date AS date_debut,
p_calendrier.date AS date_fin,
1 * SAISIE.COEFF AS nb_rubrique,
1 AS coefficient,
t_rubriques_facturation.oid AS rubrique_facturation_id,
t_prestations.oid AS prestation_id,
COALESCE(CASE WHEN DET_TIPS.PU <> 0 THEN DET_TIPS.PU ELSE DET_TIPS.PU_TTC_TIPS END, PRIX_PREST, 0) AS prix_unitaire,
p_sejours.lieu_sortie_id AS lieu_id
FROM prod_qsp.SAISIE
LEFT JOIN prod_qsp.DET_TIPS ON DET_TIPS.N_SAISIE = SAISIE.N_SAISIE
JOIN base.p_calendrier ON p_calendrier.date BETWEEN date(SAISIE.D_DEB) AND date(SAISIE.D_FIN)
LEFT JOIN w_PRIX_PREST ON
SAISIE.N_DIS = w_PRIX_PREST.N_DIS AND
SAISIE.CODE_PREST = w_PRIX_PREST.CODE_PREST AND
date(SAISIE.D_DEB) BETWEEN w_PRIX_PREST.DATE_PRIX AND w_PRIX_PREST.DATE_PRIX_fin
LEFT JOIN prod_qsp.FACT_LIGNE ON FACT_LIGNE.N_SAISIE = SAISIE.N_SAISIE AND
(
NUM_FACT_AMO <> 0 OR
NUM_FACT_AMC <> 0 OR
NUM_FACT_ASS <> 0
)
JOIN activite[PX].p_factures ON SAISIE.N_HOSPI = p_factures.no_sejour AND
p_calendrier.date BETWEEN date_debut AND date_fin
JOIN activite.p_sejours ON p_factures.no_sejour = p_sejours.code_original AND p_sejours.etat = ''
JOIN prod_qsp.PRESTATION ON SAISIE.CODE_PREST = PRESTATION.CODE_PREST
LEFT JOIN activite[PX].t_rubriques_facturation ON PRESTATION.CODE_PREST = t_rubriques_facturation.code_original
LEFT JOIN activite.t_prestations ON PRESTATION.CODE_NORM = t_prestations.code_original
WHERE type_facture = 'E' AND
SUPPRIME <> '1' AND
SAISIE.CODE_PREST <> 'GHS' AND
PRESTATION.TYPE_PREST <> 'H' AND
FACT_LIGNE.N_SAISIE IS NULL AND
SAISIE.QTE > 1 AND
date(SAISIE.D_FIN) - date(SAISIE.D_DEB) + 1 = SAISIE.QTE
;
INSERT INTO activite[PX].p_factures_lignes_non_facturees_c(
no_facture,
date_debut,
date_fin,
nb_rubrique,
coefficient,
rubrique_facturation_id,
prestation_id,
prix_unitaire,
lieu_id)
SELECT
p_factures.no_facture,
p_calendrier.date AS date_debut,
p_calendrier.date AS date_fin,
1 * SAISIE.COEFF AS nb_rubrique,
1 AS coefficient,
t_rubriques_facturation.oid AS rubrique_facturation_id,
t_prestations.oid AS prestation_id,
COALESCE(CASE WHEN DET_TIPS.PU <> 0 THEN DET_TIPS.PU ELSE DET_TIPS.PU_TTC_TIPS END, PRIX_PREST, 0) AS prix_unitaire,
p_sejours.lieu_sortie_id AS lieu_id
FROM prod_qsp.SAISIE
LEFT JOIN prod_qsp.DET_TIPS ON DET_TIPS.N_SAISIE = SAISIE.N_SAISIE
JOIN base.p_calendrier ON p_calendrier.date BETWEEN date(SAISIE.D_DEB) AND date(SAISIE.D_FIN - interval '1 day')
LEFT JOIN w_PRIX_PREST ON
SAISIE.N_DIS = w_PRIX_PREST.N_DIS AND
SAISIE.CODE_PREST = w_PRIX_PREST.CODE_PREST AND
date(SAISIE.D_DEB) BETWEEN w_PRIX_PREST.DATE_PRIX AND w_PRIX_PREST.DATE_PRIX_fin
LEFT JOIN prod_qsp.FACT_LIGNE ON FACT_LIGNE.N_SAISIE = SAISIE.N_SAISIE AND
(
NUM_FACT_AMO <> 0 OR
NUM_FACT_AMC <> 0 OR
NUM_FACT_ASS <> 0
)
JOIN activite[PX].p_factures ON SAISIE.N_HOSPI = p_factures.no_sejour AND
p_calendrier.date BETWEEN date_debut AND date_fin
JOIN activite.p_sejours ON p_factures.no_sejour = p_sejours.code_original AND p_sejours.etat = ''
JOIN prod_qsp.PRESTATION ON SAISIE.CODE_PREST = PRESTATION.CODE_PREST
LEFT JOIN activite[PX].t_rubriques_facturation ON PRESTATION.CODE_PREST = t_rubriques_facturation.code_original
LEFT JOIN activite.t_prestations ON PRESTATION.CODE_NORM = t_prestations.code_original
WHERE type_facture = 'E' AND
SUPPRIME <> '1' AND
SAISIE.CODE_PREST <> 'GHS' AND
PRESTATION.TYPE_PREST <> 'H' AND
FACT_LIGNE.N_SAISIE IS NULL AND
SAISIE.QTE > 1 AND
date(SAISIE.D_FIN) - date(SAISIE.D_DEB) = SAISIE.QTE
]]>
0 THEN FACT_LIGNE.AMO ELSE 0 END AS AMO,
CASE WHEN FACT_LIGNE.NUM_FACT_AMC <> 0 THEN FACT_LIGNE.AMC ELSE 0 END AS AMC,
CASE WHEN FACT_LIGNE.NUM_FACT_ASS <> 0 THEN FACT_LIGNE.ASS ELSE 0 END AS ASS,
CASE WHEN FACT_LIGNE.NUM_FACT_AMO <> 0 THEN COALESCE(FACT_LIGNE.SOL_AMO,0) ELSE 0 END AS SOL_AMO,
CASE WHEN FACT_LIGNE.NUM_FACT_AMC <> 0 THEN COALESCE(FACT_LIGNE.SOL_AMC,0) ELSE 0 END AS SOL_AMC,
CASE WHEN FACT_LIGNE.NUM_FACT_ASS <> 0 THEN COALESCE(FACT_LIGNE.SOL_ASS,0) ELSE 0 END AS SOL_ASS,
FACT_LIGNE.PU,
FACT_LIGNE.TAUX,
FACT_LIGNE.ENC_AMO,
FACT_LIGNE.ENC_AMC,
FACT_LIGNE.ENC_ASS,
SAISIE.CODE_PREST,
PRESTATION.TYPE_PREST,
PRESTATION.CODE_NORM,
COALESCE(SAISIE.C_PRAT,'') AS C_PRAT,
SAISIE.D_DEB,
GREATEST(SAISIE.D_FIN,SAISIE.D_DEB) AS D_FIN,
SAISIE.QTE,
SAISIE.COEFF,
SAISIE.MT_DP,
SAISIE.SUPPRIME,
SAISIE.GRATUIT,
SAISIE.N_GHS,
CASE WHEN SAISIE.COEFF_MCO = 0 THEN 1 ELSE COEFF_MCO END,
SAISIE.TAUX_ASS,
SAISIE.TAUX_AMC,
COALESCE(DOSSIER_CCAM.CODE_ACTE,SAISIE.CODE_PREST) AS CODE_ACTE,
DOSSIER_CCAM.EXT_DOC,
DOSSIER_CCAM.CODE_ACTIV,
DOSSIER_CCAM.PHASE_TRAIT,
DOSSIER_CCAM.MODIF_1,
DOSSIER_CCAM.MODIF_2,
DOSSIER_CCAM.MODIF_3,
DOSSIER_CCAM.MODIF_4,
DOSSIER_CCAM.ASSOC_NONP,
DOSSIER_CCAM.REMB_EXCEPT,
COALESCE(t_rubriques_facturation.oid::bigint, 0) AS rubrique_facturation_id,
COALESCE(t_rubriques_facturation.oid::bigint, 0) AS rubrique_comptabilisation_id,
COALESCE(t_prestations.oid::bigint, 0) AS prestation_id,
COALESCE(t_medecins_administratifs.oid::bigint, 0) AS medecin_facture_id,
COALESCE(t_medecins_administratifs.oid::bigint, 0) AS medecin_comptabilise_id,
COALESCE(t_actes.oid::bigint, 0) AS acte_id,
COALESCE(t_medecins_administratifs.est_medecin_salarie, '0') AS est_medecin_salarie,
COALESCE(w_HOS_DIS.N_DIS,0) AS N_DIS,
0::bigint AS compte_produit_id,
CASE WHEN COMPTE <> 0 THEN to_char(PRESTATION.COMPTE,'FM9999999999') ELSE '' END AS COMPTE
FROM prod_qsp.FACT_LIGNE
JOIN W_FACTURE_QSP ON (FACT_LIGNE.NUM_FACT_AMO = W_FACTURE_QSP.NUM_FACT OR FACT_LIGNE.NUM_FACT_AMC = W_FACTURE_QSP.NUM_FACT OR FACT_LIGNE.NUM_FACT_ASS = W_FACTURE_QSP.NUM_FACT)
JOIN prod_qsp.SAISIE ON SAISIE.N_SAISIE = fact_ligne.N_SAISIE
LEFT JOIN w_HOS_DIS ON FACT_LIGNE.N_HOSPI = w_HOS_DIS.N_HOSPI
JOIN prod_qsp.PRESTATION ON SAISIE.CODE_PREST = PRESTATION.CODE_PREST
LEFT JOIN activite[PX].t_rubriques_facturation ON PRESTATION.CODE_PREST = t_rubriques_facturation.code_original
LEFT JOIN activite.t_prestations ON PRESTATION.CODE_NORM = t_prestations.code_original
LEFT JOIN prod_qsp.SAISIE_CCAM ON FACT_LIGNE.N_SAISIE = SAISIE_CCAM.N_SAISIE
LEFT JOIN prod_qsp.DOSSIER_CCAM ON SAISIE_CCAM.N_UNIQUE_CCAM = DOSSIER_CCAM.N_UNIQUE_CCAM AND SAISIE_CCAM.N_SEQ_CCAM = DOSSIER_CCAM.N_SEQ_CCAM AND
SAISIE_CCAM.N_HOSPI = DOSSIER_CCAM.NDOSSIER
LEFT JOIN activite[PX].t_medecins_administratifs ON SAISIE.C_PRAT = t_medecins_administratifs.code_original
LEFT JOIN base.t_actes ON (substring(COALESCE(DOSSIER_CCAM.CODE_ACTE,SAISIE.CODE_PREST), 1, 7) = t_actes.code);
CREATE INDEX w_FACT_LIGNE_I1
ON w_FACT_LIGNE
USING btree
(C_PRAT);
CREATE INDEX w_FACT_LIGNE_I2
ON w_FACT_LIGNE
USING btree
(CODE_PREST);
CREATE INDEX w_FACT_LIGNE_I3
ON w_FACT_LIGNE
USING btree
(N_HOSPI);
UPDATE w_FACT_LIGNE
SET CODE_NORM = CODE_PREST,
prestation_id = t_prestations.oid
FROM activite.t_prestations
WHERE (CODE_NORM IS NULL OR CODE_NORM = '') AND
CODE_PREST = t_prestations.code_original
;
-- Compte produit
UPDATE w_FACT_LIGNE
SET COMPTE = PRESTATION_DISCIPLINE.COMPTE
FROM prod_qsp.PRESTATION_DISCIPLINE
WHERE w_FACT_LIGNE.CODE_PREST = PRESTATION_DISCIPLINE.CODE_PREST AND
w_FACT_LIGNE.N_DIS = PRESTATION_DISCIPLINE.N_DIS AND
PRESTATION_DISCIPLINE.COMPTE > 0;
UPDATE w_FACT_LIGNE
SET COMPTE = PRESTATION_GHS_GHS.COMPTE
FROM prod_qsp.PRESTATION_GHS_GHS
WHERE w_FACT_LIGNE.CODE_PREST = PRESTATION_GHS_GHS.CODE_PREST AND
w_FACT_LIGNE.N_GHS = PRESTATION_GHS_GHS.GHS AND
PRESTATION_GHS_GHS.COMPTE > 0;
UPDATE w_FACT_LIGNE
SET compte_produit_id = t_compte.oid
FROM activite[PX].t_compte
WHERE t_compte.code = w_FACT_LIGNE.COMPTE AND
w_FACT_LIGNE.COMPTE <> '';
-- Lieu
UPDATE w_FACT_LIGNE
SET lieu_id = p_mouvements_sejour.lieu_id
FROM
activite[PX].p_mouvements_sejour
WHERE
w_FACT_LIGNE.N_HOSPI = p_mouvements_sejour.no_sejour AND
date(W_FACT_LIGNE.D_FIN) = p_mouvements_sejour.date AND
(230000 BETWEEN p_mouvements_sejour.heure_debut AND p_mouvements_sejour.heure_fin OR
nb_entrees_directes = 1 AND heure_fin = 240000 OR
nb_sorties_directes = 1 ) AND
w_FACT_LIGNE.lieu_id <> p_mouvements_sejour.lieu_id;
-- Mise à jour totaux comptabilisés pour médecins salariés
DROP TABLE IF EXISTS W_FACT_LIGNE_SALARIE;
CREATE TEMP TABLE W_FACT_LIGNE_SALARIE AS
SELECT
W_FACT_LIGNE.no_facture,
SUM(W_FACT_LIGNE.AMO) AS montant_comptabilise
FROM w_FACT_LIGNE
WHERE NUM_FACT_AMO <> 0 AND AMO <> 0 AND
est_medecin_salarie = '1'
GROUP BY 1;
CREATE INDEX W_FACT_LIGNE_SALARIE_I1
ON W_FACT_LIGNE_SALARIE
USING btree
(no_facture);
UPDATE activite[PX].p_factures
SET
montant_comptabilise_c = montant_comptabilise_c + W_FACT_LIGNE_SALARIE.montant_comptabilise,
montant_comptabilise_h = montant_comptabilise_h - W_FACT_LIGNE_SALARIE.montant_comptabilise,
montant_comptabilise_1_c = montant_comptabilise_1_c + W_FACT_LIGNE_SALARIE.montant_comptabilise,
montant_comptabilise_1_h = montant_comptabilise_1_h - W_FACT_LIGNE_SALARIE.montant_comptabilise
FROM W_FACT_LIGNE_SALARIE
WHERE W_FACT_LIGNE_SALARIE.no_facture = p_factures.no_facture;
DROP TABLE IF EXISTS W_FACT_LIGNE_SALARIE;
CREATE TEMP TABLE W_FACT_LIGNE_SALARIE AS
SELECT
W_FACT_LIGNE.no_facture,
SUM(W_FACT_LIGNE.AMC) AS montant_comptabilise
FROM w_FACT_LIGNE
WHERE NUM_FACT_AMC <> 0 AND AMC <> 0 AND
est_medecin_salarie = '1'
GROUP BY 1;
CREATE INDEX W_FACT_LIGNE_SALARIE_I1
ON W_FACT_LIGNE_SALARIE
USING btree
(no_facture);
UPDATE activite[PX].p_factures
SET
montant_comptabilise_c = montant_comptabilise_c + W_FACT_LIGNE_SALARIE.montant_comptabilise,
montant_comptabilise_h = montant_comptabilise_h - W_FACT_LIGNE_SALARIE.montant_comptabilise,
montant_comptabilise_2_c = montant_comptabilise_2_c + W_FACT_LIGNE_SALARIE.montant_comptabilise,
montant_comptabilise_2_h = montant_comptabilise_2_h - W_FACT_LIGNE_SALARIE.montant_comptabilise
FROM W_FACT_LIGNE_SALARIE
WHERE W_FACT_LIGNE_SALARIE.no_facture = p_factures.no_facture;
DROP TABLE IF EXISTS W_FACT_LIGNE_SALARIE;
CREATE TEMP TABLE W_FACT_LIGNE_SALARIE AS
SELECT
W_FACT_LIGNE.no_facture,
SUM(W_FACT_LIGNE.ASS) AS montant_comptabilise
FROM w_FACT_LIGNE
WHERE NUM_FACT_ASS <> 0 AND ASS <> 0 AND
est_medecin_salarie = '1'
GROUP BY 1;
CREATE INDEX W_FACT_LIGNE_SALARIE_I1
ON W_FACT_LIGNE_SALARIE
USING btree
(no_facture);
UPDATE activite[PX].p_factures
SET
montant_comptabilise_c = montant_comptabilise_c + W_FACT_LIGNE_SALARIE.montant_comptabilise,
montant_comptabilise_h = montant_comptabilise_h - W_FACT_LIGNE_SALARIE.montant_comptabilise,
montant_comptabilise_0_c = montant_comptabilise_0_c + W_FACT_LIGNE_SALARIE.montant_comptabilise,
montant_comptabilise_0_h = montant_comptabilise_0_h - W_FACT_LIGNE_SALARIE.montant_comptabilise
FROM W_FACT_LIGNE_SALARIE
WHERE W_FACT_LIGNE_SALARIE.no_facture = p_factures.no_facture;
-- Génération lignes détail
DROP TABLE IF EXISTS W_FACT_LIGNE_C_1;
CREATE TEMP TABLE W_FACT_LIGNE_C_1 AS
SELECT
W_FACT_LIGNE.N_HOSPI,
W_FACT_LIGNE.date_vente,
W_FACT_LIGNE.lieu_id,
W_FACT_LIGNE.no_facture,
rubrique_facturation_id,
rubrique_comptabilisation_id,
prestation_id,
compte_produit_id,
W_FACT_LIGNE.D_DEB AS date_debut,
W_FACT_LIGNE.D_FIN AS date_fin,
CASE WHEN W_FACT_LIGNE.ETAT = 3 AND W_FACT_LIGNE.QTE < 0 AND W_FACT_LIGNE.CODE_NORM = 'GHS' THEN -1
WHEN W_FACT_LIGNE.ETAT <> 3 AND W_FACT_LIGNE.CODE_NORM = 'GHS' THEN 1
WHEN W_FACT_LIGNE.ETAT = 3 AND W_FACT_LIGNE.QTE > 0 THEN 0 - W_FACT_LIGNE.QTE
ELSE W_FACT_LIGNE.QTE END AS nb_rubrique,
CASE WHEN W_FACT_LIGNE.ETAT = 3 AND W_FACT_LIGNE.QTE < 0 AND W_FACT_LIGNE.CODE_NORM = 'GHS' THEN -1
WHEN W_FACT_LIGNE.ETAT <> 3 AND W_FACT_LIGNE.CODE_NORM = 'GHS' THEN 1
WHEN W_FACT_LIGNE.ETAT = 3 AND W_FACT_LIGNE.QTE > 0 THEN 0 - W_FACT_LIGNE.QTE
ELSE W_FACT_LIGNE.QTE END AS nb_prestations,
W_FACT_LIGNE.COEFF AS coefficient,
W_FACT_LIGNE.GRATUIT,
W_FACT_LIGNE.N_GHS,
W_FACT_LIGNE.COEFF_MCO AS coefficient_mco,
W_FACT_LIGNE.PU AS prix_unitaire,
W_FACT_LIGNE.TAUX AS taux_1,
0::numeric AS taux_2,
0::numeric AS taux_0,
CASE WHEN est_medecin_salarie <> '1' THEN W_FACT_LIGNE.AMO ELSE 0 END AS montant_facture,
CASE WHEN est_medecin_salarie <> '1' THEN W_FACT_LIGNE.AMO ELSE 0 END AS montant_facture_1,
0::numeric AS montant_facture_2,
0::numeric AS montant_facture_0,
CASE WHEN W_FACT_LIGNE.SOL_AMO <> 2 THEN W_FACT_LIGNE.AMO ELSE 0 END AS montant_comptabilise,
CASE WHEN W_FACT_LIGNE.SOL_AMO <> 2 THEN W_FACT_LIGNE.AMO ELSE 0 END AS montant_comptabilise_1,
0::numeric AS montant_comptabilise_2,
0::numeric AS montant_comptabilise_0,
W_FACT_LIGNE.ENC_AMO AS montant_regle_1,
0::numeric AS montant_regle_2,
0::numeric AS montant_regle_0,
0::numeric AS rubrique_facture_id
FROM w_FACT_LIGNE
WHERE NUM_FACT_AMO <> 0
AND W_FACT_LIGNE.AMO <> 0
AND (W_FACT_LIGNE.TYPE_PREST <> 'H' OR est_medecin_salarie = '1');
DROP TABLE IF EXISTS W_FACT_LIGNE_C_2;
CREATE TEMP TABLE W_FACT_LIGNE_C_2 AS
SELECT
W_FACT_LIGNE.N_HOSPI,
W_FACT_LIGNE.date_vente,
W_FACT_LIGNE.lieu_id,
W_FACT_LIGNE.no_facture,
rubrique_facturation_id,
rubrique_comptabilisation_id,
prestation_id,
compte_produit_id,
W_FACT_LIGNE.D_DEB AS date_debut,
W_FACT_LIGNE.D_FIN AS date_fin,
CASE
WHEN AMO <> 0 THEN 0
WHEN W_FACT_LIGNE.ETAT = 3 AND W_FACT_LIGNE.QTE < 0 AND W_FACT_LIGNE.CODE_NORM = 'GHS' THEN -1
WHEN W_FACT_LIGNE.ETAT <> 3 AND W_FACT_LIGNE.CODE_NORM = 'GHS' THEN 1
WHEN W_FACT_LIGNE.ETAT = 3 AND W_FACT_LIGNE.QTE > 0 THEN 0 - W_FACT_LIGNE.QTE
ELSE W_FACT_LIGNE.QTE END AS nb_rubrique,
CASE
WHEN AMO <> 0 THEN 0
WHEN W_FACT_LIGNE.ETAT = 3 AND W_FACT_LIGNE.QTE < 0 AND W_FACT_LIGNE.CODE_NORM = 'GHS' THEN -1
WHEN W_FACT_LIGNE.ETAT <> 3 AND W_FACT_LIGNE.CODE_NORM = 'GHS' THEN 1
WHEN W_FACT_LIGNE.ETAT = 3 AND W_FACT_LIGNE.QTE > 0 THEN 0 - W_FACT_LIGNE.QTE
ELSE W_FACT_LIGNE.QTE END AS nb_prestations,
W_FACT_LIGNE.COEFF AS coefficient,
W_FACT_LIGNE.GRATUIT,
W_FACT_LIGNE.N_GHS,
W_FACT_LIGNE.COEFF_MCO AS coefficient_mco,
W_FACT_LIGNE.PU AS prix_unitaire,
0::numeric AS taux_1,
0::numeric AS taux_2,
0::numeric AS taux_0,
CASE WHEN est_medecin_salarie <> '1' THEN W_FACT_LIGNE.AMC ELSE 0 END AS montant_facture,
0::numeric AS montant_facture_1,
CASE WHEN est_medecin_salarie <> '1' THEN W_FACT_LIGNE.AMC ELSE 0 END AS montant_facture_2,
0::numeric AS montant_facture_0,
CASE WHEN W_FACT_LIGNE.SOL_AMC <> 2 THEN W_FACT_LIGNE.AMC ELSE 0 END AS montant_comptabilise,
0::numeric AS montant_comptabilise_1,
CASE WHEN W_FACT_LIGNE.SOL_AMC <> 2 THEN W_FACT_LIGNE.AMC ELSE 0 END AS montant_comptabilise_2,
0::numeric AS montant_comptabilise_0,
0::numeric AS montant_regle_1,
W_FACT_LIGNE.ENC_AMC AS montant_regle_2,
0::numeric AS montant_regle_0,
0::numeric AS rubrique_facture_id
FROM W_FACT_LIGNE
WHERE NUM_FACT_AMC <> 0
AND W_FACT_LIGNE.AMC <> 0
AND (W_FACT_LIGNE.TYPE_PREST <> 'H' OR est_medecin_salarie = '1');
DROP TABLE IF EXISTS W_FACT_LIGNE_C_0;
CREATE TEMP TABLE W_FACT_LIGNE_C_0 AS
SELECT
W_FACT_LIGNE.N_HOSPI,
W_FACT_LIGNE.date_vente,
W_FACT_LIGNE.lieu_id,
W_FACT_LIGNE.no_facture,
rubrique_facturation_id,
rubrique_comptabilisation_id,
prestation_id,
compte_produit_id,
W_FACT_LIGNE.D_DEB AS date_debut,
W_FACT_LIGNE.D_FIN AS date_fin,
CASE
WHEN AMO <> 0 THEN 0
WHEN AMC <> 0 THEN 0
WHEN W_FACT_LIGNE.ETAT = 3 AND W_FACT_LIGNE.QTE < 0 AND W_FACT_LIGNE.CODE_NORM = 'GHS' THEN -1
WHEN W_FACT_LIGNE.ETAT <> 3 AND W_FACT_LIGNE.CODE_NORM = 'GHS' THEN 1
WHEN W_FACT_LIGNE.ETAT = 3 AND W_FACT_LIGNE.QTE > 0 THEN 0 - W_FACT_LIGNE.QTE
ELSE W_FACT_LIGNE.QTE END AS nb_rubrique,
CASE
WHEN AMO <> 0 THEN 0
WHEN AMC <> 0 THEN 0
WHEN W_FACT_LIGNE.ETAT = 3 AND W_FACT_LIGNE.QTE < 0 AND W_FACT_LIGNE.CODE_NORM = 'GHS' THEN -1
WHEN W_FACT_LIGNE.ETAT <> 3 AND W_FACT_LIGNE.CODE_NORM = 'GHS' THEN 1
WHEN W_FACT_LIGNE.ETAT = 3 AND W_FACT_LIGNE.QTE > 0 THEN 0 - W_FACT_LIGNE.QTE
ELSE W_FACT_LIGNE.QTE END AS nb_prestations,
W_FACT_LIGNE.COEFF AS coefficient,
W_FACT_LIGNE.GRATUIT,
W_FACT_LIGNE.N_GHS,
W_FACT_LIGNE.COEFF_MCO AS coefficient_mco,
W_FACT_LIGNE.PU AS prix_unitaire,
0::numeric AS taux_1,
0::numeric AS taux_2,
0::numeric AS taux_0,
CASE WHEN est_medecin_salarie <> '1' THEN W_FACT_LIGNE.ASS ELSE 0 END AS montant_facture,
0::numeric AS montant_facture_1,
0::numeric AS montant_facture_2,
CASE WHEN est_medecin_salarie <> '1' THEN W_FACT_LIGNE.ASS ELSE 0 END AS montant_facture_0,
CASE WHEN W_FACT_LIGNE.SOL_ASS <> 2 THEN W_FACT_LIGNE.ASS ELSE 0 END AS montant_comptabilise,
0::numeric AS montant_comptabilise_1,
0::numeric AS montant_comptabilise_2,
CASE WHEN W_FACT_LIGNE.SOL_ASS <> 2 THEN W_FACT_LIGNE.ASS ELSE 0 END AS montant_comptabilise_0,
0::numeric AS montant_regle_1,
0::numeric AS montant_regle_2,
W_FACT_LIGNE.ENC_ASS AS montant_regle_0,
0::numeric AS rubrique_facture_id
FROM W_FACT_LIGNE
WHERE NUM_FACT_ASS <> 0
AND W_FACT_LIGNE.ASS <> 0
AND (W_FACT_LIGNE.TYPE_PREST <> 'H' OR est_medecin_salarie = '1');
-- Rubriques internes cti
SELECT activite[PX].cti_reorganize_rubrique_facture_c('W_FACT_LIGNE_C_1');
SELECT activite[PX].cti_reorganize_rubrique_facture_c('W_FACT_LIGNE_C_2');
SELECT activite[PX].cti_reorganize_rubrique_facture_c('W_FACT_LIGNE_C_0');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_lignes_c_1');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_lignes_c_2');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_lignes_c_3');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_lignes_c_4');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_lignes_c_5');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_lignes_c_6');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_lignes_c_7');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_lignes_c_8');
INSERT INTO activite[PX].p_factures_lignes_c(
no_facture,
date_debut,
date_fin,
nb_rubrique,
nb_prestation,
coefficient,
coefficient_mco,
rubrique_facture_id,
rubrique_facturation_id,
rubrique_comptabilisation_id,
prestation_id,
compte_produit_id,
montant_facture,
montant_facture_0,
montant_facture_1,
montant_facture_2,
montant_facture_22,
taux_0,
taux_1,
taux_2,
taux_22,
prix_unitaire,
lieu_id,
montant_comptabilise,
montant_comptabilise_0,
montant_comptabilise_1,
montant_comptabilise_2,
montant_comptabilise_22,
montant_encours,
montant_encours_0,
montant_encours_1,
montant_encours_2,
montant_encours_22)
SELECT
no_facture,
date_debut,
date_fin,
nb_rubrique,
nb_prestations,
coefficient,
coefficient_mco,
rubrique_facture_id,
rubrique_facturation_id,
rubrique_comptabilisation_id,
prestation_id,
compte_produit_id,
montant_facture,
montant_facture_0,
montant_facture_1,
montant_facture_2,
0 AS montant_facture_22,
taux_0,
taux_1,
taux_2,
0 AS taux_22,
prix_unitaire,
lieu_id,
montant_comptabilise,
montant_comptabilise_0,
montant_comptabilise_1,
montant_comptabilise_2,
0 AS montant_comptabilise_22,
0,
0,
0,
0,
0
FROM W_FACT_LIGNE_C_1
UNION ALL
SELECT
no_facture,
date_debut,
date_fin,
nb_rubrique,
nb_prestations,
coefficient,
coefficient_mco,
rubrique_facture_id,
rubrique_facturation_id,
rubrique_comptabilisation_id,
prestation_id,
compte_produit_id,
montant_facture,
montant_facture_0,
montant_facture_1,
montant_facture_2,
0 AS montant_facture_22,
taux_0,
taux_1,
taux_2,
0 AS taux_22,
prix_unitaire,
lieu_id,
montant_comptabilise,
montant_comptabilise_0,
montant_comptabilise_1,
montant_comptabilise_2,
0 AS montant_comptabilise_22,
0,
0,
0,
0,
0
FROM W_FACT_LIGNE_C_2
UNION ALL
SELECT
no_facture,
date_debut,
date_fin,
nb_rubrique,
nb_prestations,
coefficient,
coefficient_mco,
rubrique_facture_id,
rubrique_facturation_id,
rubrique_comptabilisation_id,
prestation_id,
compte_produit_id,
montant_facture,
montant_facture_0,
montant_facture_1,
montant_facture_2,
0 AS montant_facture_22,
taux_0,
taux_1,
taux_2,
0 AS taux_22,
prix_unitaire,
lieu_id,
montant_comptabilise,
montant_comptabilise_0,
montant_comptabilise_1,
montant_comptabilise_2,
0 AS montant_comptabilise_22,
0,
0,
0,
0,
0
FROM W_FACT_LIGNE_C_0;
SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_1');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_2');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_6');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_7');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_8');
-- Eclatement des supplements par jour
DROP TABLE IF EXISTS w_factures_lignes_sup_c;
CREATE TEMP TABLE w_factures_lignes_sup_c AS
SELECT
p_factures_lignes_c.CTID AS from_CTID,
t_prestations.code AS prestation_code,
date(p_sejours.date_entree) AS date_debut_ghs,
date(p_sejours.date_sortie - interval '1 day') AS date_fin_ghs,
(date(date_sortie) - date(date_entree)) * CASE WHEN nb_prestation < 0 THEN -1 ELSE 1 END AS nb_prestation_ghs,
CASE WHEN t_prestations.code = 'GHS' THEN date(date_entree + interval '1 day') ELSE date(p_factures_lignes_c.date_debut + interval '1 day') END AS date_debut_det,
CASE WHEN t_prestations.code = 'GHS' THEN date(p_sejours.date_sortie - interval '1 day') ELSE date(p_factures_lignes_c.date_debut + ((ABS(nb_prestation)-1) || ' day')::interval) END AS date_fin_det,
ABS(CASE WHEN t_prestations.code = 'GHS' THEN date(date_sortie) - date(date_entree) ELSE nb_prestation END) AS nb_det,
p_factures_lignes_c.*
FROM activite[PX].p_factures_lignes_c
JOIN activite[PX].p_factures ON p_factures_lignes_c.no_facture = p_factures.no_facture
JOIN activite[PX].p_sejours ON p_factures.no_sejour = p_sejours.no_sejour
JOIN activite.t_prestations ON prestation_id = t_prestations.oid AND
(
code IN ('PJ', 'PJ1', 'PJ2', 'FJ', 'SSM', 'GHS', 'EXH', 'SRC', 'REA', 'STF', 'NN1', 'NN2', 'NN3', 'CP', 'CPC', 'SHO') OR
t_prestations.type_ventilation_jour = '1'
)
WHERE (nb_prestation > 1 or nb_prestation < -1 OR (t_prestations.code = 'GHS' AND date(date_sortie) - date(date_entree) > 1)) ;
UPDATE w_factures_lignes_sup_c SET
date_fin_ghs = date(date_debut_exh - interval '1 day'),
date_fin_det = date(date_debut_exh - interval '1 day'),
nb_prestation_ghs = date(date_debut_exh - interval '1 day') - date_debut_ghs + 1,
nb_det = date(date_debut_exh - interval '1 day') - date_debut_ghs + 1
FROM (
SELECT no_facture, date(MIN(date_debut)) AS date_debut_exh
FROM activite[PX].p_factures_lignes_c
JOIN activite.t_prestations ON prestation_id = t_prestations.oid AND code = 'EXH'
GROUP BY 1) subview
WHERE w_factures_lignes_sup_c.no_facture = subview.no_facture AND
w_factures_lignes_sup_c.prestation_code = 'GHS';
CREATE INDEX w_factures_lignes_sup_c_i1
ON w_factures_lignes_sup_c
USING btree
(date_debut);
DROP TABLE IF EXISTS w_factures_lignes_sup_c_sup;
CREATE TEMP TABLE w_factures_lignes_sup_c_sup AS
SELECT
from_CTID,
no_facture,
date AS date_debut,
date AS date_fin,
CASE WHEN prestation_code = 'GHS' AND date <> date_fin_ghs THEN 0 WHEN nb_prestation < 0 THEN -1 ELSE 1 END AS nb_rubrique,
CASE WHEN prestation_code = 'GHS' AND date <> date_fin_ghs THEN 0 WHEN nb_prestation < 0 THEN -1 ELSE 1 END AS nb_prestation,
coefficient,
coefficient_mco,
rubrique_facturation_id,
rubrique_comptabilisation_id,
compte_produit_id,
prestation_id,
round(montant_facture / ABS(nb_det),2) AS montant_facture,
round(montant_facture_0 / ABS(nb_det),2) AS montant_facture_0,
round(montant_facture_1 / ABS(nb_det),2) AS montant_facture_1,
round(montant_facture_2 / ABS(nb_det),2) AS montant_facture_2,
round(montant_facture_22 / ABS(nb_det),2) AS montant_facture_22,
taux_0,
taux_1,
taux_2,
taux_22,
finess,
prix_unitaire,
lieu_id,
round(montant_comptabilise / ABS(nb_det),2) AS montant_comptabilise,
round(montant_comptabilise_0 / ABS(nb_det),2) AS montant_comptabilise_0,
round(montant_comptabilise_1 / ABS(nb_det),2) AS montant_comptabilise_1,
round(montant_comptabilise_2 / ABS(nb_det),2) AS montant_comptabilise_2,
round(montant_comptabilise_22 / ABS(nb_det),2) AS montant_comptabilise_22,
round(montant_encours / ABS(nb_det),2) AS montant_encours,
round(montant_encours_0 / ABS(nb_det),2) AS montant_encours_0,
round(montant_encours_1 / ABS(nb_det),2) AS montant_encours_1,
round(montant_encours_2 / ABS(nb_det),2) AS montant_encours_2,
round(montant_encours_22 / ABS(nb_det),2) AS montant_encours_22,
round(montant_facture_actes_inclus_dans_sejour / ABS(nb_det),2) AS montant_facture_actes_inclus_dans_sejour,
round(montant_facture_0_actes_inclus_dans_sejour / ABS(nb_det),2) AS montant_facture_0_actes_inclus_dans_sejour,
round(montant_facture_1_actes_inclus_dans_sejour / ABS(nb_det),2) AS montant_facture_1_actes_inclus_dans_sejour,
round(montant_facture_2_actes_inclus_dans_sejour / ABS(nb_det),2) AS montant_facture_2_actes_inclus_dans_sejour,
round(montant_facture_22_actes_inclus_dans_sejour / ABS(nb_det),2) AS montant_facture_22_actes_inclus_dans_sejour,
origine_facturation_id,
round(montant_comptabilise_budget_global_1 / ABS(nb_det),2) AS montant_comptabilise_budget_global_1,
facture_id
FROM w_factures_lignes_sup_c
JOIN base.p_calendrier ON p_calendrier.date BETWEEN date_debut_det AND date_fin_det
;
DROP TABLE IF EXISTS w_factures_lignes_sup_c_sup_tot;
CREATE TEMP TABLE w_factures_lignes_sup_c_sup_tot AS
SELECT from_CTID,
SUM(nb_rubrique) AS nb_rubrique,
SUM(nb_prestation) AS nb_prestation,
SUM(montant_facture) AS montant_facture,
SUM(montant_facture_0) AS montant_facture_0,
SUM(montant_facture_1) AS montant_facture_1,
SUM(montant_facture_2) AS montant_facture_2,
SUM(montant_facture_22) AS montant_facture_22,
SUM(montant_comptabilise) AS montant_comptabilise,
SUM(montant_comptabilise_0) AS montant_comptabilise_0,
SUM(montant_comptabilise_1) AS montant_comptabilise_1,
SUM(montant_comptabilise_2) AS montant_comptabilise_2,
SUM(montant_comptabilise_22) AS montant_comptabilise_22,
SUM(montant_encours) AS montant_encours,
SUM(montant_encours_0) AS montant_encours_0,
SUM(montant_encours_1) AS montant_encours_1,
SUM(montant_encours_2) AS montant_encours_2,
SUM(montant_encours_22) AS montant_encours_22,
SUM(montant_facture_actes_inclus_dans_sejour) AS montant_facture_actes_inclus_dans_sejour,
SUM(montant_facture_0_actes_inclus_dans_sejour) AS montant_facture_0_actes_inclus_dans_sejour,
SUM(montant_facture_1_actes_inclus_dans_sejour) AS montant_facture_1_actes_inclus_dans_sejour,
SUM(montant_facture_2_actes_inclus_dans_sejour) AS montant_facture_2_actes_inclus_dans_sejour,
SUM(montant_facture_22_actes_inclus_dans_sejour) AS montant_facture_22_actes_inclus_dans_sejour,
SUM(montant_comptabilise_budget_global_1) AS montant_comptabilise_budget_global_1
FROM w_factures_lignes_sup_c_sup
GROUP BY 1;
UPDATE activite[PX].p_factures_lignes_c
SET
date_fin = p_factures_lignes_c.date_debut,
nb_rubrique = p_factures_lignes_c.nb_rubrique - w_factures_lignes_sup_c_sup_tot.nb_rubrique,
nb_prestation = p_factures_lignes_c.nb_prestation - w_factures_lignes_sup_c_sup_tot.nb_prestation,
montant_facture = p_factures_lignes_c.montant_facture - w_factures_lignes_sup_c_sup_tot.montant_facture,
montant_facture_0 = p_factures_lignes_c.montant_facture_0 - w_factures_lignes_sup_c_sup_tot.montant_facture_0,
montant_facture_1 = p_factures_lignes_c.montant_facture_1 - w_factures_lignes_sup_c_sup_tot.montant_facture_1,
montant_facture_2 = p_factures_lignes_c.montant_facture_2 - w_factures_lignes_sup_c_sup_tot.montant_facture_2,
montant_facture_22 = p_factures_lignes_c.montant_facture_22 - w_factures_lignes_sup_c_sup_tot.montant_facture_22,
montant_comptabilise = p_factures_lignes_c.montant_comptabilise - w_factures_lignes_sup_c_sup_tot.montant_comptabilise,
montant_comptabilise_0 = p_factures_lignes_c.montant_comptabilise_0 - w_factures_lignes_sup_c_sup_tot.montant_comptabilise_0,
montant_comptabilise_1 = p_factures_lignes_c.montant_comptabilise_1 - w_factures_lignes_sup_c_sup_tot.montant_comptabilise_1,
montant_comptabilise_2 = p_factures_lignes_c.montant_comptabilise_2 - w_factures_lignes_sup_c_sup_tot.montant_comptabilise_2,
montant_comptabilise_22 = p_factures_lignes_c.montant_comptabilise_22 - w_factures_lignes_sup_c_sup_tot.montant_comptabilise_22,
montant_encours = p_factures_lignes_c.montant_encours - w_factures_lignes_sup_c_sup_tot.montant_encours,
montant_encours_0 = p_factures_lignes_c.montant_encours_0 - w_factures_lignes_sup_c_sup_tot.montant_encours_0,
montant_encours_1 = p_factures_lignes_c.montant_encours_1 - w_factures_lignes_sup_c_sup_tot.montant_encours_1,
montant_encours_2 = p_factures_lignes_c.montant_encours_2 - w_factures_lignes_sup_c_sup_tot.montant_encours_2,
montant_encours_22 = p_factures_lignes_c.montant_encours_22 - w_factures_lignes_sup_c_sup_tot.montant_encours_22,
montant_facture_actes_inclus_dans_sejour = p_factures_lignes_c.montant_facture_actes_inclus_dans_sejour - w_factures_lignes_sup_c_sup_tot.montant_facture_actes_inclus_dans_sejour,
montant_facture_0_actes_inclus_dans_sejour = p_factures_lignes_c.montant_facture_0_actes_inclus_dans_sejour - w_factures_lignes_sup_c_sup_tot.montant_facture_0_actes_inclus_dans_sejour,
montant_facture_1_actes_inclus_dans_sejour = p_factures_lignes_c.montant_facture_1_actes_inclus_dans_sejour - w_factures_lignes_sup_c_sup_tot.montant_facture_1_actes_inclus_dans_sejour,
montant_facture_2_actes_inclus_dans_sejour = p_factures_lignes_c.montant_facture_2_actes_inclus_dans_sejour - w_factures_lignes_sup_c_sup_tot.montant_facture_2_actes_inclus_dans_sejour,
montant_facture_22_actes_inclus_dans_sejour = p_factures_lignes_c.montant_facture_22_actes_inclus_dans_sejour - w_factures_lignes_sup_c_sup_tot.montant_facture_22_actes_inclus_dans_sejour,
montant_comptabilise_budget_global_1 = p_factures_lignes_c.montant_comptabilise_budget_global_1 - w_factures_lignes_sup_c_sup_tot.montant_comptabilise_budget_global_1
FROM w_factures_lignes_sup_c_sup_tot
WHERE p_factures_lignes_c.CTID = from_CTID;
-- Rubriques internes cti
SELECT activite[PX].cti_reorganize_rubrique_facture_c('w_factures_lignes_sup_c_sup');
INSERT INTO activite[PX].p_factures_lignes_c(
no_facture,
date_debut,
date_fin,
nb_rubrique,
coefficient,
coefficient_mco,
rubrique_facture_id,
rubrique_facturation_id,
rubrique_comptabilisation_id,
compte_produit_id,
prestation_id,
montant_facture,
montant_facture_0,
montant_facture_1,
montant_facture_2,
montant_facture_22,
taux_0,
taux_1,
taux_2,
taux_22,
finess,
prix_unitaire,
lieu_id,
nb_prestation,
montant_comptabilise,
montant_comptabilise_0,
montant_comptabilise_1,
montant_comptabilise_2,
montant_comptabilise_22,
montant_encours,
montant_encours_0,
montant_encours_1,
montant_encours_2,
montant_encours_22,
montant_facture_actes_inclus_dans_sejour,
montant_facture_0_actes_inclus_dans_sejour,
montant_facture_1_actes_inclus_dans_sejour,
montant_facture_2_actes_inclus_dans_sejour,
montant_facture_22_actes_inclus_dans_sejour,
origine_facturation_id,
montant_comptabilise_budget_global_1,
facture_id)
SELECT
no_facture,
date_debut,
date_fin,
nb_rubrique,
coefficient,
coefficient_mco,
rubrique_facture_id,
rubrique_facturation_id,
rubrique_comptabilisation_id,
compte_produit_id,
prestation_id,
montant_facture,
montant_facture_0,
montant_facture_1,
montant_facture_2,
montant_facture_22,
taux_0,
taux_1,
taux_2,
taux_22,
finess,
prix_unitaire,
lieu_id,
nb_prestation,
montant_comptabilise,
montant_comptabilise_0,
montant_comptabilise_1,
montant_comptabilise_2,
montant_comptabilise_22,
montant_encours,
montant_encours_0,
montant_encours_1,
montant_encours_2,
montant_encours_22,
montant_facture_actes_inclus_dans_sejour,
montant_facture_0_actes_inclus_dans_sejour,
montant_facture_1_actes_inclus_dans_sejour,
montant_facture_2_actes_inclus_dans_sejour,
montant_facture_22_actes_inclus_dans_sejour,
origine_facturation_id,
montant_comptabilise_budget_global_1,
facture_id
FROM w_factures_lignes_sup_c_sup;
UPDATE activite[PX].p_factures_lignes_c
SET lieu_id = p_mouvements_sejour.lieu_id
FROM activite[PX].p_factures, activite[PX].p_mouvements_sejour
WHERE p_factures_lignes_c.no_facture = p_factures.no_facture AND
p_factures.no_sejour = p_mouvements_sejour.no_sejour AND
activite[PX].p_factures_lignes_c.date_debut = p_mouvements_sejour.date AND
(p_mouvements_sejour.heure_fin = 240000 OR p_mouvements_sejour.nb_sorties_directes = 1) AND
p_factures_lignes_c.lieu_id <> p_mouvements_sejour.lieu_id;
SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_3');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_4');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_c_5');
]]>
0
GROUP BY 1;
CREATE INDEX w_VENTIL_PAIEMENT_SALARIE_I1
ON w_VENTIL_PAIEMENT_SALARIE
USING btree
(no_facture);
UPDATE activite[PX].p_factures
SET
montant_regle_c = montant_regle_c + w_VENTIL_PAIEMENT_SALARIE.montant_regle,
montant_regle_h = montant_regle_h - w_VENTIL_PAIEMENT_SALARIE.montant_regle,
montant_regle_1_c = montant_regle_1_c + w_VENTIL_PAIEMENT_SALARIE.montant_regle_1,
montant_regle_1_h = montant_regle_1_h - w_VENTIL_PAIEMENT_SALARIE.montant_regle_1,
montant_regle_2_c = montant_regle_2_c + w_VENTIL_PAIEMENT_SALARIE.montant_regle_2,
montant_regle_2_h = montant_regle_2_h - w_VENTIL_PAIEMENT_SALARIE.montant_regle_2,
montant_regle_0_c = montant_regle_0_c + w_VENTIL_PAIEMENT_SALARIE.montant_regle_0,
montant_regle_0_h = montant_regle_0_h - w_VENTIL_PAIEMENT_SALARIE.montant_regle_0
FROM w_VENTIL_PAIEMENT_SALARIE
WHERE w_VENTIL_PAIEMENT_SALARIE.no_facture = p_factures.no_facture;
-- génération règlements
DROP TABLE IF EXISTS w_VENTIL_PAIEMENT_C;
CREATE TEMP TABLE w_VENTIL_PAIEMENT_C AS
SELECT
W_FACTURE_QSP.no_facture,
date(DT_VENT) AS date_comptable,
COALESCE(t_rubriques_facturation.oid,0) AS rubrique_comptabilisee_id,
COALESCE(t_prestations.oid,0) AS prestation_id,
0 AS montant_comptabilise,
0 AS montant_comptabilise_0,
0 AS montant_comptabilise_1,
0 AS montant_comptabilise_2,
0 AS montant_comptabilise_22,
SUM(DET_VENT.VERSE_CONV + DET_VENT.VERSE_DP) AS montant_regle,
SUM(CASE WHEN tiers = '3' THEN DET_VENT.VERSE_CONV + DET_VENT.VERSE_DP ELSE 0 END) AS montant_regle_0,
SUM(CASE WHEN tiers = '1' THEN DET_VENT.VERSE_CONV + DET_VENT.VERSE_DP ELSE 0 END) AS montant_regle_1,
SUM(CASE WHEN tiers = '2' THEN DET_VENT.VERSE_CONV + DET_VENT.VERSE_DP ELSE 0 END) AS montant_regle_2,
0 AS montant_regle_22
FROM prod_qsp.VENTIL_PAIEMENT
JOIN prod_qsp.DET_VENT ON VENTIL_PAIEMENT.PAIEMENT_LIG = DET_VENT.PAIEMENT_LIG
JOIN prod_qsp.SAISIE ON DET_VENT.N_SAISIE = SAISIE.N_SAISIE
JOIN W_FACTURE_QSP ON W_FACTURE_QSP.NUM_FACT = VENTIL_PAIEMENT.NUM_FACT
JOIN prod_qsp.PRESTATION ON SAISIE.CODE_PREST = PRESTATION.CODE_PREST
LEFT JOIN activite[PX].t_rubriques_facturation ON PRESTATION.CODE_PREST = t_rubriques_facturation.code_original
LEFT JOIN activite.t_prestations ON PRESTATION.CODE_NORM = t_prestations.code_original
LEFT JOIN activite[PX].t_medecins_administratifs ON SAISIE.C_PRAT = t_medecins_administratifs.code_original
WHERE (PRESTATION.TYPE_PREST <> 'H' OR COALESCE(t_medecins_administratifs.est_medecin_salarie,'0') = '1') AND
TRANS_CPTA <> 0
GROUP BY 1,2,3,4;
CREATE INDEX w_VENTIL_PAIEMENT_C_i1
ON w_VENTIL_PAIEMENT_C
USING btree
(no_facture, date_comptable, rubrique_comptabilisee_id, prestation_id);
INSERT INTO activite[PX].p_factures_soldes_c(
no_facture,
date_comptable,
rubrique_comptabilisee_id,
prestation_id,
montant_comptabilise,
montant_comptabilise_0,
montant_comptabilise_1,
montant_comptabilise_2,
montant_comptabilise_22,
montant_regle,
montant_regle_0,
montant_regle_1,
montant_regle_2,
montant_regle_22
)
SELECT
w_VENTIL_PAIEMENT_C.no_facture,
w_VENTIL_PAIEMENT_C.date_comptable,
w_VENTIL_PAIEMENT_C.rubrique_comptabilisee_id,
w_VENTIL_PAIEMENT_C.prestation_id,
0,
0,
0,
0,
0,
w_VENTIL_PAIEMENT_C.montant_regle,
w_VENTIL_PAIEMENT_C.montant_regle_0,
w_VENTIL_PAIEMENT_C.montant_regle_1,
w_VENTIL_PAIEMENT_C.montant_regle_2,
w_VENTIL_PAIEMENT_C.montant_regle_22
FROM w_VENTIL_PAIEMENT_C
WHERE w_VENTIL_PAIEMENT_C.date_comptable IS NOT NULL;
INSERT INTO activite[PX].p_factures_soldes_c(
no_facture,
date_comptable,
rubrique_comptabilisee_id,
prestation_id,
montant_comptabilise,
montant_comptabilise_0,
montant_comptabilise_1,
montant_comptabilise_2,
montant_comptabilise_22,
montant_regle,
montant_regle_0,
montant_regle_1,
montant_regle_2,
montant_regle_22,
od_avoir)
SELECT
p_factures_soldes_c.no_facture,
date_od_avoir,
rubrique_comptabilisee_id,
prestation_id,
0,
0,
0,
0,
0,
p_factures_soldes_c.montant_comptabilise,
p_factures_soldes_c.montant_comptabilise_0,
p_factures_soldes_c.montant_comptabilise_1,
p_factures_soldes_c.montant_comptabilise_2,
p_factures_soldes_c.montant_comptabilise_22,
'1'
FROM activite[PX].p_factures_soldes_c
JOIN w_ods_avoir ON p_factures_soldes_c.no_facture = w_ods_avoir.no_facture
WHERE p_factures_soldes_c.montant_comptabilise <> 0;
INSERT INTO activite[PX].p_factures_soldes_c(
no_facture,
date_comptable,
rubrique_comptabilisee_id,
prestation_id,
montant_comptabilise,
montant_comptabilise_0,
montant_comptabilise_1,
montant_comptabilise_2,
montant_comptabilise_22,
montant_regle,
montant_regle_0,
montant_regle_1,
montant_regle_2,
montant_regle_22,
od_avoir)
SELECT
p_factures_soldes_c.no_facture,
date_od_avoir,
rubrique_comptabilisee_id,
prestation_id,
0,
0,
0,
0,
0,
p_factures_soldes_c.montant_comptabilise,
p_factures_soldes_c.montant_comptabilise_0,
p_factures_soldes_c.montant_comptabilise_1,
p_factures_soldes_c.montant_comptabilise_2,
p_factures_soldes_c.montant_comptabilise_22,
'1'
FROM activite[PX].p_factures_soldes_c JOIN w_ods_avoir ON p_factures_soldes_c.no_facture = w_ods_avoir.no_facture_od_avoir
WHERE p_factures_soldes_c.montant_comptabilise <> 0;
SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_c_1');
-- Correction avoirs qui ne sont pas des od
DROP TABLE IF EXISTS w_factures_soldes_c_reg;
CREATE TEMP TABLE w_factures_soldes_c_reg AS
SELECT p_factures.no_sejour, p_factures.no_facture, no_facture_od_avoir,
SUM(montant_regle) AS montant_regle_s,
SUM(montant_regle_1) AS montant_regle_1_s,
SUM(montant_regle_2) AS montant_regle_2_s,
SUM(montant_regle_0) AS montant_regle_0_s,
MAX(p_factures.montant_regle_c) AS montant_regle_f ,
MAX(CASE WHEN od_avoir = '1' THEN date_comptable ELSE NULL END) AS date_comptable_s
FROM activite[PX].p_factures_soldes_c
JOIN activite[PX].p_factures ON p_factures_soldes_c.no_facture = p_factures.no_facture
GROUP BY 1,2,3
HAVING SUM(montant_regle) <> 0 AND SUM(montant_regle) = MAX(p_factures.montant_regle_c) * 2 ;
CREATE INDEX w_factures_soldes_c_reg_i1
ON w_factures_soldes_c_reg
USING btree
(no_facture);
UPDATE activite[PX].p_factures_soldes_c
SET montant_regle = 0,
montant_regle_1 = 0,
montant_regle_2 = 0,
montant_regle_0 = 0
FROM w_factures_soldes_c_reg
WHERE p_factures_soldes_c.no_facture = w_factures_soldes_c_reg.no_facture AND
p_factures_soldes_c.date_comptable = w_factures_soldes_c_reg.date_comptable_s AND
od_avoir = '1' AND
montant_regle_s = montant_regle_f * 2;
UPDATE activite[PX].p_factures_soldes_c
SET od_avoir = '0'
FROM w_factures_soldes_c_reg
WHERE p_factures_soldes_c.no_facture = w_factures_soldes_c_reg.no_facture_od_avoir AND
p_factures_soldes_c.date_comptable = w_factures_soldes_c_reg.date_comptable_s AND
od_avoir = '1' AND
montant_regle_s = montant_regle_f * 2;
-- Correction discordance total réglé / détail régle
DROP TABLE IF EXISTS w_factures_soldes_c_ecartreg;
CREATE TEMP TABLE w_factures_soldes_c_ecartreg AS
SELECT p_factures.no_sejour, p_factures.no_facture,
SUM(montant_regle) AS montant_regle_s,
SUM(montant_regle_1) AS montant_regle_1_s,
SUM(montant_regle_2) AS montant_regle_2_s,
SUM(montant_regle_0) AS montant_regle_0_s,
MAX(p_factures.montant_regle_c) AS montant_regle_f ,
MAX(p_factures.montant_regle_1_c) AS montant_regle_1_f ,
MAX(p_factures.montant_regle_2_c) AS montant_regle_2_f ,
MAX(p_factures.montant_regle_0_c) AS montant_regle_0_f ,
COALESCE(MAX(CASE WHEN montant_regle <> 0 THEN date_comptable ELSE NULL END),MAX(date_comptable)) AS date_comptable
FROM activite[PX].p_factures_soldes_c
JOIN activite[PX].p_factures ON p_factures_soldes_c.no_facture = p_factures.no_facture
GROUP BY 1,2
HAVING SUM(montant_regle) <> MAX(p_factures.montant_regle_c);
INSERT INTO activite[PX].p_factures_soldes_c(
no_facture,
date_comptable,
rubrique_comptabilisee_id,
prestation_id,
montant_comptabilise,
montant_comptabilise_0,
montant_comptabilise_1,
montant_comptabilise_2,
montant_comptabilise_22,
montant_regle,
montant_regle_0,
montant_regle_1,
montant_regle_2,
montant_regle_22
)
SELECT
no_facture,
date_comptable,
0::bigint AS rubrique_comptabilisee_id,
0::bigint AS prestation_id,
0,
0,
0,
0,
0,
montant_regle_f - montant_regle_s AS montant_regle,
montant_regle_1_f - montant_regle_1_s AS montant_regle_0,
montant_regle_2_f - montant_regle_2_s AS montant_regle_1,
montant_regle_0_f - montant_regle_0_s AS montant_regle_2,
0::numeric AS montant_regle_22
FROM w_factures_soldes_c_ecartreg
WHERE date_comptable IS NOT NULL;
SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_c_2');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_c_3');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_c_4');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_c_8');
]]>
'' AND t_actes.oid is NULL
GROUP BY 1;
DROP TABLE IF EXISTS W_FACT_LIGNE_H_1;
CREATE TEMP TABLE W_FACT_LIGNE_H_1 AS
SELECT
W_FACT_LIGNE.N_HOSPI,
date_vente,
lieu_id,
no_facture,
W_FACT_LIGNE.ETAT,
rubrique_facturation_id,
rubrique_comptabilisation_id,
prestation_id,
medecin_facture_id,
medecin_comptabilise_id,
acte_id,
extract('hour' FROM W_FACT_LIGNE.D_DEB) AS heure_debut,
W_FACT_LIGNE.PHASE_TRAIT AS phase_ccam,
W_FACT_LIGNE.CODE_ACTIV AS activite_ccam,
W_FACT_LIGNE.EXT_DOC AS extension_ccam,
W_FACT_LIGNE.MODIF_1 AS modificateur_ccam_1,
W_FACT_LIGNE.MODIF_2 AS modificateur_ccam_2,
W_FACT_LIGNE.MODIF_3 AS modificateur_ccam_3,
W_FACT_LIGNE.MODIF_4 AS modificateur_ccam_4,
date(W_FACT_LIGNE.D_DEB) AS date_debut,
date(W_FACT_LIGNE.D_DEB) AS date_fin,
CASE WHEN W_FACT_LIGNE.ETAT = 3 AND W_FACT_LIGNE.QTE > 0 THEN 0 - W_FACT_LIGNE.QTE
ELSE W_FACT_LIGNE.QTE END AS nb_rubrique,
CASE WHEN W_FACT_LIGNE.ETAT = 3 AND W_FACT_LIGNE.QTE > 0 THEN 0 - W_FACT_LIGNE.QTE
ELSE W_FACT_LIGNE.QTE END AS nb_prestations,
W_FACT_LIGNE.COEFF AS coefficient,
W_FACT_LIGNE.GRATUIT,
W_FACT_LIGNE.N_GHS,
W_FACT_LIGNE.COEFF_MCO AS coefficient_mco,
W_FACT_LIGNE.PU AS prix_unitaire,
CASE WHEN amc = 0 AND ass = 0 AND W_FACT_LIGNE.etat <> 3 THEN W_FACT_LIGNE.MT_DP
WHEN amc = 0 AND ass = 0 AND W_FACT_LIGNE.etat = 3 THEN 0 - W_FACT_LIGNE.MT_DP
ELSE 0 END AS montant_depassement,
W_FACT_LIGNE.TAUX AS taux_1,
0::numeric AS taux_2,
0::numeric AS taux_0,
W_FACT_LIGNE.AMO AS montant_facture,
W_FACT_LIGNE.AMO AS montant_facture_1,
0::numeric AS montant_facture_2,
0::numeric AS montant_facture_0,
CASE WHEN est_medecin_salarie <> '1' AND SOL_AMO <> 2 THEN W_FACT_LIGNE.AMO ELSE 0 END AS montant_comptabilise,
CASE WHEN est_medecin_salarie <> '1' AND SOL_AMO <> 2 THEN W_FACT_LIGNE.AMO ELSE 0 END AS montant_comptabilise_1,
0::numeric AS montant_comptabilise_2,
0::numeric AS montant_comptabilise_0,
W_FACT_LIGNE.ENC_AMO AS montant_regle_1,
0::numeric AS montant_regle_2,
0::numeric AS montant_regle_0
FROM W_FACT_LIGNE
WHERE NUM_FACT_AMO <> 0
AND W_FACT_LIGNE.TYPE_PREST = 'H' ;
DROP TABLE IF EXISTS W_FACT_LIGNE_H_2;
CREATE TEMP TABLE W_FACT_LIGNE_H_2 AS
SELECT
W_FACT_LIGNE.N_HOSPI,
W_FACT_LIGNE.date_vente AS date_vente,
W_FACT_LIGNE.lieu_id,
W_FACT_LIGNE.no_facture AS no_facture,
rubrique_facturation_id,
rubrique_comptabilisation_id,
prestation_id,
medecin_facture_id,
medecin_comptabilise_id,
acte_id,
extract('hour' FROM W_FACT_LIGNE.D_DEB) AS heure_debut,
W_FACT_LIGNE.PHASE_TRAIT AS phase_ccam,
W_FACT_LIGNE.CODE_ACTIV AS activite_ccam,
W_FACT_LIGNE.EXT_DOC AS extension_ccam,
W_FACT_LIGNE.MODIF_1 AS modificateur_ccam_1,
W_FACT_LIGNE.MODIF_2 AS modificateur_ccam_2,
W_FACT_LIGNE.MODIF_3 AS modificateur_ccam_3,
W_FACT_LIGNE.MODIF_4 AS modificateur_ccam_4,
date(W_FACT_LIGNE.D_DEB) AS date_debut,
date(W_FACT_LIGNE.D_FIN) AS date_fin,
CASE
WHEN AMO <> 0 THEN 0
WHEN W_FACT_LIGNE.ETAT = 3 AND W_FACT_LIGNE.QTE > 0 THEN 0 - W_FACT_LIGNE.QTE
ELSE W_FACT_LIGNE.QTE END AS nb_rubrique,
CASE
WHEN AMO <> 0 THEN 0
WHEN W_FACT_LIGNE.ETAT = 3 AND W_FACT_LIGNE.QTE > 0 THEN 0 - W_FACT_LIGNE.QTE
ELSE W_FACT_LIGNE.QTE END AS nb_prestations,
W_FACT_LIGNE.COEFF AS coefficient,
W_FACT_LIGNE.GRATUIT,
W_FACT_LIGNE.N_GHS,
W_FACT_LIGNE.COEFF_MCO AS coefficient_mco,
W_FACT_LIGNE.PU AS prix_unitaire,
CASE WHEN amc = 0 AND ass = 0 THEN 0
WHEN ass = 0 AND W_FACT_LIGNE.etat <> 3 THEN W_FACT_LIGNE.MT_DP
WHEN ass = 0 AND W_FACT_LIGNE.etat = 3 THEN 0 - W_FACT_LIGNE.MT_DP
ELSE 0 END AS montant_depassement,
0::numeric AS taux_1,
0::numeric AS taux_2,
0::numeric AS taux_0,
W_FACT_LIGNE.AMC AS montant_facture,
0::numeric AS montant_facture_1,
W_FACT_LIGNE.AMC AS montant_facture_2,
0::numeric AS montant_facture_0,
CASE WHEN est_medecin_salarie <> '1' AND SOL_AMC <> 2 THEN W_FACT_LIGNE.AMC ELSE 0 END AS montant_comptabilise,
0::numeric AS montant_comptabilise_1,
CASE WHEN est_medecin_salarie <> '1' AND SOL_AMC <> 2 THEN W_FACT_LIGNE.AMC ELSE 0 END AS montant_comptabilise_2,
0::numeric AS montant_comptabilise_0,
0::numeric AS montant_regle_1,
W_FACT_LIGNE.ENC_AMC AS montant_regle_2,
0::numeric AS montant_regle_0
FROM W_FACT_LIGNE
WHERE NUM_FACT_AMC <> 0
AND W_FACT_LIGNE.TYPE_PREST = 'H';
DROP TABLE IF EXISTS W_FACT_LIGNE_H_0;
CREATE TEMP TABLE W_FACT_LIGNE_H_0 AS
SELECT
W_FACT_LIGNE.N_HOSPI,
W_FACT_LIGNE.date_vente AS date_vente,
W_FACT_LIGNE.lieu_id,
W_FACT_LIGNE.no_facture AS no_facture,
rubrique_facturation_id,
rubrique_comptabilisation_id,
prestation_id,
medecin_facture_id,
medecin_comptabilise_id,
acte_id,
extract('hour' FROM W_FACT_LIGNE.D_DEB) AS heure_debut,
W_FACT_LIGNE.PHASE_TRAIT AS phase_ccam,
W_FACT_LIGNE.CODE_ACTIV AS activite_ccam,
W_FACT_LIGNE.EXT_DOC AS extension_ccam,
W_FACT_LIGNE.MODIF_1 AS modificateur_ccam_1,
W_FACT_LIGNE.MODIF_2 AS modificateur_ccam_2,
W_FACT_LIGNE.MODIF_3 AS modificateur_ccam_3,
W_FACT_LIGNE.MODIF_4 AS modificateur_ccam_4,
date(W_FACT_LIGNE.D_DEB) AS date_debut,
date(W_FACT_LIGNE.D_FIN) AS date_fin,
CASE
WHEN AMO <> 0 THEN 0
WHEN AMC <> 0 THEN 0
WHEN W_FACT_LIGNE.ETAT = 3 AND W_FACT_LIGNE.QTE > 0 THEN 0 - W_FACT_LIGNE.QTE
ELSE W_FACT_LIGNE.QTE END AS nb_rubrique,
CASE
WHEN AMO <> 0 THEN 0
WHEN AMC <> 0 THEN 0
WHEN W_FACT_LIGNE.ETAT = 3 AND W_FACT_LIGNE.QTE > 0 THEN 0 - W_FACT_LIGNE.QTE
ELSE W_FACT_LIGNE.QTE END AS nb_prestations,
W_FACT_LIGNE.COEFF AS coefficient,
W_FACT_LIGNE.GRATUIT,
W_FACT_LIGNE.N_GHS,
W_FACT_LIGNE.COEFF_MCO AS coefficient_mco,
W_FACT_LIGNE.PU AS prix_unitaire,
CASE WHEN amc = 0 AND ass = 0 THEN 0
WHEN ass = 0 THEN 0
WHEN W_FACT_LIGNE.etat <> 3 THEN W_FACT_LIGNE.MT_DP
WHEN W_FACT_LIGNE.etat = 3 THEN 0 - W_FACT_LIGNE.MT_DP
ELSE 0 END AS montant_depassement,
0::numeric AS taux_1,
0::numeric AS taux_2,
0::numeric AS taux_0,
W_FACT_LIGNE.ASS AS montant_facture,
0::numeric AS montant_facture_1,
0::numeric AS montant_facture_2,
W_FACT_LIGNE.ASS AS montant_facture_0,
CASE WHEN est_medecin_salarie <> '1' AND SOL_ASS <> 2 THEN W_FACT_LIGNE.ASS ELSE 0 END AS montant_comptabilise,
0::numeric AS montant_comptabilise_1,
0::numeric AS montant_comptabilise_2,
CASE WHEN est_medecin_salarie <> '1' AND SOL_ASS <> 2 THEN W_FACT_LIGNE.ASS ELSE 0 END AS montant_comptabilise_0,
0::numeric AS montant_regle_1,
0::numeric AS montant_regle_2,
W_FACT_LIGNE.ENC_ASS AS montant_regle_0
FROM W_FACT_LIGNE
WHERE NUM_FACT_ASS <> 0
AND TYPE_PREST = 'H';
SELECT base.cti_disable_index('activite[PX]', 'i_factures_lignes_h_1');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_lignes_h_2');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_lignes_h_3');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_lignes_h_4');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_lignes_h_5');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_lignes_h_6');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_lignes_h_7');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_lignes_h_8');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_lignes_h_9');
INSERT INTO activite[PX].p_factures_lignes_h(
no_facture,
date_debut,
date_fin,
nb_rubrique,
nb_prestation,
coefficient,
coefficient_mco,
medecin_facture_id,
medecin_comptabilise_id,
prestation_id,
rubrique_facturation_id,
rubrique_comptabilisation_id,
montant_facture,
montant_facture_0,
montant_facture_1,
montant_facture_2,
montant_facture_22,
montant_depassement,
taux_0,
taux_1,
taux_2,
taux_22,
prix_unitaire,
lieu_id,
montant_comptabilise,
montant_comptabilise_0,
montant_comptabilise_1,
montant_comptabilise_2,
montant_comptabilise_22,
montant_encours,
montant_encours_0,
montant_encours_1,
montant_encours_2,
montant_encours_22,
acte_id,
activite_ccam
)
SELECT
no_facture,
date_debut,
date_fin,
nb_rubrique,
nb_prestations,
coefficient,
coefficient_mco,
medecin_facture_id,
medecin_comptabilise_id,
prestation_id,
rubrique_facturation_id,
rubrique_comptabilisation_id,
montant_facture,
montant_facture_0,
montant_facture_1,
montant_facture_2,
0 AS montant_facture_22,
montant_depassement,
taux_0,
taux_1,
taux_2,
0 AS taux_22,
prix_unitaire,
lieu_id,
montant_comptabilise,
montant_comptabilise_0,
montant_comptabilise_1,
montant_comptabilise_2,
0 AS montant_comptabilise_22,
0,
0,
0,
0,
0,
acte_id,
activite_ccam
FROM W_FACT_LIGNE_H_1
UNION ALL
SELECT
no_facture,
date_debut,
date_fin,
nb_rubrique,
nb_prestations,
coefficient,
coefficient_mco,
medecin_facture_id,
medecin_comptabilise_id,
prestation_id,
rubrique_facturation_id,
rubrique_comptabilisation_id,
montant_facture,
montant_facture_0,
montant_facture_1,
montant_facture_2,
0 AS montant_facture_22,
montant_depassement,
taux_0,
taux_1,
taux_2,
0 AS taux_22,
prix_unitaire,
lieu_id,
montant_comptabilise,
montant_comptabilise_0,
montant_comptabilise_1,
montant_comptabilise_2,
0 AS montant_comptabilise_22,
0,
0,
0,
0,
0,
acte_id,
activite_ccam
FROM W_FACT_LIGNE_H_2
UNION ALL
SELECT
no_facture,
date_debut,
date_fin,
nb_rubrique,
nb_prestations,
coefficient,
coefficient_mco,
medecin_facture_id,
medecin_comptabilise_id,
prestation_id,
rubrique_facturation_id,
rubrique_comptabilisation_id,
montant_facture,
montant_facture_0,
montant_facture_1,
montant_facture_2,
0 AS montant_facture_22,
montant_depassement,
taux_0,
taux_1,
taux_2,
0 AS taux_22,
prix_unitaire,
lieu_id,
montant_comptabilise,
montant_comptabilise_0,
montant_comptabilise_1,
montant_comptabilise_2,
0 AS montant_comptabilise_22,
0,
0,
0,
0,
0,
acte_id,
activite_ccam
FROM W_FACT_LIGNE_H_0;
SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_h_1');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_h_2');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_h_3');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_h_4');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_h_5');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_h_6');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_h_7');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_h_8');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_lignes_h_9');
]]>
'1' AND
TRANS_CPTA <> 0
GROUP BY 1,2,3;
CREATE INDEX w_VENTIL_PAIEMENT_H_i1
ON w_VENTIL_PAIEMENT_H
USING btree
(no_facture, date_comptable, medecin_comptabilise_id);
INSERT INTO activite[PX].p_factures_soldes_h(
no_facture,
date_comptable,
medecin_comptabilise_id,
montant_comptabilise,
montant_comptabilise_0,
montant_comptabilise_1,
montant_comptabilise_2,
montant_comptabilise_22,
montant_regle,
montant_regle_0,
montant_regle_1,
montant_regle_2,
montant_regle_22
)
SELECT
w_VENTIL_PAIEMENT_H.no_facture,
w_VENTIL_PAIEMENT_H.date_comptable,
w_VENTIL_PAIEMENT_H.medecin_comptabilise_id,
0,
0,
0,
0,
0,
w_VENTIL_PAIEMENT_H.montant_regle,
w_VENTIL_PAIEMENT_H.montant_regle_0,
w_VENTIL_PAIEMENT_H.montant_regle_1,
w_VENTIL_PAIEMENT_H.montant_regle_2,
w_VENTIL_PAIEMENT_H.montant_regle_22
FROM w_VENTIL_PAIEMENT_H
WHERE w_VENTIL_PAIEMENT_H.date_comptable IS NOT NULL ;
INSERT INTO activite[PX].p_factures_soldes_h(
no_facture,
date_comptable,
medecin_comptabilise_id,
montant_comptabilise,
montant_comptabilise_0,
montant_comptabilise_1,
montant_comptabilise_2,
montant_comptabilise_22,
montant_regle,
montant_regle_0,
montant_regle_1,
montant_regle_2,
montant_regle_22,
od_avoir)
SELECT
p_factures_soldes_h.no_facture,
date_od_avoir,
medecin_comptabilise_id,
0,
0,
0,
0,
0,
p_factures_soldes_h.montant_comptabilise,
p_factures_soldes_h.montant_comptabilise_0,
p_factures_soldes_h.montant_comptabilise_1,
p_factures_soldes_h.montant_comptabilise_2,
p_factures_soldes_h.montant_comptabilise_22,
'1'
FROM activite[PX].p_factures_soldes_h JOIN w_ods_avoir ON p_factures_soldes_h.no_facture = w_ods_avoir.no_facture
WHERE p_factures_soldes_h.montant_comptabilise <> 0;
INSERT INTO activite[PX].p_factures_soldes_h(
no_facture,
date_comptable,
medecin_comptabilise_id,
montant_comptabilise,
montant_comptabilise_0,
montant_comptabilise_1,
montant_comptabilise_2,
montant_comptabilise_22,
montant_regle,
montant_regle_0,
montant_regle_1,
montant_regle_2,
montant_regle_22,
od_avoir)
SELECT
p_factures_soldes_h.no_facture,
date_od_avoir,
medecin_comptabilise_id,
0,
0,
0,
0,
0,
p_factures_soldes_h.montant_comptabilise,
p_factures_soldes_h.montant_comptabilise_0,
p_factures_soldes_h.montant_comptabilise_1,
p_factures_soldes_h.montant_comptabilise_2,
p_factures_soldes_h.montant_comptabilise_22,
'1'
FROM activite[PX].p_factures_soldes_h JOIN w_ods_avoir ON p_factures_soldes_h.no_facture = w_ods_avoir.no_facture_od_avoir
WHERE p_factures_soldes_h.montant_comptabilise <> 0;
SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_h_1');
-- Avoirs qui ne sont pas des OD
DROP TABLE IF EXISTS w_factures_soldes_h_reg;
CREATE TEMP TABLE w_factures_soldes_h_reg AS
SELECT p_factures.no_sejour, p_factures.no_facture, no_facture_od_avoir,
SUM(montant_regle) AS montant_regle_s,
SUM(montant_regle_1) AS montant_regle_1_s,
SUM(montant_regle_2) AS montant_regle_2_s,
SUM(montant_regle_0) AS montant_regle_0_s,
MAX(p_factures.montant_regle_h) AS montant_regle_f ,
MAX(CASE WHEN od_avoir = '1' THEN date_comptable ELSE NULL END) AS date_comptable_s
FROM activite[PX].p_factures_soldes_h
JOIN activite[PX].p_factures ON p_factures_soldes_h.no_facture = p_factures.no_facture
GROUP BY 1,2,3
HAVING SUM(montant_regle) <> 0 AND SUM(montant_regle) = MAX(p_factures.montant_regle_h) * 2 ;
CREATE INDEX w_factures_soldes_h_reg_i1
ON w_factures_soldes_h_reg
USING btree
(no_facture);
UPDATE activite[PX].p_factures_soldes_h
SET montant_regle = 0,
montant_regle_1 = 0,
montant_regle_2 = 0,
montant_regle_0 = 0
FROM w_factures_soldes_h_reg
WHERE p_factures_soldes_h.no_facture = w_factures_soldes_h_reg.no_facture AND
p_factures_soldes_h.date_comptable = w_factures_soldes_h_reg.date_comptable_s AND
od_avoir = '1' AND
montant_regle_s = montant_regle_f * 2;
UPDATE activite[PX].p_factures_soldes_h
SET od_avoir = '0'
FROM w_factures_soldes_h_reg
WHERE p_factures_soldes_h.no_facture = w_factures_soldes_h_reg.no_facture_od_avoir AND
p_factures_soldes_h.date_comptable = w_factures_soldes_h_reg.date_comptable_s AND
od_avoir = '1' AND
montant_regle_s = montant_regle_f * 2;
-- discordance total detail reglement
DROP TABLE IF EXISTS w_factures_soldes_h_reg;
CREATE TEMP TABLE w_factures_soldes_h_reg AS
SELECT p_factures.no_sejour, p_factures.no_facture, no_facture_od_avoir,
SUM(montant_regle) AS montant_regle_s,
SUM(montant_regle_1) AS montant_regle_1_s,
SUM(montant_regle_2) AS montant_regle_2_s,
SUM(montant_regle_0) AS montant_regle_0_s,
MAX(p_factures.montant_regle_h) AS montant_regle_f ,
MAX(CASE WHEN od_avoir = '1' THEN date_comptable ELSE NULL END) AS date_comptable_s
FROM activite[PX].p_factures_soldes_h
JOIN activite[PX].p_factures ON p_factures_soldes_h.no_facture = p_factures.no_facture
GROUP BY 1,2,3
HAVING SUM(montant_regle) <> MAX(p_factures.montant_regle_h);
CREATE INDEX w_factures_soldes_h_reg_i1
ON w_factures_soldes_h_reg
USING btree
(no_facture);
UPDATE activite[PX].p_factures SET
montant_regle_h = montant_regle_s,
montant_regle_1_h = montant_regle_1_s,
montant_regle_2_h = montant_regle_2_s,
montant_regle_0_h = montant_regle_0_s
FROM w_factures_soldes_h_reg
WHERE p_factures.no_facture = w_factures_soldes_h_reg.no_facture;
SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_h_3');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_h_4');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_h_8');
]]>
JN_VENTES THEN CREDIT - DEBIT ELSE 0 END) ,
0,
0,
0,
0
FROM prod_qsp.COMPTA_MVT
JOIN prod_qsp.ETABLISSEMENT ON ETABLISSEMENT.N_ETAB = COMPTA_MVT.N_ETAB
LEFT JOIN activite.t_divers ON t_divers.code = 'CHIFFIERCPTOMIT'
WHERE (N_CPT LIKE CPT_CL_SEJ_AMO || '%' OR
N_CPT LIKE CPT_CL_SEJ_AMC || '%' OR
N_CPT LIKE CPT_CL_SEJ_ASS || '%'
) AND
D_ECR >= '[ENV_ADM_ANNEEDEBUT]0101' AND
(C_JAL = JN_VENTES OR C_JAL = JN_ENC OR C_JAL = JN_CAI OR C_JAL = C_JAL_SEJ) AND
piece BETWEEN '1' AND '999999' AND
piece = piece_int AND
N_CPT <> ALL(string_to_array(t_divers.valeur,','))
GROUP BY 1
UNION ALL
SELECT
date(D_ECR),
SUM(CASE WHEN C_JAL = JN_VENTES THEN DEBIT - CREDIT ELSE 0 END) ,
SUM(CASE WHEN C_JAL <> JN_VENTES THEN CREDIT - DEBIT ELSE 0 END) ,
0,
0,
0,
0
FROM prod_qsp.COMPTA_MVT_HIST
JOIN prod_qsp.ETABLISSEMENT ON ETABLISSEMENT.N_ETAB = COMPTA_MVT_HIST.N_ETAB
LEFT JOIN activite.t_divers ON t_divers.code = 'CHIFFIERCPTOMIT'
WHERE (N_CPT LIKE CPT_CL_SEJ_AMO || '%' OR
N_CPT LIKE CPT_CL_SEJ_AMC || '%' OR
N_CPT LIKE CPT_CL_SEJ_ASS || '%'
) AND
D_ECR >= '[ENV_ADM_ANNEEDEBUT]0101' AND
(C_JAL = JN_VENTES OR C_JAL = JN_ENC OR C_JAL = JN_CAI OR C_JAL = C_JAL_SEJ) AND
piece BETWEEN '1' AND '999999' AND
piece = piece_int AND
N_CPT <> ALL(string_to_array(t_divers.valeur,','))
GROUP BY 1;
TRUNCATE activite[PX].p_factures_comptables;
INSERT INTO activite[PX].p_factures_comptables(
no_facture,
date_comptable,
montant_ventes_c,
montant_reglements_c,
montant_ventes_h,
montant_reglements_h)
SELECT
trim(to_char(to_number('0' || COALESCE(piece,''),'000000000'), '00000000')) AS no_facture,
date(D_ECR),
SUM(CASE WHEN C_JAL = JN_VENTES THEN DEBIT - CREDIT ELSE 0 END) ,
SUM(CASE WHEN C_JAL <> JN_VENTES THEN CREDIT - DEBIT ELSE 0 END) ,
0,
0
FROM prod_qsp.COMPTA_MVT
JOIN prod_qsp.ETABLISSEMENT ON ETABLISSEMENT.N_ETAB = COMPTA_MVT.N_ETAB
LEFT JOIN activite.t_divers ON t_divers.code = 'CHIFFIERCPTOMIT'
WHERE (N_CPT LIKE CPT_CL_SEJ_AMO || '%' OR
N_CPT LIKE CPT_CL_SEJ_AMC || '%' OR
N_CPT LIKE CPT_CL_SEJ_ASS || '%'
) AND
D_ECR >= '[ENV_ADM_ANNEEDEBUT]0101' AND
(C_JAL = JN_VENTES OR C_JAL = JN_ENC OR C_JAL = JN_CAI OR C_JAL = C_JAL_SEJ) AND
piece BETWEEN '1' AND '999999' AND
piece = piece_int AND
N_CPT <> ALL(string_to_array(t_divers.valeur,','))
GROUP BY 1,2
UNION ALL
SELECT
trim(to_char(to_number('0' || COALESCE(piece,''),'000000000'), '00000000')) AS no_facture,
date(D_ECR),
SUM(CASE WHEN C_JAL = JN_VENTES THEN DEBIT - CREDIT ELSE 0 END) ,
SUM(CASE WHEN C_JAL <> JN_VENTES THEN CREDIT - DEBIT ELSE 0 END) ,
0,
0
FROM prod_qsp.COMPTA_MVT_HIST
JOIN prod_qsp.ETABLISSEMENT ON ETABLISSEMENT.N_ETAB = COMPTA_MVT_HIST.N_ETAB
LEFT JOIN activite.t_divers ON t_divers.code = 'CHIFFIERCPTOMIT'
WHERE (N_CPT LIKE CPT_CL_SEJ_AMO || '%' OR
N_CPT LIKE CPT_CL_SEJ_AMC || '%' OR
N_CPT LIKE CPT_CL_SEJ_ASS || '%'
) AND
D_ECR >= '[ENV_ADM_ANNEEDEBUT]0101' AND
(C_JAL = JN_VENTES OR C_JAL = JN_ENC OR C_JAL = JN_CAI OR C_JAL = C_JAL_SEJ) AND
piece BETWEEN '1' AND '999999' AND
piece = piece_int AND
N_CPT <> ALL(string_to_array(t_divers.valeur,','))
GROUP BY 1,2;
]]>
10 THEN trim(substr(NOM_PRATICIEN, 1, strpos(NOM_PRATICIEN, '*')-1)) ELSE NOM_PRATICIEN END) AS NOM_PRATICIEN_SOUNDEX,
''::text AS PRENOM_PRATICIEN_SOUNDEX,
NOM_PRATICIEN,
''::text AS PRENOM_PRATICIEN,
COALESCE(NUMID,'') AS NUMID,
TRIM(to_char(SPECIALITE,'00')) AS SPECIALITE,
COALESCE(t_medecins_administratifs.medecin_id,0) as medecin_id
FROM prod_qsp.DPRATICIEN
LEFT JOIN activite[PX].t_medecins_administratifs ON C_PRAT = t_medecins_administratifs.code_original
WHERE C_PRAT = ANY(ARRAY(
SELECT MEDSUIV::text FROM prod_qsp.DOSSIER
UNION
SELECT C_PRAT::text FROM prod_qsp.SAISIE
GROUP BY 1)::text[]
);
UPDATE w_medecins SET NOM_PRATICIEN_SOUNDEX = NOM_PRATICIEN WHERE NOM_PRATICIEN_SOUNDEX = '';
INSERT INTO base.t_medecins(nom, prenom, numero_ordre, specialite_id,code)
SELECT w_medecins.NOM_PRATICIEN, w_medecins.PRENOM_PRATICIEN, w_medecins.NUMID, 0, w_medecins.C_PRAT_ORIGINAL FROM
(SELECT SUBSTR(NOM_PRATICIEN_SOUNDEX, 1, 8) AS NOM_PRATICIEN_SOUNDEX,
SUBSTR(PRENOM_PRATICIEN_SOUNDEX, 1, 8) AS PRENOM_PRATICIEN_SOUNDEX,
NUMID,
C_PRAT_ORIGINAL
FROM w_medecins
GROUP BY 1,2,3,4) subview, w_medecins
WHERE w_medecins.C_PRAT_ORIGINAL = subview.C_PRAT_ORIGINAL
AND w_medecins.NUMID <> ''
AND substr(subview.NOM_PRATICIEN_SOUNDEX,1,8) || ',' || substr(subview.PRENOM_PRATICIEN_SOUNDEX,1,8) || ',' || subview.NUMID || ',' ||subview.C_PRAT_ORIGINAL NOT IN
(SELECT substr(base.cti_soundex_nom(nom),1,8) || ',' || substr(base.cti_soundex_nom(prenom),1,8) || ',' || numero_ordre|| ',' || code FROM base.t_medecins);
INSERT INTO base.t_medecins(nom, prenom, numero_ordre, specialite_id)
SELECT w_medecins.NOM_PRATICIEN, w_medecins.PRENOM_PRATICIEN, w_medecins.NUMID, 0 FROM
(SELECT NOM_PRATICIEN_SOUNDEX, PRENOM_PRATICIEN_SOUNDEX, MIN(C_PRAT_ORIGINAL) AS MEDE_ID_MEDE
FROM w_medecins
GROUP BY 1,2) subview, w_medecins
WHERE w_medecins.C_PRAT_ORIGINAL = subview.MEDE_ID_MEDE
AND subview.NOM_PRATICIEN_SOUNDEX || ',' || subview.PRENOM_PRATICIEN_SOUNDEX NOT IN
(SELECT base.cti_soundex_nom(nom) || ',' || base.cti_soundex_nom(prenom) FROM base.t_medecins);;
UPDATE w_medecins SET medecin_id = subview.medecin_id
FROM
(SELECT substr(base.cti_soundex_nom(nom),1,8) as nom , substr(base.cti_soundex_nom(prenom),1,8) as prenom, numero_ordre, MIN(oid) AS medecin_id FROM base.t_medecins GROUP BY 1,2,3) subview
WHERE SUBSTR(NOM_PRATICIEN_SOUNDEX, 1, 8) = SUBSTR(subview.nom,1,8)
AND SUBSTR(PRENOM_PRATICIEN_SOUNDEX, 1, 8) = SUBSTR(subview.prenom,1,8)
AND NUMID = subview.numero_ordre
AND NUMID <> ''
AND w_medecins.medecin_id = 0;
UPDATE w_medecins SET medecin_id = subview.medecin_id
FROM
(SELECT base.cti_soundex_nom(nom) as nom , base.cti_soundex_nom(prenom) as prenom, MIN(oid) AS medecin_id FROM base.t_medecins GROUP BY 1,2) subview
WHERE NOM_PRATICIEN_SOUNDEX = subview.nom
AND PRENOM_PRATICIEN_SOUNDEX = subview.prenom
AND w_medecins.medecin_id = 0;
INSERT INTO activite[PX].t_medecins_administratifs(code_original, code, nom, prenom, specialite_id, medecin_id)
SELECT DISTINCT C_PRAT_ORIGINAL, C_PRAT, NOM_PRATICIEN, PRENOM_PRATICIEN, COALESCE(t_specialites_medecin.oid,0), medecin_id
FROM w_medecins
LEFT JOIN base.t_specialites_medecin ON (SPECIALITE = t_specialites_medecin.code_original)
WHERE C_PRAT_ORIGINAL NOT IN (SELECT code_original FROM activite[PX].t_medecins_administratifs);
UPDATE activite[PX].t_medecins_administratifs
SET nom = NOM_PRATICIEN,
prenom = PRENOM_PRATICIEN,
specialite_id = COALESCE(t_specialites_medecin.oid,0),
medecin_id = w_medecins.medecin_id
FROM w_medecins LEFT JOIN base.t_specialites_medecin ON (SPECIALITE = t_specialites_medecin.code_original)
WHERE w_medecins.C_PRAT_ORIGINAL = t_medecins_administratifs.code_original
AND (
t_medecins_administratifs.nom <> NOM_PRATICIEN OR
t_medecins_administratifs.prenom <> PRENOM_PRATICIEN OR
t_medecins_administratifs.specialite_id <> COALESCE(t_specialites_medecin.oid,0) OR
t_medecins_administratifs.medecin_id <> w_medecins.medecin_id
);
UPDATE base.t_medecins SET specialite_id = subview.specialite_id FROM
(SELECT t_medecins.oid, MIN(t_medecins_administratifs.specialite_id) as specialite_id
FROM base.t_medecins, activite[PX].t_medecins_administratifs , base.t_specialites_medecin
WHERE t_medecins.oid = t_medecins_administratifs.medecin_id
AND t_medecins_administratifs.specialite_id = t_specialites_medecin.oid
GROUP BY t_medecins.oid) subview
WHERE t_medecins.oid = subview.oid AND t_medecins.oid <> 0 AND t_medecins.specialite_id = 0
;
-- NO ADELI
UPDATE activite[PX].t_medecins_administratifs
SET no_adeli = NUMID
FROM prod_qsp.DPRATICIEN
WHERE t_medecins_administratifs.code_original = C_PRAT AND
t_medecins_administratifs.NO_ADELI IS DISTINCT FROM NUMID
;
]]>
'0' AND
NUM_LIT NOT IN (SELECT NUM_LIT FROM prod_qsp.DLIT) AND
UPPER(NUM_LIT) IN (SELECT NUM_LIT FROM prod_qsp.DLIT) AND
UPPER(NUM_LIT) <> NUM_LIT
;
-- Etage = service si parametre QSP_MDT_SERVICE = 1
UPDATE cti_histolit
SET C_SECT = C_SERV
FROM activite.t_divers
WHERE t_divers.code = 'QSP_MDT_SERVICE' AND t_divers.valeur = '1'
;
-- Etage non renseigné, prendre le max par service et chambre
UPDATE cti_histolit
SET C_SECT = C_SECT_DEFAULT
FROM
(
SELECT C_SERV, NUM_CHAMBRE, (MAX(Array[to_char(nb,'FM000000000'),C_SECT]))[2] AS C_SECT_DEFAULT
FROM
(
SELECT C_SERV,NUM_CHAMBRE,C_SECT,count(*) aS nb
FROM cti_histolit
WHERE C_SECT <> '' AND NUM_LIT <> '0' AND
NUM_CHAMBRE IN (SELECT NUM_CHAMBRE FROM cti_histolit WHERE C_SECT = '')
GROUP BY 1,2,3
ORDER BY 1,2,4 DESC
) subview
GROUP BY 1,2
) subview
WHERE cti_histolit.C_SERV = subview.C_SERV AND
cti_histolit.NUM_CHAMBRE = subview.NUM_CHAMBRE AND
cti_histolit.C_SECT = '' AND
cti_histolit.NUM_LIT <> '0'
;
-- Etage non renseigné, prendre le max par service (si significatif = 95%)
UPDATE cti_histolit
SET C_SECT = C_SECT_DEFAULT, TRANSF_QSP = 'T'
FROM
(
SELECT C_SERV, (MAX(Array[to_char(nb,'FM000000000'),C_SECT]))[2] AS C_SECT_DEFAULT, MAX(nb) / SUM(nb)
FROM
(
SELECT C_SERV,C_SECT,count(*) aS nb
FROM cti_histolit
WHERE C_SECT <> '' AND NUM_LIT <> '0' AND NUM_LIT <> ''
GROUP BY 1,2
ORDER BY 1,3 DESC
) subview
GROUP BY 1
HAVING MAX(nb) / SUM(nb) >= 0.95
) subview
WHERE cti_histolit.C_SERV = subview.C_SERV AND
cti_histolit.C_SECT = '' AND
cti_histolit.NUM_LIT <> '0' AND
cti_histolit.NUM_LIT <> ''
;
DROP TABLE IF EXISTS w_DSERVICE;
CREATE TEMP TABLE w_DSERVICE AS
SELECT
DSERVICE.C_SERV::text || CASE WHEN t_divers.valeur = '1' THEN '_'::text || lpad(DOSSIER.MODE_TRAIT, 2, '0') ELSE ''::text END as C_SERV
,CASE WHEN t_divers.valeur = '1' THEN lpad(DOSSIER.MODE_TRAIT, 2, '0') ELSE lpad(DSERVICE.N_TRAIT, 2, '0') END as MODE_TRAIT
,DSERVICE.L_DSERVICE || CASE WHEN t_divers.valeur = '1' THEN ' (' || lpad(DOSSIER.MODE_TRAIT, 2, '0') || ')' ELSE ''::text END as L_DSERVICE
,DSERVICE.C_SERV as C_UF
,DSERVICE.PMSI_SERV
,DSERVICE.NB_LITS
,DSERVICE.N_TRAIT
,DSERVICE.N_DIS
,DSERVICE.L_DSERVICE AS L_DUF
FROM
cti_histolit
JOIN prod_QSP.DOSSIER ON DOSSIER.NDOSSIER = cti_histolit.NDOSSIER
AND DOSSIER.N_CLINI = cti_histolit.N_CLINI
JOIN prod_QSP.DSERVICE ON DSERVICE.C_SERV = cti_histolit.C_SERV
AND DSERVICE.N_CLINI = cti_histolit.N_CLINI,
activite.t_divers
WHERE t_divers.code = 'QSP_MDT_SERVICE'
GROUP BY 1,2,3,4,5,6,7,8,9
ORDER BY 1;
-- Modes de traitement
INSERT INTO base.t_modes_traitement(code, texte, texte_court)
SELECT trim(to_char(n_trait,'00')), libelle, libelle FROM prod_qsp.MODE_TRAIT
WHERE trim(to_char(n_trait,'00')) NOT IN (SELECt code FROM base.t_modes_traitement);
INSERT INTO base.t_modes_traitement(oid, code, texte, texte_court)
SELECT 0, '**', 'Non renseigné', 'Non renseigné'
WHERE 0 NOT IN (SELECT oid FROM base.t_modes_traitement);
-- DMT
INSERT INTO base.t_dmt(code, texte, texte_court)
SELECT trim(to_char(n_dis,'000')), libelle, libelle FROM prod_qsp.discipline
WHERE n_dis <> 0 AND trim(to_char(n_dis,'000')) NOT IN (SELECt code FROM base.t_dmt);
INSERT INTO base.t_dmt(oid, code, texte, texte_court)
SELECT 0, '***', 'Non renseignée', 'Non renseignée'
WHERE 0 NOT IN (SELECT oid FROM base.t_dmt);
-- Services
INSERT INTO activite[PX].t_services_facturation(oid, code_original, code, texte, texte_court)
SELECT 0, 0, '****', 'Non renseigné', 'Non renseigné' WHERE 0 NOT IN (SELECt oid FROM activite[PX].t_services_facturation);
INSERT INTO activite[PX].t_services_facturation(code_original, code, texte, texte_court, type_t2a, nb_lits, mode_traitement_id, dmt_id)
SELECT
w_DSERVICE.C_SERV,
substr(translate(w_DSERVICE.C_SERV,' ',''),1,10),
w_DSERVICE.L_DSERVICE,
w_DSERVICE.L_DSERVICE,
CASE WHEN w_DSERVICE.PMSI_SERV <> '' THEN '1' ELSE '0' END,
w_DSERVICE.NB_LITS,
COALESCE(t_modes_traitement.oid,0),
COALESCE(t_dmt.oid,0)
FROM
w_DSERVICE
LEFT JOIN base.t_modes_traitement ON t_modes_traitement.code = w_DSERVICE.MODE_TRAIT
LEFT JOIN base.t_dmt ON (t_dmt.code = trim(to_char(w_DSERVICE.N_DIS,'000')))
LEFT JOIN activite[PX].t_services_facturation ON t_services_facturation.code_original = w_DSERVICE.C_SERV
WHERE t_services_facturation.code_original IS NULL;
-- Unités fonctionnelles
INSERT INTO activite[PX].t_unites_fonctionnelles(oid, code_original, code, texte, texte_court)
SELECT 0, 0, '', 'Non renseignée', 'Non renseignée' WHERE 0 NOT IN (SELECt oid FROM activite[PX].t_unites_fonctionnelles);
INSERT INTO activite[PX].t_unites_fonctionnelles(code_original, code, texte, texte_court)
SELECT w_DSERVICE.C_UF, substr(translate(C_UF,' ',''),1,10) , w_DSERVICE.L_DUF, w_DSERVICE.L_DUF
FROM w_DSERVICE
LEFT JOIN base.t_modes_traitement ON (t_modes_traitement.code = trim(to_char(w_DSERVICE.N_TRAIT,'00')))
LEFT JOIN base.t_dmt ON (t_dmt.code = trim(to_char(w_DSERVICE.N_DIS,'000')))
LEFT JOIN activite[PX].t_unites_fonctionnelles ON t_unites_fonctionnelles.code_original = w_DSERVICE.C_UF
WHERE t_unites_fonctionnelles.code_original IS NULL
GROUP BY 1,2,3,4;
-- Unités médicales
INSERT INTO activite[PX].t_unites_medicales(oid, code_original, code, texte, texte_court)
SELECT 0, 0, '', 'Non renseignée', 'Non renseignée' WHERE 0 NOT IN (SELECt oid FROM activite[PX].t_unites_medicales);
INSERT INTO activite[PX].t_unites_medicales(code_original, code, texte, texte_court)
SELECT C_SERV, C_SERV, LIBELLE, LIBELLE
FROM prod_qsp.PMSI_SERVICE
WHERE C_SERV NOT IN (SELECT code_original FROM activite[PX].t_unites_medicales);
-- Activités
INSERT INTO activite[PX].t_activites(oid, code_original, code, texte, texte_court)
SELECT 0, 0, '', 'Non renseignée', 'Non renseignée' WHERE 0 NOT IN (SELECt oid FROM activite[PX].t_activites);
-- Etages et lits
INSERT INTO activite[PX].t_etages(oid, code_original, code, texte, texte_court, nb_lits)
SELECT 0, 0, '', 'Non renseigné', 'Non renseigné', 0 WHERE 0 NOT IN (SELECT oid FROM activite[PX].t_etages);
INSERT INTO activite[PX].t_etages(code_original, code, texte, texte_court)
SELECT C_SECT, C_SECT, NOM_SECT, NOM_SECT
FROM prod_qsp.SECTEUR
WHERE C_SECT NOT IN (SELECT code_original FROM activite[PX].t_etages);
INSERT INTO activite[PX].t_etages(code_original, code, texte, texte_court)
SELECT C_SERV, C_SERV, LIBELLE, LIBELLE
FROM prod_qsp.PMSI_SERVICE
WHERE C_SERV NOT IN (SELECT code_original FROM activite[PX].t_etages);
DELETE FROM activite[PX].t_lits WHERE code_original IS NULL;
INSERT INTO activite[PX].t_lits(code_original, code, texte, texte_court, etage_id, chambre_particuliere)
SELECT CASE WHEN C_SECT <> '' THEN COALESCE(C_SECT, C_SERV) ELSE C_SERV END || '|' || NUM_LIT, NUM_LIT, NUM_LIT, NUM_LIT, COALESCE(t_etages.oid,0), CASE WHEN SEULE = 'O' THEN 'O' ELSE 'N' END
FROM prod_qsp.DLIT
LEFT JOIN activite[PX].t_etages ON C_SECT = t_etages.code_original
WHERE CASE WHEN C_SECT <> '' THEN COALESCE(C_SECT, C_SERV) ELSE C_SERV END || '|' || NUM_LIT NOT IN (SELECT code_original FROM activite[PX].t_lits);
INSERT INTO activite[PX].t_lits(code_original, code, texte, texte_court, etage_id, chambre_particuliere)
SELECT t_etages.code_original || '|' , '****', 'Non renseigné', 'Non renseigné', t_etages.oid, 'N'
FROM activite[PX].t_etages
WHERE t_etages.code_original <> '' AND (t_etages.code_original || '|') NOT IN (SELECT code_original FROM activite[PX].t_lits);
UPDATE activite[PX].t_lits SET code = '*****' WHERE code = '';
]]>
''*''
GROUP BY 1
HAVING count(*) > 1
) subview
WHERE PRESTATION.CODE_PREST = subview.CODE_PREST AND
PRESTATION.CTID = DELCTID',10);
-- Rubriques et prestations
INSERT INTO activite[PX].t_rubriques_facturation(oid, code_original, code, texte, texte_court)
SELECT 0, 0, '', 'Non renseignée', 'Non renseignée' WHERE 0 NOT IN (SELECT oid FROM activite[PX].t_rubriques_facturation);
INSERT INTO activite[PX].t_rubriques_facturation(code_original, code, texte, texte_court)
SELECT CODE_PREST, CODE_PREST, LIBELLE, LIBELLE
FROM prod_qsp.PRESTATION
WHERE TYPE_PREST <> '*' AND
CODE_PREST <> '' AND
CODE_PREST NOT IN (SELECT code_original FROM activite[PX].t_rubriques_facturation)
ORDER BY CODE_PREST;
-- Mise à jour préalable du code original si absent ain d'éviter les erreurs de contrainte d'unicité sur la requête d'insertion suivante
UPDATE activite[PX].t_prestations SET
code_original = CODE_NORM
FROM
prod_qsp.PRESTATION
WHERE 1=1
AND t_prestations.code = PRESTATION.CODE_NORM
AND TYPE_PREST <> '*'
AND CODE_NORM <> ''
AND t_prestations.code_original IS NULL;
INSERT INTO activite[PX].t_prestations(code_original, code, texte, texte_court)
SELECT CODE_NORM, CODE_NORM,
TRIM(MAX(CASE WHEN CODE_NORM = CODE_PREST AND LIBELLE <> '' THEN LIBELLE ELSE ' ' || CODE_NORM END)),
TRIM(MAX(CASE WHEN CODE_NORM = CODE_PREST AND LIBELLE <> '' THEN LIBELLE ELSE ' ' || CODE_NORM END))
FROM prod_qsp.PRESTATION
WHERE TYPE_PREST <> '*' AND
CODE_NORM NOT IN (SELECT code_original FROM activite[PX].t_prestations WHERE oid <> 0 AND code_original IS NOT NULL) AND
CODE_NORM <> ''
GROUP BY 1,2
ORDER BY 1;
INSERT INTO activite[PX].t_prestations(code_original, code, texte, texte_court)
SELECT CODE_PREST, CODE_PREST,
TRIM(MAX(CASE WHEN CODE_NORM = CODE_PREST AND LIBELLE <> '' THEN LIBELLE ELSE ' ' || CODE_NORM END)),
TRIM(MAX(CASE WHEN CODE_NORM = CODE_PREST AND LIBELLE <> '' THEN LIBELLE ELSE ' ' || CODE_NORM END))
FROM prod_qsp.PRESTATION
WHERE TYPE_PREST <> '*' AND
CODE_PREST <> '' AND
COALESCE(CODE_NORM,'') = '' AND CODE_PREST NOT IN (SELECT code_original FROM activite[PX].t_prestations WHERE oid <> 0 AND code_original IS NOT NULL) AND
CODE_PREST <> ''
GROUP BY 1,2
ORDER BY 1;
-- Comptes
INSERT INTO activite[PX].t_compte(oid, code_original, code, texte, texte_court)
SELECT 0, 0, '', 'Non renseigné', 'Non renseigné' WHERE 0 NOT IN (SELECt oid FROM activite[PX].t_compte);
INSERT INTO activite[PX].t_compte(code_original, code, texte, texte_court)
SELECT N_CPT, N_CPT, MAX(LIB_CPT), MAX(LIB_CPT)
FROM prod_qsp.PLAN_C
JOIN prod_qsp.PRESTATION ON N_CPT = COMPTE::text
WHERE N_CPT <> '' AND N_CPT NOT IN (SELECT code FROM activite[PX].t_compte)
GROUP BY 1
ORDER BY 1;
INSERT INTO activite[PX].t_compte(code_original, code, texte, texte_court)
SELECT N_CPT, N_CPT, MAX(LIB_CPT), MAX(LIB_CPT)
FROM prod_qsp.PLAN_C
JOIN prod_qsp.PRESTATION_DISCIPLINE ON N_CPT = COMPTE::text
WHERE N_CPT <> '' AND N_CPT NOT IN (SELECT code FROM activite[PX].t_compte)
GROUP BY 1
ORDER BY 1;
INSERT INTO activite[PX].t_compte(code_original, code, texte, texte_court)
SELECT N_CPT, N_CPT, MAX(LIB_CPT), MAX(LIB_CPT)
FROM prod_qsp.PLAN_C
JOIN prod_qsp.PRESTATION_GHS ON N_CPT = COMPTE::text
WHERE N_CPT <> '' AND N_CPT NOT IN (SELECT code FROM activite[PX].t_compte)
GROUP BY 1
ORDER BY 1;
INSERT INTO activite[PX].t_compte(code_original, code, texte, texte_court)
SELECT N_CPT, N_CPT, MAX(LIB_CPT), MAX(LIB_CPT)
FROM prod_qsp.PLAN_C
JOIN prod_qsp.PRESTATION_GHS_GHS ON N_CPT = COMPTE::text
WHERE N_CPT <> '' AND N_CPT NOT IN (SELECT code FROM activite[PX].t_compte)
GROUP BY 1
ORDER BY 1;
INSERT INTO activite[PX].t_compte(code_original, code, texte, texte_court)
SELECT COMPTE, COMPTE, COMPTE, COMPTE
FROM prod_qsp.PRESTATION
WHERE COMPTE <> 0 AND to_char(COMPTE,'FM999999999') NOT IN (SELECT code FROM activite[PX].t_compte)
GROUP BY 1
ORDER BY 1;
INSERT INTO activite[PX].t_compte(code_original, code, texte, texte_court)
SELECT COMPTE, COMPTE, COMPTE, COMPTE
FROM prod_qsp.PRESTATION_GHS_GHS
WHERE COMPTE <> '' AND COMPTE NOT IN (SELECT code FROM activite[PX].t_compte)
GROUP BY 1
ORDER BY 1;
]]>
'PJ' THEN t_prestations.code ELSE 'PJS' END AS prestation_mcode,
type_valorisation_non_facture
FROM activite[PX].p_factures_lignes_c
JOIN activite[PX].t_lieux ON lieu_id = t_lieux.oid
JOIN activite[PX].t_services_facturation ON t_services_facturation.oid = service_facturation_id
JOIN activite.t_prestations ON prestation_id = t_prestations.oid
WHERE date_fin >= '20170701' AND
date_debut >= '20170701' AND
type_t2a = '2' AND
prestation_id = ANY (SELECT to_id FROM activite.t_listes_contenu JOIN activite.t_listes ON liste_id = t_listes.oid AND t_listes.code = 'DMAP_MFS') AND
montant_comptabilise <> 0 AND
montant_comptabilise_1 <> 0 AND
round(prix_unitaire * nb_prestation,2) <> montant_comptabilise AND
abs(round(prix_unitaire * nb_prestation,2)) <> abs(montant_comptabilise)+(nb_prestation*18)
ORDER BY no_facture, prestation_id
;
-- Calcul tarif plein
UPDATE w_moins10 SET
montant_facture_1 =
CASE WHEN prestation_code = 'PJ' OR type_valorisation_non_facture = 'PJ' THEN round(prix_unitaire * nb_prestation * taux_1 / 100,2) - montant_fj
ELSE round(prix_unitaire * nb_prestation * taux_1 / 100,2) END,
montant_facture =
CASE WHEN prestation_code = 'PJ' OR type_valorisation_non_facture = 'PJ' THEN round(prix_unitaire * nb_prestation * taux_1 / 100,2) - montant_fj
ELSE round(prix_unitaire * nb_prestation * taux_1 / 100,2) END +
(montant_facture_2+montant_facture_22+montant_facture_0)
;
-- Génération prestations spécifiques
INSERT INTO activite.t_prestations (code, texte, texte_court)
SELECT prestation_mcode, t_prestations.texte || ' (-10%)', t_prestations.texte || ' (-10%)'
FROM w_moins10
JOIN activite.t_prestations on prestation_id = t_prestations.oid
WHERE prestation_mcode NOT IN (SELECT code FROM activite.t_prestations WHERE code IS NOT NULL)
GROUP BY 1,2,3
;
-- Maj tarif plein
UPDATE activite[PX].p_factures_lignes_c
SET montant_facture = w_moins10.montant_facture, montant_facture_1 = w_moins10.montant_facture_1
FROM w_moins10
WHERE p_factures_lignes_c.CTID = w_moins10.CTID_orig;
;
-- Génération -10%
UPDATE w_moins10 SET
nb_rubrique = 0,
montant_facture = montant_comptabilise - montant_facture,
montant_facture_1 = montant_comptabilise_1 - montant_facture_1,
montant_facture_2 = montant_comptabilise_2 - montant_facture_2,
montant_facture_22 = montant_comptabilise_22 - montant_facture_22,
montant_facture_0 = montant_comptabilise_0 - montant_facture_0,
montant_comptabilise = 0,
montant_comptabilise_1 = 0,
montant_comptabilise_2 = 0,
montant_comptabilise_22 = 0,
montant_comptabilise_0 = 0,
prestation_id = t_prestations.oid
FROM activite.t_prestations
WHERE t_prestations.code = prestation_mcode
;
ALTER TABLE w_moins10 DROP COLUMN CTID_orig;
ALTER TABLE w_moins10 DROP COLUMN montant_fj;
ALTER TABLE w_moins10 DROP COLUMN prestation_code;
ALTER TABLE w_moins10 DROP COLUMN prestation_mcode;
ALTER TABLE w_moins10 DROP COLUMN type_valorisation_non_facture;
INSERT INTO activite[PX].p_factures_lignes_c
SELECT *
FROM w_moins10
WHERE montant_facture <> 0
;
SELECT activite[PX].cti_reorganize_rubrique_facture_c('activite[PX].p_factures_lignes_c');
]]>
''
GROUP BY 1,2,3
;
INSERT INTO activite[PX].t_medecins_traitants_administratifs(code_original, code, nom, prenom, specialite_id, no_rpps)
SELECT
MED_TRAIT_CODE,
MED_TRAIT_CODE,
MAX(MED_TRAIT_NOM),
MAX(MED_TRAIT_PREN),
0,
''
FROM w_CORRESPONDANTS
LEFT JOIN activite[PX].t_medecins_traitants_administratifs ON
MED_TRAIT_CODE = t_medecins_traitants_administratifs.code_original
WHERE t_medecins_traitants_administratifs.oid IS NULL
GROUP BY 1
;
UPDATE w_CORRESPONDANTS
SET medecin_cti_id = t_medecins_traitants_administratifs.oid
FROM activite[PX].t_medecins_traitants_administratifs
WHERE t_medecins_traitants_administratifs.code_original = MED_TRAIT_CODE
;
DROP TABLE IF EXISTS w_sejours;
CREATE TEMP TABLE w_sejours AS
SELECT no_sejour,
date_entree,
p_sejours.no_patient,
p_patients.nom,
''::text AS MED_TRAIT_NOM,
''::text AS MED_TRAIT_PREN
FROM activite[PX].p_sejours
JOIN activite[PX].p_patients ON p_sejours.no_patient = p_patients.no_patient
;
UPDATE w_sejours
SET MED_TRAIT_NOM = HOSPI.MED_TRAIT_NOM,
MED_TRAIT_PREN = HOSPI.MED_TRAIT_PREN
FROM prod_QSP.HOSPI
WHERE to_char(N_HOSPI,'FM999999999') = no_sejour AND
date(HOSPI.DATE_ENTREE) = w_sejours.date_entree AND
HOSPI.MED_TRAIT_NOM <> ''
;
UPDATE activite[PX].p_sejours
SET medecin_traitant_id = medecin_cti_id
FROM w_sejours
JOIN w_CORRESPONDANTS ON w_sejours.MED_TRAIT_NOM = w_CORRESPONDANTS.MED_TRAIT_NOM AND
w_sejours.MED_TRAIT_PREN = w_CORRESPONDANTS.MED_TRAIT_PREN
WHERE p_sejours.no_sejour = w_sejours.no_sejour AND
w_sejours.MED_TRAIT_NOM <> '' AND
medecin_cti_id <> 0
;
-- ajout des coordonnées par séjour
INSERT INTO activite[PX].p_coordonnees_patient (
sejour_id,
adresse,
code_postal_id,
commune,
telephone_fixe,
telephone_portable,
email
)
SELECT
p_sejours.oid,
ADR1_PAT || CASE WHEN ADR2_PAT != '' THEN ' - ' || ADR2_PAT ELSE '' END,
COALESCE(t_codes_postaux.oid,0),
VIL_PAT,
TEL1_PAT,
TEL2_PAT,
EMAIL
FROM activite[PX].p_sejours
LEFT JOIN prod_qsp.PATIENT ON no_patient = PATIENT.NPATIENT
LEFT JOIN base.t_codes_postaux ON t_codes_postaux.code = CPO_PAT
;
-- Transferts
DROP TABLE IF EXISTS w_PROVENANCE;
CREATE TEMP TABLE w_PROVENANCE AS
SELECT SEQ_PROV, N_FINESS, LIB_PROV, CPO, ''::text AS A_FINESS, 0::bigint AS provenance_id
FROM prod_qsp.PROVENANCE
WHERE N_FINESS > 0 AND SEQ_PROV IN (SELECT HOSPI.SEQ_PROV FROM prod_qsp.HOSPI)
;
UPDATE w_PROVENANCE
SET A_FINESS = N_FINESS
WHERE N_FINESS BETWEEN 100000000 AND 999999999
;
UPDATE w_PROVENANCE
SET A_FINESS = '0'||N_FINESS
WHERE N_FINESS BETWEEN 10000000 AND 99999999 AND
CPO LIKE '0%' AND
substr(CPO,2,1) = SUBSTR(N_FINESS,1,1)
;
INSERT INTO base.t_etablissements(code, texte, texte_court)
SELECT A_FINESS, MIN(LIB_PROV), MIN(LIB_PROV)
FROM w_PROVENANCE
WHERE A_FINESS <> '' AND
A_FINESS NOT IN (SELECT code FROM base.t_etablissements WHERE code IS NOT NULL)
GROUP BY 1
;
UPDATE base.t_etablissements SET
texte = subview.texte,
texte_court = subview.texte
FROM
(
SELECT A_FINESS, MIN(LIB_PROV) AS texte
FROM w_PROVENANCE
WHERE A_FINESS <> '' AND LIB_PROV <> ''
GROUP BY 1
) subview
WHERE t_etablissements.code = A_FINESS AND
(
t_etablissements.texte = t_etablissements.code OR
t_etablissements.texte = ''
)
;
UPDATE w_PROVENANCE
SET provenance_id = t_etablissements.oid
FROM base.t_etablissements
WHERE A_FINESS = t_etablissements.code AND
A_FINESS <> ''
;
DROP TABLE IF EXISTS w_DESTINATION;
CREATE TEMP TABLE w_DESTINATION AS
SELECT SEQ_DEST, N_FINESS, LIB_DEST, CPO, ''::text AS A_FINESS, 0::bigint AS destination_id
FROM prod_qsp.DESTINATION
WHERE N_FINESS > 0 AND SEQ_DEST IN (SELECT HOSPI.SEQ_DEST FROM prod_qsp.HOSPI)
;
UPDATE w_DESTINATION
SET A_FINESS = N_FINESS
WHERE N_FINESS BETWEEN 100000000 AND 999999999
;
UPDATE w_DESTINATION
SET A_FINESS = '0'||N_FINESS
WHERE N_FINESS BETWEEN 10000000 AND 99999999 AND
CPO LIKE '0%' AND
substr(CPO,2,1) = SUBSTR(N_FINESS,1,1)
;
INSERT INTO base.t_etablissements(code, texte, texte_court)
SELECT A_FINESS, MIN(LIB_DEST), MIN(LIB_DEST)
FROM w_DESTINATION
WHERE A_FINESS <> '' AND
A_FINESS NOT IN (SELECT code FROM base.t_etablissements WHERE code IS NOT NULL)
GROUP BY 1
;
UPDATE base.t_etablissements SET
texte = subview.texte,
texte_court = subview.texte
FROM
(
SELECT A_FINESS, MIN(LIB_DEST) AS texte
FROM w_DESTINATION
WHERE A_FINESS <> '' AND
LIB_DEST <> ''
GROUP BY 1
) subview
WHERE t_etablissements.code = A_FINESS AND
(
t_etablissements.texte = t_etablissements.code OR
t_etablissements.texte = ''
)
;
UPDATE w_DESTINATION
SET destination_id = t_etablissements.oid
FROM base.t_etablissements
WHERE A_FINESS = t_etablissements.code AND
A_FINESS <> ''
;
INSERT INTO activite[PX].p_sejours_transferts (sejour_id, provenance_id, destination_id)
SELECT p_sejours.oid, MAX(COALESCE(provenance_id,0)), MAX(COALESCE(destination_id,0))
FROM prod_QSP.HOSPI
JOIN activite.p_sejours ON N_HOSPI = p_sejours.code_original
LEFT JOIN w_PROVENANCE ON HOSPI.SEQ_PROV = w_PROVENANCE.SEQ_PROV AND provenance_id > 0
LEFT JOIN w_DESTINATION ON HOSPI.SEQ_DEST = w_DESTINATION.SEQ_DEST AND destination_id > 0
WHERE p_sejours.oid NOT IN (SELECT p_sejours_transferts.sejour_id FROM activite[PX].p_sejours_transferts) AND
(
provenance_id > 0 OR
destination_id > 0
)
GROUP BY 1
;
]]>
CASE WHEN montant_comptabilise_0_c = 0 THEN '00010101' WHEN montant_comptabilise_0_c = montant_regle_0_c THEN date_solde_0_c ELSE '20991231' END OR
date_solde_0_h <> CASE WHEN montant_comptabilise_0_h = 0 THEN '00010101' WHEN montant_comptabilise_0_h = montant_regle_0_h THEN date_solde_0_h ELSE '20991231' END OR
date_solde_1_c <> CASE WHEN montant_comptabilise_1_c = 0 THEN '00010101' WHEN montant_comptabilise_1_c = montant_regle_1_c THEN date_solde_1_c ELSE '20991231' END OR
date_solde_1_h <> CASE WHEN montant_comptabilise_1_h = 0 THEN '00010101' WHEN montant_comptabilise_1_h = montant_regle_1_h THEN date_solde_1_h ELSE '20991231' END OR
date_solde_2_c <> CASE WHEN montant_comptabilise_2_c = 0 THEN '00010101' WHEN montant_comptabilise_2_c = montant_regle_2_c THEN date_solde_2_c ELSE '20991231' END OR
date_solde_2_h <> CASE WHEN montant_comptabilise_2_h = 0 THEN '00010101' WHEN montant_comptabilise_2_h = montant_regle_2_h THEN date_solde_2_h ELSE '20991231' END OR
date_solde_22_c <> CASE WHEN montant_comptabilise_22_c = 0 THEN '00010101' WHEN montant_comptabilise_22_c = montant_regle_22_c THEN date_solde_22_c ELSE '20991231' END OR
date_solde_22_h <> CASE WHEN montant_comptabilise_22_h = 0 THEN '00010101' WHEN montant_comptabilise_22_h = montant_regle_22_h THEN date_solde_22_h ELSE '20991231' END
);
DROP TABLE IF EXISTS w_factures_soldes;
CREATE TEMP TABLE w_factures_soldes AS
SELECT
no_facture,
GREATEST(date_solde_0_c, date_solde_0_h, date_solde_1_c, date_solde_1_h, date_solde_2_c, date_solde_2_h, date_solde_22_c, date_solde_22_h) AS date_solde,
GREATEST(date_solde_0_c, date_solde_1_c, date_solde_2_c, date_solde_22_c) AS date_solde_c,
GREATEST(date_solde_0_h, date_solde_1_h, date_solde_2_h, date_solde_22_h) AS date_solde_h
FROM activite[PX].p_factures;
CREATE INDEX i_factures_soldes_1
ON w_factures_soldes
USING btree
(no_facture);
UPDATE activite[PX].p_factures
SET
date_solde = w_factures_soldes.date_solde,
date_solde_c = w_factures_soldes.date_solde_c,
date_solde_h = w_factures_soldes.date_solde_h
FROM w_factures_soldes
WHERE p_factures.no_facture = w_factures_soldes.no_facture AND
(
p_factures.date_solde IS DISTINCT FROM w_factures_soldes.date_solde OR
p_factures.date_solde_c IS DISTINCT FROM w_factures_soldes.date_solde_c OR
p_factures.date_solde_h IS DISTINCT FROM w_factures_soldes.date_solde_h
);
DROP TABLE IF EXISTS w_factures_references_soldes;
CREATE TEMP TABLE w_factures_references_soldes AS
SELECT
no_facture_reference,
MAX(date_solde) AS date_solde_reference,
MAX(date_solde_c) AS date_solde_reference_c,
MAX(date_solde_h) AS date_solde_reference_h,
MAX(date_solde_0_c) AS date_solde_reference_0_c,
MAX(date_solde_0_h) AS date_solde_reference_0_h,
MAX(date_solde_1_c) AS date_solde_reference_1_c,
MAX(date_solde_1_h) AS date_solde_reference_1_h,
MAX(date_solde_2_c) AS date_solde_reference_2_c,
MAX(date_solde_2_h) AS date_solde_reference_2_h,
MAX(date_solde_22_c) AS date_solde_reference_22_c,
MAX(date_solde_22_h) AS date_solde_reference_22_h
FROM activite[PX].p_factures
GROUP BY no_facture_reference;
CREATE INDEX i_factures_references_soldes_1
ON w_factures_references_soldes
USING btree
(no_facture_reference);
UPDATE activite[PX].p_factures
SET
date_solde_reference = w_factures_references_soldes.date_solde_reference,
date_solde_reference_c = w_factures_references_soldes.date_solde_reference_c,
date_solde_reference_h = w_factures_references_soldes.date_solde_reference_h,
date_solde_reference_0_c = w_factures_references_soldes.date_solde_reference_0_c,
date_solde_reference_0_h = w_factures_references_soldes.date_solde_reference_0_h,
date_solde_reference_1_c = w_factures_references_soldes.date_solde_reference_1_c,
date_solde_reference_1_h = w_factures_references_soldes.date_solde_reference_1_h,
date_solde_reference_2_c = w_factures_references_soldes.date_solde_reference_2_c,
date_solde_reference_2_h = w_factures_references_soldes.date_solde_reference_2_h,
date_solde_reference_22_c = w_factures_references_soldes.date_solde_reference_22_c,
date_solde_reference_22_h = w_factures_references_soldes.date_solde_reference_22_h
FROM w_factures_references_soldes
WHERE p_factures.no_facture_reference = w_factures_references_soldes.no_facture_reference
AND (
p_factures.date_solde_reference IS DISTINCT FROM w_factures_references_soldes.date_solde_reference OR
p_factures.date_solde_reference_c IS DISTINCT FROM w_factures_references_soldes.date_solde_reference_c OR
p_factures.date_solde_reference_h IS DISTINCT FROM w_factures_references_soldes.date_solde_reference_h OR
p_factures.date_solde_reference_0_c IS DISTINCT FROM w_factures_references_soldes.date_solde_reference_0_c OR
p_factures.date_solde_reference_0_h IS DISTINCT FROM w_factures_references_soldes.date_solde_reference_0_h OR
p_factures.date_solde_reference_1_c IS DISTINCT FROM w_factures_references_soldes.date_solde_reference_1_c OR
p_factures.date_solde_reference_1_h IS DISTINCT FROM w_factures_references_soldes.date_solde_reference_1_h OR
p_factures.date_solde_reference_2_c IS DISTINCT FROM w_factures_references_soldes.date_solde_reference_2_c OR
p_factures.date_solde_reference_2_h IS DISTINCT FROM w_factures_references_soldes.date_solde_reference_2_h OR
p_factures.date_solde_reference_22_c IS DISTINCT FROM w_factures_references_soldes.date_solde_reference_22_c OR
p_factures.date_solde_reference_22_h IS DISTINCT FROM w_factures_references_soldes.date_solde_reference_22_h
);
DELETE
FROM activite[PX].p_factures_lignes_c
USING activite[PX].p_factures
WHERE p_factures_lignes_c.no_facture = p_factures.no_facture AND
code_facture = '1' AND montant_facture_c = 0 AND montant_comptabilise_c = 0 AND
taux_0 + taux_1 + taux_2 + taux_22 = 0 AND
p_factures_lignes_c.montant_facture = 0 AND
p_factures_lignes_c.montant_comptabilise = 0
;
]]>
'2099-12-31';
DROP TABLE IF EXISTS w_sejours_total;
CREATE TEMP TABLE w_sejours_total AS
SELECT
p_sejours.no_sejour AS no_sejour,
MAX(COALESCE(p_factures.date_facture,'20991231')) AS date_facture,
MAX(COALESCE(p_factures.date_expedition,'20991231')) AS date_expedition,
MAX(COALESCE(p_factures.date_solde,'20991231')) AS date_solde,
SUM(COALESCE(p_factures.montant_facture_c,0)) AS montant_facture_c,
SUM(COALESCE(p_factures.montant_facture_h,0)) AS montant_facture_h,
SUM(COALESCE(p_factures.montant_regle_c,0)) AS montant_regle_c,
SUM(COALESCE(p_factures.montant_regle_h,0)) AS montant_regle_h,
SUM(COALESCE(CASE WHEN p_factures.type_facture <> 'P' AND p_factures.type_facture <> 'E' AND p_factures.type_facture <> 'G' THEN 1 ELSE 0 END,0)) AS nb_factures,
SUM(COALESCE(CASE WHEN p_factures.type_facture = '0' THEN 0 ELSE 1 END,0)) AS nb_factures_regularisation,
SUM(COALESCE(p_factures.nb_rejets,0)) AS nb_rejets,
SUM(COALESCE(p_factures.montant_facture_0_c,0)) AS montant_facture_0_c,
SUM(COALESCE(p_factures.montant_facture_0_h,0)) AS montant_facture_0_h,
SUM(COALESCE(p_factures.montant_regle_0_c,0)) AS montant_regle_0_c,
SUM(COALESCE(p_factures.montant_regle_0_h,0)) AS montant_regle_0_h,
MAX(COALESCE(CASE WHEN (p_factures.montant_facture_0_c <> 0 OR p_factures.montant_facture_0_h <> 0) THEN p_factures.date_expedition_0 ELSE '0001-01-01' END,'20991231' )) AS date_expedition_0,
MAX(COALESCE(CASE WHEN p_factures.date_solde_0_c < '2099-12-31' AND p_factures.date_solde_0_c > p_factures.date_solde_0_h THEN p_factures.date_solde_0_c ELSE p_factures.date_solde_0_h END,'20991231' )) AS date_solde_0,
SUM(COALESCE(p_factures.montant_facture_1_c,0)) AS montant_facture_1_c,
SUM(COALESCE(p_factures.montant_facture_1_h,0)) AS montant_facture_1_h,
SUM(COALESCE(p_factures.montant_regle_1_c,0)) AS montant_regle_1_c,
SUM(COALESCE(p_factures.montant_regle_1_h,0)) AS montant_regle_1_h,
MAX(COALESCE(CASE WHEN (p_factures.montant_facture_1_c <> 0 OR p_factures.montant_facture_1_h <> 0) THEN p_factures.date_expedition_1 ELSE '0001-01-01' END,'20991231' )) AS date_expedition_1,
MAX(COALESCE(CASE WHEN p_factures.date_solde_1_c < '2099-12-31' AND p_factures.date_solde_1_c > p_factures.date_solde_1_h THEN p_factures.date_solde_1_c ELSE p_factures.date_solde_1_h END,'20991231' )) AS date_solde_1,
SUM(COALESCE(p_factures.montant_facture_2_c,0)) AS montant_facture_2_c,
SUM(COALESCE(p_factures.montant_facture_2_h,0)) AS montant_facture_2_h,
SUM(COALESCE(p_factures.montant_regle_2_c,0)) AS montant_regle_2_c,
SUM(COALESCE(p_factures.montant_regle_2_h,0)) AS montant_regle_2_h,
MAX(COALESCE(CASE WHEN (p_factures.montant_facture_2_c <> 0 OR p_factures.montant_facture_2_h <> 0) THEN p_factures.date_expedition_2 ELSE '0001-01-01' END,'20991231' )) AS date_expedition_2,
MAX(COALESCE(CASE WHEN p_factures.date_solde_2_c < '2099-12-31' AND p_factures.date_solde_2_c > p_factures.date_solde_2_h THEN p_factures.date_solde_2_c ELSE p_factures.date_solde_2_h END,'20991231' )) AS date_solde_2,
SUM(COALESCE(p_factures.montant_facture_22_c,0)) AS montant_facture_22_c,
SUM(COALESCE(p_factures.montant_facture_22_h,0)) AS montant_facture_22_h,
SUM(COALESCE(p_factures.montant_regle_22_c,0)) AS montant_regle_22_c,
SUM(COALESCE(p_factures.montant_regle_22_h,0)) AS montant_regle_22_h,
MAX(COALESCE(CASE WHEN (p_factures.montant_facture_22_c <> 0 OR p_factures.montant_facture_22_h <> 0) THEN p_factures.date_expedition_22 ELSE '0001-01-01' END,'20991231' )) AS date_expedition_22,
MAX(COALESCE(CASE WHEN p_factures.date_solde_22_c < '2099-12-31' AND p_factures.date_solde_22_c > p_factures.date_solde_22_h THEN p_factures.date_solde_22_c ELSE p_factures.date_solde_22_h END,'20991231' )) AS date_solde_22 ,
SUM(COALESCE(p_factures.montant_comptabilise_c,0)) AS montant_comptabilise_c,
SUM(COALESCE(p_factures.montant_comptabilise_h,0)) AS montant_comptabilise_h,
SUM(COALESCE(p_factures.montant_comptabilise_0_c,0)) AS montant_comptabilise_0_c,
SUM(COALESCE(p_factures.montant_comptabilise_0_h,0)) AS montant_comptabilise_0_h,
SUM(COALESCE(p_factures.montant_comptabilise_1_c,0)) AS montant_comptabilise_1_c,
SUM(COALESCE(p_factures.montant_comptabilise_1_h,0)) AS montant_comptabilise_1_h,
SUM(COALESCE(p_factures.montant_comptabilise_2_c,0)) AS montant_comptabilise_2_c,
SUM(COALESCE(p_factures.montant_comptabilise_2_h,0)) AS montant_comptabilise_2_h,
SUM(COALESCE(p_factures.montant_comptabilise_22_c,0)) AS montant_comptabilise_22_c,
SUM(COALESCE(p_factures.montant_comptabilise_22_h,0)) AS montant_comptabilise_22_h,
SUM(COALESCE(p_factures.montant_comptabilise_budget_global_c,0)) AS montant_comptabilise_budget_global_c,
SUM(COALESCE(p_factures.montant_facture_c_actes_inclus_dans_sejour,0)) AS montant_facture_c_actes_inclus_dans_sejour,
SUM(COALESCE(p_factures.montant_facture_h_actes_inclus_dans_sejour,0)) AS montant_facture_h_actes_inclus_dans_sejour
FROM activite[PX].p_sejours LEFT JOIN activite[PX].p_factures ON p_sejours.no_sejour = p_factures.no_sejour AND type_facture <> 'P'
GROUP BY p_sejours.no_sejour;
ALTER TABLE w_sejours_total ADD CONSTRAINT w_sejours_total_pkey PRIMARY KEY(no_sejour);
UPDATE activite[PX].p_sejours SET
date_facture = w_sejours_total.date_facture,
date_expedition = w_sejours_total.date_expedition,
date_solde = w_sejours_total.date_solde,
montant_facture_c = w_sejours_total.montant_facture_c,
montant_facture_h = w_sejours_total.montant_facture_h,
montant_regle_c = w_sejours_total.montant_regle_c,
montant_regle_h = w_sejours_total.montant_regle_h,
nb_factures = w_sejours_total.nb_factures,
nb_factures_regularisation = w_sejours_total.nb_factures_regularisation,
nb_factures_rejet = w_sejours_total.nb_rejets,
montant_facture_0_c = w_sejours_total.montant_facture_0_c,
montant_facture_0_h = w_sejours_total.montant_facture_0_h,
montant_regle_0_c = w_sejours_total.montant_regle_0_c,
montant_regle_0_h = w_sejours_total.montant_regle_0_h,
date_expedition_0 = CASE WHEN w_sejours_total.date_expedition_0 <> '0001-01-01' THEN w_sejours_total.date_expedition_0 ELSE '2099-12-31' END,
date_solde_0 = w_sejours_total.date_solde_0,
montant_facture_1_c = w_sejours_total.montant_facture_1_c,
montant_facture_1_h = w_sejours_total.montant_facture_1_h,
montant_regle_1_c = w_sejours_total.montant_regle_1_c,
montant_regle_1_h = w_sejours_total.montant_regle_1_h,
date_expedition_1 = CASE WHEN w_sejours_total.date_expedition_1 <> '0001-01-01' THEN w_sejours_total.date_expedition_1 ELSE '2099-12-31' END,
date_solde_1 = w_sejours_total.date_solde_1,
montant_facture_2_c = w_sejours_total.montant_facture_2_c,
montant_facture_2_h = w_sejours_total.montant_facture_2_h,
montant_regle_2_c = w_sejours_total.montant_regle_2_c,
montant_regle_2_h = w_sejours_total.montant_regle_2_h,
date_expedition_2 = CASE WHEN w_sejours_total.date_expedition_2 <> '0001-01-01' THEN w_sejours_total.date_expedition_2 ELSE '2099-12-31' END,
date_solde_2 = w_sejours_total.date_solde_2,
montant_facture_22_c = w_sejours_total.montant_facture_22_c,
montant_facture_22_h = w_sejours_total.montant_facture_22_h,
montant_regle_22_c = w_sejours_total.montant_regle_22_c,
montant_regle_22_h = w_sejours_total.montant_regle_22_h,
date_expedition_22 = CASE WHEN w_sejours_total.date_expedition_22 <> '0001-01-01' THEN w_sejours_total.date_expedition_22 ELSE '2099-12-31' END,
date_solde_22 = w_sejours_total.date_solde_22,
montant_comptabilise_c = w_sejours_total.montant_comptabilise_c,
montant_comptabilise_h = w_sejours_total.montant_comptabilise_h,
montant_comptabilise_0_c = w_sejours_total.montant_comptabilise_0_c,
montant_comptabilise_0_h = w_sejours_total.montant_comptabilise_0_h,
montant_comptabilise_1_c = w_sejours_total.montant_comptabilise_1_c,
montant_comptabilise_1_h = w_sejours_total.montant_comptabilise_1_h,
montant_comptabilise_2_c = w_sejours_total.montant_comptabilise_2_c,
montant_comptabilise_2_h = w_sejours_total.montant_comptabilise_2_h,
montant_comptabilise_22_c = w_sejours_total.montant_comptabilise_22_c,
montant_comptabilise_22_h = w_sejours_total.montant_comptabilise_22_h,
montant_comptabilise_budget_global_c = w_sejours_total.montant_comptabilise_budget_global_c,
montant_facture_c_actes_inclus_dans_sejour = w_sejours_total.montant_facture_c_actes_inclus_dans_sejour,
montant_facture_h_actes_inclus_dans_sejour = w_sejours_total.montant_facture_h_actes_inclus_dans_sejour
FROM w_sejours_total
WHERE w_sejours_total.no_sejour = p_sejours.no_sejour
AND (
p_sejours.date_facture IS DISTINCT FROM w_sejours_total.date_facture OR
p_sejours.date_expedition IS DISTINCT FROM w_sejours_total.date_expedition OR
p_sejours.date_solde IS DISTINCT FROM w_sejours_total.date_solde OR
p_sejours.montant_facture_c IS DISTINCT FROM w_sejours_total.montant_facture_c OR
p_sejours.montant_facture_h IS DISTINCT FROM w_sejours_total.montant_facture_h OR
p_sejours.montant_regle_c IS DISTINCT FROM w_sejours_total.montant_regle_c OR
p_sejours.montant_regle_h IS DISTINCT FROM w_sejours_total.montant_regle_h OR
p_sejours.nb_factures IS DISTINCT FROM w_sejours_total.nb_factures OR
p_sejours.nb_factures_regularisation IS DISTINCT FROM w_sejours_total.nb_factures_regularisation OR
p_sejours.nb_factures_rejet IS DISTINCT FROM w_sejours_total.nb_rejets OR
p_sejours.montant_facture_0_c IS DISTINCT FROM w_sejours_total.montant_facture_0_c OR
p_sejours.montant_facture_0_h IS DISTINCT FROM w_sejours_total.montant_facture_0_h OR
p_sejours.montant_regle_0_c IS DISTINCT FROM w_sejours_total.montant_regle_0_c OR
p_sejours.montant_regle_0_h IS DISTINCT FROM w_sejours_total.montant_regle_0_h OR
p_sejours.date_expedition_0 IS DISTINCT FROM CASE WHEN w_sejours_total.date_expedition_0 <> '0001-01-01' THEN w_sejours_total.date_expedition_0 ELSE '2099-12-31' END OR
p_sejours.date_solde_0 IS DISTINCT FROM w_sejours_total.date_solde_0 OR
p_sejours.montant_facture_1_c IS DISTINCT FROM w_sejours_total.montant_facture_1_c OR
p_sejours.montant_facture_1_h IS DISTINCT FROM w_sejours_total.montant_facture_1_h OR
p_sejours.montant_regle_1_c IS DISTINCT FROM w_sejours_total.montant_regle_1_c OR
p_sejours.montant_regle_1_h IS DISTINCT FROM w_sejours_total.montant_regle_1_h OR
p_sejours.date_expedition_1 IS DISTINCT FROM CASE WHEN w_sejours_total.date_expedition_1 <> '0001-01-01' THEN w_sejours_total.date_expedition_1 ELSE '2099-12-31' END OR
p_sejours.date_solde_1 IS DISTINCT FROM w_sejours_total.date_solde_1 OR
p_sejours.montant_facture_2_c IS DISTINCT FROM w_sejours_total.montant_facture_2_c OR
p_sejours.montant_facture_2_h IS DISTINCT FROM w_sejours_total.montant_facture_2_h OR
p_sejours.montant_regle_2_c IS DISTINCT FROM w_sejours_total.montant_regle_2_c OR
p_sejours.montant_regle_2_h IS DISTINCT FROM w_sejours_total.montant_regle_2_h OR
p_sejours.date_expedition_2 IS DISTINCT FROM CASE WHEN w_sejours_total.date_expedition_2 <> '0001-01-01' THEN w_sejours_total.date_expedition_2 ELSE '2099-12-31' END OR
p_sejours.date_solde_2 IS DISTINCT FROM w_sejours_total.date_solde_2 OR
p_sejours.montant_facture_22_c IS DISTINCT FROM w_sejours_total.montant_facture_22_c OR
p_sejours.montant_facture_22_h IS DISTINCT FROM w_sejours_total.montant_facture_22_h OR
p_sejours.montant_regle_22_c IS DISTINCT FROM w_sejours_total.montant_regle_22_c OR
p_sejours.montant_regle_22_h IS DISTINCT FROM w_sejours_total.montant_regle_22_h OR
p_sejours.date_expedition_22 IS DISTINCT FROM CASE WHEN w_sejours_total.date_expedition_22 <> '0001-01-01' THEN w_sejours_total.date_expedition_22 ELSE '2099-12-31' END OR
p_sejours.date_solde_22 IS DISTINCT FROM w_sejours_total.date_solde_22 OR
p_sejours.montant_comptabilise_c IS DISTINCT FROM w_sejours_total.montant_comptabilise_c OR
p_sejours.montant_comptabilise_h IS DISTINCT FROM w_sejours_total.montant_comptabilise_h OR
p_sejours.montant_comptabilise_0_c IS DISTINCT FROM w_sejours_total.montant_comptabilise_0_c OR
p_sejours.montant_comptabilise_0_h IS DISTINCT FROM w_sejours_total.montant_comptabilise_0_h OR
p_sejours.montant_comptabilise_1_c IS DISTINCT FROM w_sejours_total.montant_comptabilise_1_c OR
p_sejours.montant_comptabilise_1_h IS DISTINCT FROM w_sejours_total.montant_comptabilise_1_h OR
p_sejours.montant_comptabilise_2_c IS DISTINCT FROM w_sejours_total.montant_comptabilise_2_c OR
p_sejours.montant_comptabilise_2_h IS DISTINCT FROM w_sejours_total.montant_comptabilise_2_h OR
p_sejours.montant_comptabilise_22_c IS DISTINCT FROM w_sejours_total.montant_comptabilise_22_c OR
p_sejours.montant_comptabilise_22_h IS DISTINCT FROM w_sejours_total.montant_comptabilise_22_h OR
p_sejours.montant_comptabilise_budget_global_c IS DISTINCT FROM w_sejours_total.montant_comptabilise_budget_global_c OR
p_sejours.montant_facture_c_actes_inclus_dans_sejour IS DISTINCT FROM w_sejours_total.montant_facture_c_actes_inclus_dans_sejour OR
p_sejours.montant_facture_h_actes_inclus_dans_sejour IS DISTINCT FROM w_sejours_total.montant_facture_h_actes_inclus_dans_sejour
);
UPDATE activite[PX].p_sejours SET
delai_groupage = CASE WHEN code_sorti = '1' AND date_groupage > date_sortie AND date_groupage < '2099-12-31' AND ghs_id <> 0
THEN date_groupage - date_sortie ELSE 0 END,
delai_facture = CASE WHEN code_sorti = '1' AND date_facture > date_sortie AND date_facture < '2099-12-31' AND date_facture > date_sortie
THEN date_facture - date_sortie ELSE 0 END,
delai_expedition = CASE WHEN code_sorti = '1' AND date_expedition > date_sortie AND date_facture < '2099-12-31' AND date_expedition < '2099-12-31'
THEN date_expedition - date_sortie ELSE 0 END,
delai_solde = CASE WHEN code_sorti = '1' AND date_solde > date_sortie AND date_facture < '2099-12-31' AND date_solde < '2099-12-31'
THEN date_solde - date_sortie ELSE 0 END,
delai_expedition_0 = CASE WHEN code_sorti = '1' AND date_expedition_0 > date_sortie AND date_facture < '2099-12-31' AND date_expedition_0 < '2099-12-31'
THEN date_expedition_0 - date_sortie ELSE 0 END,
delai_solde_0 = CASE WHEN code_sorti = '1'AND date_solde_0 > date_sortie AND date_facture < '2099-12-31' AND date_solde_0 < '2099-12-31'
THEN date_solde_0 - date_sortie ELSE 0 END,
delai_expedition_1 = CASE WHEN code_sorti = '1' AND date_expedition_1 > date_sortie AND date_facture < '2099-12-31' AND date_expedition_1 < '2099-12-31'
THEN date_expedition_1 - date_sortie ELSE 0 END,
delai_solde_1 = CASE WHEN code_sorti = '1' AND date_solde_1 > date_sortie AND date_facture < '2099-12-31' AND date_solde_1 < '2099-12-31'
THEN date_solde_1 - date_sortie ELSE 0 END,
delai_expedition_2 = CASE WHEN code_sorti = '1' AND date_expedition_2 > date_sortie AND date_facture < '2099-12-31' AND date_expedition_2 < '2099-12-31'
THEN date_expedition_2 - date_sortie ELSE 0 END,
delai_solde_2 = CASE WHEN code_sorti = '1' AND date_solde_2 > date_sortie AND date_facture < '2099-12-31' AND date_solde_2 < '2099-12-31'
THEN date_solde_2 - date_sortie ELSE 0 END,
delai_expedition_22 = CASE WHEN code_sorti = '1' AND date_expedition_22 > date_sortie AND date_facture < '2099-12-31' AND date_expedition_22 < '2099-12-31'
THEN date_expedition_22 - date_sortie ELSE 0 END,
delai_solde_22 = CASE WHEN code_sorti = '1' AND date_solde_22 > date_sortie AND date_facture < '2099-12-31' AND date_solde_22 < '2099-12-31'
THEN date_solde_22 - date_sortie ELSE 0 END
WHERE
delai_groupage IS DISTINCT FROM CASE WHEN code_sorti = '1' AND date_groupage > date_sortie AND date_groupage < '2099-12-31' AND ghs_id <> 0
THEN date_groupage - date_sortie ELSE 0 END
OR
delai_facture IS DISTINCT FROM CASE WHEN code_sorti = '1' AND date_facture > date_sortie AND date_facture < '2099-12-31' AND date_facture > date_sortie
THEN date_facture - date_sortie ELSE 0 END
OR
delai_expedition IS DISTINCT FROM CASE WHEN code_sorti = '1' AND date_expedition > date_sortie AND date_facture < '2099-12-31' AND date_expedition < '2099-12-31'
THEN date_expedition - date_sortie ELSE 0 END
OR
delai_solde IS DISTINCT FROM CASE WHEN code_sorti = '1' AND date_solde > date_sortie AND date_facture < '2099-12-31' AND date_solde < '2099-12-31'
THEN date_solde - date_sortie ELSE 0 END
OR
delai_expedition_0 IS DISTINCT FROM CASE WHEN code_sorti = '1' AND date_expedition_0 > date_sortie AND date_facture < '2099-12-31' AND date_expedition_0 < '2099-12-31'
THEN date_expedition_0 - date_sortie ELSE 0 END
OR
delai_solde_0 IS DISTINCT FROM CASE WHEN code_sorti = '1'AND date_solde_0 > date_sortie AND date_facture < '2099-12-31' AND date_solde_0 < '2099-12-31'
THEN date_solde_0 - date_sortie ELSE 0 END
OR
delai_expedition_1 IS DISTINCT FROM CASE WHEN code_sorti = '1' AND date_expedition_1 > date_sortie AND date_facture < '2099-12-31' AND date_expedition_1 < '2099-12-31'
THEN date_expedition_1 - date_sortie ELSE 0 END
OR
delai_solde_1 IS DISTINCT FROM CASE WHEN code_sorti = '1' AND date_solde_1 > date_sortie AND date_facture < '2099-12-31' AND date_solde_1 < '2099-12-31'
THEN date_solde_1 - date_sortie ELSE 0 END
OR
delai_expedition_2 IS DISTINCT FROM CASE WHEN code_sorti = '1' AND date_expedition_2 > date_sortie AND date_facture < '2099-12-31' AND date_expedition_2 < '2099-12-31'
THEN date_expedition_2 - date_sortie ELSE 0 END
OR
delai_solde_2 IS DISTINCT FROM CASE WHEN code_sorti = '1' AND date_solde_2 > date_sortie AND date_facture < '2099-12-31' AND date_solde_2 < '2099-12-31'
THEN date_solde_2 - date_sortie ELSE 0 END
OR
delai_expedition_22 IS DISTINCT FROM CASE WHEN code_sorti = '1' AND date_expedition_22 > date_sortie AND date_facture < '2099-12-31' AND date_expedition_22 < '2099-12-31'
THEN date_expedition_22 - date_sortie ELSE 0 END
OR
delai_solde_22 IS DISTINCT FROM CASE WHEN code_sorti = '1' AND date_solde_22 > date_sortie AND date_facture < '2099-12-31' AND date_solde_22 < '2099-12-31'
THEN date_solde_22 - date_sortie ELSE 0 END;
]]>