You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

6296 lines
293 KiB

<?xml version="1.0" encoding="ISO-8859-1"?>
<ROOT>
<NODE name="INIT" label="INITIALISATIONS">
<NODE label="Tests initiaux">
<sqlcmd><![CDATA[
]]></sqlcmd>
</NODE>
<NODE label="Identification des séjours">
<sqlcmd><![CDATA[
DROP TABLE IF EXISTS w_periode;
CREATE TEMP TABLE w_periode AS
SELECT
greatest(max_reg,max_sej) AS date_extraction
FROM
(SELECT max(date) as max_reg FROM prod_mederi.KRGLDET WHERE DATE <= now() AND DATE >= '[ENV_ADM_ANNEEDEBUT]0101') sub,
(SELECT greatest(
max(CASE WHEN DATEENTREE <= now() THEN DATEENTREE ELSE '1900-01-01' END),
max(CASE WHEN DATESORTIE <= now() THEN DATESORTIE ELSE '1900-01-01' END))
as max_sej FROM prod_mederi.KDOSSIER WHERE TYPDOS != 4
AND DATEENTREE >= '[ENV_ADM_ANNEEDEBUT]0101'
) sub2;
-- Corrections TP
UPDATE prod_mederi.KDOSSIER
SET COORGDEST = subview.COORGDEST
FROM (SELECT substr(COORGDEST,1,10) AS COORGDEST10, MAX(COORGDEST) AS COORGDEST, count(*) FROM prod_mederi.KORGDEST WHERE LENGTH(COORGDEST) > 10 GROUP BY 1) subview
WHERE KDOSSIER.COORGDEST = subview.COORGDEST10
;
UPDATE prod_mederi.KDOSSIER
SET COORGDEST = 'PATIENT'
WHERE COALESCE(COORGDEST,'') = '' AND 'PATIENT' IN (SELECT trim(COORGDEST) FROM prod_mederi.KORGDEST WHERE COORGDEST LIKE 'PAT%')
;
-- Corrections RSS
DROP TABLE IF EXISTS w_KRSS;
CREATE TEMP TABLE w_KRSS AS
SELECT *
FROM prod_mederi.KRSS
;
ANALYSE w_KRSS
;
DELETE FROM w_KRSS
USING
(
SELECT K5CLEUNIK, count(*),
(MAX(ARRAY[RSSCMDGHM, RSSSORT::text, CTID::text]))[3]::TID AS keep_CTID
FROM w_KRSS
GROUP BY 1
HAVING count(*) > 1
) subview
WHERE w_KRSS.K5CLEUNIK = subview.K5CLEUNIK AND
w_KRSS.CTID <> subview.keep_CTID
;
DELETE FROM w_KRSS
USING
(
SELECT NODOSSIER, count(*),
(MAX(ARRAY[RSSCMDGHM, RSSSORT::text, K5CLEUNIK::text, CTID::text]))[4]::TID AS keep_CTID
FROM w_KRSS
GROUP BY 1
HAVING count(*) > 1
) subview
WHERE w_KRSS.NODOSSIER = subview.NODOSSIER AND
w_KRSS.CTID <> subview.keep_CTID
;
-- vérifications des séjours
DROP TABLE IF EXISTS w_DOSSIER;
CREATE TEMP TABLE w_DOSSIER AS
SELECT
date_extraction,
NOFITNESS,
KDOSSIER.* ,
COALESCE(DATESORTIE, '20991231') AS date_sortie,
'N'::text AS CTI_OK,
''::text AS dup_type_sejour,
'0'::text AS dup_code_prevu,
0::bigint AS dup_sejour_id,
0::bigint AS dup_medecin_sejour_id,
''::text AS dup_etat,
rank() OVER (PARTITION BY KDOSSIER.NODOSSIER ORDER BY DATESORTIE, HEURESOR, K5CLEUNIK) as rank,
K5CLEUNIK
FROM w_periode,prod_mederi.KDOSSIER
LEFT JOIN w_KRSS KRSS ON KDOSSIER.NODOSSIER = KRSS.NODOSSIER
, prod_mederi.ETABLI --LEFT JOIN prod_mederi.ETABLI ON KDOSSIER.NOETABLI = ETABLI.NOETABLI
WHERE KDOSSIER.NODOSSIER IS NOT NULL AND
DATEENTREE IS NOT NULL AND
(
COALESCE(DATESORTIE,RSSSORT,'20991231') >= '[ENV_ADM_ANNEEDEBUT]0101' OR
KDOSSIER.NODOSSIER IN (SELECT NODOSSIER FROM w_KFACTURE KFACTURE WHERE DATEFAC >= '[ENV_ADM_ANNEEDEBUT]0101' OR DATECOMPTA >= '[ENV_ADM_ANNEEDEBUT]0101' OR DATECOMPTA IS NULL) OR
KDOSSIER.NODOSSIER IN (SELECT NODOSSIER FROM w_KREGL KREGL WHERE DATE >= '[ENV_ADM_ANNEEDEBUT]0101' OR DATECOMPTA >= '[ENV_ADM_ANNEEDEBUT]0101' )
)
ORDER BY NODOSSIER, K5CLEUNIK;
ANALYSE w_DOSSIER
;
-- Suppression des séjours sans mouvemlent, sans facture, sans reglement
DELETE
FROM w_dossier
WHERE NODOSSIER NOT IN (SELECT KSEJOUR.NODOSSIER FROM prod_mederi.KSEJOUR WHERE KSEJOUR.NODOSSIER IS NOT NULL) AND
NODOSSIER NOT IN (SELECT KFACTURE.NODOSSIER FROM prod_mederi.KFACTURE WHERE KFACTURE.NODOSSIER IS NOT NULL) AND
NODOSSIER NOT IN (SELECT KRGLDET.NODOSSIER FROM prod_mederi.KRGLDET WHERE KRGLDET.NODOSSIER IS NOT NULL)
;
-- Heure entrée non saisie
UPDATE w_DOSSIER
SET HEUREENT = '08:00:00'
WHERE HEUREENT IS NULL AND
DATEENTREE = DATESORTIE AND
HEURESOR > '08:00:00'
;
UPDATE w_DOSSIER
SET HEUREENT = '07:00:00'
WHERE HEUREENT IS NULL AND
DATEENTREE = DATESORTIE AND
HEURESOR >= '07:00:00'
;
-- date entrée > datedeb
UPDATE w_DOSSIER
SET
DATEENTREE = KSEJOUR.DATEDEB,
HEUREENT = KSEJOUR.HEUREDEB
FROM prod_mederi.KSEJOUR
WHERE
DATEENTREE > w_DOSSIER.DATEDEB
AND KSEJOUR.NODOSSIER = w_DOSSIER.NODOSSIER
AND w_DOSSIER.DATEDEB = KSEJOUR.DATEDEB;
UPDATE w_DOSSIER
SET
NODOSSIER = NODOSSIER || '_' || rank
WHERE rank != 1;
-- modification de la table des rss pour prendre en compte les rss multiples par séjour
UPDATE w_KRSS KRSS
SET
NODOSSIER = w_DOSSIER.NODOSSIER
FROM w_DOSSIER
WHERE KRSS.K5CLEUNIK = w_DOSSIER.K5CLEUNIK
;
CREATE INDEX w_dossier_i1
ON w_dossier
USING btree
(NODOSSIER);
ANALYSE W_DOSSIER;
-- Numéros de factures en double
]]></sqlcmd>
</NODE>
<NODE label="Correstions">
<sqlcmd><![CDATA[
-- N° facture en double
]]></sqlcmd>
</NODE>
</NODE>
<NODE name="SEJOUR" label="RECUPERATION DES SEJOURS">
<NODE label="Patients">
<sqlcmd><![CDATA[
-- Source des patients : KNIP ou KDOSSIER (il arrive que les deux tables soient décorélées,
-- privilégier alors le NIP de KDOSSIER)
INSERT INTO activite.t_divers (code, texte, valeur, description)
SELECT
'MEDERI_PATIENTS',
'Source patients MEDERI',
'NIP',
'Prendre les patients dans les dossies (DOS) ou dans les patients (NIP)'
WHERE 'MEDERI_PATIENTS' NOT IN (SELECT code FROM activite.t_divers);
;
DROP TABLE IF EXISTS w_prod_mederi_knip
;
CREATE TEMP TABLE w_prod_mederi_knip (
NIP text,
NOMPAT text,
PRENOMPAT text,
NOMJFILLE text,
SEXE text,
DATENAIS text,
NOMUSUEL text,
NIPEXT text,
NOSS text,
CLESS text,
INSC text,
NICLEUNIK text
);
-- Patients selon table des patients (paramètre t_divers)
INSERT INTO w_prod_mederi_knip (
NIP,
NOMPAT,
PRENOMPAT,
NOMJFILLE,
SEXE,
DATENAIS,
NOMUSUEL,
NIPEXT,
NOSS,
CLESS,
INSC,
NICLEUNIK
)
SELECT
NIP,
NOMPAT,
PRENOMPAT,
MAX(NOMJFILLE) AS NOMJFILLE,
SEXE,
DATENAIS,
NOMUSUEL,
MAX(NIPEXT) AS NIPEXT,
NOSS,
CLESS,
INSC,
MAX(NICLEUNIK) AS NICLEUNIK
FROM prod_mederi.KNIP
JOIN activite.t_divers ON t_divers.code = 'MEDERI_PATIENTS'
WHERE
t_divers.valeur = 'NIP'
GROUP BY NIP,
NOMPAT,
PRENOMPAT,
SEXE,
DATENAIS,
NOMUSUEL,
NOSS,
CLESS,
INSC
;
-- Patients selon table des dossiers (paramètre t_divers)
INSERT INTO w_prod_mederi_knip (
NIP,
NOMPAT,
PRENOMPAT,
NOMJFILLE,
SEXE,
DATENAIS,
NOMUSUEL,
NIPEXT,
NOSS,
CLESS,
INSC,
NICLEUNIK
)
WITH w_knip AS (
SELECT
NIP,
MAX(KNIP.NOMPAT) AS NOMPAT,
MAX(KNIP.PRENOMPAT) AS PRENOMPAT,
MAX(KNIP.NOMJFILLE) AS NOMJFILLE,
MAX(KNIP.SEXE) AS SEXE,
MAX(KNIP.DATENAIS) AS DATENAIS,
MAX(KNIP.NOMUSUEL) AS NOMUSUEL,
MAX(KNIP.NIPEXT) AS NIPEXT,
MAX(KNIP.NOSS) AS NOSS,
MAX(KNIP.CLESS) AS CLESS,
MAX(KNIP.INSC) AS INSC,
MAX(NICLEUNIK) AS NICLEUNIK
FROM prod_mederi.KNIP
GROUP BY KNIP.NIP
)
SELECT
KDOSSIER.NIP,
MAX(COALESCE(w_knip.NOMPAT, KDOSSIER.NOMPAT)) AS NOMPAT,
MAX(COALESCE(w_knip.PRENOMPAT,KDOSSIER.PRENOMPAT)) AS PRENOMPAT,
MAX(COALESCE(w_knip.NOMJFILLE, KDOSSIER.NOMJFPAT)) AS NOMJFILLE,
MAX(COALESCE(w_knip.SEXE, KDOSSIER.SEXE)) AS SEXE,
MAX(COALESCE(w_knip.DATENAIS, KDOSSIER.DATENAIS)) AS DATENAIS,
MAX(w_knip.NOMUSUEL) AS NOMUSUEL,
MAX(w_knip.NIPEXT) AS NIPEXT,
MAX(w_knip.NOSS) AS NOSS,
MAX(w_knip.CLESS) AS CLESS,
MAX(w_knip.INSC) AS INSC,
MAX(w_knip.NICLEUNIK) AS NICLEUNIK
FROM prod_mederi.KDOSSIER
LEFT JOIN w_knip ON w_knip.NIP = KDOSSIER.NIP
JOIN activite.t_divers ON t_divers.code = 'MEDERI_PATIENTS'
WHERE
t_divers.valeur = 'DOS'
GROUP BY KDOSSIER.NIP
;
UPDATE w_prod_mederi_knip
SET NOMPAT = NOMUSUEL
FROM activite.t_divers
WHERE 1=1
AND t_divers.valeur = 'NIP'
AND t_divers.code = 'MEDERI_PATIENTS'
AND (NOMUSUEL IS NOT NULL OR NOMUSUEL <> '')
;
DROP TABLE IF EXISTS w_prod_mederi_knip_2
;
CREATE TEMP TABLE w_prod_mederi_knip_2 AS
SELECT
NIP,
NOMPAT,
PRENOMPAT,
MAX(NOMJFILLE) AS NOMJFILLE,
SEXE,
DATENAIS,
NOMUSUEL,
MAX(NIPEXT) AS NIPEXT,
NOSS,
CLESS,
INSC,
MAX(NICLEUNIK) AS NICLEUNIK
FROM w_prod_mederi_knip
GROUP BY NIP,
NOMPAT,
PRENOMPAT,
SEXE,
DATENAIS,
NOMUSUEL,
NOSS,
CLESS,
INSC
;
DROP TABLE IF EXISTS w_prod_mederi_knip_3
;
CREATE TEMP TABLE w_prod_mederi_knip_3 AS
SELECT
NIP,
NIP AS NIP2,
NOMPAT,
PRENOMPAT,
NOMJFILLE,
SEXE,
DATENAIS,
NOMUSUEL,
NIPEXT,
NOSS,
CLESS,
INSC,
MAX(NICLEUNIK) AS NICLEUNIK
FROM w_prod_mederi_knip_2
GROUP BY NIP,
NOMPAT,
PRENOMPAT,
NOMJFILLE,
SEXE,
DATENAIS,
NOMUSUEL,
NIPEXT,
NOSS,
CLESS,
INSC
;
UPDATE w_prod_mederi_knip_3
SET NOMUSUEL = NOMPAT
WHERE NOMUSUEL IS NULL
;
-- Cas de NIP en double
UPDATE w_prod_mederi_knip_3
SET NIP2 = subview.to_NIP2
FROM
(
SELECT NIP2, MAX(NICLEUNIK) AS NICLEUNIK, MAX(NIP)||'-'||count(*)::text AS to_NIP2
FROM w_prod_mederi_knip_3
GROUP BY 1
HAVING count(*) > 1
) subview
WHERE w_prod_mederi_knip_3.NICLEUNIK = subview.NICLEUNIK
;
INSERT INTO activite[PX].p_patients(finess, no_patient, nom, prenom, date_naissance, code_sexe)
SELECT '', NIP2, MAX(NOMUSUEL), max(PRENOMPAT), date(MAX(DATENAIS)), MAX(sexe)
FROM w_prod_mederi_knip_3
LEFT JOIN activite[PX].p_patients ON (NIP = p_patients.no_patient)
WHERE p_patients.no_patient IS NULL and NIP IS NOT NULL
GROUP BY 2
;
UPDATE activite[PX].p_patients
SET nom = NOMUSUEL,
prenom = PRENOM,
date_naissance = date(DATENAIS),
code_sexe = SEXE
FROM w_prod_mederi_knip_3
WHERE p_patients.no_patient = NIP2
AND (
p_patients.nom IS DISTINCT FROM NOMUSUEL OR
p_patients.prenom IS DISTINCT FROM PRENOMPAT OR
p_patients.date_naissance IS DISTINCT FROM date(DATENAIS) OR
p_patients.code_sexe IS DISTINCT FROM SEXE
);
]]></sqlcmd>
</NODE>
<NODE label="Séjours">
<sqlcmd><![CDATA[
DROP TABLE IF EXISTS w_PEC_DOSSIER;
CREATE TEMP TABLE w_PEC_DOSSIER AS
SELECT NODOSSIER,
COALESCE(MAX(t_tiers_payant_0.oid),0)::bigint AS tiers_payant_0_id,
COALESCE(MAX(t_tiers_payant_1.oid),0)::bigint AS tiers_payant_1_id,
COALESCE(MAX(t_tiers_payant_2.oid),0)::bigint AS tiers_payant_2_id,
0::bigint AS tiers_payant_22_id,
COALESCE(MAX(NOSS)) AS matricule_1,
COALESCE(MAX(INSC)) AS matricule_2
FROM w_DOSSIER
LEFT JOIN activite[PX].t_tiers_payant t_tiers_payant_1 ON (w_DOSSIER.COORGDEST = t_tiers_payant_1.code_original)
LEFT JOIN w_prod_mederi_knip_3 ON w_DOSSIER.NIP = w_prod_mederi_knip_3.NIP
LEFT JOIN prod_mederi.ORGMUT ON w_DOSSIER.NOMUTUELLE = ORGMUT.NOMUTUELLE
LEFT JOIN activite[PX].t_tiers_payant t_tiers_payant_2 ON (w_DOSSIER.NOMUTUELLE = t_tiers_payant_2.code_original)
LEFT JOIN activite[PX].t_tiers_payant t_tiers_payant_0 ON (t_tiers_payant_0.type_tiers_payant = '0' AND t_tiers_payant_0.oid <> 0)
GROUP BY 1;
ALTER TABLE w_PEC_DOSSIER ADD CONSTRAINT w_PEC_DOSSIER_pkey PRIMARY KEY(NODOSSIER);
DROP TABLE IF EXISTS w_sejours;
CREATE TEMP TABLE w_sejours AS
SELECT
CASE WHEN DATEENTREE > now() THEN 'W' || w_DOSSIER.NODOSSIER ELSE w_DOSSIER.NODOSSIER END as no_sejour,
w_DOSSIER.NODOSSIER as code_original,
NIP as no_patient,
DATEENTREE as date_entree,
replace(HEUREENT,':','')::bigint as heure_entree,
CASE WHEN DATESORTIE IS NOT NULL THEN DATESORTIE ELSE '20991231'::date END as date_sortie,
replace(HEURESOR,':','')::numeric as heure_sortie,
w_DOSSIER.SEXE as code_sexe,
0 AS age,
CASE WHEN DATESORTIE <= date(now()) THEN 1 ELSE 0 END as code_sorti,
CASE WHEN TYPDOS = 4 OR DATEENTREE > now() THEN 1 ELSE 0 END as code_prevu,
CASE
WHEN TYPDOS = 1 THEN 1::int
WHEN TYPDOS = 2 THEN 3::int
WHEN TYPDOS = 3 THEN CASE WHEN RSSCMDGHM LIKE '28%' THEN 5::int ELSE 2::int END
WHEN TYPDOS = 6 THEN 3::int
WHEN TYPDOS = 4 AND DATEENTREE = DATEPREV THEN 9::int
WHEN TYPDOS = 4 AND DATEENTREE != DATEPREV THEN 9::int
ELSE 1::int END as type_sejour,
COALESCE(t_medecins_administratifs.oid,0) as medecin_sejour_id,
0 as ghs_id,
'20991231'::date as date_groupage,
CASE WHEN DUREECP > 1 THEN 1 ELSE 0 END AS code_cp_demandee,
0 as mode_traitement_id,
'8'::character(1) as mode_entree,
'0'::character(1) as provenance,
'8'::character(1) as mode_sortie,
'0'::character(1) as destination,
COALESCE(tiers_payant_0_id,0) AS tiers_payant_0_id,
COALESCE(tiers_payant_1_id,0) AS tiers_payant_1_id,
COALESCE(tiers_payant_2_id,0) AS tiers_payant_2_id,
0 AS tiers_payant_22_id,
0 AS est_budget_global, -- seulement pour privé pour l'instant
w_DOSSIER.NOFITNESS as finess
FROM w_DOSSIER
LEFT JOIN w_KRSS KRSS ON w_DOSSIER.NODOSSIER = KRSS.NODOSSIER
LEFT JOIN activite[PX].t_medecins_administratifs ON w_DOSSIER.NOPRAT = t_medecins_administratifs.code_original
JOIN w_PEC_DOSSIER ON w_PEC_DOSSIER.NODOSSIER = w_DOSSIER.NODOSSIER
;
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::int
FROM activite.t_sejour
WHERE t_sejour.no_sejour = w_sejours.no_sejour AND
t_sejour.type_sejour IN ('1','2','3','4','5','6','9')
AND t_sejour.type_sejour is not NULL ;
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::int,
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,
est_budget_global = w_sejours.est_budget_global,
finess = w_sejours.finess
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.est_budget_global IS DISTINCT FROM p_sejours.est_budget_global OR
w_sejours.finess IS DISTINCT FROM p_sejours.finess
);
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,
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,
est_budget_global,
finess
)
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::char(1),
w_sejours.age,
w_sejours.code_sorti,
w_sejours.code_prevu,
w_sejours.type_sejour::char(1),
w_sejours.medecin_sejour_id,
w_sejours.ghs_id,
w_sejours.date_groupage,
w_sejours.type_sejour::char(1),
w_sejours.mode_traitement_id,
w_sejours.mode_entree::char(1),
w_sejours.provenance::char(1),
w_sejours.mode_sortie::char(1),
w_sejours.destination::char(1),
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.est_budget_global,
w_sejours.finess
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
USING activite[PX].p_sejours AS p_sejours_i LEFT JOIN w_sejours ON (w_sejours.no_sejour = p_sejours_i.no_sejour)
WHERE
p_sejours.no_sejour = p_sejours_i.no_sejour AND
w_sejours.no_sejour IS NULL;
-- Modes es selon mouvements (1:entree, 10: sortie 2,11,3) a priori 1 seul enregistrement avec 1 ou 10 mais au cas ou...
UPDATE activite[PX].p_sejours
SET mode_entree = MPMSI::text,
provenance = CASE WHEN char_length(CPMSI) > 1 THEN '0' ELSE CPMSI END
FROM prod_mederi.KSEJOUR_MVT
WHERE no_sejour = NODOSSIER
AND TYPEMVT = 1;
UPDATE activite[PX].p_sejours
SET mode_sortie = MPMSI::text,
destination = CASE WHEN char_length(CPMSI) > 1 THEN '0' ELSE CPMSI END
FROM prod_mederi.KSEJOUR_MVT
WHERE no_sejour = NODOSSIER
AND TYPEMVT = 10;
-- Modes entrée sortie selon PMSI MCO
UPDATE activite[PX].p_sejours
SET
mode_entree = KRUM.MODEENTREE,
provenance = RIGHT(KRUM.PROVENANCE,1)
FROM prod_mederi.KRUM
WHERE no_sejour = NODOSSIER
AND RSSNO = '01';
DROP TABLE IF EXISTS w_mode_sortie;
CREATE TEMP TABLE w_mode_sortie AS
SELECT
NODOSSIER,
(MAX(Array[RSSNO::text, RIGHT(MODESORTIE::text,1)]))[2] as mode,
(MAX(Array[RSSNO::text, RIGHT(KRUM.DESTINATION,1)]))[2] as des
FROM prod_mederi.KRUM
GROUP BY NODOSSIER;
UPDATE activite[PX].p_sejours
SET
mode_sortie = mode,
destination = des
FROM w_mode_sortie
WHERE no_sejour = NODOSSIER;
-- Etablissements de provenance et destination
-- insertion nouveaux etablissements
DROP TABLE IF EXISTS w_ETAB;
CREATE TEMP TABLE w_ETAB AS
SELECT HOPITAL.*,t_etablissements.code FROM prod_mederi.HOPITAL LEFT JOIN base.t_etablissements ON CODEHOPIT = t_etablissements.code
WHERE CODEHOPIT = ANY(array(SELECT NOANEST FROM w_DOSSIER)::text[])
OR CODEHOPIT = ANY(array(SELECT HOPITSORTIE FROM w_DOSSIER)::text[]);
INSERT INTO base.t_etablissements
(
code,
texte,
texte_court
)
SELECT
CODEHOPIT,
NOM,
NOM
FROM w_ETAB
WHERE code IS NULL;
-- rechargements des etablissements
DROP TABLE IF EXISTS w_ETAB;
CREATE TEMP TABLE w_ETAB AS
SELECT CODEHOPIT, t_etablissements.* FROM prod_mederi.HOPITAL LEFT JOIN base.t_etablissements ON CODEHOPIT = code
;
-- insertion des données de correspondances (pas d'update car les tables sont vidées avant import)
DROP TABLE IF EXISTS w_TRANS;
CREATE TEMP TABLE w_TRANS AS
SELECT
CASE WHEN DATEENTREE > now() THEN 'W' || NODOSSIER ELSE NODOSSIER END as no_sejour,
pro.oid as oid_pro,
des.oid as oid_des
FROM w_DOSSIER
LEFT JOIN w_ETAB as pro ON w_DOSSIER.NOANEST = pro.CODEHOPIT
LEFT JOIN w_ETAB as des ON w_DOSSIER.HOPITSORTIE = des.CODEHOPIT
WHERE NOANEST IS NOT NULL OR HOPITSORTIE IS NOT NULL;
INSERT INTO activite[PX].p_sejours_transferts(
sejour_id,
provenance_id,
destination_id
)
SELECT
p_sejours.oid,
oid_pro,
oid_des
FROM activite[PX].p_sejours
JOIN w_TRANS ON w_TRANS.no_sejour = p_sejours.no_sejour;
-- ghm et ghs
DROP TABLE IF EXISTS w_KRSSLOG;
CREATE TEMP TABLE w_KRSSLOG AS
SELECT
KRSS.NODOSSIER,
COALESCE(MIN(CASE WHEN KRSSLOG.GHM <> '' AND PMSI_DEXPORT >= RSSSORT AND KRSSLOG.GHM = KRSS.RSSCMDGHM THEN date(PMSI_DEXPORT) ELSE NULL END),'20991231') AS PMSI_DEXPORT,
(MAX(Array[PMSI_DEXPORT::text, VERROUAP::text]))[2] AS VERROUAP,
(MAX(Array[PMSI_DEXPORT::text, GHM::text]))[2] AS GHM
FROM prod_mederi.KRSSLOG
JOIN w_KRSS KRSS ON KRSS.RSSNR = KRSSLOG.RSSNR
GROUP BY 1
;
UPDATE activite[PX].p_sejours SET
ghs_id = COALESCE(t_ghs.oid,0),
ghm_id = COALESCE(t_ghm.oid,0),
date_groupage = CASE WHEN GHM IS NOT NULL THEN date(PMSI_DEXPORT) ELSE '20991231' END
FROM w_DOSSIER
JOIN w_KRSSLOG ON w_DOSSIER.NODOSSIER = w_KRSSLOG.NODOSSIER
LEFT JOIN base.t_ghs ON VERROUAP = t_ghs.code
LEFT JOIN base.t_ghm ON GHM = t_ghm.code AND t_ghm.code NOT LIKE '90%'
WHERE
p_sejours.code_original = w_DOSSIER.NODOSSIER AND
(
p_sejours.ghs_id IS DISTINCT FROM COALESCE(t_ghs.oid,0) OR
p_sejours.ghm_id IS DISTINCT FROM COALESCE(t_ghm.oid,0) OR
p_sejours.date_groupage IS DISTINCT FROM CASE WHEN GHM IS NULL THEN date(PMSI_DEXPORT) ELSE '20991231' END
)
;
-- Code postal ?
UPDATE activite[PX].p_sejours
SET code_postal_id = t_codes_postaux.oid
FROM w_DOSSIER
JOIN base.t_codes_postaux ON CPPAT = t_codes_postaux.code
WHERE code_original = NODOSSIER AND
p_sejours.code_postal_id IS DISTINCT FROM t_codes_postaux.oid;
-- Type séance d'après GHM (dans création directement)
-- 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');
-- assurance
SELECT base.cti_disable_index('activite[PX]', 'i_sejours_assurance_1');
SELECT base.cti_disable_index('activite[PX]', 'i_sejours_assurance_2');
SELECT base.cti_disable_index('activite[PX]', 'i_sejours_assurance_3');
SELECT base.cti_disable_index('activite[PX]', 'i_sejours_assurance_4');
INSERT INTO activite[PX].p_sejours_assurance(
sejour_id,
tiers_payant_0_id,
tiers_payant_1_id,
matricule_1,
tiers_payant_2_id,
matricule_2,
tiers_payant_22_id,
matricule_22)
SELECT
oid AS sejour_id,
p_sejours.tiers_payant_0_id,
p_sejours.tiers_payant_1_id,
substr(w_PEC_DOSSIER.matricule_1,1,30),
p_sejours.tiers_payant_2_id,
substr(w_PEC_DOSSIER.matricule_2,1,30),
p_sejours.tiers_payant_22_id,
''::text AS matricule_22
FROM w_PEC_DOSSIER
JOIN activite[PX].p_sejours ON code_original = NODOSSIER AND p_sejours.etat = '';
SELECT base.cti_enable_index('activite[PX]', 'i_sejours_assurance_1');
SELECT base.cti_enable_index('activite[PX]', 'i_sejours_assurance_2');
SELECT base.cti_enable_index('activite[PX]', 'i_sejours_assurance_3');
SELECT base.cti_enable_index('activite[PX]', 'i_sejours_assurance_4');
-- Suppression des tables de travail non utilisées après
DROP TABLE IF EXISTS w_PEC_DOSSIER;
]]></sqlcmd>
</NODE>
<NODE label="Mouvements">
<sqlcmd><![CDATA[
-- tous les séjours = dernier service
DROP TABLE IF EXISTS w_SER_principal;
CREATE TEMP TABLE w_SER_principal AS
SELECT NODOSSIER,
(MAX(Array[DATEDEB::text, NOSERVINT::text]))[2] as NOSERVINT
FROM prod_mederi.KSEJOUR
JOIN activite[PX].p_sejours ON NODOSSIER = p_sejours.code_original
GROUP BY 1;
-- mise à jour des services séjour et dmt d'après les mouvements
UPDATE activite[PX].p_sejours
SET
mode_traitement_id = t_modes_traitement.oid,
type_sejour = CASE WHEN t_services_facturation.type_sejour IN ('1','2','3','5','6','9') THEN t_services_facturation.type_sejour ELSE p_sejours.type_sejour END
FROM w_SER_principal
JOIN activite[PX].t_services_facturation ON NOSERVINT = t_services_facturation.code_original
JOIN base.t_modes_traitement ON t_services_facturation.mode_traitement_id = t_modes_traitement.oid
JOIN base.t_dmt ON t_services_facturation.dmt_id = t_dmt.oid
WHERE NODOSSIER = no_sejour;
-- Traitement des mouvements
DROP SEQUENCE IF EXISTS w_MOUVEMENT_seq;
CREATE TEMP SEQUENCE w_MOUVEMENT_seq
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 1
CACHE 1;
-- Prendre tous les mouvements
DROP TABLE IF EXISTS w_KSEJOUR ;
CREATE TEMP TABLE w_KSEJOUR AS
SELECT *
FROM prod_mederi.KSEJOUR
;
-- Ajouter les mouvements manquant
INSERT INTO w_KSEJOUR(
secleunik,
nodossier,
datedeb,
datefin,
heuredeb,
heurefin,
noservint,
nochambre,
sho,
datesho,
dureesho,
etat,
etatsej,
noacte,
noprat,
nosae,
annulfactudj)
SELECT
'*'||NODOSSIER AS SECLEUNIK,
NODOSSIER,
DATEENTREE AS DATEDEB,
DATESORTIE AS DATEFIN,
HEUREENT AS HEUREDEB,
HEURESOR AS HEUREFIN,
''::text AS NOSERVINT,
''::text AS NOCHAMBRE,
''::text AS SHO,
NULL::DATE AS DATESHO,
'0'::text AS DUREESHO,
'0'::text AS ETAT,
'0'::text AS ETATSEJ,
''::text AS NOACTE,
NOPRAT,
''::text AS NOSAE,
'0'::text AS ANNULFACTUDJ
FROM prod_mederi.KDOSSIER
WHERE NODOSSIER NOT IN (SELECT NODOSSIER FROM prod_mederi.KSEJOUR)
;
CREATE INDEX w_KSEJOUR_i1
ON w_KSEJOUR
USING btree
(NODOSSIER);
CREATE INDEX w_KSEJOUR_i2
ON w_KSEJOUR
USING btree
(NOSERVINT);
UPDATE w_KSEJOUR
SET HEUREDEB = '08:00:00'
WHERE HEUREDEB IS NULL AND
HEUREFIN > '08:00:00'
;
UPDATE w_KSEJOUR
SET HEUREDEB = '07:00:00'
WHERE HEUREDEB IS NULL AND
HEUREFIN > '07:00:00'
;
-- Correction heures dossier nulles
UPDATE w_DOSSIER KDOSSIER
SET HEUREENT = subview.HEUREDEB
FROM
(
SELECT KDOSSIER.NODOSSIER, MIN(KSEJOUR.HEUREDEB) AS HEUREDEB
FROM w_DOSSIER KDOSSIER
JOIN w_KSEJOUR KSEJOUR ON
KDOSSIER.NODOSSIER = KSEJOUR.NODOSSIER AND
KDOSSIER.DATEENTREE = KSEJOUR.DATEDEB
WHERE HEUREENT IS NULL AND
HEUREDEB IS NOT NULL
GROUP BY 1
) subview
WHERE KDOSSIER.NODOSSIER = subview.NODOSSIER
;
UPDATE w_DOSSIER KDOSSIER
SET HEURESOR = subview.HEUREFIN
FROM
(
SELECT KDOSSIER.NODOSSIER, MAX(KSEJOUR.HEUREFIN) AS HEUREFIN
FROM w_DOSSIER KDOSSIER
JOIN w_KSEJOUR KSEJOUR ON
KDOSSIER.NODOSSIER = KSEJOUR.NODOSSIER AND
KDOSSIER.DATESORTIE = KSEJOUR.DATEFIN
WHERE HEURESOR IS NULL AND
HEUREFIN IS NOT NULL
GROUP BY 1
) subview
WHERE KDOSSIER.NODOSSIER = subview.NODOSSIER
;
-- L'heure de début du premier mouvement et l'heure de fin du dernier mouvement sont parfois différentes de l'heure d'entrée et de sortie du dossier.
-- On les fait correspondre
UPDATE w_ksejour SET
datefin = subview.datefin,
heurefin = subview.heurefin
FROM
(
SELECT
ksejour.nodossier,
((MAX(ARRAY[ksejour.datefin::text, ksejour.heurefin, secleunik])))[3]::numeric AS secleunik,
MAX(KDOSSIER.datesortie) AS datefin,
((MAX(ARRAY[KDOSSIER.datesortie::text, KDOSSIER.heuresor])))[2] AS heurefin
FROM prod_mederi.KDOSSIER
JOIN w_ksejour ksejour ON KDOSSIER.nodossier = ksejour.nodossier
WHERE heurefin IS NOT NULL
GROUP BY 1
HAVING MAX(kdossier.datesortie) <> MAX(ksejour.datefin) OR
((MAX(ARRAY[datefin::text, heurefin])))[2] <> ((MAX(ARRAY[ksejour.datefin::text, ksejour.heurefin])))[2]
) subview
WHERE w_ksejour.secleunik = subview.secleunik
;
UPDATE w_ksejour SET
datedeb = subview.dateentree,
heuredeb = subview.heureent
FROM
(
SELECT
ksejour.nodossier,
((MIN(ARRAY[ksejour.datedeb::text, ksejour.heuredeb, secleunik])))[3]::numeric AS secleunik,
MIN(KDOSSIER.dateentree) AS dateentree,
((MIN(ARRAY[KDOSSIER.dateentree::text, KDOSSIER.heureent])))[2] AS heureent
FROM prod_mederi.KDOSSIER
JOIN w_ksejour ksejour ON KDOSSIER.nodossier = ksejour.nodossier
GROUP BY 1
HAVING MIN(KDOSSIER.dateentree) <> MIN(ksejour.datedeb) OR
((MIN(ARRAY[dateentree::text, heureent])))[2] <> ((MIN(ARRAY[ksejour.datedeb::text, ksejour.heuredeb])))[2]
) subview
WHERE w_ksejour.secleunik = subview.secleunik
;
DROP TABLE IF EXISTS w_MOUVEMENT;
CREATE TEMP TABLE w_MOUVEMENT AS
SELECT row_number() OVER (PARTITION BY 1 ORDER BY KSEJOUR.NODOSSIER,KSEJOUR.DATEDEB, KSEJOUR.HEUREDEB) AS sequence,
KSEJOUR.NODOSSIER,
0 as RSSBEBE,
(to_char(KSEJOUR.DATEDEB,'YYYY-MM-DD ') || KSEJOUR.HEUREDEB::text)::timestamp AS DATEDEB,
date(KSEJOUR.DATEDEB) AS DATEDEB_DAT,
replace(KSEJOUR.HEUREDEB,':','')::numeric(6,0) AS HEUREDEB,
(to_char(COALESCE(KSEJOUR.DATEFIN,'20991231'),'YYYY-MM-DD ') || COALESCE(KSEJOUR.HEUREFIN,'240000')::text)::timestamp AS DATEFIN,
COALESCE(KSEJOUR.DATEFIN,'20991231') AS DATEFIN_DAT,
replace(COALESCE(KSEJOUR.HEUREFIN,'240000'),':','')::numeric(6,0) AS HEUREFIN,
CASE
WHEN KSEJOUR.DATEDEB = DATEENTREE AND KSEJOUR.HEUREDEB = HEUREENT THEN 'E'
WHEN KSEJOUR.DATEFIN = DATESORTIE AND KSEJOUR.HEUREFIN = HEURESOR THEN 'S'
ELSE '0' END AS TYPEMVT,
w_SER_principal.NOSERVINT AS NOSERVINT_SEJ,
KSEJOUR.NOSERVINT,
NOSERVSS,
CODEUM,
CASE
WHEN NOCHAMBRE IS NULL THEN KSERVINT.NOSERVINT::text || '-0'
ELSE replace(NOCHAMBRE,' ','') END AS NOLIT,
SHO,
'0'::text AS TYPEMVT_before,
'0'::text AS NOSERVINT_before,
'0'::text AS NOSERVSS_before,
0::text AS NOLIT_before,
'0'::text AS TYPEMVT_next,
'0'::text AS NOSERVINT_next,
'0'::text AS NOSERVSS_next,
0::text AS NOLIT_next
FROM w_KSEJOUR KSEJOUR
JOIN activite[PX].p_sejours ON KSEJOUR.NODOSSIER = p_sejours.code_original
JOIN w_DOSSIER ON w_DOSSIER.NODOSSIER = KSEJOUR.NODOSSIER
JOIN w_SER_principal ON w_DOSSIER.NODOSSIER = w_SER_principal.NODOSSIER
LEFT JOIN prod_mederi.KSERVINT ON KSEJOUR.NOSERVINT = KSERVINT.NOSERVINT
ORDER BY CASE WHEN DATEENTREE > now() THEN 'W' || w_DOSSIER.NODOSSIER ELSE w_DOSSIER.NODOSSIER END, KSEJOUR.DATEDEB
;
CREATE INDEX w_MOUVEMENT_i1
ON w_MOUVEMENT
USING btree
(SEQUENCE);
CREATE INDEX w_MOUVEMENT_i2
ON w_MOUVEMENT
USING btree
(NODOSSIER);
ANALYSE w_MOUVEMENT;
-- calcul date fin
UPDATE w_MOUVEMENT SET
DATEDEB = w_MOUVEMENT_B.DATEFIN + INTERVAL '1 second'
FROM w_MOUVEMENT w_MOUVEMENT_B
WHERE w_MOUVEMENT.NODOSSIER = w_MOUVEMENT_B.NODOSSIER AND
w_MOUVEMENT.sequence = w_MOUVEMENT_B.sequence +1 AND
w_MOUVEMENT.HEUREDEB = 0 AND
w_MOUVEMENT_B.HEUREFIN <> 0;
UPDATE w_MOUVEMENT SET
DATEFIN = w_MOUVEMENT_A.DATEDEB - INTERVAL '1 second'
FROM w_MOUVEMENT w_MOUVEMENT_A
WHERE w_MOUVEMENT.NODOSSIER = w_MOUVEMENT_A.NODOSSIER AND
w_MOUVEMENT.sequence = w_MOUVEMENT_A.sequence -1 AND
w_MOUVEMENT.HEUREFIN = 0;
UPDATE w_MOUVEMENT SET
HEUREDEB = to_char(DATEDEB,'HH24MISS')::numeric,
DATEDEB_DAT = date(DATEDEB),
HEUREFIN = to_char(DATEFIN,'HH24MISS')::numeric,
DATEFIN_DAT = date(DATEFIN)
WHERE HEUREDEB = 0 OR HEUREFIN = 0
;
UPDATE w_MOUVEMENT
SET DATEFIN = CASE WHEN w_MOUVEMENT_next.TYPEMVT <> 'S' THEN w_MOUVEMENT_next.DATEDEB - interval '1 second' ELSE w_MOUVEMENT_next.DATEDEB_DAT END,
DATEFIN_DAT = date(CASE WHEN w_MOUVEMENT_next.TYPEMVT <> 'S' THEN w_MOUVEMENT_next.DATEDEB - interval '1 second' ELSE w_MOUVEMENT_next.DATEDEB END),
HEUREFIN = extract('hour' FROM CASE WHEN w_MOUVEMENT_next.TYPEMVT <> 'S' THEN w_MOUVEMENT_next.DATEDEB - interval '1 second' ELSE w_MOUVEMENT.DATEDEB END) * 10000 +
extract('minute' FROM CASE WHEN w_MOUVEMENT_next.TYPEMVT <> 'S' THEN w_MOUVEMENT_next.DATEDEB - interval '1 second' ELSE w_MOUVEMENT.DATEDEB END) * 100 +
extract('second' FROM CASE WHEN w_MOUVEMENT_next.TYPEMVT <> 'S' THEN w_MOUVEMENT_next.DATEDEB - interval '1 second' ELSE w_MOUVEMENT.DATEDEB END),
TYPEMVT_next = w_MOUVEMENT_next.TYPEMVT,
NOSERVINT_next = w_MOUVEMENT_next.NOSERVINT,
NOSERVSS_next = w_MOUVEMENT_next.NOSERVSS,
NOLIT_next = w_MOUVEMENT_next.NOLIT
FROM w_MOUVEMENT w_MOUVEMENT_next
WHERE w_MOUVEMENT.NODOSSIER = w_MOUVEMENT_next.NODOSSIER
AND w_MOUVEMENT.sequence = w_MOUVEMENT_next.sequence - 1;
-- Si hopital de jour sans journée,
UPDATE w_MOUVEMENT
SET TYPEMVT_next = 'C'
FROM activite[PX].p_sejours,
activite[PX].t_services_facturation
JOIN base.t_modes_traitement on t_services_facturation.mode_traitement_id = t_modes_traitement.oid
WHERE NODOSSIER = p_sejours.code_original AND
code_prevu <> '1' AND
TYPEMVT = 'E' AND
NOSERVSS = t_services_facturation.code_original AND
(TYPEMVT_NEXT = '' OR TYPEMVT_NEXT = 'S' AND date_entree <> date_sortie) AND
t_modes_traitement.code = '04' AND
t_services_facturation.type_t2a = '2';
-- calcul mvt avant
UPDATE w_MOUVEMENT
SET
TYPEMVT_before = w_MOUVEMENT_before.TYPEMVT,
NOSERVINT_before = w_MOUVEMENT_before.NOSERVINT,
NOSERVSS_before = w_MOUVEMENT_before.NOSERVSS,
NOLIT_before = w_MOUVEMENT_before.NOLIT
FROM w_MOUVEMENT w_MOUVEMENT_before
WHERE w_MOUVEMENT.NODOSSIER = w_MOUVEMENT_before.NODOSSIER
AND w_MOUVEMENT.sequence = w_MOUVEMENT_before.sequence + 1
AND w_MOUVEMENT.TYPEMVT <> 'S';
-- Absences
UPDATE w_MOUVEMENT
SET NOSERVINT = 'ABS'
WHERE TYPEMVT = 'A';
-- Hopital de jour Dernière séance avant dans sortie -- pas sur (c'est quoi P)
UPDATE w_MOUVEMENT SET
DATEDEB = DATEFIN,
DATEDEB_DAT = DATEFIN_DAT,
HEUREDEB = HEUREFIN
WHERE TYPEMVT = 'P' AND TYPEMVT_next = 'S' AND
DATEFIN <> DATEDEB;
-- Hopital de jour Première séance après date entree
UPDATE w_MOUVEMENT SET
DATEFIN = DATEDEB,
DATEFIN_DAT = DATEDEB_DAT,
HEUREFIN = HEUREDEB
WHERE TYPEMVT = 'E' AND TYPEMVT_next = 'C' AND
DATEDEB <> DATEFIN;
-- creation mouvements par jour
DROP TABLE IF EXISTS w_mouvements_sejour;
CREATE TEMP TABLE w_mouvements_sejour AS
SELECT
w_MOUVEMENT.NODOSSIER AS no_sejour,
p_sejours.oid AS sejour_id,
sequence,
p_calendrier.date,
p_calendrier.jour_semaine,
p_calendrier.is_weekend,
CASE WHEN p_calendrier.date = DATEDEB_DAT THEN HEUREDEB ELSE 0 END AS heure_debut,
CASE WHEN p_calendrier.date = DATEFIN_DAT THEN HEUREFIN ELSE 240000 END AS heure_fin,
CASE WHEN p_calendrier.date = DATEDEB_DAT AND TYPEMVT = 'E' AND p_sejours.type_sejour = '1' THEN 1 ELSE 0 END AS nb_entrees_directes,
CASE WHEN p_calendrier.date = DATEFIN_DAT AND (TYPEMVT = 'S' OR (TYPEMVT = 'E' AND DATEFIN_DAT = p_sejours.date_sortie)) AND p_sejours.type_sejour = '1' THEN 1 ELSE 0 END AS nb_sorties_directes,
CASE WHEN p_calendrier.date = DATEDEB_DAT AND TYPEMVT = 'E' AND p_sejours.type_sejour = '1' THEN '1' ELSE '0' END AS est_jour_entree,
CASE WHEN p_calendrier.date = DATEFIN_DAT AND (TYPEMVT = 'S' OR (TYPEMVT = 'E' AND DATEFIN_DAT = p_sejours.date_sortie)) 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 = DATEDEB_DAT AND TYPEMVT = 'E' AND p_sejours.type_sejour = '2' THEN 1 ELSE 0 END AS nb_ambulatoires,
CASE WHEN p_calendrier.date = DATEDEB_DAT AND TYPEMVT = 'E' AND p_sejours.type_sejour = '3' THEN 1 ELSE 0 END AS nb_externes,
CASE WHEN p_calendrier.date = DATEDEB_DAT AND TYPEMVT = 'E' AND p_sejours.type_sejour <> '9' AND t_dmt.code IN ('303', '307', '308', '401', '402', '403', '404', '405', '406', '407', '408', '409') THEN 1 ELSE 0 END AS nb_urgences,
0 as nb_seances,
CASE WHEN p_calendrier.date = DATEDEB_DAT AND TYPEMVT <> 'E' AND p_sejours.type_sejour = '1' AND NOSERVSS <> NOSERVSS_before THEN 1 ELSE 0 END AS nb_entrees_mutation_service,
CASE WHEN p_calendrier.date = DATEFIN_DAT AND TYPEMVT <> 'E' AND p_sejours.type_sejour = '1' AND NOSERVSS <> NOSERVSS_next THEN 1 ELSE 0 END AS nb_sorties_mutation_service,
CASE WHEN p_calendrier.date = DATEDEB_DAT AND TYPEMVT <> 'E' AND p_sejours.type_sejour = '1' AND NOSERVINT <> NOSERVINT_before THEN 1 ELSE 0 END AS nb_entrees_mutation_etage,
CASE WHEN p_calendrier.date = DATEFIN_DAT AND TYPEMVT <> 'E' AND p_sejours.type_sejour = '1' AND NOSERVINT <> NOSERVINT_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 <> DATEFIN_DAT OR TYPEMVT_next = 'S') THEN 1 ELSE 0 END AS nb_jours_js_inclus,
CASE WHEN p_sejours.type_sejour = '1' AND p_calendrier.date <> DATEFIN_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' OR SHO != 0) THEN '1' ELSE '0' END AS est_chambre_particuliere,
CASE WHEN p_sejours.type_sejour = '1' AND (t_lits.chambre_particuliere = 'O' OR SHO != 0) AND (p_calendrier.date <> DATEFIN_DAT OR TYPEMVT_next = 'S') THEN 1 ELSE 0 END AS nb_chambres_particulieres,
CASE WHEN p_calendrier.date = DATEDEB_DAT AND TYPEMVT = 'E' AND (COALESCE(w_MOUVEMENT.RSSBEBE) > 0) THEN 1 ELSE 0 END AS nb_bebes,
NOSERVINT,
NOSERVINT_SEJ,
NOSERVSS,
NOLIT,
CODEUM,
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(date_extraction) THEN '1' ELSE '0' END AS est_mouvement_previsionnel,
''::text AS est_premier_mouvement_jour,
''::text AS est_dernier_mouvement_jour
FROM w_MOUVEMENT
LEFT JOIN activite[PX].t_lieux ON
t_lieux.code_original_1 = NOSERVINT::text AND
t_lieux.code_original_2 = CODEUM::text AND
t_lieux.code_original_4 = NOLIT AND
t_lieux.code_original_5 = NOSERVSS::text
JOIN w_DOSSIER ON w_DOSSIER.NODOSSIER = w_MOUVEMENT.NODOSSIER
JOIN activite[PX].p_sejours ON w_MOUVEMENT.NODOSSIER = p_sejours.no_sejour AND p_sejours.etat = ''
LEFT JOIN activite[PX].t_lits ON NOLIT = t_lits.code_original
JOIN activite[PX].t_services_facturation ON NOSERVINT::text = t_services_facturation.code_original
JOIN base.t_dmt ON t_services_facturation.dmt_id = t_dmt.oid
JOIN base.p_calendrier ON p_calendrier.date BETWEEN DATEDEB_DAT AND DATEFIN_DAT AND p_calendrier.date <= date(date_extraction) + interval '1 month'
WHERE
(TYPEMVT <> 'P' OR TYPEMVT_next = 'S') AND
(p_sejours.type_sejour NOT IN ('2', '3') OR (p_sejours.type_sejour IN ('2', '3') AND TYPEMVT = 'E' AND (p_calendrier.date = DATEDEB_DAT OR p_calendrier.date = DATEFIN_DAT))) AND
(p_sejours.code_prevu <> '1' AND p_calendrier.date <= date(date_extraction) OR p_calendrier.date >= date(date_extraction))
ORDER BY sequence, p_calendrier.date;
UPDATE w_mouvements_sejour SET
nb_sorties_mutation_etage = 0,
nb_sorties_mutation_service = 0,
nb_sorties_mutation_activite = 0,
nb_sorties_mutation_unite_medicale = 0
WHERE nb_sorties_directes = 1 AND (
nb_sorties_mutation_etage <> 0 OR
nb_sorties_mutation_service <> 0 OR
nb_sorties_mutation_activite <> 0 OR
nb_sorties_mutation_unite_medicale <> 0
)
;
-- correction des heure E/S
UPDATE activite[PX].p_sejours SET
heure_entree = heure_sortie,
heure_sortie = heure_entree
WHERE
heure_sortie < heure_entree
AND date_entree = date_sortie;
UPDATE w_mouvements_sejour SET
heure_fin = heure_debut,
heure_debut = heure_fin
FROM activite[PX].p_sejours
WHERE
w_mouvements_sejour.no_sejour = p_sejours.no_sejour
AND date_entree = date_sortie
AND heure_fin < heure_debut;
DELETE FROM w_mouvements_sejour WHERE heure_fin < heure_debut;
-- Actualisation lieux
UPDATE activite[PX].t_lieux SET
service_facturation_id = t_services_facturation.oid,
mode_traitement_id = t_services_facturation.mode_traitement_id
FROM activite[PX].t_services_facturation
WHERE
code_original_1 = t_services_facturation.code_original;
UPDATE activite[PX].t_lieux SET
unite_medicale_id = t_unites_medicales.oid
FROM activite[PX].t_unites_medicales
WHERE
code_original_2 = t_unites_medicales.code_original;
UPDATE activite[PX].t_lieux SET
unite_fonctionnelle_id = t_unites_fonctionnelles.oid
FROM activite[PX].t_unites_fonctionnelles
WHERE
code_original_6 = t_unites_fonctionnelles.code_original;
UPDATE activite[PX].t_lieux SET
lit_id = t_lits.oid
FROM activite[PX].t_lits
WHERE
code_original_4 = t_lits.code;
-- creation nouveaux lieux
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
NOSERVINT,
CODEUM,
'',
NOLIT,
NOSERVSS,
'',
'',
t_services_facturation.oid,
COALESCE(t_activites.oid,0),
COALESCE(t_lits.oid,0),
COALESCE(t_unites_medicales.oid,0),
COALESCE(t_unites_fonctionnelles.oid,0),
t_services_facturation.mode_traitement_id
FROM w_mouvements_sejour
LEFT JOIN activite[PX].t_lieux ON
t_lieux.code_original_1 = NOSERVINT::text AND
t_lieux.code_original_2 = CODEUM::text AND
t_lieux.code_original_4 = NOLIT AND
t_lieux.code_original_5 = NOSERVSS::text
JOIN activite[PX].t_services_facturation ON w_mouvements_sejour.NOSERVINT::text = t_services_facturation.code_original
LEFT JOIN activite[PX].t_unites_medicales ON CODEUM::text = t_unites_medicales.code_original
LEFT JOIN activite[PX].t_activites ON NOSERVINT_SEJ = t_activites.code_original
LEFT JOIN activite[PX].t_lits ON NOLIT = t_lits.code_original
LEFT JOIN activite[PX].t_unites_fonctionnelles ON NOSERVSS::text = t_unites_fonctionnelles.code_original
WHERE t_lieux.oid IS NULL;
-- Mise à jour lieux dans futurs mouvements
UPDATE w_mouvements_sejour SET lieu_id = t_lieux.oid
FROM activite[PX].t_lieux
WHERE
t_lieux.code_original_1 = NOSERVINT::text AND
t_lieux.code_original_4 = NOLIT AND
t_lieux.code_original_5 = NOSERVSS::text
AND w_mouvements_sejour.lieu_id = 0;
-- Médecin séjour
UPDATE w_mouvements_sejour SET medecin_sejour_id = t_medecins_administratifs.oid
FROM W_KPRAT, prod_mederi.KSEJOUR, activite[PX].t_medecins_administratifs
WHERE KSEJOUR.NOPRAT = t_medecins_administratifs.code_original
AND KSEJOUR.NODOSSIER = w_mouvements_sejour.no_sejour
AND date BETWEEN DATEDEB AND DATEFIN
AND w_mouvements_sejour.medecin_sejour_id <> t_medecins_administratifs.oid
AND t_medecins_administratifs.oid <> 0;
-- mise à jour par le code insee (désactivé car Osny veut voir les erreurs de saisie)
-- UPDATE w_mouvements_sejour SET medecin_sejour_id = t_medecins_administratifs.oid
-- FROM W_KPRAT KPRAT, prod_mederi.KSEJOUR, activite[PX].t_medecins_administratifs
-- WHERE
-- KSEJOUR.NOPRAT = KPRAT.CODEINSEE
-- AND KPRAT.NOPRAT = t_medecins_administratifs.code_original
-- AND KSEJOUR.NODOSSIER = w_mouvements_sejour.no_sejour
-- AND date BETWEEN DATEDEB AND DATEFIN
-- AND w_mouvements_sejour.medecin_sejour_id <> t_medecins_administratifs.oid
-- AND t_medecins_administratifs.oid <> 0;
--
-- Unité médicale selon UF
UPDATE activite[PX].t_lieux
SET unite_medicale_id = t_unites_medicales.oid,
code_original_5 = NOSERVSS
FROM prod_mederi.KSERVINT
JOIN activite[PX].t_unites_medicales ON NOSERVSS =t_unites_medicales.code_original
WHERE NOSERVINT = code_original_6 AND
(unite_medicale_id IS DISTINCT FROM t_unites_medicales.oid OR
code_original_5 IS DISTINCT FROM NOSERVSS);
UPDATE activite[PX].t_lieux
SET unite_medicale_id = t_unites_medicales.oid,
code_original_5 = '*ABS'
FROM activite[PX].t_unites_medicales
WHERE code_original_1 = '*ABS' AND t_unites_medicales.code_original = '*ABS';
-- Unité médicale principale selon UF
UPDATE activite[PX].t_lieux SET
activite_id = t_activites.oid,
code_original_1 = NOSERVINT
FROM prod_mederi.KSERVINT
JOIN activite[PX].t_activites ON NOSERVSS = t_activites.code_original
WHERE NOSERVINT = code_original_1 AND
activite_id = 0;
-- Seances selon GHS pmsi
DROP TABLE IF EXISTS w_ghs_seances;
CREATE TEMP TABLE w_ghs_seances AS
SELECT ghs_id AS oid
FROM activite[PX].p_sejours
JOIN base.t_ghm ON p_sejours.ghm_id = t_ghm.oid AND t_ghm.code LIKE '28%'
JOIN base.t_ghs ON p_sejours.ghs_id = t_ghs.oid AND t_ghs.code <> 9999 AND t_ghs.code > 0
WHERE ghs_id <> 0
GROUP BY 1;
DROP TABLE IF EXISTS w_sejours_seances;
CREATE TEMP TABLE w_sejours_seances AS
SELECT
p_sejours.no_sejour,
date_entree AS date,
1 AS nb_seances
FROM activite[PX].p_sejours
JOIN base.t_ghs ON p_sejours.ghs_id = t_ghs.oid
JOIN base.t_ghm ON p_sejours.ghm_id = t_ghm.oid
WHERE date_entree = date_sortie AND
(ghs_id IN (SELECT oid FROM w_ghs_seances) OR t_ghm.code LIKE '28%');
CREATE INDEX w_sejours_seances_i1
ON w_sejours_seances
USING btree
(no_sejour);
UPDATE w_mouvements_sejour
SET nb_seances = w_sejours_seances.nb_seances
FROM w_sejours_seances
WHERE w_sejours_seances.no_sejour = w_mouvements_sejour.no_sejour AND
w_sejours_seances.date = w_mouvements_sejour.date AND
w_mouvements_sejour.nb_seances IS DISTINCT FROM w_sejours_seances.nb_seances;
-- seances selon RSS
DROP TABLE IF EXISTS w_SEANCES_RSS;
CREATE TEMP TABLE w_SEANCES_RSS AS
SELECT
NODOSSIER,
DATEACTE as DATE_SEANCE,
count(*) as nb_seances
FROM prod_mederi.MSEANCES
JOIN prod_mederi.KRUM ON KRUM.RSSNR = MSEANCES.RSSNR
GROUP BY 1,2;
UPDATE w_mouvements_sejour
SET nb_seances = w_SEANCES_RSS.nb_seances
FROM w_SEANCES_RSS
WHERE NODOSSIER = w_mouvements_sejour.no_sejour AND
w_SEANCES_RSS.DATE_SEANCE = w_mouvements_sejour.date;
-- seances selon GHS facturé
DROP TABLE IF EXISTS w_KACTES_seances;
CREATE TEMP TABLE w_KACTES_seances AS
SELECT
p_sejours.no_sejour,
DATEACTE AS date,
SUM(QTE::int) AS nb_seances
FROM prod_mederi.KACTES
JOIN w_KFACTURE KFACTURE ON KFACTURE.NOFAC = KACTES.NOFAC AND est_doublon = '0' -- AND FACPARTIEL <> 9
JOIN activite[PX].p_sejours ON KFACTURE.NODOSSIER = p_sejours.code_original
JOIN base.t_ghs ON GHS = t_ghs.code
WHERE
t_ghs.oid IN (SELECT oid FROM w_ghs_seances)
GROUP BY 1,2
HAVING SUM(QTE::int) > 0;
CREATE INDEX w_KACTES_seances_i1
ON w_KACTES_seances
USING btree
(no_sejour);
UPDATE w_mouvements_sejour
SET nb_seances = w_KACTES_seances.nb_seances
FROM w_KACTES_seances
WHERE w_KACTES_seances.no_sejour = w_mouvements_sejour.no_sejour AND
w_KACTES_seances.date = w_mouvements_sejour.date;
-- seances selon D09, D11 facturé => pas de dialyse dans les actes
-- seances selon Actes
DROP TABLE IF EXISTS w_K_seances;
CREATE TEMP TABLE w_K_seances AS
SELECT
p_sejours.no_sejour,
DATEACTE AS date,
SUM(QTE::int) AS nb_seances
FROM prod_mederi.KACTES
JOIN activite[PX].p_sejours ON NODOSSIER = p_sejours.code_original
WHERE
NOACTE = 'K' AND
QTE > 0
GROUP BY 1,2;
UPDATE w_mouvements_sejour
SET nb_seances = w_K_seances.nb_seances
FROM w_K_seances
WHERE w_K_seances.no_sejour = w_mouvements_sejour.no_sejour AND
w_K_seances.date = w_mouvements_sejour.date AND
w_mouvements_sejour.nb_seances = 0;
-- seances selon D09
-- Seances selon type sejour DE = DS
UPDATE w_mouvements_sejour
SET nb_seances = 1
FROM activite[PX].p_sejours
WHERE p_sejours.no_sejour = w_mouvements_sejour.no_sejour AND
p_sejours.type_sejour = '5' AND
p_sejours.date_entree = p_sejours.date_sortie AND
p_sejours.date_entree = w_mouvements_sejour.date AND
w_mouvements_sejour.heure_debut > 0 AND
w_mouvements_sejour.nb_seances = 0 AND
w_mouvements_sejour.no_sejour NOT IN (SELECT no_sejour FROM w_mouvements_sejour WHERE nb_seances > 0);
-- plusieurs séances le même jour
DROP TABLE IF EXISTS w_seances;
CREATE TEMP TABLE w_seances as
SELECT no_sejour, date, MAX(heure_debut) AS heure_debut
FROM w_mouvements_sejour
WHERE nb_seances > 0
GROUP BY 1,2
HAVING count(DISTINCT heure_debut) > 1;
UPDATE w_mouvements_sejour
SET nb_seances = 0
FROM w_seances
WHERE w_mouvements_sejour.no_sejour = w_seances.no_sejour and
w_mouvements_sejour.date = w_seances.date and
w_mouvements_sejour.heure_debut <> w_seances.heure_debut;
-- Doublons potentiels
DELETE FROM w_mouvements_sejour
USING (
SELECT
no_sejour, date, heure_debut, MAX(CTID) AS fromCTID
FROM w_mouvements_sejour
GROUP BY 1,2,3
HAVING count(*) > 1) subview
WHERE 1=1
AND subview.no_sejour = w_mouvements_sejour.no_sejour
AND subview.date = w_mouvements_sejour.date
AND subview.heure_debut = w_mouvements_sejour.heure_debut
AND subview.fromCTID != w_mouvements_sejour.CTID;
-- Mise en production des mouvements
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');
-- DROP TABLE IF EXISTS TEMP.w_MOUVEMENT;
-- CREATE TABLE temp.w_MOUVEMENT AS SELECT * FROM w_MOUVEMENT;
-- DROP TABLE IF EXISTS TEMP.w_MOUVEMENTS_SEJOUR;
-- CREATE TABLE temp.w_MOUVEMENTS_SEJOUR AS SELECT * FROM w_MOUVEMENTS_SEJOUR;
INSERT INTO activite[PX].p_mouvements_sejour(
sejour_id, no_sejour, date, est_mouvement_previsionnel, 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)
SELECT sejour_id, no_sejour, date, est_mouvement_previsionnel ,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
FROM w_mouvements_sejour
WHERE heure_fin >= heure_debut
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');
-- Lieux de sortie
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 <> 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_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 code_sorti = '1'
FROM activite[PX].p_mouvements_sejour
WHERE p_sejours.no_sejour = p_mouvements_sejour.no_sejour AND
code_sorti = '0' AND
(nb_ambulatoires > 0 OR nb_externes > 0) AND
date_sortie <= now();
UPDATE activite[PX].p_sejours
SET type_sejour = '5'
WHERE type_sejour <> '5' AND
type_sejour <> '1' 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
);
-- Suppression des tables de travail non utilisées après
DROP TABLE IF EXISTS w_MOUVEMENT;
DROP TABLE IF EXISTS w_mouvements_sejour;
DROP TABLE IF EXISTS w_seances;
DROP TABLE IF EXISTS w_K_seances;
DROP TABLE IF EXISTS w_KACTES_seances;
]]></sqlcmd>
</NODE>
</NODE>
<NODE name="FACTURE" label="RECUPERATION DES FACTURES">
<NODE label="Entêtes">
<sqlcmd><![CDATA[
DROP TABLE IF EXISTS w_sejours_orga CASCADE;
CREATE TEMP TABLE w_sejours_orga AS
SELECT
no_sejour,
p_sejours.oid AS sejour_id,
p_sejours.code_original,
p_sejours.date_entree,
p_sejours.date_sortie,
p_sejours.ghs_id,
p_sejours.lieu_sortie_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,
t_tiers_payant_1.code_original as tiers_payant_1_orga_id,
t_tiers_payant_2.code_original as tiers_payant_2_orga_id,
t_tiers_payant_22.code_original as tiers_payant_22_orga_id
FROM activite[PX].p_sejours,activite[PX].t_tiers_payant t_tiers_payant_1, activite[PX].t_tiers_payant t_tiers_payant_2, activite[PX].t_tiers_payant t_tiers_payant_22
WHERE p_sejours.etat = '' AND
tiers_payant_1_id = t_tiers_payant_1.oid AND
tiers_payant_2_id = t_tiers_payant_2.oid AND
tiers_payant_22_id = t_tiers_payant_22.oid;
CREATE INDEX w_sejours_orga_i1
ON w_sejours_orga
USING btree
(code_original);
-- factures à traiter
DROP TABLE IF EXISTS w_FAC_FACTURE;
CREATE TEMP TABLE w_FAC_FACTURE AS
SELECT KFACTURE.*,
w_sejours_orga.*,
TYPEETAB,
'1'::text AS FAC_HON,
w_DOSSIER.DATEENTREE AS date_debut_facture,
COALESCE(KFACTURE.DATEFACPAR, DATESORTIE) AS date_fin_facture,
ROW_NUMBER() OVER (
PARTITION BY KFACTURE.NODOSSIER
ORDER BY COALESCE(CASE WHEN KFACTURE.NOFAC NOT LIKE 'P%' THEN KFACTURE.DATEFACPAR ELSE '20991231' END, DATESORTIE)
) AS rang_facture
FROM w_KFACTURE KFACTURE
JOIN w_DOSSIER ON KFACTURE.NODOSSIER = w_DOSSIER.NODOSSIER
--LEFT JOIN prod_mederi.KENCOURS ON KENCOURS.NOFAC = KFACTURE.NOFAC
LEFT JOIN prod_mederi.ETABLI ON w_DOSSIER.NOETABLI = ETABLI.NOETABLI
JOIN w_sejours_orga ON (KFACTURE.NODOSSIER = w_sejours_orga.no_sejour)
WHERE KFACTURE.NOFAC IS NOT NULL
AND w_sejours_orga.no_sejour = KFACTURE.NODOSSIER
AND est_doublon = '0'
-- AND KENCOURS.NOFAC IS NULL
-- AND (FACPARTIEL = 1 OR FACT_DAT_SUP IS NULL)
;
UPDATE w_FAC_FACTURE
SET date_debut_facture = date(w_FAC_FACTURE_p.date_fin_facture + interval '1 day')
FROM w_FAC_FACTURE w_FAC_FACTURE_p
WHERE w_FAC_FACTURE.NODOSSIER = w_FAC_FACTURE_p.NODOSSIER AND
w_FAC_FACTURE.rang_facture = w_FAC_FACTURE_p.rang_facture+1 AND
w_FAC_FACTURE.NOFAC NOT LIKE 'P%' AND
date(w_FAC_FACTURE_p.date_fin_facture + interval '1 day') <= w_FAC_FACTURE.date_fin_facture
;
CREATE INDEX w_FAC_FACTURE_i1
ON w_FAC_FACTURE
USING btree
(NOFAC);
--maj mutuelles différentes sur facture
DROP TABLE IF EXISTS w_PEC_FACTURE;
CREATE TEMP TABLE w_PEC_FACTURE AS
SELECT NOFAC,
t_tiers_payant_2.oid::bigint AS tiers_payant_2_id,
t_tiers_payant_2.code_original as tiers_payant_2_orga_id
FROM w_KFACTURE KFACTURE
LEFT JOIN prod_mederi.ORGMUT ON KFACTURE.NOMUTUELLE = ORGMUT.NOMUTUELLE
LEFT JOIN activite[PX].t_tiers_payant t_tiers_payant_2 ON (KFACTURE.NOMUTUELLE = t_tiers_payant_2.code_original)
WHERE NOFAC IS NOT NULL AND est_doublon = '0'
GROUP BY 1,2;
ALTER TABLE w_PEC_FACTURE ADD CONSTRAINT w_PEC_FACTURE_pkey PRIMARY KEY(NOFAC);
UPDATE w_FAC_FACTURE
SET
tiers_payant_2_id = w_PEC_FACTURE.tiers_payant_2_id,
tiers_payant_2_orga_id = w_PEC_FACTURE.tiers_payant_2_orga_id
FROM w_PEC_FACTURE
WHERE
w_FAC_FACTURE.tiers_payant_2_id <> w_PEC_FACTURE.tiers_payant_2_id
AND w_FAC_FACTURE.NOFAC = w_PEC_FACTURE.NOFAC;
-- En budget global, tous les honoraires ne sont pas facturés (inclus dans GHS) => non utile dans oqn (seul cas traité pour l'instant)
-- Informations montants factures et regles
DROP TABLE IF EXISTS w_FAC_MONTANTS;
CREATE TEMP TABLE w_FAC_MONTANTS AS
SELECT
NOFAC,
SUM(CASE WHEN FACPARTIEL != 9 THEN MNTPREST ELSE 0 END) AS montant_facture_c,
SUM(CASE WHEN FACPARTIEL != 9 THEN MNTPASS ELSE 0 END) AS montant_facture_0_c,
SUM(CASE WHEN FACPARTIEL != 9 THEN MNTPAM ELSE 0 END) AS montant_facture_1_c,
SUM(CASE WHEN FACPARTIEL != 9 THEN MNTPMUT ELSE 0 END) AS montant_facture_2_c,
0 AS montant_facture_22_c,
SUM(CASE WHEN FACPARTIEL != 9 AND DATEFAC IS NOT NULL THEN MNTPREST ELSE 0 END) AS montant_comptabilise_c,
SUM(CASE WHEN FACPARTIEL != 9 AND DATEFAC IS NOT NULL THEN MNTPASS ELSE 0 END) AS montant_comptabilise_0_c,
SUM(CASE WHEN FACPARTIEL != 9 AND DATEFAC IS NOT NULL THEN MNTPAM ELSE 0 END) AS montant_comptabilise_1_c,
SUM(CASE WHEN FACPARTIEL != 9 AND DATEFAC IS NOT NULL THEN MNTPMUT ELSE 0 END) AS montant_comptabilise_2_c,
SUM(CASE WHEN FACPARTIEL != 9 AND DATEFAC IS NOT NULL THEN 0 ELSE 0 END) AS montant_comptabilise_22_c,
SUM(CASE WHEN FACPARTIEL != 9 THEN MNTPREST - (SLDPAM + SLDPMUT + SLDPASS) ELSE 0 END) AS montant_regle_c,
SUM(CASE WHEN FACPARTIEL != 9 THEN MNTPASS - SLDPASS ELSE 0 END) AS montant_regle_0_c,
SUM(CASE WHEN FACPARTIEL != 9 THEN MNTPAM - SLDPAM ELSE 0 END) AS montant_regle_1_c,
SUM(CASE WHEN FACPARTIEL != 9 THEN MNTPMUT - SLDPMUT ELSE 0 END) AS montant_regle_2_c,
SUM(CASE WHEN FACPARTIEL != 9 THEN 0 ELSE 0 END) AS montant_regle_22_c,
SUM(CASE WHEN FACPARTIEL != 9 THEN MNTHONO ELSE 0 END) AS montant_facture_h,
SUM(CASE WHEN FACPARTIEL != 9 THEN MNTHASS ELSE 0 END) AS montant_facture_0_h,
SUM(CASE WHEN FACPARTIEL != 9 THEN MNTHAM ELSE 0 END) AS montant_facture_1_h,
SUM(CASE WHEN FACPARTIEL != 9 THEN MNTHMUT ELSE 0 END) AS montant_facture_2_h,
SUM(CASE WHEN FACPARTIEL != 9 THEN 0 ELSE 0 END) AS montant_facture_22_h,
SUM(CASE WHEN FACPARTIEL != 9 AND DATEFAC IS NOT NULL THEN MNTHONO ELSE 0 END) AS montant_comptabilise_h,
SUM(CASE WHEN FACPARTIEL != 9 AND DATEFAC IS NOT NULL THEN MNTHASS ELSE 0 END) AS montant_comptabilise_0_h,
SUM(CASE WHEN FACPARTIEL != 9 AND DATEFAC IS NOT NULL THEN MNTHAM ELSE 0 END) AS montant_comptabilise_1_h,
SUM(CASE WHEN FACPARTIEL != 9 AND DATEFAC IS NOT NULL THEN MNTHMUT ELSE 0 END) AS montant_comptabilise_2_h,
SUM(CASE WHEN FACPARTIEL != 9 AND DATEFAC IS NOT NULL THEN 0 ELSE 0 END) AS montant_comptabilise_22_h,
SUM(CASE WHEN FACPARTIEL != 9 THEN MNTHONO - (SLDHAM + SLDHMUT + SLDHASS) ELSE 0 END) AS montant_regle_h,
SUM(CASE WHEN FACPARTIEL != 9 THEN MNTHASS - SLDHASS ELSE 0 END) AS montant_regle_0_h,
SUM(CASE WHEN FACPARTIEL != 9 THEN MNTHAM - SLDHAM ELSE 0 END) AS montant_regle_1_h,
SUM(CASE WHEN FACPARTIEL != 9 THEN MNTHMUT - SLDHMUT ELSE 0 END) AS montant_regle_2_h,
SUM(CASE WHEN FACPARTIEL != 9 THEN 0 ELSE 0 END) AS montant_regle_22_h
FROM w_FAC_FACTURE
WHERE NOFAC IS NOT NULL
GROUP BY NOFAC;
CREATE INDEX w_FAC_MONTANTS_i1
ON w_FAC_MONTANTS
USING btree
(NOFAC);
UPDATE w_FAC_MONTANTS
SET
montant_facture_c = -montant_facture_c,
montant_facture_0_c = -montant_facture_0_c ,
montant_facture_1_c = -montant_facture_1_c,
montant_facture_2_c = -montant_facture_2_c,
montant_facture_22_c = montant_facture_22_c,
montant_comptabilise_c = -montant_comptabilise_c,
montant_comptabilise_0_c = -montant_comptabilise_0_c,
montant_comptabilise_1_c = -montant_comptabilise_1_c,
montant_comptabilise_2_c = -montant_comptabilise_2_c,
montant_comptabilise_22_c = -montant_comptabilise_22_c,
montant_regle_c = -montant_regle_c,
montant_regle_0_c = -montant_regle_0_c,
montant_regle_1_c = -montant_regle_1_c,
montant_regle_2_c = -montant_regle_2_c,
montant_regle_22_c = -montant_regle_22_c,
montant_facture_h = -montant_facture_h,
montant_facture_0_h = -montant_facture_0_h,
montant_facture_1_h = -montant_facture_1_h,
montant_facture_2_h = -montant_facture_2_h,
montant_facture_22_h = -montant_facture_22_h,
montant_comptabilise_h = -montant_comptabilise_h,
montant_comptabilise_0_h = -montant_comptabilise_0_h,
montant_comptabilise_1_h = -montant_comptabilise_1_h,
montant_comptabilise_2_h = -montant_comptabilise_2_h,
montant_comptabilise_22_h = -montant_comptabilise_22_h,
montant_regle_h = -montant_regle_h,
montant_regle_0_h = -montant_regle_0_h,
montant_regle_1_h = -montant_regle_1_h,
montant_regle_2_h = -montant_regle_2_h,
montant_regle_22_h = -montant_regle_22_h
WHERE NOFAC IN (SELECT NOFAC FROM w_KFACTURE KFACTURE WHERE TYPEFAC IN ('2','4'));
-- Informations date dernier reglement
DROP TABLE IF EXISTS w_FAC_REGLEMENT;
CREATE TEMP TABLE w_FAC_REGLEMENT AS
SELECT
KACTES.NODOSSIER,
KACTES.NOFAC,
MAX(CASE WHEN TYPERUB <> 4 AND DEBITEUR = 3 THEN DATE ELSE NULL END) AS date_dernier_reglement_0_c,
MAX(CASE WHEN TYPERUB <> 4 AND DEBITEUR = 1 THEN DATE ELSE NULL END) AS date_dernier_reglement_1_c,
MAX(CASE WHEN TYPERUB <> 4 AND DEBITEUR = 2 THEN DATE ELSE NULL END) AS date_dernier_reglement_2_c,
date(NULL) AS date_dernier_reglement_22_c,
MAX(CASE WHEN TYPERUB = 4 AND DEBITEUR = 3 THEN DATE ELSE NULL END) AS date_dernier_reglement_0_h,
MAX(CASE WHEN TYPERUB = 4 AND DEBITEUR = 1 THEN DATE ELSE NULL END) AS date_dernier_reglement_1_h,
MAX(CASE WHEN TYPERUB = 4 AND DEBITEUR = 2 THEN DATE ELSE NULL END) AS date_dernier_reglement_2_h,
date(NULL) AS date_dernier_reglement_22_h,
count(DISTINCT date_part('month',DATE)) AS nb_mois_reglement
FROM w_KRGLDET KRGLDET
JOIN prod_mederi.KACTES ON KACTES.ACCLEUNIK = KRGLDET.ACCLEUNIK
JOIN w_KFACTURE KFACTURE ON KRGLDET.NOFAC = KFACTURE.NOFAC
WHERE est_doublon = '0'
GROUP BY 1,2;
CREATE INDEX w_FAC_REGLEMENT_i1
ON w_FAC_REGLEMENT
USING btree
(NOFAC);
-- Informations date vente (direct dans kfacture)
-- Informations expedition (factures et avoir)
DROP TABLE IF EXISTS w_FAC_BORDEREAU;
CREATE TEMP TABLE w_FAC_BORDEREAU AS
SELECT NOFAC,
'0'::text AS code_expedie_0,
MAX(CASE WHEN NOBORD != '' AND NOBORD !='X' THEN '1' ELSE '0' END) AS code_expedie_1,
MAX(CASE WHEN NOBORDM != '' AND NOBORD != 'X' THEN '1' ELSE '0' END) AS code_expedie_2,
'0' AS code_expedie_22,
''::text AS no_bordereau_0,
MAX(CASE WHEN NOBORD != '' AND NOBORD != 'X' THEN NOBORD::bigint ELSE '0' END) AS no_bordereau_1,
MAX(CASE WHEN NOBORDM != '' AND NOBORDM != 'X' THEN NOBORDM::bigint ELSE '0' END) AS no_bordereau_2,
NULL AS no_bordereau_22,
'20991231'::date AS date_expedition_0,
MIN(CASE WHEN NOBORD != '' AND NOBORD !='X' THEN DATEBORD ELSE '20991231' END) AS date_expedition_1,
MIN(CASE WHEN NOBORDM != '' AND NOBORDM !='X' THEN DATEBORD ELSE '20991231' END) AS date_expedition_2,
'20991231'::date AS date_expedition_22
FROM w_KFACTURE KFACTURE
WHERE NOFAC IS NOT NULL AND est_doublon = '0'
GROUP BY 1;
CREATE INDEX w_FAC_BORDEREAU_i1
ON w_FAC_BORDEREAU
USING btree
(NOFAC);
-- Informations rejets
DROP TABLE IF EXISTS w_FAC_REJET;
CREATE TEMP TABLE w_FAC_REJET AS
SELECT FACTURE AS NOFAC,
COUNT(*) as nb_rejets
FROM prod_mederi.KNOERJ
WHERE TRIM(ERRCODE) <> '0001'
GROUP BY FACTURE;
CREATE INDEX w_FAC_REJET_i1
ON w_FAC_REJET
USING btree
(NOFAC);
-- Ajout des factures
SELECT base.cti_disable_index('activite[PX]', 'i_factures_3');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_4');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_5');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_6');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_7');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_8');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_9');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_10');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_11');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_12');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_13');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_14');
INSERT INTO activite[PX].p_factures(
sejour_id,
no_sejour,
no_facture,
date_debut,
date_fin,
type_facture,
code_facture,
date_facture,
code_vente,
date_vente,
mois_vente,
date_solde,
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_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,
montant_facture_c_actes_inclus_dans_sejour,
montant_facture_h_actes_inclus_dans_sejour
)
SELECT
sejour_id,
no_sejour,
w_FAC_FACTURE.NOFAC AS no_facture,
date_debut_facture AS date_debut,
date_fin_facture AS date_fin,
CASE
WHEN TYPEFAC = '1' THEN '0'
WHEN TYPEFAC IN ('2','4') THEN '1'
WHEN TYPEFAC IN ('3') THEN 'P'
ELSE '0' END AS type_facture,
CASE WHEN FACPARTIEL != 9 THEN '1' ELSE '0' END AS code_facture,
DATEFAC AS date_facture,
CASE WHEN DATEFAC IS NOT NULL THEN '1' ELSE '0' END AS code_vente,
CASE WHEN DATEFAC IS NOT NULL THEN DATEFAC ELSE '20991231'::date END AS date_vente,
CASE WHEN DATEFAC IS NOT NULL THEN extract('year' FROM DATEFAC) * 100 + extract('month' FROM DATEFAC) ELSE extract('year' FROM '20991231'::date) * 100 + extract('month' FROM '20991231'::date) END AS mois_vente,
COALESCE(
GREATEST(
CASE
WHEN w_FAC_MONTANTS.montant_comptabilise_0_c = 0 THEN date_sortie ELSE date_dernier_reglement_0_c END,
CASE
WHEN w_FAC_MONTANTS.montant_comptabilise_0_h = 0 THEN date_sortie ELSE date_dernier_reglement_0_h END,
CASE
WHEN w_FAC_MONTANTS.montant_comptabilise_1_c = 0 THEN date_sortie ELSE date_dernier_reglement_1_c END,
CASE
WHEN w_FAC_MONTANTS.montant_comptabilise_1_h = 0 THEN date_sortie ELSE date_dernier_reglement_1_h END,
CASE
WHEN w_FAC_MONTANTS.montant_comptabilise_2_c = 0 THEN date_sortie ELSE date_dernier_reglement_2_c END,
CASE
WHEN w_FAC_MONTANTS.montant_comptabilise_2_h = 0 THEN date_sortie ELSE date_dernier_reglement_2_h END,
CASE
WHEN w_FAC_MONTANTS.montant_comptabilise_22_c = 0 THEN date_sortie ELSE date_dernier_reglement_22_c END,
CASE
WHEN w_FAC_MONTANTS.montant_comptabilise_22_h = 0 THEN date_sortie ELSE date_dernier_reglement_22_h END)
, '20991231') as date_solde,
w_FAC_MONTANTS.montant_facture_c AS montant_facture_c,
w_FAC_MONTANTS.montant_facture_h AS montant_facture_h,
w_FAC_MONTANTS.montant_regle_c AS montant_regle_c,
w_FAC_MONTANTS.montant_regle_h AS montant_regle_h,
DATEFAC - date_sortie as delai_facture,
0 as delai_solde,
LEAST(w_FAC_BORDEREAU.date_expedition_1, w_FAC_BORDEREAU.date_expedition_2) as date_expedition,
0 as delai_expedition,
tiers_payant_0_id,
tiers_payant_1_id,
tiers_payant_2_id,
tiers_payant_22_id,
CASE
WHEN w_FAC_MONTANTS.montant_comptabilise_0_c = 0 THEN date_sortie
WHEN date_dernier_reglement_0_c IS NOT NULL THEN date_dernier_reglement_0_c ELSE '20991231' END as date_solde_0_c,
CASE
WHEN w_FAC_MONTANTS.montant_comptabilise_0_h = 0 THEN date_sortie
WHEN date_dernier_reglement_0_h IS NOT NULL THEN date_dernier_reglement_0_h ELSE '20991231' END as date_solde_0_h,
CASE
WHEN w_FAC_MONTANTS.montant_comptabilise_1_c = 0 THEN date_sortie
WHEN date_dernier_reglement_1_c IS NOT NULL THEN date_dernier_reglement_1_c ELSE '20991231' END as date_solde_1_c,
CASE
WHEN w_FAC_MONTANTS.montant_comptabilise_1_h = 0 THEN date_sortie
WHEN date_dernier_reglement_1_h IS NOT NULL THEN date_dernier_reglement_1_h ELSE '20991231' END as date_solde_1_h,
CASE
WHEN w_FAC_MONTANTS.montant_comptabilise_2_c = 0 THEN date_sortie
WHEN date_dernier_reglement_2_c IS NOT NULL THEN date_dernier_reglement_2_c ELSE '20991231' END as date_solde_2_c,
CASE
WHEN w_FAC_MONTANTS.montant_comptabilise_2_h = 0 THEN date_sortie
WHEN date_dernier_reglement_2_h IS NOT NULL THEN date_dernier_reglement_2_h ELSE '20991231' END as date_solde_2_h,
CASE
WHEN w_FAC_MONTANTS.montant_comptabilise_22_c = 0 THEN date_sortie
WHEN date_dernier_reglement_22_c IS NOT NULL THEN date_dernier_reglement_22_c ELSE '20991231' END as date_solde_22_c,
CASE
WHEN w_FAC_MONTANTS.montant_comptabilise_22_h = 0 THEN date_sortie
WHEN date_dernier_reglement_22_h IS NOT NULL THEN date_dernier_reglement_22_h ELSE '20991231' END as date_solde_22_h,
w_FAC_BORDEREAU.date_expedition_0,
w_FAC_BORDEREAU.date_expedition_1,
w_FAC_BORDEREAU.date_expedition_2,
w_FAC_BORDEREAU.date_expedition_22,
w_FAC_BORDEREAU.code_expedie_0,
w_FAC_BORDEREAU.code_expedie_1,
w_FAC_BORDEREAU.code_expedie_2,
w_FAC_BORDEREAU.code_expedie_22,
w_FAC_BORDEREAU.no_bordereau_0,
w_FAC_BORDEREAU.no_bordereau_1,
w_FAC_BORDEREAU.no_bordereau_2,
w_FAC_BORDEREAU.no_bordereau_22,
w_FAC_MONTANTS.montant_facture_0_c AS montant_facture_0_c,
w_FAC_MONTANTS.montant_facture_0_h AS montant_facture_0_h,
w_FAC_MONTANTS.montant_facture_1_c AS montant_facture_1_c,
w_FAC_MONTANTS.montant_facture_1_h AS montant_facture_1_h,
w_FAC_MONTANTS.montant_facture_2_c AS montant_facture_2_c,
w_FAC_MONTANTS.montant_facture_2_h AS montant_facture_2_h,
w_FAC_MONTANTS.montant_facture_22_c AS montant_facture_22_c,
w_FAC_MONTANTS.montant_facture_22_h AS montant_facture_22_h,
w_FAC_MONTANTS.montant_regle_0_c AS montant_regle_0_c,
w_FAC_MONTANTS.montant_regle_0_h AS montant_regle_0_h,
w_FAC_MONTANTS.montant_regle_1_c AS montant_regle_1_c,
w_FAC_MONTANTS.montant_regle_1_h AS montant_regle_1_h,
w_FAC_MONTANTS.montant_regle_2_c AS montant_regle_2_c,
w_FAC_MONTANTS.montant_regle_2_h AS montant_regle_2_h,
w_FAC_MONTANTS.montant_regle_22_c AS montant_regle_22_c,
w_FAC_MONTANTS.montant_regle_22_h 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,
w_FAC_MONTANTS.montant_comptabilise_c,
w_FAC_MONTANTS.montant_comptabilise_h,
w_FAC_MONTANTS.montant_comptabilise_0_c,
w_FAC_MONTANTS.montant_comptabilise_0_h,
w_FAC_MONTANTS.montant_comptabilise_1_c,
w_FAC_MONTANTS.montant_comptabilise_1_h,
w_FAC_MONTANTS.montant_comptabilise_2_c,
w_FAC_MONTANTS.montant_comptabilise_2_h,
w_FAC_MONTANTS.montant_comptabilise_22_c,
w_FAC_MONTANTS.montant_comptabilise_22_h,
COALESCE(w_FAC_REJET.nb_rejets,0),
0,
0
FROM w_FAC_FACTURE
LEFT JOIN w_FAC_BORDEREAU ON (w_FAC_FACTURE.NOFAC = w_FAC_BORDEREAU.NOFAC)
LEFT JOIN w_FAC_MONTANTS ON (w_FAC_FACTURE.NOFAC = w_FAC_MONTANTS.NOFAC)
LEFT JOIN w_FAC_REGLEMENT ON (w_FAC_FACTURE.NOFAC = w_FAC_REGLEMENT.NOFAC)
LEFT JOIN w_FAC_REJET ON (w_FAC_FACTURE.NOFAC = w_FAC_REJET.NOFAC)
-- LEFT JOIN prod_mederi.KENCOURS ON w_FAC_FACTURE.NOFAC = KENCOURS.NOFAC
ORDER BY 1,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');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_11');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_12');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_13');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_14');
-- 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.date_entree,
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,
p_sejours.ghs_id,
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,
CASE WHEN code_sorti = '1' THEN date_sortie ELSE date(now()) END AS date_fin_encours,
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 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
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%' AND type_facture IS DISTINCT FROM 'P'
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,
no_facture,
no_facture_reference,
type_facture,
code_facture,
date_facture,
tiers_payant_0_id,
tiers_payant_1_id,
tiers_payant_2_id,
tiers_payant_22_id,
code_cp_demandee,
ghs_id,
date_debut,
date_fin)
SELECT finess,
no_sejour,
'E' || no_sejour || CASE WHEN avec_facturation_intermediaire = '1' THEN '_' || substr(p_calendrier.mois,3,4) ELSE '' END,
'E' || no_sejour || CASE WHEN avec_facturation_intermediaire = '1' THEN '_' || substr(p_calendrier.mois,3,4) ELSE '' END,
'E',
'0',
'20991231'::date,
tiers_payant_0_id,
tiers_payant_1_id,
tiers_payant_2_id,
tiers_payant_22_id,
code_cp_demandee ,
ghs_id,
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
HAVING MIN(GREATEST(date_debut_encours, p_calendrier.date)) >= '[ENV_ADM_ANNEEDEBUT]0101'
;
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
);
-- Avoirs qui annulent des factures
UPDATE activite[PX].p_factures SET
no_facture_od_avoir = FAC_FACTURE_AVOIR.NOFAC,
type_facture = 'X'
FROM w_KFACTURE KFACTURE
JOIN w_KFACTURE FAC_FACTURE_AVOIR ON KFACTURE.NOFAC = FAC_FACTURE_AVOIR.FACAVOIR AND FAC_FACTURE_AVOIR.FACAVOIR != ''
WHERE p_factures.no_facture = KFACTURE.NOFAC
AND no_facture_od_avoir IS DISTINCT FROM FAC_FACTURE_AVOIR.NOFAC
AND KFACTURE.est_doublon = '0'
AND FAC_FACTURE_AVOIR.est_doublon = '0'
;
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 activite[PX].p_factures JOIN activite[PX].p_factures 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;
UPDATE activite[PX].p_factures 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 p_factures.no_facture = w_ods_avoir.no_facture;
UPDATE activite[PX].p_factures 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 p_factures.no_facture = w_ods_avoir.no_facture_od_avoir;
-- Suppression des tables de travail non utilisées après
DROP TABLE IF EXISTS w_sejours_orga CASCADE;
DROP TABLE IF EXISTS w_FAC_MONTANTS CASCADE;
DROP TABLE IF EXISTS w_FAC_REGLEMENT CASCADE;
DROP TABLE IF EXISTS w_FAC_BORDEREAU CASCADE;
DROP TABLE IF EXISTS w_factures_trous CASCADE;
]]></sqlcmd>
</NODE>
<NODE label="Rejets">
<sqlcmd><![CDATA[
INSERT INTO activite[PX].p_factures_rejets(
no_facture, date_rejet, rejet_id, rejet_code, rejet_texte)
SELECT
FACTURE ,
DATEREJET ,
0,
TRIM(ERRCODE) ,
TRIM(ERRLIB)
FROM prod_mederi.KNOERJ, w_FAC_FACTURE
WHERE FACTURE = NOFAC
AND TRIM(ERRCODE) <> '0001' AND TRIM(ERRLIB) <> '';
INSERT INTO activite.t_rejets_noemie (texte, code)
SELECT 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;
]]></sqlcmd>
</NODE>
<NODE label="Lignes non facturées Clinique">
<sqlcmd><![CDATA[
TRUNCATE activite[PX].p_factures_lignes_non_facturees_c;
DROP TABLE IF EXISTS w_KACTES_NF;
CREATE TEMP TABLE w_KACTES_NF AS
SELECT
p_sejours.no_sejour,
COALESCE(p_factures.no_facture,'') AS no_facture,
DATEACTE AS date_debut,
COALESCE(DATEFIN, DATEACTE) AS date_fin,
1 AS nb_rubrique,
QTE*KACTES.COEFF AS coefficient,
t_rubriques_facturation.oid AS rubrique_facturation_id,
t_prestations.oid AS prestation_id,
PRIXU::numeric AS prix_unitaire,
p_sejours.lieu_sortie_id AS lieu_id
FROM prod_mederi.KACTES
LEFT JOIN prod_mederi.KFACTURE ON KACTES.NOFAC = KFACTURE.NOFAC
JOIN activite[PX].p_sejours ON KACTES.NODOSSIER = p_sejours.code_original AND p_sejours.etat = ''
LEFT JOIN activite[PX].p_factures ON p_sejours.no_sejour = p_factures.no_sejour AND type_facture = 'E' AND
DATEACTE BETWEEN p_factures.date_debut AND p_factures.date_fin
JOIN activite[PX].t_rubriques_facturation ON NOACTE = t_rubriques_facturation.code_original
JOIN prod_mederi.KRUBINT ON KACTES.NOACTE = KRUBINT.NOACTE
JOIN activite.t_prestations ON NOACTESS = t_prestations.code
WHERE
KACTES.TYPERUB <> 4
AND KACTES.NOACTE <> 'GHS'
AND (
KACTES.NOFAC IS NULL OR
KFACTURE.NOFAC IS NULL
)
;
UPDATE w_KACTES_NF
SET no_facture = subview.no_facture
FROM
(
SELECT no_sejour, (MAX(Array[date_fin::text,no_facture]))[2] AS no_facture
FROM activite[PX].p_factures
WHERE type_facture = 'E'
GROUP BY 1
) subview
WHERE w_KACTES_NF.no_facture = '' AND
w_KACTES_NF.no_sejour = subview.no_sejour
;
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
no_facture,
date_debut,
date_fin,
nb_rubrique,
coefficient,
rubrique_facturation_id,
prestation_id,
prix_unitaire,
lieu_id
FROM w_KACTES_NF
WHERE no_facture <> ''
;
]]></sqlcmd>
</NODE>
<NODE label="Lignes facturées Clinique">
<sqlcmd><![CDATA[
DROP TABLE IF EXISTS W_KPRAT
;
CREATE TEMP TABLE W_KPRAT AS
SELECT *
FROM prod_mederi.KPRAT
WHERE CTID IN (
SELECT MAX(CTID)
from prod_mederi.KPRAT
GROUP BY NOPRAT
)
;
-- comptes associés
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
NOCOMPTE,
NOCOMPTE,
array_to_string(array_agg(distinct KACTES.NOACTE),',') ||' service' || CASE WHEN array_length(array_agg(distinct KCPTRUB.NOSERVINT),1) != 1 THEn 's ' ELSE ' ' END || array_to_string(array_agg(distinct KCPTRUB.NOSERVINT),','),
array_to_string(array_agg(distinct KACTES.NOACTE),',') ||' service' || CASE WHEN array_length(array_agg(distinct KCPTRUB.NOSERVINT),1) != 1 THEn 's ' ELSE ' ' END || array_to_string(array_agg(distinct KCPTRUB.NOSERVINT),',')
FROM prod_mederi.KCPTRUB
JOIN prod_mederi.KACTES ON KACTES.NOACTE = KCPTRUB.NOACTE
WHERE NOCOMPTE NOT IN (SELECT code_original FROM activite[PX].t_compte WHERE code_original IS NOT NULL)
GROUP BY 1,2
ORDER BY 1,2;
INSERT INTO activite[PX].t_compte(code_original, code, texte, texte_court)
SELECT
NOCOMPTES,
NOCOMPTES,
array_to_string(array_agg(distinct KACTES.NOACTE),',') ||' (tous services)',
array_to_string(array_agg(distinct KACTES.NOACTE),',') ||' (tous services)'
FROM prod_mederi.KRUBINT
JOIN prod_mederi.KACTES ON KACTES.NOACTE = KRUBINT.NOACTE
WHERE NOCOMPTES != ''
AND NOCOMPTES NOT IN (SELECT code_original FROM activite[PX].t_compte WHERE code_original IS NOT NULL)
GROUP BY 1,2
ORDER BY 1,2;
-- Extraction lignes
DROP TABLE IF EXISTS w_FAC_FACTURE_LIGNE_C;
CREATE TEMP TABLE w_FAC_FACTURE_LIGNE_C AS
SELECT
1::integer AS origine_facturation_id,
ACCLEUNIK,
KACTES.NOFAC AS no_facture,
DATEACTE AS date_debut,
COALESCE(DATEFIN, DATEACTE) AS date_fin,
CASE WHEN FACPARTIEL != 9 AND DATEFAC IS NOT NULL THEN DATEFAC ELSE '20991231'::date END AS date_vente,
lieu_sortie_id,
CASE WHEN TYPEFAC NOT IN ('2','4') THEN QTE ELSE 0-QTE END AS nb_rubrique,
CASE WHEN TYPEFAC NOT IN ('2','4') THEN QTE ELSE 0-QTE END AS nb_prestations,
KACTES.COEFF as coefficient,
1::numeric AS coefficient_mco,
COALESCE(t_rubriques_facturation.oid::bigint, 0) AS rubrique_facturation_id,
COALESCE(t_rubriques_facturation.oid::bigint, 0) AS rubrique_comptabilisation_id,
COALESCE(t_compte.oid::bigint, 0) AS compte_produit_id,
COALESCE(t_prestations.oid::bigint, 0) AS prestation_id,
PRIXU::numeric AS prix_unitaire,
SUM(CASE WHEN TYPEFAC NOT IN ('2','4') THEN MNTASS + MNTMUT + MNTSS ELSE - (MNTASS + MNTMUT + MNTSS) END) AS montant_facture,
SUM(CASE WHEN TYPEFAC NOT IN ('2','4') THEN MNTASS ELSE - MNTASS END) AS montant_facture_0,
SUM(CASE WHEN TYPEFAC NOT IN ('2','4') THEN MNTSS ELSE - MNTSS END) AS montant_facture_1,
SUM(CASE WHEN TYPEFAC NOT IN ('2','4') THEN MNTMUT ELSE - MNTMUT END) AS montant_facture_2,
0 as montant_facture_22,
0 AS montant_facture_actes_inclus_dans_sejour,
0 as montant_facture_0_actes_inclus_dans_sejour,
0 as montant_facture_1_actes_inclus_dans_sejour,
0 as montant_facture_2_actes_inclus_dans_sejour,
0 as montant_facture_22_actes_inclus_dans_sejour,
AVG(100-TAUXSS-TAUXMUT) as taux_0,
AVG(TAUXSS) as taux_1,
AVG(TAUXMUT) as taux_2,
0 as taux_22,
CASE WHEN MIN(DATEFAC) IS NOT NULL THEN SUM(CASE WHEN TYPEFAC NOT IN ('2','4') THEN MNTSS + MNTMUT + MNTASS ELSE - ( MNTSS + MNTMUT + MNTASS) END) ELSE 0 END AS montant_comptabilise,
CASE WHEN MIN(DATEFAC) IS NOT NULL THEN SUM(CASE WHEN TYPEFAC NOT IN ('2','4') THEN MNTASS ELSE - MNTASS END) ELSE 0 END AS montant_comptabilise_0,
CASE WHEN MIN(DATEFAC) IS NOT NULL THEN SUM(CASE WHEN TYPEFAC NOT IN ('2','4') THEN MNTSS ELSE - MNTSS END) ELSE 0 END AS montant_comptabilise_1,
CASE WHEN MIN(DATEFAC) IS NOT NULL THEN SUM(CASE WHEN TYPEFAC NOT IN ('2','4') THEN MNTMUT ELSE - MNTMUT END) ELSE 0 END AS montant_comptabilise_2,
0 AS montant_comptabilise_22,
0::bigint AS rubrique_facture_id
FROM prod_mederi.KACTES
LEFT JOIN activite[PX].t_rubriques_facturation ON (NOACTE = t_rubriques_facturation.code_original)
JOIN w_FAC_FACTURE ON KACTES.NOFAC = w_FAC_FACTURE.NOFAC
LEFT JOIN (SELECT NOACTE, NOSERVINT, MAX(NOCOMPTE) AS NOCOMPTE FROM prod_mederi.KCPTRUB GROUP BY 1,2) sub ON KACTES.NOSERVINT = sub.NOSERVINT AND KACTES.NOACTE = sub.NOACTE
LEFT JOIN prod_mederi.KRUBINT ON KACTES.NOACTE = KRUBINT.NOACTE
LEFT JOIN activite.t_prestations ON (NOACTESS = t_prestations.code)
LEFT JOIN activite[PX].t_compte ON (NOCOMPTE IS NOT NULL AND NOCOMPTE::bigint = t_compte.code_original) OR (NOCOMPTE IS NULL AND NOCOMPTES::bigint = t_compte.code_original::bigint)
WHERE
FACPARTIEL != 9 AND
KACTES.TYPERUB <> 4
GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16;
-- Médecin Salarié
INSERT INTO w_FAC_FACTURE_LIGNE_C
SELECT
1::integer AS origine_facturation_id,
ACCLEUNIK,
KACTES.NOFAC AS no_facture,
date(DATEACTE) AS date_debut,
COALESCE(date(DATEFIN),date(DATEACTE)) AS date_fin,
CASE WHEN FACPARTIEL != 9 AND KACTES.NOFAC IS NOT NULL THEN DATEFAC ELSE '20991231'::date END AS date_vente,
lieu_sortie_id,
CASE WHEN TYPEFAC NOT IN ('2','4') THEN QTE ELSE 0-QTE END AS nb_rubrique,
CASE WHEN TYPEFAC NOT IN ('2','4') THEN QTE ELSE 0-QTE END AS nb_prestations,
KACTES.COEFF as coefficient,
1 AS coefficient_mco,
COALESCE(t_rubriques_facturation.oid::bigint, 0) AS rubrique_facturation_id,
COALESCE(t_rubriques_facturation.oid::bigint, 0) AS rubrique_comptabilisation_id,
MAX(COALESCE(t_compte.oid::bigint, 0)) AS compte_produit_id,
COALESCE(t_prestations.oid::bigint, 0) AS prestation_id,
PRIXU AS prix_unitaire,
0 AS montant_facture,
0 AS montant_facture_0,
0 AS montant_facture_1,
0 AS montant_facture_2,
0 as montant_facture_22,
0 AS montant_facture_actes_inclus_dans_sejour,
0 as montant_facture_0_actes_inclus_dans_sejour,
0 as montant_facture_1_actes_inclus_dans_sejour,
0 as montant_facture_2_actes_inclus_dans_sejour,
0 as montant_facture_22_actes_inclus_dans_sejour,
AVG(100-TAUXSS-TAUXMUT) as taux_0,
AVG(TAUXSS) as taux_1,
AVG(TAUXMUT) as taux_2,
0 as taux_22,
SUM(CASE WHEN DATEFAC IS NOT NULL THEN CASE WHEN TYPEFAC NOT IN ('2','4') THEN MNTASS + MNTMUT + MNTSS ELSE - (MNTASS + MNTMUT + MNTSS) END ELSE 0 END) AS montant_comptabilise,
SUM(CASE WHEN DATEFAC IS NOT NULL THEN CASE WHEN TYPEFAC NOT IN ('2','4') THEN MNTASS ELSE - MNTASS END ELSE 0 END) AS montant_comptabilise_0,
SUM(CASE WHEN DATEFAC IS NOT NULL THEN CASE WHEN TYPEFAC NOT IN ('2','4') THEN MNTSS ELSE - MNTSS END ELSE 0 END) AS montant_comptabilise_1,
SUM(CASE WHEN DATEFAC IS NOT NULL THEN CASE WHEN TYPEFAC NOT IN ('2','4') THEN MNTMUT ELSE - MNTMUT END ELSE 0 END) AS montant_comptabilise_2,
0 AS montant_comptabilise_22,
0::bigint AS rubrique_facture_id
FROM prod_mederi.KACTES
LEFT JOIN activite[PX].t_rubriques_facturation ON (NOACTE = t_rubriques_facturation.code_original)
JOIN w_FAC_FACTURE ON KACTES.NOFAC = w_FAC_FACTURE.NOFAC
LEFT JOIN (SELECT NOACTE, NOSERVINT, MAX(NOCOMPTE) AS NOCOMPTE FROM prod_mederi.KCPTRUB GROUP BY 1,2) sub ON KACTES.NOSERVINT = sub.NOSERVINT AND KACTES.NOACTE = sub.NOACTE
LEFT JOIN prod_mederi.KRUBINT ON KACTES.NOACTE = KRUBINT.NOACTE
LEFT JOIN activite.t_prestations ON (NOACTESS = t_prestations.code)
LEFT JOIN activite[PX].t_compte ON (NOCOMPTE IS NOT NULL AND NOCOMPTE::bigint = t_compte.code_original) OR (NOCOMPTE IS NULL AND NOCOMPTES::bigint = t_compte.code_original::bigint)
JOIN W_KPRAT KPRAT ON KACTES.NOPRAT = KPRAT.NOPRAT AND KPRAT.CODETAB = 3
JOIN activite.t_divers ON t_divers.code = 'MEDSAL_COMPTACLI' AND valeur = 1
WHERE
'[ENV_TYPEETS]' NOT IN ('2','3') AND
FACPARTIEL != 9 AND
KACTES.TYPERUB = 4
GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,15,16;
-- Rubriques internes cti
SELECT activite[PX].cti_reorganize_rubrique_facture_c('w_FAC_FACTURE_LIGNE_C');
-- lignes clinique
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,
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,
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,
origine_facturation_id,
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)
SELECT
no_facture,
date_debut,
date_fin,
nb_rubrique,
nb_prestations,
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,
prix_unitaire,
lieu_sortie_id,
montant_comptabilise,
montant_comptabilise_0,
montant_comptabilise_1,
montant_comptabilise_2,
montant_comptabilise_22,
0,
0,
0,
0,
0,
origine_facturation_id,
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
FROM w_FAC_FACTURE_LIGNE_C;
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_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');
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');
UPDATE activite[PX].p_factures_lignes_c
SET nb_prestation = coefficient * nb_prestation,
nb_rubrique = coefficient * nb_prestation,
coefficient = 1
WHERE coefficient > 1 AND
prestation_id IN (SELECT oid FROM activite.t_prestations WHERE code IN ('PJ', 'PJ1', 'PJ2', 'FJ', 'PHJ', 'SSM', 'SRC', 'REA', 'STF', 'NN1', 'NN2', 'NN3', 'CP', 'CPC', 'SHO'));
-- 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,
CASE WHEN p_sejours.type_sejour <> '5' THEN date(p_sejours.date_entree) ELSE p_factures_lignes_c.date_debut END AS date_debut_ghs,
CASE WHEN p_sejours.type_sejour <> '5' THEN date(p_sejours.date_sortie - interval '1 day') ELSE p_factures_lignes_c.date_fin END 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 type_sejour = '5' THEN p_factures_lignes_c.date_debut 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 type_sejour = '5' THEN p_factures_lignes_c.date_fin 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 type_sejour <> '5' AND 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')
WHERE (nb_prestation > 1 or nb_prestation < -1 OR (type_sejour <> '5' AND 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;
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;
DROP TABLE IF EXISTS w_mouvements_sejour_lieu_jour;
CREATE TEMP TABLE w_mouvements_sejour_lieu_jour AS
SELECT no_sejour,
date,
(MAX(CASE WHEN est_absence <> '1' THEN Array[heure_fin, lieu_id] ELSE NULL END))[2] AS lieu_id,
(MAX(Array[heure_fin, lieu_id]))[2] AS lieu_id_avec_absence
FROM activite[PX].p_mouvements_sejour
JOIN activite[PX].t_lieux ON lieu_id = t_lieux.oid
JOIN activite[PX].t_services_facturation On service_facturation_id = t_services_facturation.oid
GROUP BY 1,2
;
UPDATE activite[PX].p_factures_lignes_c
SET lieu_id = COALESCE(w_mouvements_sejour_lieu_jour.lieu_id,w_mouvements_sejour_lieu_jour.lieu_id_avec_absence)
FROM activite[PX].p_factures, w_mouvements_sejour_lieu_jour
WHERE p_factures_lignes_c.no_facture = p_factures.no_facture AND
p_factures.no_sejour = w_mouvements_sejour_lieu_jour.no_sejour AND
p_factures_lignes_c.date_debut = w_mouvements_sejour_lieu_jour.date AND
p_factures_lignes_c.lieu_id <> COALESCE(w_mouvements_sejour_lieu_jour.lieu_id,w_mouvements_sejour_lieu_jour.lieu_id_avec_absence)
;
DROP TABLE IF EXISTS w_actes_inclus_dans_sejour;
CREATE TEMP TABLE w_actes_inclus_dans_sejour AS
SELECT NOFAC AS no_facture,
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
FROM activite[PX].p_factures_lignes_c JOIN w_FAC_FACTURE ON no_facture = NOFAC
WHERE
'[ENV_TYPEETS]' IN ('2','3') AND
montant_facture_actes_inclus_dans_sejour <> 0 AND
origine_facturation_id = 3
GROUP BY 1;
DROP TABLE IF EXISTS w_ghs_pj;
CREATE TEMP TABLE w_ghs_pj AS
SELECT p_factures_lignes_c.no_facture,
p_sejours.no_sejour,
p_sejours.est_budget_global,
MIN(p_factures_lignes_c.ctid) AS ctid_min
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
WHERE
'[ENV_TYPEETS]' IN ('2','3') AND
origine_facturation_id = 1 AND
(
prestation_id IN (SELECT oid FROM activite.t_prestations where code IN ('PJ', 'PJ1', 'PJ2', 'GHS', 'AMP5')) OR
rubrique_facturation_id IN (SELECT oid FROM activite[PX].t_rubriques_facturation where actes_inclus_public = '1')
)
GROUP BY 1,2,3;
UPDATE activite[PX].p_factures_lignes_c
SET
montant_facture_actes_inclus_dans_sejour = 0 - w_actes_inclus_dans_sejour.montant_facture_actes_inclus_dans_sejour,
montant_facture_0_actes_inclus_dans_sejour = 0 - w_actes_inclus_dans_sejour.montant_facture_0_actes_inclus_dans_sejour,
montant_facture_1_actes_inclus_dans_sejour = 0 - w_actes_inclus_dans_sejour.montant_facture_1_actes_inclus_dans_sejour,
montant_facture_2_actes_inclus_dans_sejour = 0 - w_actes_inclus_dans_sejour.montant_facture_2_actes_inclus_dans_sejour,
montant_facture_22_actes_inclus_dans_sejour = 0 - w_actes_inclus_dans_sejour.montant_facture_22_actes_inclus_dans_sejour
FROM w_actes_inclus_dans_sejour, w_ghs_pj
WHERE
'[ENV_TYPEETS]' IN ('2','3') AND
p_factures_lignes_c.no_facture = w_ghs_pj.no_facture AND p_factures_lignes_c.ctid = w_ghs_pj.ctid_min AND
w_actes_inclus_dans_sejour.no_facture = p_factures_lignes_c.no_facture AND
(
prestation_id IN (SELECT oid FROM activite.t_prestations where code IN ('PJ', 'GHS', 'AMP5')) OR
rubrique_facturation_id IN (SELECT oid FROM activite[PX].t_rubriques_facturation where actes_inclus_public = '1')
);
DROP TABLE IF EXISTS w_actes_inclus_dans_sejour_t;
CREATE TEMP TABLE w_actes_inclus_dans_sejour_t AS
SELECT no_facture,
SUM(CASE WHEN origine_facturation_id = 1 THEN montant_facture_actes_inclus_dans_sejour ELSE 0 END) AS montant_facture_c_actes_inclus_dans_sejour,
SUM(CASE WHEN origine_facturation_id = 3 THEN montant_facture_actes_inclus_dans_sejour ELSE 0 END) AS montant_facture_h_actes_inclus_dans_sejour
FROM activite[PX].p_factures_lignes_c
WHERE
'[ENV_TYPEETS]' IN ('2','3') AND
montant_facture_actes_inclus_dans_sejour <> 0
GROUP BY 1;
UPDATE activite[PX].p_factures SET
montant_facture_c_actes_inclus_dans_sejour = w_actes_inclus_dans_sejour_t.montant_facture_c_actes_inclus_dans_sejour,
montant_facture_h_actes_inclus_dans_sejour = w_actes_inclus_dans_sejour_t.montant_facture_h_actes_inclus_dans_sejour
FROM w_actes_inclus_dans_sejour_t
WHERE
'[ENV_TYPEETS]' IN ('2','3') AND
w_actes_inclus_dans_sejour_t.no_facture = p_factures.no_facture;
-- Montants depuis PMSI
--UPDATE pmsi.p_rss
--SET no_sejour_administratif =
-- CASE WHEN p_rss.date_sortie = RSSSORT
-- THEN KRSS.NODOSSIER ELSE no_sejour_administratif END
--FROM prod_mederi.KRSS
--JOIN w_DOSSIER ON w_DOSSIER.NODOSSIER = KRSS.NODOSSIER
--WHERE p_rss.no_rss = KRSS.NODOSSIER AND ghm_id <> 0;
-- Suppression des tables de travail non utilisées après
DROP TABLE IF EXISTS w_compte CASCADE;
DROP TABLE IF EXISTS w_factures_lignes_sup_c CASCADE;
DROP TABLE IF EXISTS w_factures_lignes_sup_c_sup_tot CASCADE;
DROP TABLE IF EXISTS w_factures_lignes_sup_c_sup CASCADE;
DROP TABLE IF EXISTS w_actes_inclus_dans_sejour CASCADE;
DROP TABLE IF EXISTS w_ghs_pj CASCADE;
DROP TABLE IF EXISTS w_actes_inclus_dans_sejour_t CASCADE;
DROP TABLE IF EXISTS w_factures_ventes_bg CASCADE;
DROP TABLE IF EXISTS w_factures_lignes_bg CASCADE;
]]></sqlcmd>
</NODE>
<NODE label="Compte client Clinique">
<sqlcmd><![CDATA[
SELECT base.cti_disable_index('activite[PX]', 'i_factures_soldes_c_1');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_soldes_c_2');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_soldes_c_3');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_soldes_c_4');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_soldes_c_8');
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_vente,
rubrique_comptabilisation_id,
prestation_id,
SUM(montant_comptabilise),
SUM(montant_comptabilise_0),
SUM(montant_comptabilise_1),
SUM(montant_comptabilise_2),
SUM(montant_comptabilise_22),
0,
0,
0,
0,
0
FROM w_FAC_FACTURE_LIGNE_C
WHERE date_vente IS NOT NULL AND
(montant_comptabilise <> 0 OR
montant_comptabilise_0 <> 0 OR
montant_comptabilise_1 <> 0 OR
montant_comptabilise_2 <> 0 OR
montant_comptabilise_22 <> 0
)
GROUP BY 1,2,3,4;
-- Comptes clients (REG)
DROP TABLE IF EXISTS w_FAC_REGLEMENT_LIGNE_C;
CREATE TEMP TABLE w_FAC_REGLEMENT_LIGNE_C AS
SELECT
KACTES.NOFAC AS no_facture,
date(KRGLDET.DATE) AS date_reglement,
COALESCE(t_rubriques_facturation.oid::bigint, 0) AS rubrique_comptabilisation_id,
COALESCE(t_prestations.oid::bigint, 0) AS prestation_id,
SUM(KRGLDET.MONTANT) AS montant_regle,
SUM(CASE WHEN KREGL.DEBITEUR = 3 THEN KRGLDET.MONTANT ELSE 0 END) AS montant_regle_0,
SUM(CASE WHEN KREGL.DEBITEUR = 1 THEN KRGLDET.MONTANT ELSE 0 END) AS montant_regle_1,
SUM(CASE WHEN KREGL.DEBITEUR = 2 THEN KRGLDET.MONTANT ELSE 0 END) AS montant_regle_2,
0 AS montant_regle_22
FROM w_KRGLDET KRGLDET
JOIN w_KREGL KREGL ON KRGLDET.NOREGL = KREGL.NOREGL
JOIN prod_mederi.KACTES ON KACTES.ACCLEUNIK = KRGLDET.ACCLEUNIK
LEFT JOIN prod_mederi.KRUBINT ON KACTES.NOACTE = KRUBINT.NOACTE
LEFT JOIN activite[PX].t_rubriques_facturation ON (KRUBINT.NOACTE = t_rubriques_facturation.code_original)
LEFT JOIN activite.t_prestations ON NOACTESS = t_prestations.code
WHERE 1=1
AND NOT ((KREGL.ORIGINE = 13 AND KREGL.DEBITEUR = 1) OR (KREGL.ORIGINE = 1 AND KREGL.DEBITEUR = 3))
AND KACTES.TYPERUB <> 4
AND KACTES.NOFAC IS NOT NULL
GROUP BY 1,2,3,4;
-- Règlements sans affectation
INSERT INTO w_FAC_REGLEMENT_LIGNE_C
SELECT
subview.no_facture AS no_facture,
date(KREGL.DATE) AS date_reglement,
0::bigint AS rubrique_comptabilisation_id,
0::bigint AS prestation_id,
SUM(KREGL.MONTANT) AS montant_regle,
SUM(CASE WHEN KREGL.DEBITEUR = 3 THEN KREGL.MONTANT ELSE 0 END) AS montant_regle_0,
SUM(CASE WHEN KREGL.DEBITEUR = 1 THEN KREGL.MONTANT ELSE 0 END) AS montant_regle_1,
SUM(CASE WHEN KREGL.DEBITEUR = 2 THEN KREGL.MONTANT ELSE 0 END) AS montant_regle_2,
0 AS montant_regle_22
FROM w_KREGL KREGL
JOIN
(
SELECT no_sejour, (MAX(ARRAY[date_facture::text, no_facture]))[2] AS no_facture
FROM activite[PX].p_factures
GROUP BY 1
) subview
ON subview.no_sejour = NODOSSIER
WHERE 1=1 AND
KREGL.DEBITEUR = '3' AND
NUMREGLD = '0' AND
ignore = '0' AND
forcehon = '0'
GROUP BY 1,2,3,4
;
-- Médecins salariés
INSERT INTO w_FAC_REGLEMENT_LIGNE_C
SELECT
KACTES.NOFAC AS no_facture,
date(KRGLDET.DATE) AS date_reglement,
COALESCE(t_rubriques_facturation.oid::bigint, 0) AS rubrique_comptabilisation_id,
COALESCE(t_prestations.oid::bigint, 0) AS prestation_id,
SUM(KRGLDET.MONTANT) AS montant_regle,
SUM(CASE WHEN KREGL.DEBITEUR = 3 THEN KRGLDET.MONTANT ELSE 0 END) AS montant_regle_0,
SUM(CASE WHEN KREGL.DEBITEUR = 1 THEN KRGLDET.MONTANT ELSE 0 END) AS montant_regle_1,
SUM(CASE WHEN KREGL.DEBITEUR = 2 THEN KRGLDET.MONTANT ELSE 0 END) AS montant_regle_2,
0 AS montant_regle_22
FROM w_KRGLDET KRGLDET
JOIN w_KREGL KREGL ON KRGLDET.NOREGL = KREGL.NOREGL
JOIN prod_mederi.KACTES ON KACTES.ACCLEUNIK = KRGLDET.ACCLEUNIK
LEFT JOIN prod_mederi.KRUBINT ON KACTES.NOACTE = KRUBINT.NOACTE
LEFT JOIN activite[PX].t_rubriques_facturation ON (KRUBINT.NOACTE = t_rubriques_facturation.code_original)
LEFT JOIN activite.t_prestations ON NOACTESS = t_prestations.code
JOIN W_KPRAT KPRAT ON KACTES.NOPRAT = KPRAT.NOPRAT AND CODETAB = 3
JOIN activite.t_divers ON t_divers.code = 'MEDSAL_COMPTACLI' AND valeur = 1
WHERE 1=1
AND NOT ((KREGL.ORIGINE = 13 AND KREGL.DEBITEUR = 1) OR (KREGL.ORIGINE = 1 AND KREGL.DEBITEUR = 3))
AND KACTES.TYPERUB <> 4
GROUP BY 1,2,3,4;
-- Règlements
-- Acomptes 85%
INSERT INTO w_FAC_REGLEMENT_LIGNE_C
SELECT
KACTES.NOFAC AS no_facture,
date(KRGLDET.DATE) AS date_reglement,
COALESCE(t_rubriques_facturation.oid::bigint, 0) AS rubrique_comptabilisation_id,
COALESCE(t_prestations.oid::bigint, 0) AS prestation_id,
SUM(KRGLDET.MONTANT) AS montant_regle,
SUM(CASE WHEN KREGL.DEBITEUR = 3 THEN KRGLDET.MONTANT ELSE 0 END) AS montant_regle_0,
SUM(CASE WHEN KREGL.DEBITEUR = 1 THEN KRGLDET.MONTANT ELSE 0 END) AS montant_regle_1,
SUM(CASE WHEN KREGL.DEBITEUR = 2 THEN KRGLDET.MONTANT ELSE 0 END) AS montant_regle_2,
0 AS montant_regle_22
FROM w_KRGLDET KRGLDET
JOIN w_KREGL KREGL ON KRGLDET.NOREGL = KREGL.NOREGL
JOIN prod_mederi.KACTES ON KACTES.ACCLEUNIK = KRGLDET.ACCLEUNIK
LEFT JOIN activite[PX].t_rubriques_facturation ON (t_rubriques_facturation.code_original = '*CTI_ACO85')
LEFT JOIN activite.t_prestations ON (t_prestations.code_original = '*CTI_ACO85')
WHERE 1=1
AND KREGL.ORIGINE = 13
AND KREGL.DEBITEUR = 1
AND KACTES.TYPERUB <> 4
--AND JOUR_TYPEMVT <> 'FACAV'
GROUP BY 1,2,3,4
;
-- Acomptes
INSERT INTO w_FAC_REGLEMENT_LIGNE_C
SELECT
KACTES.NOFAC AS no_facture,
date(KRGLDET.DATE) AS date_reglement,
COALESCE(t_rubriques_facturation.oid::bigint, 0) AS rubrique_comptabilisation_id,
COALESCE(t_prestations.oid::bigint, 0) AS prestation_id,
SUM(KRGLDET.MONTANT) AS montant_regle,
SUM(CASE WHEN KREGL.DEBITEUR = 3 THEN KRGLDET.MONTANT ELSE 0 END) AS montant_regle_0,
SUM(CASE WHEN KREGL.DEBITEUR = 1 THEN KRGLDET.MONTANT ELSE 0 END) AS montant_regle_1,
SUM(CASE WHEN KREGL.DEBITEUR = 2 THEN KRGLDET.MONTANT ELSE 0 END) AS montant_regle_2,
0 AS montant_regle_22
FROM w_KRGLDET KRGLDET
JOIN w_KREGL KREGL ON KRGLDET.NOREGL = KREGL.NOREGL
JOIN prod_mederi.KACTES ON KACTES.ACCLEUNIK = KRGLDET.ACCLEUNIK
LEFT JOIN activite[PX].t_rubriques_facturation ON (t_rubriques_facturation.code_original = '*CTI_ACO')
LEFT JOIN activite.t_prestations ON (t_prestations.code_original = '*CTI_ACO')
WHERE 1=1
AND KREGL.ORIGINE = 1
AND KREGL.DEBITEUR = 3
AND KACTES.TYPERUB <> 4
GROUP BY 1,2,3,4
;
--correction par rapport aux règlement non affectés
-- verrouillé pour l'instant par ELA
DROP TABLE IF EXISTS w_FAC_CORR;
CREATE TEMP TABLE w_FAC_CORR AS
SELECT NOREGL, DATE, MONTANT, SENS,DEBITEUR, KREGL.NODOSSIER, w_FAC_FACTURE.NOFAC, MNTPASS,MNTPAM,MNTPMUT,MNTHASS,MNTHAM,MNTHMUT,SLDPASS,SLDPAM,SLDPMUT,SLDHASS,SLDHAM,SLDHMUT,
COALESCE(t_rubriques_facturation.oid::bigint,0) AS rubrique_comptabilisation_id,
COALESCE(t_prestations.oid::bigint,0) AS prestation_id
FROM w_KREGL KREGL, prod_mederi.KDOSSIER, w_FAC_FACTURE
LEFT JOIN activite[PX].t_rubriques_facturation ON (t_rubriques_facturation.code_original = '*MED_REG_DOS')
LEFT JOIN activite.t_prestations ON (t_prestations.code_original = '*MED_REG_DOS')
WHERE NUMREGLD = 0 AND KREGL.DATECOMPTA IS NOT NULL
AND KDOSSIER.NODOSSIER = KREGL.NODOSSIER
AND KDOSSIER.NODOSSIER = w_FAC_FACTURE.NODOSSIER
AND w_FAC_FACTURE.NOFAC IS NOT NULL
AND FACAVOIR IS NULL AND
1 <> 1;
CREATE INDEX w_fac_corr_i1
ON w_fac_corr
USING btree
(NOFAC);
ANALYSE w_FAC_CORR;
-- insertion de règlements dossier sans détail sur les factures et leurs lignes
DROP TABLE IF EXISTS w_FAC_REG_SEJ;
CREATE TEMP TABLE w_FAC_REG_SEJ as
SELECT
NOREGL,
MAX(DEBITEUR) AS DEBITEUR,
MAX(NOFAC) AS NOFAC,
MAX(DATE) AS date_reglement,
MAX(rubrique_comptabilisation_id) AS rubrique_comptabilisation_id,
prestation_id AS prestation_id,
CASE WHEN MAX(SENS) IS DISTINCT FROM '-' THEN MAX(MONTANT) ELSE - MAX(MONTANT) END AS montant_regle ,
CASE WHEN MAX(DEBITEUR) = 3 THEN CASE WHEN MAX(SENS) IS DISTINCT FROM '-' THEN MAX(MONTANT) ELSE - MAX(MONTANT) END ELSE 0 END AS montant_regle_0,
CASE WHEN MAX(DEBITEUR) = 1 THEN CASE WHEN MAX(SENS) IS DISTINCT FROM '-' THEN MAX(MONTANT) ELSE - MAX(MONTANT) END ELSE 0 END AS montant_regle_1,
CASE WHEN MAX(DEBITEUR) = 2 THEN CASE WHEN MAX(SENS) IS DISTINCT FROM '-' THEN MAX(MONTANT) ELSE - MAX(MONTANT) END ELSE 0 END AS montant_regle_2,
0 as montant_regle_22
FROM
(SELECT
NOREGL,
MONTANT,
w_FAC_CORR.NOFAC,
date(w_FAC_CORR.DATE) AS DATE,
w_FAC_CORR.rubrique_comptabilisation_id,
w_FAC_CORR.prestation_id,
SENS,
DEBITEUR
-- ,
-- CASE
-- WHEN MONTANT = MNTPASS THEN montant_facture_0
-- WHEN MONTANT = MNTPAM THEN montant_facture_1
-- WHEN MONTANT = MNTPMUT THEN montant_facture_2
-- WHEN MONTANT = SLDPASS THEN montant_facture_0
-- WHEN MONTANT = SLDPAM THEN montant_facture_1
-- WHEN MONTANT = SLDPMUT THEN montant_facture_2
-- WHEN MONTANT = MNTHASS + MNTPASS THEN montant_facture_0
-- WHEN MONTANT = MNTHAM + MNTPAM THEN montant_facture_1
-- WHEN MONTANT = MNTHMUT + MNTPMUT THEN montant_facture_2
-- WHEN MONTANT = SLDHASS + SLDPASS THEN montant_facture_0
-- WHEN MONTANT = SLDHAM + SLDPAM THEN montant_facture_1
-- WHEN MONTANT = SLDHMUT + SLDPMUT THEN montant_facture_2
-- WHEN MONTANT = MNTHASS THEN 0
-- WHEN MONTANT = MNTHAM THEN 0
-- WHEN MONTANT = MNTHMUT THEN 0
-- WHEN MONTANT = SLDHASS THEN 0
-- WHEN MONTANT = SLDHAM THEN 0
-- WHEN MONTANT = SLDHMUT THEN 0
-- ELSE 0 END as MONTANT_CALC
FROM w_FAC_CORR
--,w_FAC_FACTURE_LIGNE_C
WHERE --w_FAC_CORR.NOFAC = w_FAC_FACTURE_LIGNE_C.no_facture
--AND
(((MONTANT = MNTPASS OR MONTANT = MNTPAM OR MONTANT = MNTPMUT
OR MONTANT = MNTHASS OR MONTANT = MNTHAM OR MONTANT = MNTHMUT
OR MONTANT = MNTHASS + MNTPASS OR MONTANT = MNTHAM+MNTPAM OR MONTANT = MNTHMUT+MNTPMUT))
-- AND w_FAC_CORR.NOFAC NOT IN (SELECT no_facture FROM w_FAC_REGLEMENT_LIGNE_C))
-- OR
-- ((MONTANT = SLDPASS OR MONTANT = SLDPAM OR MONTANT = SLDPMUT
-- OR MONTANT = SLDHASS OR MONTANT = SLDHAM OR MONTANT = SLDHMUT
-- OR MONTANT = SLDHASS + SLDPASS OR MONTANT = SLDHAM+SLDPAM OR MONTANT = SLDHMUT+SLDPMUT)
--)
)) as sub
-- WHERE MONTANT_CALC = MONTANT
GROUP BY NOREGL,prestation_id;
INSERT INTO w_FAC_REGLEMENT_LIGNE_C
SELECT
NOFAC,
date_reglement,
rubrique_comptabilisation_id,
prestation_id,
montant_regle ,
montant_regle_0,
montant_regle_1,
montant_regle_2,
0 as montant_regle_22
FROM w_FAC_REG_SEJ
WHERE montant_regle != 0;
INSERT INTO w_FAC_REGLEMENT_LIGNE_C
SELECT
MAX(w_FAC_CORR.NOFAC) AS NOFAC,
MAX(DATE) AS date_reglement,
MAX(rubrique_comptabilisation_id) AS rubrique_comptabilisation_id,
MAX(prestation_id) AS prestation_id,
CASE WHEN MAX(SENS) IS DISTINCT FROM '-' THEN MAX(MONTANT) ELSE - MAX(MONTANT) END AS montant_regle ,
CASE WHEN MAX(DEBITEUR) = 3 THEN CASE WHEN MAX(SENS) IS DISTINCT FROM '-' THEN MAX(MONTANT) ELSE - MAX(MONTANT) END ELSE 0 END AS montant_regle_0,
CASE WHEN MAX(DEBITEUR) = 1 THEN CASE WHEN MAX(SENS) IS DISTINCT FROM '-' THEN MAX(MONTANT) ELSE - MAX(MONTANT) END ELSE 0 END AS montant_regle_1,
CASE WHEN MAX(DEBITEUR) = 2 THEN CASE WHEN MAX(SENS) IS DISTINCT FROM '-' THEN MAX(MONTANT) ELSE - MAX(MONTANT) END ELSE 0 END AS montant_regle_2,
0 as montant_regle_22
FROM w_FAC_CORR
WHERE NOREGL NOT IN (SELECT NOREGL FROM w_FAC_REG_SEJ)
GROUP BY NOREGL;
SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_c_1');
UPDATE activite[PX].p_factures_soldes_c
SET
montant_regle = w_FAC_REGLEMENT_LIGNE_C.montant_regle,
montant_regle_0 = w_FAC_REGLEMENT_LIGNE_C.montant_regle_0,
montant_regle_1 = w_FAC_REGLEMENT_LIGNE_C.montant_regle_1,
montant_regle_2 = w_FAC_REGLEMENT_LIGNE_C.montant_regle_2,
montant_regle_22 = w_FAC_REGLEMENT_LIGNE_C.montant_regle_22
FROM w_FAC_REGLEMENT_LIGNE_C
WHERE p_factures_soldes_c.no_facture = w_FAC_REGLEMENT_LIGNE_C.no_facture AND
p_factures_soldes_c.date_comptable = w_FAC_REGLEMENT_LIGNE_C.date_reglement AND
p_factures_soldes_c.rubrique_comptabilisee_id = w_FAC_REGLEMENT_LIGNE_C.rubrique_comptabilisation_id AND
p_factures_soldes_c.prestation_id = w_FAC_REGLEMENT_LIGNE_C.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_FAC_REGLEMENT_LIGNE_C.no_facture,
w_FAC_REGLEMENT_LIGNE_C.date_reglement,
w_FAC_REGLEMENT_LIGNE_C.rubrique_comptabilisation_id,
w_FAC_REGLEMENT_LIGNE_C.prestation_id,
0,
0,
0,
0,
0,
w_FAC_REGLEMENT_LIGNE_C.montant_regle,
w_FAC_REGLEMENT_LIGNE_C.montant_regle_0,
w_FAC_REGLEMENT_LIGNE_C.montant_regle_1,
w_FAC_REGLEMENT_LIGNE_C.montant_regle_2,
w_FAC_REGLEMENT_LIGNE_C.montant_regle_22
FROM w_FAC_REGLEMENT_LIGNE_C
LEFT JOIN activite[PX].p_factures_soldes_c
ON (p_factures_soldes_c.no_facture = w_FAC_REGLEMENT_LIGNE_C.no_facture
AND p_factures_soldes_c.date_comptable = w_FAC_REGLEMENT_LIGNE_C.date_reglement
AND p_factures_soldes_c.rubrique_comptabilisee_id = w_FAC_REGLEMENT_LIGNE_C.rubrique_comptabilisation_id
AND p_factures_soldes_c.prestation_id = w_FAC_REGLEMENT_LIGNE_C.prestation_id)
WHERE date_reglement IS NOT NULL AND p_factures_soldes_c.no_facture IS NULL;
-- Annulations par avoirs
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_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');
-- Suppression des tables de travail non utilisées après
DROP TABLE IF EXISTS w_FAC_FACTURE_LIGNE_C CASCADE;
DROP TABLE IF EXISTS w_FAC_REGLEMENT_LIGNE_C CASCADE;
-- maj soldes
UPDATE activite[PX].p_factures
SET
montant_regle_c = sub.montant_regle_c,
montant_regle_0_c = sub.montant_regle_0_c,
montant_regle_1_c = sub.montant_regle_1_c,
montant_regle_2_c = sub.montant_regle_2_c
FROM (
SELECT
no_facture,
SUM(reg_c.montant_regle) AS montant_regle_c,
SUM(reg_c.montant_regle_0) AS montant_regle_0_c,
SUM(reg_c.montant_regle_1) AS montant_regle_1_c,
SUM(reg_c.montant_regle_2) AS montant_regle_2_c
FROM activite[PX].p_factures_soldes_c reg_c
GROUP BY 1) as sub
WHERE sub.no_facture = p_factures.no_facture;
]]></sqlcmd>
</NODE>
<NODE label="Lignes non facturées Honoraires">
<sqlcmd><![CDATA[
TRUNCATE activite[PX].p_factures_lignes_non_facturees_h;
INSERT INTO activite[PX].p_factures_lignes_non_facturees_h(
no_facture,
date_debut,
date_fin,
heure_debut,
nb_rubrique,
coefficient,
medecin_facture_id,
prestation_id,
prix_unitaire,
montant_depassement,
lieu_id,
acte_id,
phase_ccam,
activite_ccam,
extension_ccam,
modificateur_ccam_1,
modificateur_ccam_2,
modificateur_ccam_3,
modificateur_ccam_4)
SELECT
p_factures.no_facture,
DATEACTE AS date_debut,
date_sortie AS date_fin,
replace(HDEBUT,':','')::int,
1 AS nb_rubrique,
QTE::int *KACTES.COEFF AS coefficient,
t_medecins_administratifs.oid AS medecin_facture_id,
t_prestations.oid AS prestation_id,
PRIXU::numeric AS prix_unitaire,
MDASS + MDCAI + MDMUT AS montant_depassement,
p_sejours.lieu_sortie_id AS lieu_id,
COALESCE(t_actes.oid::bigint, 0) AS acte_id,
COALESCE(PHASE,'0') AS phase_ccam,
COALESCE(ACTIVITE,'0') AS activite_ccam,
'' AS extension_ccam,
substr(MODIFICAT,1,1) AS modificateur_ccam_1,
substr(MODIFICAT,2,1) AS modificateur_ccam_2,
substr(MODIFICAT,3,1) AS modificateur_ccam_3,
substr(MODIFICAT,4,1) AS modificateur_ccam_4
FROM prod_mederi.KACTES
LEFT JOIN w_KFACTURE KFACTURE ON KACTES.NOFAC = KFACTURE.NOFAC AND TYPEFAC IN (3,4)
JOIN activite[PX].p_sejours ON KACTES.NODOSSIER = p_sejours.code_original AND p_sejours.etat = ''
JOIN activite[PX].p_factures ON p_sejours.no_sejour = p_factures.no_sejour AND type_facture = 'E'
JOIN activite[PX].t_medecins_administratifs ON NOPRAT = t_medecins_administratifs.code_original
JOIN activite.t_prestations ON NOACTE = t_prestations.code
JOIN base.t_actes ON (substring(NCCAM, 1, 7) = t_actes.code)
WHERE TYPERUB = 4 AND KFACTURE.est_doublon = '0'
ORDER BY p_sejours.no_sejour;
]]></sqlcmd>
</NODE>
<NODE label="Lignes factures Honoraires">
<sqlcmd><![CDATA[
DROP TABLE IF EXISTS W_KPRAT
;
CREATE TEMP TABLE W_KPRAT AS
SELECT *
FROM prod_mederi.KPRAT
WHERE CTID IN (
SELECT MAX(CTID)
from prod_mederi.KPRAT
GROUP BY NOPRAT
)
;
INSERT INTO base.t_actes(
code, texte, texte_court, nomenclature, ccam_regroupement_id_1, ccam_regroupement_id_4,
geste_marqueur_id)
SELECT
substring(NCCAM, 1, 7),
substring(NCCAM, 1, 7),
substring(NCCAM, 1, 7),
MIN(CASE WHEN length(trim(NCCAM)) >= 7 THEN 'CCAM' ELSE 'NGAP' END),
MIN(CASE WHEN length(trim(NCCAM)) >= 7 THEN 0 ELSE t_ccam_regroupements.oid END),
MIN(CASE WHEN length(trim(NCCAM)) >= 7 THEN 0 ELSE t_ccam_regroupements.oid END),
0
FROM w_FAC_FACTURE, prod_mederi.KACTES
LEFT JOIN base.t_actes ON (trim(substring(NCCAM, 1, 7)) = trim(t_actes.code)), base.t_ccam_regroupements
WHERE
w_FAC_FACTURE.NOFAC = KACTES.NOFAC
AND TYPERUB = 4 AND t_actes.oid is NULL
AND t_ccam_regroupements.code = 'NGAP'
AND NCCAM IS NOT NULL
GROUP BY 1,2,3;
DROP TABLE IF EXISTS w_FAC_FACTURE_LIGNE_H;
CREATE TEMP TABLE w_FAC_FACTURE_LIGNE_H AS
SELECT
ACCLEUNIK,
KACTES.NOFAC AS no_facture,
DATEACTE AS date_debut,
COALESCE(DATEFIN,DATEACTE) AS date_fin,
CASE WHEN FACPARTIEL != 9 AND DATEFAC IS NOT NULL THEN DATEFAC ELSE '20991231'::date END AS date_vente,
lieu_sortie_id,
CASE WHEN TYPEFAC NOT IN ('2','4') THEN QTE ELSE 0-QTE END AS nb_rubrique,
CASE WHEN TYPEFAC NOT IN ('2','4') THEN QTE ELSE 0-QTE END AS nb_prestations,
KACTES.COEFF as coefficient,
1 AS coefficient_mco,
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,
PRIXU::numeric AS prix_unitaire,
COALESCE(t_actes.oid::bigint, 0) AS acte_id,
replace(HDEBUT,':','')::int AS heure_debut,
PHASE::int AS phase_ccam,
ACTIVITE::integer AS activite_ccam,
'' AS extension_ccam,
substr(MODIFICAT,1,1) AS modificateur_ccam_1,
substr(MODIFICAT,2,1) AS modificateur_ccam_2,
substr(MODIFICAT,3,1) AS modificateur_ccam_3,
substr(MODIFICAT,4,1) AS modificateur_ccam_4,
SUM(CASE WHEN TYPEFAC NOT IN ('2','4') THEN MNTASS + MNTMUT + MNTSS ELSE - (MNTASS + MNTMUT + MNTSS) END) AS montant_facture,
SUM(CASE WHEN TYPEFAC NOT IN ('2','4') THEN MNTASS ELSE - MNTASS END) AS montant_facture_0,
SUM(CASE WHEN TYPEFAC NOT IN ('2','4') THEN MNTSS ELSE - MNTSS END) AS montant_facture_1,
SUM(CASE WHEN TYPEFAC NOT IN ('2','4') THEN MNTMUT ELSE - MNTMUT END) AS montant_facture_2,
0 as montant_facture_22,
SUM(CASE WHEN TYPEFAC NOT IN ('2','4') THEN MDCAI + MDMUT + MDASS ELSE - (MDCAI + MDMUT + MDASS) END) as montant_depassement,
0 AS montant_facture_actes_inclus_dans_sejour,
0 as montant_facture_0_actes_inclus_dans_sejour,
0 as montant_facture_1_actes_inclus_dans_sejour,
0 as montant_facture_2_actes_inclus_dans_sejour,
0 as montant_facture_22_actes_inclus_dans_sejour,
AVG(1-TAUXSS-TAUXMUT) as taux_0,
AVG(TAUXSS) as taux_1,
AVG(TAUXMUT) as taux_2,
0 as taux_22,
SUM(CASE WHEN DATEFAC IS NOT NULL AND NOT (CODETAB = 3 AND valeur = 1) THEN CASE WHEN TYPEFAC NOT IN ('2','4') THEN MNTASS + MNTMUT + MNTSS ELSE - (MNTASS + MNTMUT + MNTSS) END ELSE 0 END) AS montant_comptabilise,
SUM(CASE WHEN DATEFAC IS NOT NULL AND NOT (CODETAB = 3 AND valeur = 1) THEN CASE WHEN TYPEFAC NOT IN ('2','4') THEN MNTASS ELSE - MNTASS END ELSE 0 END) AS montant_comptabilise_0,
SUM(CASE WHEN DATEFAC IS NOT NULL AND NOT (CODETAB = 3 AND valeur = 1) THEN CASE WHEN TYPEFAC NOT IN ('2','4') THEN MNTSS ELSE - MNTSS END ELSE 0 END) AS montant_comptabilise_1,
SUM(CASE WHEN DATEFAC IS NOT NULL AND NOT (CODETAB = 3 AND valeur = 1) THEN CASE WHEN TYPEFAC NOT IN ('2','4') THEN MNTMUT ELSE - MNTMUT END ELSE 0 END) AS montant_comptabilise_2,
0 as montant_comptabilise_22
FROM prod_mederi.KACTES
LEFT JOIN w_FAC_FACTURE ON w_FAC_FACTURE.NOFAC = KACTES.NOFAC
LEFT JOIN activite[PX].t_rubriques_facturation ON (KACTES.NOACTE = t_rubriques_facturation.code_original)
LEFT JOIN prod_mederi.KRUBINT ON (KACTES.NOACTE = KRUBINT.NOACTE)
LEFT JOIN activite.t_prestations ON (NOACTESS = t_prestations.code)
LEFT JOIN activite[PX].t_medecins_administratifs ON (NOPRAT = t_medecins_administratifs.code_original)
LEFT JOIN base.t_actes ON (CASE WHEN NCCAM IS NULL THEN KACTES.NOACTE ELSE substring(NCCAM, 1, 7) END = t_actes.code)
LEFT JOIN W_KPRAT KPRAT ON KACTES.NOPRAT = KPRAT.NOPRAT
LEFT JOIN activite.t_divers ON t_divers.code = 'MEDSAL_COMPTACLI' AND valeur = 1
WHERE 1=1
AND TYPEFAC NOT IN (3,4)
AND KACTES.TYPERUB = 4
GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25;
-- modificationd es factures avec règlements sans détail (trop percus )
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,
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,
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,
acte_id
)
SELECT
no_facture,
date_debut,
date_fin,
nb_rubrique,
nb_prestations,
coefficient,
coefficient_mco,
medecin_facture_id,
medecin_comptabilise_id,
prestation_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_sortie_id,
montant_comptabilise,
montant_comptabilise_0,
montant_comptabilise_1,
montant_comptabilise_2,
montant_comptabilise_22,
0,
0,
0,
0,
0,
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,
acte_id
FROM w_FAC_FACTURE_LIGNE_H;
DROP TABLE IF EXISTS w_mouvements_sejour_lieu_jour;
CREATE TEMP TABLE w_mouvements_sejour_lieu_jour AS
SELECT no_sejour,
date,
(MAX(CASE WHEN est_absence <> '1' THEN Array[heure_fin, lieu_id] ELSE NULL END))[2] AS lieu_id,
(MAX(Array[heure_fin, lieu_id]))[2] AS lieu_id_avec_absence
FROM activite[PX].p_mouvements_sejour
JOIN activite[PX].t_lieux ON lieu_id = t_lieux.oid
JOIN activite[PX].t_services_facturation On service_facturation_id = t_services_facturation.oid
GROUP BY 1,2;
UPDATE activite[PX].p_factures_lignes_h
SET lieu_id = COALESCE(w_mouvements_sejour_lieu_jour.lieu_id,w_mouvements_sejour_lieu_jour.lieu_id_avec_absence)
FROM activite[PX].p_factures, w_mouvements_sejour_lieu_jour
WHERE p_factures_lignes_h.no_facture = p_factures.no_facture AND
p_factures.no_sejour = w_mouvements_sejour_lieu_jour.no_sejour AND
p_factures_lignes_h.date_debut = w_mouvements_sejour_lieu_jour.date AND
p_factures_lignes_h.lieu_id <> COALESCE(w_mouvements_sejour_lieu_jour.lieu_id,w_mouvements_sejour_lieu_jour.lieu_id_avec_absence);
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');
-- Suppression des tables de travail non utilisées après
]]></sqlcmd>
</NODE>
<NODE label="Compte client Honoraires">
<sqlcmd><![CDATA[
DROP TABLE IF EXISTS W_KPRAT
;
CREATE TEMP TABLE W_KPRAT AS
SELECT *
FROM prod_mederi.KPRAT
WHERE CTID IN (
SELECT MAX(CTID)
from prod_mederi.KPRAT
GROUP BY NOPRAT
)
;
SELECT base.cti_disable_index('activite[PX]', 'i_factures_soldes_h_1');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_soldes_h_3');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_soldes_h_4');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_soldes_h_8');
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
no_facture,
date_vente,
medecin_comptabilise_id,
SUM(montant_comptabilise),
SUM(montant_comptabilise_0),
SUM(montant_comptabilise_1),
SUM(montant_comptabilise_2),
SUM(montant_comptabilise_22),
0,
0,
0,
0,
0
FROM w_FAC_FACTURE_LIGNE_H
WHERE date_vente IS NOT NULL AND
(montant_comptabilise <> 0 OR
montant_comptabilise_0 <> 0 OR
montant_comptabilise_1 <> 0 OR
montant_comptabilise_2 <> 0 OR
montant_comptabilise_22 <> 0
)
AND w_FAC_FACTURE_LIGNE_H.no_facture IS NOT NULL
GROUP BY 1,2,3;
SELECT base.cti_enable_index('activite[PX]', 'i_factures_soldes_h_1');
DROP TABLE IF EXISTS w_FAC_REGLEMENT_LIGNE_H;
CREATE TEMP TABLE w_FAC_REGLEMENT_LIGNE_H AS
SELECT
KACTES.NOFAC AS no_facture,
KRGLDET.DATE AS date_reglement,
COALESCE(t_medecins_administratifs.oid::bigint, 0) AS medecin_comptabilise_id,
SUM(KRGLDET.MONTANT) AS montant_regle,
SUM(CASE WHEN KREGL.DEBITEUR = 3 THEN KRGLDET.MONTANT ELSE 0 END) AS montant_regle_0,
SUM(CASE WHEN KREGL.DEBITEUR = 1 THEN KRGLDET.MONTANT ELSE 0 END) AS montant_regle_1,
SUM(CASE WHEN KREGL.DEBITEUR = 2 THEN KRGLDET.MONTANT ELSE 0 END) AS montant_regle_2,
0 AS montant_regle_22
FROM w_KRGLDET KRGLDET
JOIN w_KREGL KREGL ON KRGLDET.NOREGL = KREGL.NOREGL
JOIN prod_mederi.KACTES ON KACTES.ACCLEUNIK = KRGLDET.ACCLEUNIK
JOIN activite[PX].p_sejours ON KACTES.NODOSSIER = p_sejours.no_sejour
LEFT JOIN activite[PX].t_medecins_administratifs ON (KACTES.NOPRAT = t_medecins_administratifs.code_original)
LEFT JOIN activite.t_divers ON t_divers.code = 'MEDSAL_COMPTACLI'
JOIN W_KPRAT KPRAT ON KACTES.NOPRAT = KPRAT.NOPRAT AND (valeur != 1 OR CODETAB != 3)
WHERE 1=1
AND NOT ((KREGL.ORIGINE = 13 AND KREGL.DEBITEUR = 1) OR (KREGL.ORIGINE = 1 AND KREGL.DEBITEUR = 3))
AND TYPERUB = 4
GROUP BY 1,2,3;
-- Règlements sans affectation
INSERT INTO w_FAC_REGLEMENT_LIGNE_H
SELECT
subview.no_facture AS no_facture,
date(KREGL.DATE) AS date_reglement,
0::bigint AS medecin_comptabilise_id,
SUM(KREGL.MONTANT) AS montant_regle,
SUM(CASE WHEN KREGL.DEBITEUR = 3 THEN KREGL.MONTANT ELSE 0 END) AS montant_regle_0,
SUM(CASE WHEN KREGL.DEBITEUR = 1 THEN KREGL.MONTANT ELSE 0 END) AS montant_regle_1,
SUM(CASE WHEN KREGL.DEBITEUR = 2 THEN KREGL.MONTANT ELSE 0 END) AS montant_regle_2,
0 AS montant_regle_22
FROM w_KREGL KREGL
JOIN
(
SELECT no_sejour, (MAX(ARRAY[date_facture::text, no_facture]))[2] AS no_facture
FROM activite[PX].p_factures
GROUP BY 1
) subview
ON subview.no_sejour = NODOSSIER
WHERE 1=1 AND
KREGL.DEBITEUR = '3' AND
NUMREGLD = '0' AND
ignore = '0' AND
forcehon = '1'
GROUP BY 1,2,3
;
-- Acomptes
INSERT INTO w_FAC_REGLEMENT_LIGNE_H
SELECT
KACTES.NOFAC AS no_facture,
KRGLDET.DATE AS date_reglement,
0 AS medecin_comptabilise_id,
SUM(KRGLDET.MONTANT) AS montant_regle,
SUM(CASE WHEN KREGL.DEBITEUR = 3 THEN KRGLDET.MONTANT ELSE 0 END) AS montant_regle_0,
SUM(CASE WHEN KREGL.DEBITEUR = 1 THEN KRGLDET.MONTANT ELSE 0 END) AS montant_regle_1,
SUM(CASE WHEN KREGL.DEBITEUR = 2 THEN KRGLDET.MONTANT ELSE 0 END) AS montant_regle_2,
0 AS montant_regle_22
FROM w_KRGLDET KRGLDET
JOIN w_KREGL KREGL ON KRGLDET.NOREGL = KREGL.NOREGL
JOIN prod_mederi.KACTES ON KACTES.ACCLEUNIK = KRGLDET.ACCLEUNIK
JOIN activite[PX].p_sejours ON KACTES.NODOSSIER = p_sejours.no_sejour
LEFT JOIN activite[PX].t_medecins_administratifs ON (KACTES.NOPRAT = t_medecins_administratifs.code_original)
LEFT JOIN activite.t_divers ON t_divers.code = 'MEDSAL_COMPTACLI'
JOIN W_KPRAT KPRAT ON KACTES.NOPRAT = KPRAT.NOPRAT AND (valeur != 1 OR CODETAB != 3)
WHERE 1=1
AND ((KREGL.ORIGINE = 13 AND KREGL.DEBITEUR = 1) OR (KREGL.ORIGINE = 1 AND KREGL.DEBITEUR = 3))
AND TYPERUB = 4
GROUP BY 1,2,3
;
UPDATE w_FAC_REG_SEJ
SET
montant_regle = 0,
montant_regle_0 = 0,
montant_regle_1 = 0,
montant_regle_2 = 0
;
UPDATE w_FAC_REG_SEJ
SET
montant_regle = CASE WHEN SENS IS DISTINCT FROM '-' THEN MONTANT ELSE - MONTANT END,
montant_regle_0 = CASE WHEN sub.DEBITEUR = 3 THEN CASE WHEN SENS IS DISTINCT FROM '-' THEN MONTANT ELSE - MONTANT END ELSE 0 END,
montant_regle_1 = CASE WHEN sub.DEBITEUR = 1 THEN CASE WHEN SENS IS DISTINCT FROM '-' THEN MONTANT ELSE - MONTANT END ELSE 0 END,
montant_regle_2 = CASE WHEN sub.DEBITEUR = 2 THEN CASE WHEN SENS IS DISTINCT FROM '-' THEN MONTANT ELSE - MONTANT END ELSE 0 END
FROM
(SELECT
NOREGL,
w_FAC_CORR.NOFAC,
date(w_FAC_CORR.DATE) AS DATE,
SENS,
DEBITEUR,
CASE
WHEN MONTANT = MNTHASS THEN montant_facture_0
WHEN MONTANT = MNTHAM THEN montant_facture_1
WHEN MONTANT = MNTHMUT THEN montant_facture_2
WHEN MONTANT = SLDHASS THEN montant_facture_0
WHEN MONTANT = SLDHAM THEN montant_facture_1
WHEN MONTANT = SLDHMUT THEN montant_facture_2
WHEN MONTANT = MNTHASS + MNTPASS THEN montant_facture_0
WHEN MONTANT = MNTHAM + MNTPAM THEN montant_facture_1
WHEN MONTANT = MNTHMUT + MNTPMUT THEN montant_facture_2
WHEN MONTANT = SLDHASS + SLDPASS THEN montant_facture_0
WHEN MONTANT = SLDHAM + SLDPAM THEN montant_facture_1
WHEN MONTANT = SLDHMUT + SLDPMUT THEN montant_facture_2
WHEN MONTANT = MNTPASS THEN 0
WHEN MONTANT = MNTPAM THEN 0
WHEN MONTANT = MNTPMUT THEN 0
WHEN MONTANT = SLDPASS THEN 0
WHEN MONTANT = SLDPAM THEN 0
WHEN MONTANT = SLDPMUT THEN 0
ELSE 0 END as MONTANT
FROM w_FAC_CORR ,w_FAC_FACTURE_LIGNE_H
WHERE w_FAC_CORR.NOFAC = w_FAC_FACTURE_LIGNE_H.no_facture
AND (((MONTANT = MNTPASS OR MONTANT = MNTPAM OR MONTANT = MNTPMUT
OR MONTANT = MNTHASS OR MONTANT = MNTHAM OR MONTANT = MNTHMUT
OR MONTANT = MNTHASS + MNTPASS OR MONTANT = MNTHAM+MNTPAM OR MONTANT = MNTHMUT+MNTPMUT)
AND w_FAC_CORR.NOFAC NOT IN (SELECT no_facture FROM w_FAC_REGLEMENT_LIGNE_H))
OR
((MONTANT = SLDPASS OR MONTANT = SLDPAM OR MONTANT = SLDPMUT
OR MONTANT = SLDHASS OR MONTANT = SLDHAM OR MONTANT = SLDHMUT
OR MONTANT = SLDHASS + SLDPASS OR MONTANT = SLDHAM+SLDPAM OR MONTANT = SLDHMUT+SLDPMUT)
))
) as sub
WHERE sub.NOFAC = w_FAC_REG_SEJ.NOFAC
AND sub.DEBITEUR = w_FAC_REG_SEJ.DEBITEUR
AND sub.DATE = w_FAC_REG_SEJ.date_reglement
;
INSERT INTO w_FAC_REGLEMENT_LIGNE_H
SELECT
NOFAC,
date_reglement,
0 as medecin_comptabilise_id,
montant_regle ,
montant_regle_0,
montant_regle_1,
montant_regle_2,
0 as montant_regle_22
FROM w_FAC_REG_SEJ
WHERE montant_regle != 0;
DELETE FROM w_FAC_REGLEMENT_LIGNE_H
WHERE w_FAC_REGLEMENT_LIGNE_H.no_facture NOT IN (SELECT p_factures.no_facture FROM activite[PX].p_factures)
;
-- Comptes clients (REG)
UPDATE activite[PX].p_factures_soldes_h
SET
montant_regle = w_FAC_REGLEMENT_LIGNE_H.montant_regle,
montant_regle_0 = w_FAC_REGLEMENT_LIGNE_H.montant_regle_0,
montant_regle_1 = w_FAC_REGLEMENT_LIGNE_H.montant_regle_1,
montant_regle_2 = w_FAC_REGLEMENT_LIGNE_H.montant_regle_2,
montant_regle_22 = w_FAC_REGLEMENT_LIGNE_H.montant_regle_22
FROM w_FAC_REGLEMENT_LIGNE_H
WHERE p_factures_soldes_h.no_facture = w_FAC_REGLEMENT_LIGNE_H.no_facture
AND p_factures_soldes_h.date_comptable = w_FAC_REGLEMENT_LIGNE_H.date_reglement
AND p_factures_soldes_h.medecin_comptabilise_id = w_FAC_REGLEMENT_LIGNE_H.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_FAC_REGLEMENT_LIGNE_H.no_facture,
w_FAC_REGLEMENT_LIGNE_H.date_reglement,
w_FAC_REGLEMENT_LIGNE_H.medecin_comptabilise_id,
0,
0,
0,
0,
0,
w_FAC_REGLEMENT_LIGNE_H.montant_regle,
w_FAC_REGLEMENT_LIGNE_H.montant_regle_0,
w_FAC_REGLEMENT_LIGNE_H.montant_regle_1,
w_FAC_REGLEMENT_LIGNE_H.montant_regle_2,
w_FAC_REGLEMENT_LIGNE_H.montant_regle_22
FROM w_FAC_REGLEMENT_LIGNE_H
LEFT JOIN activite[PX].p_factures_soldes_h
ON (p_factures_soldes_h.no_facture = w_FAC_REGLEMENT_LIGNE_H.no_facture
AND p_factures_soldes_h.date_comptable = w_FAC_REGLEMENT_LIGNE_H.date_reglement
AND p_factures_soldes_h.medecin_comptabilise_id = w_FAC_REGLEMENT_LIGNE_H.medecin_comptabilise_id)
WHERE TRUE
AND date_reglement IS NOT NULL
AND p_factures_soldes_h.no_facture IS NULL
AND w_FAC_REGLEMENT_LIGNE_H.no_facture IS NOT NULL;
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');
-- Suppression des tables de travail non utilisées après
DROP TABLE IF EXISTS w_FAC_REGLEMENT_LIGNE_H CASCADE;
DROP TABLE IF EXISTS w_FAC_FACTURE_LIGNE_H CASCADE;
-- maj soldes
UPDATE activite[PX].p_factures
SET
montant_regle_h = sub.montant_regle_h,
montant_regle_0_h = sub.montant_regle_0_h,
montant_regle_1_h = sub.montant_regle_1_h,
montant_regle_2_h = sub.montant_regle_2_h
FROM (
SELECT
no_facture,
SUM(reg_h.montant_regle) AS montant_regle_h,
SUM(reg_h.montant_regle_0) AS montant_regle_0_h,
SUM(reg_h.montant_regle_1) AS montant_regle_1_h,
SUM(reg_h.montant_regle_2) AS montant_regle_2_h
FROM activite[PX].p_factures_soldes_h reg_h
GROUP BY 1) as sub
WHERE sub.no_facture = p_factures.no_facture;
]]></sqlcmd>
</NODE>
<NODE label="Post traitement entetes">
<sqlcmd><![CDATA[
-- médecins salariés
UPDATE activite[PX].p_factures
SET
montant_comptabilise_c = sub.montant_comptabilise_c,
montant_comptabilise_0_c = sub.montant_comptabilise_0_c,
montant_comptabilise_1_c = sub.montant_comptabilise_1_c,
montant_comptabilise_2_c = sub.montant_comptabilise_2_c,
montant_comptabilise_22_c = sub.montant_comptabilise_22_c
FROM (
SELECT
no_facture,
SUM(COALESCE(montant_comptabilise,0)) AS montant_comptabilise_c,
SUM(COALESCE(montant_comptabilise_0)) AS montant_comptabilise_0_c,
SUM(COALESCE(montant_comptabilise_1,0)) AS montant_comptabilise_1_c,
SUM(COALESCE(montant_comptabilise_2,0)) AS montant_comptabilise_2_c,
SUM(COALESCE(montant_comptabilise_22,0)) AS montant_comptabilise_22_c
FROM activite[PX].p_factures_lignes_c
GROUP BY 1
) as sub
WHERE p_factures.no_facture = sub.no_facture;
UPDATE activite[PX].p_factures
SET
montant_comptabilise_h = sub.montant_comptabilise_h,
montant_comptabilise_0_h = sub.montant_comptabilise_0_h,
montant_comptabilise_1_h = sub.montant_comptabilise_1_h,
montant_comptabilise_2_h = sub.montant_comptabilise_2_h,
montant_comptabilise_22_h = sub.montant_comptabilise_22_h
FROM (
SELECT
no_facture,
SUM(COALESCE(montant_comptabilise,0)) AS montant_comptabilise_h,
SUM(COALESCE(montant_comptabilise_0)) AS montant_comptabilise_0_h,
SUM(COALESCE(montant_comptabilise_1,0)) AS montant_comptabilise_1_h,
SUM(COALESCE(montant_comptabilise_2,0)) AS montant_comptabilise_2_h,
SUM(COALESCE(montant_comptabilise_22,0)) AS montant_comptabilise_22_h
FROM activite[PX].p_factures_lignes_h
GROUP BY 1
) as sub
WHERE p_factures.no_facture = sub.no_facture;
-- Préfactures inutiles
DELETE FROM activite[PX].p_factures
WHERE type_facture = 'P' AND
coalesce(montant_facture_c,0) = 0 AND
coalesce(montant_facture_h,0) = 0 AND
coalesce(montant_comptabilise_c,0) = 0 AND
coalesce(montant_comptabilise_h,0) = 0 AND
coalesce(montant_regle_c,0) = 0 AND
coalesce(montant_regle_h,0) = 0 AND
no_facture NOT IN (SELECT no_facture FROM activite[PX].p_factures_soldes_c) AND
no_facture NOT IN (SELECT no_facture FROM activite[PX].p_factures_soldes_h)
;
-- Facture reference
DROP TABLE IF EXISTS w_sejours_facture_reference;
CREATE TEMP TABLE w_sejours_facture_reference AS
SELECT
p_sejours.no_sejour,
CASE WHEN avec_facturation_intermediaire IS DISTINCT FROM '1' THEN p_sejours.date_sortie ELSE p_factures.date_fin END AS date_fin,
MIN(CASE WHEN avec_facturation_intermediaire IS DISTINCT FROM '1' THEN p_sejours.date_entree ELSE p_factures.date_debut END) AS date_debut,
MAX(p_factures.no_facture) AS no_facture_last,
MAX(CASE WHEN type_facture <> '1' AND type_facture <> 'X' AND type_facture <> 'P' THEN p_factures.no_facture ELSE null END) AS no_facture_reference_last,
MAX(CASE WHEN type_facture <> '1' AND type_facture <> 'X' AND type_facture <> 'P' AND
(t_prestations.code IN ('GHS','PJ') OR (p_factures.no_facture LIKE '%BG' AND p_sejours.type_sejour IN ('1','2','5'))) THEN p_factures.no_facture ELSE null END) AS no_facture_reference_sejour_last,
COUNT(DISTINCT p_factures.no_facture) AS nb_factures,
MAX(avec_facturation_intermediaire) AS avec_facturation_intermediaire
FROM activite[PX].p_factures
JOIN activite[PX].p_sejours ON p_factures.no_sejour = p_sejours.no_sejour
JOIN activite[PX].t_lieux ON p_sejours.lieu_sortie_id = t_lieux.oid
JOIN activite[PX].t_services_facturation ON service_facturation_id = t_services_facturation.oid
LEFT JOIN activite[PX].p_factures_lignes_c ON p_factures.no_facture = p_factures_lignes_c.no_facture
LEFT JOIN activite.t_prestations ON p_factures_lignes_c.prestation_id = t_prestations.oid AND t_prestations.code IN ('GHS','PJ')
GROUP BY 1,2;
CREATE INDEX w_sejours_facture_reference_i1
ON w_sejours_facture_reference
USING btree
(no_sejour);
UPDATE activite[PX].p_factures
SET no_facture_reference = COALESCE(no_facture_reference_sejour_last, no_facture_reference_last, no_facture_last)
FROM w_sejours_facture_reference
JOIN activite[PX].p_sejours ON p_sejours.no_sejour = w_sejours_facture_reference.no_sejour
WHERE p_factures.no_sejour = w_sejours_facture_reference.no_sejour AND
(
p_factures.date_fin = w_sejours_facture_reference.date_fin OR
p_factures.date_fin = p_sejours.date_sortie AND avec_facturation_intermediaire IS DISTINCT FROM '1'
) AND
p_factures.no_facture_reference <> COALESCE(no_facture_reference_sejour_last, no_facture_reference_last, no_facture_last);
UPDATE activite[PX].p_factures
SET type_facture = '0'
WHERE p_factures.type_facture = '2' AND
p_factures.no_facture = p_factures.no_facture_reference;
UPDATE activite[PX].p_factures
SET type_facture = '2'
WHERE p_factures.type_facture = '0' AND
p_factures.no_facture <> p_factures.no_facture_reference;
-- Suppression des tables de travail non utilisées après
DROP TABLE IF EXISTS w_sejours_facture_reference CASCADE;
]]></sqlcmd>
</NODE>
</NODE>
<NODE name="CHIFFRIER" label="CREATION DU CHIFFRIER">
<NODE label="Récupération chiffrier">
<sqlcmd><![CDATA[
TRUNCATE activite[PX].p_chiffrier_comptable;
INSERT INTO activite[PX].p_chiffrier_comptable(
date_comptable,
montant_ventes_c,
montant_reglements_c,
montant_solde_client_c,
montant_ventes_h,
montant_reglements_h,
montant_solde_client_h
)
SELECT date_comptable,
SUM(montant_ventes_c) AS montant_ventes_c,
SUM(montant_reglements_c) AS montant_reglements_c,
SUM(montant_solde_client_c) AS montant_solde_client_c,
SUM(montant_ventes_h) AS montant_ventes_h,
SUM(montant_reglements_h) AS montant_reglements_h,
SUM(montant_solde_client_h) AS monatnt_solde_client_h
FROM (
SELECT
date_trunc('month',DATEFAC) AS date_comptable,
SUM(CASE WHEN TYPEFAC NOT IN ('2','4') THEN MNTPREST ELSE 0 -MNTPREST END) AS montant_ventes_c,
0 AS montant_reglements_c,
SUM(CASE WHEN TYPEFAC NOT IN ('2','4') THEN SLDPASS + SLDPMUT + SLDPAM ELSE 0 - (SLDPASS + SLDPMUT + SLDPAM) END) AS montant_solde_client_c,
SUM(CASE WHEN TYPEFAC NOT IN ('2','4') THEN MNTHONO ELSE 0 -MNTHONO END) AS montant_ventes_h,
0 AS montant_reglements_h,
SUM(CASE WHEN TYPEFAC NOT IN ('2','4') THEN SLDHASS + SLDHMUT + SLDHAM ELSE 0 - (SLDHASS + SLDHMUT + SLDHAM ) END) AS montant_solde_client_h
FROM w_KFACTURE KFACTURE
WHERE DATEFAC >= '[ENV_ADM_ANNEEDEBUT]0101' AND
NOFAC IS NOT NULL
GROUP BY 1
UNION ALL
SELECT
date_trunc('month',DATE) AS date_comptable,
0 AS montant_vente_c,
SUM(CASE WHEN NOPRAT IS NULL THEN KRGLDET.MONTANT ELSE 0 END) AS montant_reglements_c,
0 AS montant_solde_c,
0 AS montant_vente_h,
SUM(CASE WHEN NOPRAT IS NOT NULL THEN KRGLDET.MONTANT ELSE 0 END) AS montant_reglements_h,
0 AS montant_solde_h
FROM w_KRGLDET KRGLDET
WHERE DATE > '[ENV_ADM_ANNEEDEBUT]0101'
AND KRGLDET.NOFAC IS NOT NULL
GROUP BY 1
ORDER BY 1) AS sub
GROUP BY 1;
TRUNCATE activite[PX].p_factures_comptables;
INSERT INTO activite[PX].p_factures_comptables (
no_facture,
date_comptable,
montant_ventes_c,
montant_ventes_h,
montant_reglements_c,
montant_reglements_h
)
SELECT no_facture,
date_comptable,
SUM(montant_ventes_c) AS montant_ventes_c,
SUM(montant_ventes_h) AS montant_ventes_h,
SUM(montant_reglements_c) AS montant_reglements_c,
SUM(montant_reglements_h) AS montant_reglements_h
FROM (
SELECT
COALESCE(NOFAC,'000000000') AS no_facture,
DATEFAC AS date_comptable,
SUM(CASE WHEN TYPEFAC NOT IN ('2','4') THEN MNTPREST ELSE 0 -MNTPREST END) AS montant_ventes_c,
SUM(CASE WHEN TYPEFAC NOT IN ('2','4') THEN MNTHONO ELSE 0 -MNTHONO END) AS montant_ventes_h,
0::numeric AS montant_reglements_c,
0::numeric AS montant_reglements_h
FROM w_KFACTURE KFACTURE
WHERE DATEFAC >= '[ENV_ADM_ANNEEDEBUT]0101' AND
NOFAC IS NOT NULL
GROUP BY 1,2
HAVING
SUM(MNTPREST) <> 0 OR SUM(MNTHONO) <> 0
UNION
SELECT
COALESCE(KRGLDET.NOFAC,'000000000') AS no_facture,
date_trunc('month',DATE) AS date_comptable,
0 AS montant_vente_c,
0 AS montant_vente_h,
SUM(CASE WHEN NOPRAT IS NULL THEN KRGLDET.MONTANT ELSE 0 END) AS montant_reglements_c,
SUM(CASE WHEN NOPRAT IS NOT NULL THEN KRGLDET.MONTANT ELSE 0 END) AS montant_reglements_h
FROM w_KRGLDET KRGLDET
WHERE DATE > '[ENV_ADM_ANNEEDEBUT]0101'
AND KRGLDET.NOFAC IS NOT NULL
GROUP BY 1,2
) subview
GROUP BY 1,2
ORDER BY 1,2;
]]></sqlcmd>
</NODE>
</NODE>
<NODE name="PARAM" label="RECUPERATION DES PARAMETRES">
<NODE label="Préparation des tables">
<sqlcmd><![CDATA[
-- Préparation table des factures pour traiteement des factures P***
DROP TABLE IF EXISTS w_KFACTURE;
CREATE TEMP TABLE w_KFACTURE AS
SELECT *,
'0'::text AS est_doublon
FROM prod_mederi.KFACTURE
;
-- ELA Regroupment des factures en double
UPDATE w_KFACTURE SET
est_doublon = CASE WHEN NOENR_keep = NOENR THEN '0' ELSE '1' END,
MNTPREST = CASE WHEN NOENR_keep = NOENR THEN MNTPREST_sum ELSE MNTPREST END,
MNTPAM = CASE WHEN NOENR_keep = NOENR THEN MNTPAM_sum ELSE MNTPAM END,
MNTPMUT = CASE WHEN NOENR_keep = NOENR THEN MNTPMUT_sum ELSE MNTPMUT END,
MNTPASS = CASE WHEN NOENR_keep = NOENR THEN MNTPASS_sum ELSE MNTPASS END,
MNTHONO = CASE WHEN NOENR_keep = NOENR THEN MNTHONO_sum ELSE MNTHONO END,
MNTHAM = CASE WHEN NOENR_keep = NOENR THEN MNTHAM_sum ELSE MNTHAM END,
MNTHMUT = CASE WHEN NOENR_keep = NOENR THEN MNTHMUT_sum ELSE MNTHMUT END,
MNTHASS = CASE WHEN NOENR_keep = NOENR THEN MNTHASS_sum ELSE MNTHASS END,
HTFAC = CASE WHEN NOENR_keep = NOENR THEN HTFAC_sum ELSE HTFAC END,
HTSS= CASE WHEN NOENR_keep = NOENR THEN HTSS_sum ELSE HTSS END,
SLDPAM = CASE WHEN NOENR_keep = NOENR THEN SLDPAM_sum ELSE SLDPAM END,
SLDPMUT = CASE WHEN NOENR_keep = NOENR THEN SLDPMUT_sum ELSE SLDPMUT END,
SLDPASS = CASE WHEN NOENR_keep = NOENR THEN SLDPASS_sum ELSE SLDPASS END,
SLDHAM = CASE WHEN NOENR_keep = NOENR THEN SLDHAM_sum ELSE SLDHAM END,
SLDHMUT = CASE WHEN NOENR_keep = NOENR THEN SLDHMUT_sum ELSE SLDHMUT END,
SLDHASS = CASE WHEN NOENR_keep = NOENR THEN SLDHASS_sum ELSE SLDHASS END
FROM
(
SELECT NOFAC, MAX(NOENR) AS NOENR_keep,
SUM(MNTPREST) AS MNTPREST_sum,
SUM(MNTPAM) AS MNTPAM_sum,
SUM(MNTPMUT) AS MNTPMUT_sum,
SUM(MNTPASS) AS MNTPASS_sum,
SUM(MNTHONO) AS MNTHONO_sum,
SUM(MNTHAM) AS MNTHAM_sum,
SUM(MNTHMUT) AS MNTHMUT_sum,
SUM(MNTHASS) AS MNTHASS_sum,
SUM(base.cti_to_number(HTFAC))::text AS HTFAC_sum,
SUM(base.cti_to_number(HTSS))::text AS HTSS_sum,
SUM(SLDPAM) AS SLDPAM_sum,
SUM(SLDPMUT) AS SLDPMUT_sum,
SUM(SLDPASS) AS SLDPASS_sum,
SUM(SLDHAM) AS SLDHAM_sum,
SUM(SLDHMUT) AS SLDHMUT_sum,
SUM(SLDHASS) AS SLDHASS_sum
FROM w_KFACTURE
WHERE NOFAC IS NOT NULL
GROUP BY 1
HAVING count(*) > 1 AND
count(distinct TYPEFAC) = 1
) subview
WHERE w_KFACTURE.NOFAC = subview.NOFAC
;
-- ELA Suppression des autres factures en double (en attendant mieux)
UPDATE w_KFACTURE
SET est_doublon = '1'
WHERE NOFAC IN
(
SELECT NOFAC
FROM w_KFACTURE
WHERE NOFAC IS NOT NULL AND est_doublon = '0'
GROUP BY 1
HAVING count(*) > 1
)
;
UPDATE w_KFACTURE
SET MNTPREST = MNTPREST - MNTPASS,
MNTPASS = MNTPREST - MNTPASS
WHERE NOFAC LIKE 'P%' AND
(MNTPREST IS DISTINCT FROM MNTPREST - MNTPASS OR
MNTPASS IS DISTINCT FROM MNTPREST - MNTPASS
)
;
CREATE INDEX w_KFACTURE_ik_nofac
ON w_KFACTURE
USING btree
(nofac);
CREATE INDEX w_KFACTURE_ik_nodossier
ON w_KFACTURE
USING btree
(nodossier);
UPDATE w_KFACTURE
SET DATEFACPAR = subview.DATEFIN
FROM
(SELECT NOFAC, MAX(COALESCE(DATEFIN,DATEACTE)) AS DATEFIN
FROM prod_mederi.KACTES
WHERE NOACTE = 'PJ'
GROUP BY 1
) subview
WHERE w_KFACTURE.NOFAC = subview.NOFAC AND
DATEFACPAR IS NOT NULL AND
TYPEFAC = '1' AND
(DATEFACPAR - subview.DATEFIN) > 1
;
-- Préparation table des reglements pour signer
DROP TABLE IF EXISTS w_KREGL;
CREATE TEMP TABLE w_KREGL AS
SELECT *,
'0'::text AS ignore,
'0'::text AS forcehon
FROM prod_mederi.KREGL
;
UPDATE w_KREGL
SET forcehon = '1'
WHERE NUMREGLD = 0 AND
libelle like 'Rglt %' AND
libelle like '% Hon N%'
;
UPDATE w_KREGL
SET ignore = '1'
WHERE NUMREGLD = 0 AND
ETATREGL <> '1' AND ORIGINE = 8
;
UPDATE w_KREGL SET
SENS = CASE WHEN ORIGINE IN ('4', '6', '8','10','12','14','15') THEN '-' ELSE '' END,
MONTANT = CASE WHEN ORIGINE IN ('4', '6', '8','10','12','14','15') THEN 0-MONTANT ELSE MONTANT END
;
ANALYSE w_KREGL
;
CREATE INDEX w_KREGL_ik_nodossier
ON w_KREGL
USING btree
(nodossier);
CREATE INDEX w_KREGL_ik_noregl
ON w_KREGL
USING btree
(noregl);
DROP TABLE IF EXISTS w_KRGLDET;
CREATE TEMP TABLE w_KRGLDET AS
SELECT *
FROM prod_mederi.KRGLDET
;
UPDATE w_KRGLDET SET
MONTANT = CASE WHEN ORIGINE IN ('4', '6', '8','10','12','14','15') THEN 0-MONTANT ELSE MONTANT END
WHERE ORIGINE IN ('4', '6', '8','10','12','14','15')
;
ANALYSE w_KRGLDET
;
CREATE INDEX w_KRGLDET_ik_nodossier
ON w_KRGLDET
USING btree
(nodossier);
CREATE INDEX w_KRGLDET_ik_noregl
ON w_KRGLDET
USING btree
(noregl);
CREATE INDEX w_KRGLDET_ik_nofac
ON w_KRGLDET
USING btree
(nofac);
-- N° dossier vide sur entete reglement
UPDATE w_KREGL
SET NODOSSIER = subview.NODOSSIER
FROM
(
SELECT w_KREGL.NOREGL, MAX(w_KFACTURE.NODOSSIER) AS NODOSSIER
FROM w_KREGL
JOIN w_KRGLDET ON w_KREGL.NOREGL = w_KRGLDET.NOREGL
JOIN w_KFACTURE ON w_KRGLDET.NOFAC = w_KFACTURE.NOFAC
WHERE w_KREGL.NODOSSIER IS NULL
GROUP BY 1
) subview
WHERE w_KREGL.NOREGL = subview.NOREGL AND
w_KREGL.NODOSSIER IS NULL
;
]]></sqlcmd>
</NODE>
<NODE label="Tiers payant">
<sqlcmd><![CDATA[
INSERT INTO activite[PX].t_types_tiers_payant(code, texte, texte_court)
SELECT code, texte, texte FROM
(
SELECT '0' AS code, 'Patients' AS texte
UNION ALL
SELECT '1','Régime général'
UNION ALL
SELECT '2','Mutuelles'
) subview
WHERE code NOT IN (SELECT code FROM activite[PX].t_types_tiers_payant);
INSERT INTO base.t_grands_regimes(code, code_original, texte, texte_court)
SELECT NOGREGIME, NOGREGIME, LIBELLE, LIBELLE
FROM prod_mederi.KGREGIME
LEFT JOIN base.t_grands_regimes ON NOGREGIME = code
WHERE t_grands_regimes.code IS NULL
GROUP BY 1,2,3,4;
INSERT INTO activite[PX].t_tiers_payant(oid, code, code_original, type_tiers_payant, texte, texte_court)
SELECT 0, '', '', '0', 'Non saisi', 'Non saisi'
WHERE 0 NOT IN (SELECT oid FROM activite[PX].t_tiers_payant);
INSERT INTO activite[PX].t_tiers_payant(code, code_original, type_tiers_payant, texte, texte_court)
SELECT 'PATIENTS', '0', '0', 'Patients', 'Patients'
WHERE '0' NOT IN (SELECT code_original FROM activite[PX].t_tiers_payant);
INSERT INTO activite[PX].t_tiers_payant(code_original, code, type_tiers_payant, texte, texte_court)
SELECT COORGDEST, COORGDEST, MAX(CASE WHEN ORGANISME = 1 THEN '1' WHEN COORGDEST like '%PATIENT%' THEN '0' ELSE '2' END), MAX(NOM), MAX(NOM)
FROM prod_mederi.KORGDEST
WHERE COORGDEST IN (
SELECT DISTINCT COORGDEST
FROM prod_mederi.KDOSSIER
WHERE COORGDEST NOT IN (SELECT code_original FROM activite[PX].t_tiers_payant)
UNION ALL
SELECT DISTINCT NOMUTUELLE
FROM prod_mederi.KDOSSIER
WHERE NOMUTUELLE NOT IN (SELECT code_original FROM activite[PX].t_tiers_payant))
GROUP BY 1,2;
UPDATE activite[PX].t_tiers_payant
SET grand_regime_id = t_grands_regimes.oid
FROM prod_mederi.KORGDEST
JOIN prod_mederi.KGREGIME ON KORGDEST.NOGREGIME = KGREGIME.NOGREGIME
JOIN base.t_grands_regimes ON KGREGIME.NOGREGIME = code
WHERE t_tiers_payant.code_original = COORGDEST AND
grand_regime_id IS DISTINCT FROM t_grands_regimes.oid AND
KGREGIME.NOGREGIME <> '00';
]]></sqlcmd>
</NODE>
<NODE label="Médecins">
<sqlcmd><![CDATA[
INSERT INTO base.t_specialites_medecin(oid, code, code_original, texte, texte_court)
SELECT 0, '', '0', 'Non saisie', 'Non saisie'
WHERE 0 NOT IN (SELECT oid FROM base.t_specialites_medecin);
UPDATE base.t_specialites_medecin SET
code_original = code where code_original is null and oid != 0;
INSERT INTO base.t_specialites_medecin(code,code_original,texte,texte_court)
SELECT
NOSPEC,
NOSPEC,
LIBELLE,
LIBELLE
FROM prod_mederi.KSPECIAL
LEFT JOIN base.t_specialites_medecin on t_specialites_medecin.code = NOSPEC
WHERE t_specialites_medecin.code IS NULL
ORDER BY 1;
INSERT INTO activite.t_specialites_medecin(oid, code, code_original, texte, texte_court)
SELECT 0, '', '0', 'Non saisie', 'Non saisie'
WHERE 0 NOT IN (SELECT oid FROM activite.t_specialites_medecin);
INSERT INTO base.t_medecins(oid, nom, prenom, numero_ordre, specialite_id )
SELECT 0, 'Non renseigné', '', '', 0 WHERE 0 NOT IN (SELECT oid FROM base.t_medecins);
INSERT INTO activite[PX].t_medecins_administratifs(oid, code_original, code, nom, prenom, specialite_id, medecin_id)
SELECT 0, '0', '****', 'Non renseigné', '', 0, 0 WHERE 0 NOT IN (SELECT oid FROM activite[PX].t_medecins_administratifs);
DROP TABLE IF EXISTS W_KPRAT
;
CREATE TEMP TABLE W_KPRAT AS
SELECT *
FROM prod_mederi.KPRAT
WHERE CTID IN (
SELECT MAX(CTID)
from prod_mederi.KPRAT
GROUP BY NOPRAT
)
;
-- Médecins d'après la nomenclature classique
DROP TABLE IF EXISTS w_medecins;
CREATE TEMP TABLE w_medecins AS
SELECT NOPRAT,
NOPRAT AS MEDE_CODE,
base.cti_soundex_nom(NOMPRAT) AS NOMPRAT_SOUNDEX,
base.cti_soundex_nom(COALESCE(PRENOMPRAT,'')) AS PRENOMPRAT_SOUNDEX,
NOMPRAT,
COALESCE(PRENOMPRAT,'') AS PRENOMPRAT,
COALESCE(RPPS,'') AS RPPS,
COALESCE(NOSPEC,'') aS NOSPEC,
COALESCE(t_medecins_administratifs.medecin_id,0) as medecin_id
FROM W_KPRAT
LEFT JOIN activite[PX].t_medecins_administratifs ON NOPRAT = t_medecins_administratifs.code_original
WHERE (
NOPRAT IN (SELECT NOPRAT FROM prod_mederi.KDOSSIER GROUP BY 1)
OR NOPRAT IN (SELECT NOPRAT from prod_mederi.KACTES GROUP BY 1)
);
-- médecins utilisés dans les dossiers mais absents de la nomenclature
INSERT INTO w_medecins (
NOPRAT,
MEDE_CODE,
NOMPRAT_SOUNDEX,
PRENOMPRAT_SOUNDEX,
NOMPRAT,
PRENOMPRAT,
RPPS,
NOSPEC,
medecin_id
)
SELECT
DISTINCT
KSEJOUR.NOPRAT AS NOPRAT,
KSEJOUR.NOPRAT AS MEDE_CODE,
KSEJOUR.NOPRAT AS NOMPRAT_SOUNDEX,
KSEJOUR.NOPRAT AS PRENOMPRAT_SOUNDEX,
KSEJOUR.NOPRAT AS NOMPRAT,
KSEJOUR.NOPRAT AS PRENOMPRAT,
'' AS RPPS,
'' AS NOSPEC,
0 AS medecin_id
FROM
prod_mederi.KSEJOUR
LEFT JOIN w_medecins ON w_medecins.MEDE_CODE = KSEJOUR.NOPRAT
WHERE 1=1
AND w_medecins.MEDE_CODE IS NULL
AND KSEJOUR.NOPRAT IS DISTINCT FROM NULL;
INSERT INTO base.t_medecins(nom, prenom, numero_ordre, specialite_id)
SELECT w_medecins.NOMPRAT, w_medecins.PRENOMPRAT, w_medecins.RPPS, 0 FROM
(SELECT SUBSTR(NOMPRAT_SOUNDEX, 1, 8) AS NOMPRAT_SOUNDEX, SUBSTR(PRENOMPRAT_SOUNDEX, 1, 8) AS PRENOMPRAT_SOUNDEX, RPPS, NOPRAT
FROM w_medecins
GROUP BY 1,2,3,4) subview, w_medecins
WHERE w_medecins.NOPRAT = subview.NOPRAT
AND w_medecins.NOPRAT != ALL (ARRAY(SELECT code FROM base.t_medecins)::text[])
AND subview.NOMPRAT_SOUNDEX || ',' || subview.PRENOMPRAT_SOUNDEX || ',' || subview.RPPS NOT IN
(SELECT substr(base.cti_soundex_nom(nom),1,8) || ',' || substr(base.cti_soundex_nom(prenom),1,8) || ',' || numero_ordre FROM base.t_medecins);
INSERT INTO base.t_medecins(nom, prenom, specialite_id)
SELECT w_medecins.NOMPRAT, w_medecins.PRENOMPRAT, 0 FROM
(SELECT SUBSTR(NOMPRAT_SOUNDEX, 1, 8) AS NOMPRAT_SOUNDEX, SUBSTR(PRENOMPRAT_SOUNDEX, 1, 8) AS PRENOMPRAT_SOUNDEX, NOPRAT
FROM w_medecins
GROUP BY 1,2,3) subview, w_medecins
WHERE w_medecins.NOPRAT = subview.NOPRAT
AND w_medecins.NOPRAT != ALL (ARRAY(SELECT code FROM base.t_medecins)::text[])
AND subview.NOMPRAT_SOUNDEX || ',' || subview.PRENOMPRAT_SOUNDEX NOT IN
(SELECT substr(base.cti_soundex_nom(nom),1,8) || ',' || substr(base.cti_soundex_nom(prenom),1,8) 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(NOMPRAT_SOUNDEX, 1, 8) = subview.nom
AND SUBSTR(PRENOMPRAT_SOUNDEX, 1, 8) = subview.prenom
AND RPPS = subview.numero_ordre
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 SUBSTR(NOMPRAT_SOUNDEX, 1, 8) = subview.nom
AND SUBSTR(PRENOMPRAT_SOUNDEX, 1, 8) = 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 NOPRAT, NOPRAT, NOMPRAT, PRENOMPRAT, COALESCE(t_specialites_medecin.oid::bigint,0), medecin_id
FROM w_medecins
LEFT JOIN base.t_specialites_medecin ON (NOSPEC = t_specialites_medecin.code_original)
WHERE NOPRAT NOT IN (SELECT code_original FROM activite[PX].t_medecins_administratifs);
UPDATE activite[PX].t_medecins_administratifs
SET nom = NOMPRAT,
prenom = PRENOMPRAT,
specialite_id = COALESCE(t_specialites_medecin.oid,t_specialites_medecin_2.oid,0),
medecin_id = w_medecins.medecin_id
FROM w_medecins
LEFT JOIN base.t_specialites_medecin ON (NOSPEC || '..' = t_specialites_medecin.code)
LEFT JOIN base.t_specialites_medecin t_specialites_medecin_2 ON (NOSPEC = t_specialites_medecin_2.code)
WHERE w_medecins.NOPRAT = t_medecins_administratifs.code_original
AND (
t_medecins_administratifs.nom <> NOMPRAT OR
t_medecins_administratifs.prenom <> PRENOMPRAT OR
t_medecins_administratifs.specialite_id <> COALESCE(t_specialites_medecin.oid,t_specialites_medecin_2.oid,0) OR
t_medecins_administratifs.medecin_id <> w_medecins.medecin_id
);
UPDATE activite[PX].t_medecins_administratifs
SET specialite_id = subview.specialite_medecin_id
FROM
(
SELECT t_medecins_administratifs.oid,t_specialites_medecin.oid AS specialite_medecin_id
FROM activite[PX].t_medecins_administratifs
JOIN base.t_specialites_medecin t_specialites_medecin_2 ON specialite_id = t_specialites_medecin_2.oid
JOIN base.t_specialites_medecin ON t_specialites_medecin_2.code || '..' = t_specialites_medecin.code
) subview
WHERE t_medecins_administratifs.oid = subview.oid;
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 = CODEINSEE
FROM prod_mederi.KPRAT
WHERE t_medecins_administratifs.code_original = NOPRAT AND
t_medecins_administratifs.NO_ADELI IS DISTINCT FROM CODEINSEE
;
]]></sqlcmd>
</NODE>
<NODE label="Hébergement">
<sqlcmd><![CDATA[
-- Modes de traitement
INSERT INTO base.t_modes_traitement(code, texte, texte_court)
SELECT MODETRAIT, MODETRAIT, MODETRAIT
FROM prod_mederi.KSERVINT
WHERE MODETRAIT NOT IN (SELECt code FROM base.t_modes_traitement)
ORDER BY MODETRAIT;
-- DMT
INSERT INTO base.t_dmt(code, texte, texte_court)
SELECT NOSERVSS, LIBSERVSS, LIBSERVSS
FROM prod_mederi.KSERVSS
WHERE NOSERVSS NOT IN (SELECt code FROM base.t_dmt)
ORDER BY NOSERVSS;
-- 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)
SELECT NOSERVINT, NOSERVINT, LIBELLE, LIBELLE, CASE WHEN GENPMSI = 1 THEN '1' ELSE '0' END
FROM prod_mederi.KSERVINT
WHERE
NOSERVINT NOT IN (SELECT code_original FROM activite[PX].t_services_facturation)
ORDER BY NOSERVINT;
UPDATE activite[PX].t_services_facturation
SET mode_traitement_id = subview.mode_traitement_id, dmt_id = subview.dmt_id
FROM (
SELECT NOSERVINT, COALESCE(t_modes_traitement.oid,0) as mode_traitement_id, COALESCE(t_dmt.oid,0) as dmt_id
FROM prod_mederi.KSERVINT
LEFT JOIN base.t_modes_traitement ON MODETRAIT = t_modes_traitement.code
LEFT JOIN base.t_dmt ON NOSERVSS = t_dmt.code
WHERE
(t_modes_traitement.oid IS NOT NULL OR t_dmt.oid IS NOT NULL)
) subview
WHERE code_original = NOSERVINT AND (t_services_facturation.mode_traitement_id = 0 OR t_services_facturation.dmt_id = 0);
INSERT INTO activite[PX].t_services_facturation(code_original, code, texte, texte_court, est_absence)
SELECT '*ABS', '*ABS', 'Absence', 'Absence', '1' WHERE '*ABS' NOT IN (SELECT code_original FROM activite[PX].t_services_facturation);
-- 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 NOSERVSS, NOSERVSS, LIBSERVSS, LIBSERVSS
FROM prod_mederi.KSERVSS
WHERE
NOSERVSS NOT IN (SELECT code_original FROM activite[PX].t_unites_fonctionnelles)
ORDER BY NOSERVSS;
INSERT INTO activite[PX].t_unites_fonctionnelles(code_original, code, texte, texte_court)
SELECT '*ABS', '*ABS', 'Absence', 'Absence' WHERE '*ABS' NOT IN (SELECT code_original FROM activite[PX].t_unites_fonctionnelles);
-- 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 CODEUM, CODEUM, MIN(LIBELLE), MIN(LIBELLE)
FROM prod_mederi.KSERVINT
JOIN prod_mederi.KSERVSS ON KSERVINT.NOSERVSS = KSERVSS.NOSERVSS
WHERE
CODEUM != '' AND
CODEUM NOT IN (SELECT code_original FROM activite[PX].t_unites_medicales)
GROUP BY CODEUM
ORDER BY CODEUM;
INSERT INTO activite[PX].t_unites_medicales(code_original, code, texte, texte_court)
SELECT '*ABS', '*ABS', 'Absence', 'Absence' WHERE '*ABS' NOT IN (SELECT code_original FROM activite[PX].t_unites_medicales);
-- Activités (um principale)
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 SECTEUR, SECTEUR, SECTEUR, SECTEUR
FROM prod_mederi.KCHAMBRE
WHERE SECTEUR NOT IN (SELECT code_original FROM activite[PX].t_etages WHERE code_original IS NOT NULL )
GROUP BY SECTEUR
ORDER BY SECTEUR;
UPDATE activite[PX].t_lits SET
code = replace(NOLIT,' ',''),
texte = NOLIT,
texte_court = NOLIT,
etage_id = t_etages.oid
FROM prod_mederi.KCHAMBRE, activite[PX].t_etages
WHERE NOLIT = t_lits.code_original
AND SECTEUR = t_etages.code_original;
-- mise à jour des chambres si elles ne sont pas dans la table kchambre mais que leur code est semblable (cas manque C par ex 201 A et 201 AC)
-- no lit existe avec un caractère en moins
UPDATE prod_mederi.KSEJOUR
SET NOCHAMBRE = replace(NOCHAMBRE,' ','');
UPDATE prod_mederi.KCHAMBRE
SET NOLIT = replace(NOLIT,' ','');
-- cas nochambre = A et no lit = AC
UPDATE prod_mederi.KSEJOUR
SET NOCHAMBRE = ch.NOLIT
FROM prod_mederi.KSEJOUR mv
LEFT JOIN prod_mederi.KCHAMBRE ON mv.NOCHAMBRE = KCHAMBRE.NOLIT
LEFT JOIN prod_mederi.KCHAMBRE ch ON left(replace(ch.NOLIT,' ',''),-1) = replace (mv.NOCHAMBRE,' ','')
WHERE
KSEJOUR.SECLEUNIK = mv.SECLEUNIK
AND length(KSEJOUR.NOCHAMBRE) > 2
AND KCHAMBRE.NOLIT IS NULL
AND ch.NOLIT IS NOT NULL;
-- cas nochambre = P, F ou rien et no lit = AC
UPDATE prod_mederi.KSEJOUR
SET NOCHAMBRE = ch.NOLIT
FROM prod_mederi.KSEJOUR mv
LEFT JOIN prod_mederi.KCHAMBRE ON mv.NOCHAMBRE = KCHAMBRE.NOLIT
LEFT JOIN prod_mederi.KCHAMBRE ch ON left(replace(ch.NOLIT,' ',''),-3) = replace (mv.NOCHAMBRE,' ','')
WHERE
KSEJOUR.SECLEUNIK = mv.SECLEUNIK
AND length(KSEJOUR.NOCHAMBRE) > 2
AND KCHAMBRE.NOLIT IS NULL
AND ch.NOLIT IS NOT NULL;
-- cas nochambre = XUSI
UPDATE prod_mederi.KSEJOUR
SET NOCHAMBRE = ch.NOLIT
FROM prod_mederi.KSEJOUR mv
LEFT JOIN prod_mederi.KCHAMBRE ON mv.NOCHAMBRE = KCHAMBRE.NOLIT
LEFT JOIN prod_mederi.KCHAMBRE ch ON replace(mv.NOCHAMBRE,'USI','') = ch.NOLIT
WHERE
KSEJOUR.SECLEUNIK = mv.SECLEUNIK
AND length(KSEJOUR.NOCHAMBRE) > 2
AND KCHAMBRE.NOLIT IS NULL
AND ch.NOLIT IS NOT NULL;
INSERT INTO activite[PX].t_lits(code_original, code, texte, texte_court, etage_id, chambre_particuliere)
SELECT NOLIT, NOLIT, NOLIT, NOLIT, t_etages.oid, CASE WHEN NOACTE = 'CP' THEN 'O' ELSE 'N' END AS CP
FROM prod_mederi.KCHAMBRE, activite[PX].t_etages
WHERE
SECTEUR = t_etages.code_original
AND NOLIT NOT IN (SELECT code_original FROM activite[PX].t_lits WHERE code_original IS NOT NULL )
GROUP BY NOLIT, NOLIT, NOLIT, NOLIT, t_etages.oid, NOACTE
;
-- Lits non définis
DROP TABLE IF EXISTS w_KSEJOUR_CHAMBRE;
CREATE TEMP TABLE w_KSEJOUR_CHAMBRE AS
SELECT NOCHAMBRE AS NOLIT, ''::text AS SECTEUR
FROM prod_mederi.KSEJOUR
WHERE NOCHAMBRE NOT IN (SELECT NOLIT FROM prod_mederi.KCHAMBRE WHERE NOLIT IS NOT NULL)
GROUP BY 1
ORDER BY 1;
UPDATE w_KSEJOUR_CHAMBRE
SET SECTEUR = subview.SECTEUR
FROM
(
SELECT NOCHAMBRE, MAX(SECTEUR) AS SECTEUR
FROM prod_mederi.KCHAMBRE
WHERE NOCHAMBRE IS NOT NULL AND
NOCHAMBRE <> ''
GROUP BY 1
HAVING count(DISTINCT SECTEUR) = 1
) subview
WHERE w_KSEJOUR_CHAMBRE.NOLIT LIKE subview.NOCHAMBRE || '%'
;
INSERT INTO activite[PX].t_lits(code_original, code, texte, texte_court, etage_id, chambre_particuliere)
SELECT NOLIT, NOLIT, NOLIT, NOLIT, t_etages.oid, 'N' AS CP
FROM w_KSEJOUR_CHAMBRE, activite[PX].t_etages
WHERE
SECTEUR = t_etages.code_original
AND NOLIT NOT IN (SELECT code_original FROM activite[PX].t_lits WHERE code_original IS NOT NULL )
GROUP BY NOLIT, NOLIT, NOLIT, NOLIT, t_etages.oid
;
INSERT INTO activite[PX].t_lits(code_original, code, texte, texte_court, etage_id, chambre_particuliere)
SELECT code_original || '-0' , '', 'Non renseigné', 'Non renseigné', oid, 'O'
FROM activite[PX].t_etages
WHERE oid > 0 AND
code_original || '-0' NOT IN (SELECT code_original FROM activite[PX].t_lits WHERE code_original IS NOT NULL );
UPDATE activite[PX].t_lits SET code = '*****' WHERE code = '';
]]></sqlcmd>
</NODE>
<NODE label="Facturation">
<sqlcmd><![CDATA[
-- 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 '*CTI_ACO85', 'ACO85', 'Acomptes 85%', 'Acomptes 85%'
WHERE '*CTI_ACO85' NOT IN (SELECT code_original FROM activite[PX].t_rubriques_facturation);
INSERT INTO activite[PX].t_rubriques_facturation(code_original, code, texte, texte_court)
SELECT '*CTI_ACO', 'ACOMPTE', 'Acomptes', 'Acomptes'
WHERE '*CTI_ACO' NOT IN (SELECT code_original FROM activite[PX].t_rubriques_facturation);
INSERT INTO activite[PX].t_rubriques_facturation(code_original, code, texte, texte_court)
SELECT '*MED_REG_DOS', 'MED_REG_DOS', 'Règlements dossier méderi', 'Règlement dossier médéri'
WHERE '*MED_REG_DOS' NOT IN (SELECT code_original FROM activite[PX].t_rubriques_facturation);
-- Initialisation code prestation si pas saisi
UPDATE prod_mederi.KRUBINT
SET NOACTESS = NOACTE
WHERE NOACTESS = '' OR NOACTESS IS NULL
;
-- correction si code_original != code, changer code en #code
INSERT INTO activite[PX].t_rubriques_facturation(code_original, code, texte, texte_court)
SELECT NOACTE, NOACTE, MAX(LIBELLE), MAX(LIBELLE)
FROM prod_mederi.KRUBINT
WHERE
NOACTE NOT IN (SELECT code_original FROM activite[PX].t_rubriques_facturation)
AND NOACTE IN (SELECT NOACTE FROM prod_mederi.KACTES)
GROUP BY 1,2
ORDER BY NOACTE;
-- correction remise du #code en code après import
INSERT INTO activite[PX].t_rubriques_facturation(code_original, code, texte, texte_court)
SELECT NOACTE, NOACTE, MAX(LIBELLE), MAX(LIBELLE)
FROM prod_mederi.KACTES
WHERE
NOACTE NOT IN (SELECT code FROM activite[PX].t_rubriques_facturation)
GROUP BY 1,2
ORDER BY NOACTE;
INSERT INTO activite.t_prestations(code, code_original, texte, texte_court)
SELECT KRUBINT.NOACTESS, KRUBINT.NOACTESS,MAX(subview.LIBELLE),MAX(subview.LIBELLE)
FROM prod_mederi.KRUBINT
JOIN prod_mederi.KRUBINT as subview ON KRUBINT.NOACTESS = subview.NOACTE
WHERE
KRUBINT.NOACTESS NOT IN (SELECT code FROM activite.t_prestations WHERE code IS NOT NULL)
GROUP BY 1,2
ORDER BY 1,2;
INSERT INTO activite.t_prestations(code_original, code, texte, texte_court)
SELECT '*CTI_ACO85', 'ACO85', 'Acomptes 85%', 'Acomptes 85%'
WHERE '*CTI_ACO85' NOT IN (SELECT code_original FROM activite.t_prestations WHERE code_original IS NOT NULL);
INSERT INTO activite.t_prestations(code_original, code, texte, texte_court)
SELECT '*CTI_ACO', 'ACOMPTE', 'Acomptes', 'Acomptes'
WHERE '*CTI_ACO' NOT IN (SELECT code_original FROM activite.t_prestations WHERE code_original IS NOT NULL);
INSERT INTO activite.t_prestations(code_original, code, texte, texte_court)
SELECT '*MED_REG_DOS', 'MED_REG_DOS', 'Règlement dossier méderi', 'Règlement dossier méderi'
WHERE '*MED_REG_DOS' NOT IN (SELECT code_original FROM activite.t_prestations WHERE code_original IS NOT NULL);
INSERT INTO activite.t_protocoles(oid, code_original, code, texte, texte_court)
SELECT 0, 0, '***', 'Non renseigné', 'Non renseigné' WHERE 0 NOT IN (SELECT oid FROM activite.t_protocoles);
INSERT INTO base.t_actes(code, texte, texte_court, nomenclature)
SELECT
NOACTESS,
max(LIBELLE),
max(LIBELLE),
'NGAP'
FROM prod_mederi.KRUBINT
WHERE
TYPERUB = 4
AND NOACTESS NOT IN (SELECT code FROM base.t_actes WHERE code IS NOT NULL)
GROUP BY NOACTESS
order by 1
;
INSERT INTO base.t_actes(code, texte, texte_court, nomenclature)
SELECT
NOACTE,
max(LIBELLE),
max(LIBELLE),
'NGAP'
FROM prod_mederi.KRUBINT
WHERE
TYPERUB = 4
AND NOACTE NOT IN (SELECT code FROM base.t_actes WHERE code IS NOT NULL)
GROUP BY NOACTE
order by 1
;
INSERT INTO base.t_actes(code, texte, texte_court, nomenclature)
SELECT substring(CODEACTE, 1, 7), substring(CODEACTE, 1, 7), substring(CODEACTE, 1, 7), 'CCAM'
FROM prod_mederi.MCCAM
WHERE substring(CODEACTE, 1, 7) <> '' AND substring(CODEACTE, 1, 7) NOT IN (SELECT code FROM base.t_actes WHERE code IS NOT NULL)
GROUP BY 1,2,3;
]]></sqlcmd>
</NODE>
</NODE>
<NODE name="POST" label="TRAITEMENTS COMPLEMENTAIRES">
<NODE label="Compléments facture">
<sqlcmd><![CDATA[
DROP TABLE IF EXISTS w_factures;
CREATE TEMP TABLE w_factures AS
SELECT
no_facture,
no_facture_reference,
CASE WHEN date_expedition_0 < date_facture AND date_facture <> '2099-12-31' THEN date_facture ELSE date_expedition_0 END AS date_expedition_0,
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 AS date_solde,
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 AS date_solde_c,
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 AS date_solde_h,
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 AS date_solde_0_c,
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 AS date_solde_0_h,
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 AS date_solde_1_c,
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 AS date_solde_1_h,
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 AS date_solde_2_c,
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 AS date_solde_2_h,
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 AS date_solde_22_c,
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 AS date_solde_22_h
FROM activite[PX].p_factures;
UPDATE w_factures 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) ;
CREATE INDEX w_factures_i1
ON w_factures
USING btree
(no_facture);
CREATE INDEX w_factures_i2
ON w_factures
USING btree
(no_facture_reference);
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 w_factures
GROUP BY no_facture_reference;
CREATE INDEX w_factures_references_soldes_i1
ON w_factures_references_soldes
USING btree
(no_facture_reference);
UPDATE activite[PX].p_factures
SET
date_expedition_0 = w_factures.date_expedition_0,
date_solde = w_factures.date_solde,
date_solde_c = w_factures.date_solde_c,
date_solde_h = w_factures.date_solde_h,
date_solde_0_c = w_factures.date_solde_0_c,
date_solde_0_h = w_factures.date_solde_0_h,
date_solde_1_c = w_factures.date_solde_1_c,
date_solde_1_h = w_factures.date_solde_1_h,
date_solde_2_c = w_factures.date_solde_2_c,
date_solde_2_h = w_factures.date_solde_2_h,
date_solde_22_c = w_factures.date_solde_22_c,
date_solde_22_h = w_factures.date_solde_22_h,
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
JOIN w_factures_references_soldes ON w_factures_references_soldes.no_facture_reference = w_factures.no_facture_reference
WHERE p_factures.no_facture = w_factures.no_facture
AND (
p_factures.date_expedition_0 IS DISTINCT FROM w_factures.date_expedition_0 OR
p_factures.date_solde IS DISTINCT FROM w_factures.date_solde OR
p_factures.date_solde_c IS DISTINCT FROM w_factures.date_solde_c OR
p_factures.date_solde_h IS DISTINCT FROM w_factures.date_solde_h OR
p_factures.date_solde_0_c IS DISTINCT FROM w_factures.date_solde_0_c OR
p_factures.date_solde_0_h IS DISTINCT FROM w_factures.date_solde_0_h OR
p_factures.date_solde_1_c IS DISTINCT FROM w_factures.date_solde_1_c OR
p_factures.date_solde_1_h IS DISTINCT FROM w_factures.date_solde_1_h OR
p_factures.date_solde_2_c IS DISTINCT FROM w_factures.date_solde_2_c OR
p_factures.date_solde_2_h IS DISTINCT FROM w_factures.date_solde_2_h OR
p_factures.date_solde_22_c IS DISTINCT FROM w_factures.date_solde_22_c OR
p_factures.date_solde_22_h IS DISTINCT FROM w_factures.date_solde_22_h OR
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
);
-- Suppression des tables de travail non utilisées après
DROP TABLE IF EXISTS w_factures CASCADE;
DROP TABLE IF EXISTS w_factures_references_soldes CASCADE;
]]></sqlcmd>
</NODE>
<NODE label="Compléments séjours">
<sqlcmd><![CDATA[
UPDATE activite[PX].p_sejours
SET date_groupage = date_facture
WHERE (date_groupage IS null OR date_groupage = '20991231') AND
date_facture <> '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,
p_sejours.code_sorti,
p_sejours.date_sortie,
p_sejours.date_groupage,
p_sejours.ghs_id,
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,
0::numeric AS delai_groupage,
0::numeric AS delai_facture,
0::numeric AS delai_expedition,
0::numeric AS delai_solde,
0::numeric AS delai_expedition_0,
0::numeric AS delai_solde_0,
0::numeric AS delai_expedition_1,
0::numeric AS delai_solde_1,
0::numeric AS delai_expedition_2,
0::numeric AS delai_solde_2,
0::numeric AS delai_expedition_22,
0::numeric AS delai_solde_22
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 1,2,3,4,5;
UPDATE activite[PX].p_sejours
SET date_groupage = date_facture
WHERE (date_groupage IS null OR date_groupage = '20991231' OR date_groupage = '00010101') AND
date_facture <> '2099-12-31';
UPDATE w_sejours_total SET
date_groupage = CASE WHEN date_groupage > '00010101' THEN date_groupage ELSE '20991231' END,
date_facture = CASE WHEN date_facture> '00010101' THEN date_facture ELSE '20991231' END,
date_expedition = CASE WHEN date_expedition > '00010101' THEN date_expedition ELSE '20991231' END,
date_solde = CASE WHEN date_solde > '00010101' THEN date_solde ELSE '20991231' END,
date_expedition_0 = CASE WHEN date_expedition_0 > '00010101' THEN date_expedition_0 ELSE '20991231' END,
date_solde_0 = CASE WHEN date_solde_0 > '00010101' THEN date_solde_0 ELSE '20991231' END,
date_expedition_1 = CASE WHEN date_expedition_1 > '00010101' THEN date_expedition_1 ELSE '20991231' END,
date_solde_1 = CASE WHEN date_solde_1 > '00010101' THEN date_solde_1 ELSE '20991231' END,
date_expedition_2 = CASE WHEN date_expedition_2 > '00010101' THEN date_expedition_2 ELSE '20991231' END,
date_solde_2 = CASE WHEN date_solde_2 > '00010101' THEN date_solde_2 ELSE '20991231' END,
date_expedition_22 = CASE WHEN date_expedition_22 > '00010101' THEN date_expedition_22 ELSE '20991231' END,
date_solde_22 = CASE WHEN date_solde_22 > '00010101' THEN date_solde_22 ELSE '20991231' END;
UPDATE w_sejours_total 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;
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 = w_sejours_total.date_expedition_0,
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 = w_sejours_total.date_expedition_1,
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 = w_sejours_total.date_expedition_2,
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 = w_sejours_total.date_expedition_22,
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,
delai_groupage = w_sejours_total.delai_groupage,
delai_facture = w_sejours_total.delai_facture,
delai_expedition = w_sejours_total.delai_expedition,
delai_solde = w_sejours_total.delai_solde,
delai_expedition_0 = w_sejours_total.delai_expedition_0,
delai_solde_0 = w_sejours_total.delai_solde_0,
delai_expedition_1 = w_sejours_total.delai_expedition_1,
delai_solde_1 = w_sejours_total.delai_solde_1,
delai_expedition_2 = w_sejours_total.delai_expedition_2,
delai_solde_2 = w_sejours_total.delai_solde_2,
delai_expedition_22 = w_sejours_total.delai_expedition_22,
delai_solde_22 = w_sejours_total.delai_solde_22
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 w_sejours_total.date_expedition_0 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 w_sejours_total.date_expedition_1 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 w_sejours_total.date_expedition_2 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 w_sejours_total.date_expedition_22 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 OR
p_sejours.delai_groupage IS DISTINCT FROM w_sejours_total.delai_groupage OR
p_sejours.delai_facture IS DISTINCT FROM w_sejours_total.delai_facture OR
p_sejours.delai_expedition IS DISTINCT FROM w_sejours_total.delai_expedition OR
p_sejours.delai_solde IS DISTINCT FROM w_sejours_total.delai_solde OR
p_sejours.delai_expedition_0 IS DISTINCT FROM w_sejours_total.delai_expedition_0 OR
p_sejours.delai_solde_0 IS DISTINCT FROM w_sejours_total.delai_solde_0 OR
p_sejours.delai_expedition_1 IS DISTINCT FROM w_sejours_total.delai_expedition_1 OR
p_sejours.delai_solde_1 IS DISTINCT FROM w_sejours_total.delai_solde_1 OR
p_sejours.delai_expedition_2 IS DISTINCT FROM w_sejours_total.delai_expedition_2 OR
p_sejours.delai_solde_2 IS DISTINCT FROM w_sejours_total.delai_solde_2 OR
p_sejours.delai_expedition_22 IS DISTINCT FROM w_sejours_total.delai_expedition_22 OR
p_sejours.delai_solde_22 IS DISTINCT FROM w_sejours_total.delai_solde_22
);
-- Ajout des coordonnées des patients 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,
COALESCE(ADRPAT1, '') || CASE WHEN COALESCE(ADRPAT2, '') != '' THEN ' - ' || ADRPAT2 ELSE '' END,
COALESCE(t_codes_postaux.oid,0),
VILLEPAT,
CASE
WHEN SUBSTRING(TELDOM, 1,2) NOT IN ('06', '07') AND TELDOM <> '' THEN TELDOM
WHEN SUBSTRING(TELBUR, 1,2) NOT IN ('06', '07') AND TELBUR <> '' THEN TELBUR
ELSE ''::text END AS numero_fixe,
CASE
WHEN SUBSTRING(TELDOM, 1,2) IN ('06', '07') AND TELDOM <> '' THEN TELDOM
WHEN SUBSTRING(TELBUR, 1,2) IN ('06', '07') AND TELBUR <> '' THEN TELBUR
ELSE ''::text END AS numero_portable,
COALESCE(COURRIEL1, COURRIEL2, ''::text)
FROM activite[PX].p_sejours
LEFT JOIN prod_mederi.KDOSSIER ON p_sejours.code_original = KDOSSIER.NODOSSIER
LEFT JOIN base.t_codes_postaux ON CPPAT = t_codes_postaux.code
;
-- Suppression des tables de travail non utilisées après
DROP TABLE IF EXISTS w_sejours_total CASCADE;
]]></sqlcmd>
</NODE>
<NODE label="Tables répliquées">
<condition><![CDATA[
"[PX]" == ""
]]></condition>
<sqlcmd><![CDATA[
]]></sqlcmd>
</NODE>
</NODE>
<NODE name="ENCOURS" label="ENCOURS ET VALORISATION DES NON FACTURES">
<NODE label="Encours Mederi">
<sqlcmd><![CDATA[
-- comptes associés
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
NOCOMPTE,
NOCOMPTE,
array_to_string(array_agg(distinct KACTES.NOACTE),',') ||' service' || CASE WHEN array_length(array_agg(distinct KCPTRUB.NOSERVINT),1) != 1 THEn 's ' ELSE ' ' END || array_to_string(array_agg(distinct KCPTRUB.NOSERVINT),','),
array_to_string(array_agg(distinct KACTES.NOACTE),',') ||' service' || CASE WHEN array_length(array_agg(distinct KCPTRUB.NOSERVINT),1) != 1 THEn 's ' ELSE ' ' END || array_to_string(array_agg(distinct KCPTRUB.NOSERVINT),',')
FROM prod_mederi.KCPTRUB
JOIN prod_mederi.KACTES ON KACTES.NOACTE = KCPTRUB.NOACTE
WHERE NOCOMPTE NOT IN (SELECT code_original FROM activite[PX].t_compte WHERE code_original IS NOT NULL)
GROUP BY 1,2
ORDER BY 1,2;
INSERT INTO activite[PX].t_compte(code_original, code, texte, texte_court)
SELECT
NOCOMPTES,
NOCOMPTES,
array_to_string(array_agg(distinct KACTES.NOACTE),',') ||' (tous services)',
array_to_string(array_agg(distinct KACTES.NOACTE),',') ||' (tous services)'
FROM prod_mederi.KRUBINT
JOIN prod_mederi.KACTES ON KACTES.NOACTE = KRUBINT.NOACTE
WHERE NOCOMPTES != ''
AND NOCOMPTES NOT IN (SELECT code_original FROM activite[PX].t_compte WHERE code_original IS NOT NULL)
GROUP BY 1,2
ORDER BY 1,2;
DROP TABLE IF EXISTS w_FAC_FACTURE_DAT_CRE;
CREATE TEMP TABLE w_FAC_FACTURE_DAT_CRE AS
SELECT date(date_trunc('month', DATECREAT) + interval '1 month' - interval '1 day') AS date_encours, MAX(DATECREAT) AS FACT_DAT_CRE
FROM prod_mederi.KENCOURS
WHERE
DATECREAT >= '[ENV_ADM_ANNEEDEBUT]1201'
GROUP BY 1
ORDER BY 1;
CREATE INDEX w_FAC_FACTURE_DAT_CRE_i1 ON w_FAC_FACTURE_DAT_CRE USING btree (date_encours);
-- encours sur medecins salaries(vide dans les encours mederi)
DROP TABLE IF EXISTS w_factures_encours_salaries;
CREATE TEMP TABLE w_factures_encours_salaries AS
SELECT
NOFAC,
SUM(MONTANT + MNTCOMPL) AS montant_encours_salaries,
SUM(MNTASS + MDASS) AS montant_encours_salaries_0,
SUM(MNTSS + MDCAI) AS montant_encours_salaries_1,
SUM(MNTMUT + MDMUT) AS montant_encours_salaries_2,
0::numeric AS montant_encours_22
FROM prod_mederi.KENCOURS
JOIN W_KPRAT ON KENCOURS.NOPRAT = W_KPRAT.NOPRAT AND CODETAB = 3
JOIN activite.t_divers ON t_divers.code = 'MEDSAL_COMPTACLI' AND valeur = 1
WHERE TYPERUB = 4
GROUP BY 1
ORDER BY 1;
CREATE INDEX w_factures_encours_salaries_i1 ON w_factures_encours_salaries USING btree (NOFAC);
-- entetes factures encours
DROP TABLE IF EXISTS w_factures_references;
CREATE TEMP TABLE w_factures_references AS
SELECT
no_sejour,
date_fin,
MIN(date_debut) AS date_debut,
MAX(no_facture) AS no_facture
FROM activite[PX].p_factures
WHERE no_facture_reference = no_facture AND code_facture >= '1'
GROUP BY 1,2;
CREATE INDEX w_factures_references_i1 ON w_factures_references USING btree (no_sejour);
DROP TABLE IF EXISTS w_factures_encours;
CREATE TEMP TABLE w_factures_encours AS
SELECT
0::bigint AS oid,
CASE WHEN KENCOURS.NOFAC != '' THEN KENCOURS.NOFAC ELSE KENCOURS.NODOSSIER END as NOFAC,
min(p_sejours.finess) as finess,
min(p_sejours.no_sejour) as no_sejour,
min(p_sejours.date_entree) as date_entree,
min(p_sejours.date_sortie) as date_sortie,
min(p_sejours.oid) AS sejour_id,
min(p_sejours.lieu_sortie_id) as lieu_sortie_id,
min(COALESCE(w_factures_references.no_facture,'ID' || KENCOURS.NOFAC) || '.EP' || substr(to_char(date_part('year', w_FAC_FACTURE_DAT_CRE.date_encours),'FM0000'),3,2) || to_char(date_part('month', w_FAC_FACTURE_DAT_CRE.date_encours),'FM00')) AS no_facture,
min(w_factures_references.no_facture) AS no_facture_reference,
min(DATEACTE) AS date_debut,
max(COALESCE(DATEFIN,DATEACTE)) AS date_fin,
min(w_FAC_FACTURE_DAT_CRE.date_encours) as date_encours,
'P'::text AS code_origine,
min(CASE WHEN date_sortie > date_encours OR date(DATESORTIE) > date_encours THEN '0' ELSE '1' END) AS code_sorti,
min(p_sejours.tiers_payant_1_id) as tiers_payant_1_id,
min(p_sejours.tiers_payant_2_id) as tiers_payant_2_id,
min(p_sejours.tiers_payant_22_id) as tiers_payant_22_id,
min(p_sejours.tiers_payant_0_id) as tiers_payant_0_id,
min(p_sejours.ghs_id) as ghs_id,
min(p_sejours.ghs_bebe1_id) as ghs_bebe1_id,
min(p_sejours.ghs_bebe2_id) as ghs_bebe2_id,
min(p_sejours.ghs_bebe3_id) as ghs_bebe3_id,
min(p_sejours.code_cp_demandee) as code_cp_demandee,
SUM(MNTSS + MNTMUT + MNTASS) + SUM(COALESCE(montant_encours_salaries,0)) AS montant_encours_c,
SUM(MNTASS) + SUM(COALESCE(montant_encours_salaries_0,0)) AS montant_encours_0_c,
SUM(MNTSS) + SUM(COALESCE(montant_encours_salaries_1,0)) AS montant_encours_1_c,
SUM(MNTMUT) + SUM(COALESCE(montant_encours_salaries_2,0)) AS montant_encours_2_c,
0::numeric AS montant_encours_22_c,
0::numeric AS montant_encours_h,
0::numeric AS montant_encours_0_h,
0::numeric AS montant_encours_1_h,
0::numeric AS montant_encours_2_h,
0::numeric AS montant_encours_22_h
FROM prod_mederi.KENCOURS
LEFT JOIN prod_mederi.KFACTURE ON KENCOURS.NOFAC = KFACTURE.NOFAC
JOIN w_FAC_FACTURE_DAT_CRE ON date(KENCOURS.DATECREAT) = w_FAC_FACTURE_DAT_CRE.FACT_DAT_CRE AND
date(date_trunc('month', DATEFAC) + interval '1 month' - interval '1 day') = date_encours
JOIN prod_mederi.KDOSSIER ON KENCOURS.NODOSSIER = KDOSSIER.NODOSSIER
JOIN activite[PX].p_sejours ON code_original = KENCOURS.NODOSSIER
LEFT JOIN w_factures_references ON p_sejours.no_sejour = w_factures_references.no_sejour AND
date_sortie BETWEEN w_factures_references.date_debut AND w_factures_references.date_fin
LEFT JOIN w_factures_encours_salaries ON w_factures_encours_salaries.NOFAC = KENCOURS.NOFAC
GROUP BY 2;
CREATE INDEX w_factures_encours_i1 ON w_factures_encours USING btree (NOFAC);
SELECT base.cti_disable_index('activite[PX]', 'i_factures_encours_2');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_encours_4');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_encours_5');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_encours_6');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_encours_7');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_encours_8');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_encours_9');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_encours_10');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_encours_11');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_encours_lignes_c_2');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_encours_lignes_c_3');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_encours_lignes_c_4');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_encours_lignes_c_5');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_encours_lignes_c_6');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_encours_lignes_c_7');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_encours_lignes_c_8');
DELETE FROM activite[PX].p_factures_encours WHERE code_origine = 'P';
DELETE FROM activite[PX].p_factures_encours_lignes_c
WHERE no_facture NOT IN (SELECT no_facture FROM activite[PX].p_factures_encours);
SELECT base.cti_disable_index('activite[PX]', 'i_factures_encours_1');
SELECT base.cti_disable_index('activite[PX]', 'i_factures_encours_lignes_c_1');
INSERT INTO activite[PX].p_factures_encours(
sejour_id,
no_sejour,
no_facture,
no_facture_reference,
date_debut,
date_fin,
date_encours,
code_origine,
code_sorti,
tiers_payant_1_id,
tiers_payant_2_id,
tiers_payant_22_id,
tiers_payant_0_id,
ghs_id,
ghs_bebe1_id,
ghs_bebe2_id,
ghs_bebe3_id,
code_cp_demandee,
montant_encours_c,
montant_encours_0_c,
montant_encours_1_c,
montant_encours_2_c,
montant_encours_22_c,
montant_encours_h,
montant_encours_0_h,
montant_encours_1_h,
montant_encours_2_h,
montant_encours_22_h
)
SELECT
sejour_id,
no_sejour,
no_facture,
no_facture_reference,
date_debut,
date_fin,
date_encours,
code_origine,
code_sorti,
tiers_payant_1_id,
tiers_payant_2_id,
tiers_payant_22_id,
tiers_payant_0_id,
ghs_id,
ghs_bebe1_id,
ghs_bebe2_id,
ghs_bebe3_id,
code_cp_demandee,
montant_encours_c,
montant_encours_0_c,
montant_encours_1_c,
montant_encours_2_c,
montant_encours_22_c,
montant_encours_h,
montant_encours_0_h,
montant_encours_1_h,
montant_encours_2_h,
montant_encours_22_h
FROM w_factures_encours;
UPDATE w_factures_encours SET oid = p_factures_encours.oid
FROM activite[PX].p_factures_encours
WHERE w_factures_encours.no_facture = p_factures_encours.no_facture;
SELECT base.cti_enable_index('activite[PX]', 'i_factures_encours_1');
DROP SEQUENCE IF EXISTS w_factures_encours_lignes_c_sequence;
CREATE TEMP SEQUENCE w_factures_encours_lignes_c_sequence;
DROP TABLE IF EXISTS w_factures_encours_lignes_c;
CREATE TEMP TABLE w_factures_encours_lignes_c AS
SELECT
nextval('w_factures_encours_lignes_c_sequence'::regclass) AS oid,
no_sejour,
CASE WHEN KENCOURS.NOFAC != '' THEN KENCOURS.NOFAC ELSE KENCOURS.NODOSSIER END AS NOFAC,
w_factures_encours.oid AS facture_id,
w_factures_encours.no_facture,
w_factures_encours.date_entree,
w_factures_encours.date_sortie,
date(DATEACTE) AS date_debut,
COALESCE(date(DATEFIN),date(DATEACTE)) AS date_fin,
COEFF AS nb_rubrique,
1::numeric AS coefficient,
1 AS coefficient_mco,
COALESCE(t_rubriques_facturation.oid::bigint, 0) AS rubrique_facturation_id,
COALESCE(t_rubriques_facturation.oid::bigint, 0) AS rubrique_comptabilisation_id,
MAX(COALESCE(t_compte.oid::bigint, 0)) AS compte_produit_id,
COALESCE(t_prestations.oid::bigint, 0) AS prestation_id,
PRIXU AS prix_unitaire,
w_factures_encours.lieu_sortie_id AS lieu_id,
QTE AS nb_prestation,
AVG(1-TAUXSS-TAUXMUT) as taux_0,
AVG(TAUXSS) as taux_1,
AVG(TAUXMUT) as taux_2,
0::numeric as taux_22,
SUM(MONTANT) AS montant_encours,
SUM(MNTASS) AS montant_encours_0,
SUM(MNTSS) AS montant_encours_1,
SUM(MNTMUT) AS montant_encours_2,
SUM(0) AS montant_encours_22
FROM prod_mederi.KENCOURS
JOIN w_factures_encours ON CASE WHEN KENCOURS.NOFAC = '' THEN KENCOURS.NODOSSIER = w_factures_encours.NOFAC ELSE KENCOURS.NOFAC = w_factures_encours.NOFAC END
LEFT JOIN activite[PX].t_rubriques_facturation ON KENCOURS.NOACTE = t_rubriques_facturation.code_original
LEFT JOIN prod_mederi.KRUBINT ON KENCOURS.NOACTE = KRUBINT.NOACTE
LEFT JOIN (SELECT NOACTE, NOSERVINT, MAX(NOCOMPTE) AS NOCOMPTE FROM prod_mederi.KCPTRUB GROUP BY 1,2) sub ON KENCOURS.NOSERVINT = sub.NOSERVINT AND KENCOURS.NOACTE = sub.NOACTE
LEFT JOIN activite.t_prestations ON NOACTESS = t_prestations.code
LEFT JOIN activite[PX].t_compte ON (NOCOMPTE IS NOT NULL AND NOCOMPTE::bigint = t_compte.code_original) OR (NOCOMPTE IS NULL AND NOCOMPTES::bigint = t_compte.code_original::bigint)
WHERE KENCOURS.TYPERUB <> 4 --pas d'encours mederiu sur salariés
GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,18,19
ORDER BY 1;
DROP TABLE IF EXISTS w_factures_encours_lignes_sup_c;
CREATE TEMP TABLE w_factures_encours_lignes_sup_c AS
SELECT
w_factures_encours_lignes_c.oid AS from_oid,
t_prestations.code AS prestation_code,
date(date_debut) AS date_debut_ghs,
date(date_fin - interval '1 day') AS date_fin_ghs,
(date(date_fin) - date(date_debut)) * CASE WHEN nb_prestation < 0 THEN -1 ELSE 1 END AS nb_prestation_ghs,
CASE WHEN t_prestations.code = 'GHS' THEN date(w_factures_encours_lignes_c.date_entree + interval '1 day') ELSE date(w_factures_encours_lignes_c.date_debut + interval '1 day') END AS date_debut_det,
CASE WHEN t_prestations.code = 'GHS' THEN date(w_factures_encours_lignes_c.date_sortie - interval '1 day') ELSE date(w_factures_encours_lignes_c.date_debut + ((ABS(nb_prestation)-1) || ' day')::interval) END AS date_fin_det,
ABS(CASE WHEN t_prestations.code = 'GHS' THEN date(w_factures_encours_lignes_c.date_sortie) - date(w_factures_encours_lignes_c.date_entree) ELSE nb_prestation END) AS nb_det,
w_factures_encours_lignes_c.*
FROM w_factures_encours_lignes_c
JOIN activite[PX].p_sejours ON w_factures_encours_lignes_c.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_fin) - date(date_debut) > 1)) ;
UPDATE w_factures_encours_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 w_factures_encours_lignes_c
JOIN activite.t_prestations ON prestation_id = t_prestations.oid AND code = 'EXH'
GROUP BY 1) subview
WHERE w_factures_encours_lignes_sup_c.no_facture = subview.no_facture;
CREATE INDEX w_factures_encours_lignes_sup_c_i1
ON w_factures_encours_lignes_sup_c
USING btree
(date_debut);
DROP TABLE IF EXISTS w_factures_encours_lignes_sup_c_gen;
CREATE TEMP TABLE w_factures_encours_lignes_sup_c_gen AS
SELECT
from_oid,
''::text AS finess,
no_sejour,
no_facture,
facture_id,
date AS date_debut,
date AS date_fin,
lieu_id,
rubrique_facturation_id,
rubrique_comptabilisation_id,
compte_produit_id,
prestation_id,
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,
prix_unitaire,
oid,
taux_0,
taux_1,
taux_2,
taux_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
FROM w_factures_encours_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_encours_lignes_sup_c_gen_tot;
CREATE TEMP TABLE w_factures_encours_lignes_sup_c_gen_tot AS
SELECT from_oid,
SUM(nb_rubrique) AS nb_rubrique,
SUM(nb_prestation) AS nb_prestation,
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
FROM w_factures_encours_lignes_sup_c_gen
GROUP BY 1;
UPDATE w_factures_encours_lignes_c
SET
date_fin = w_factures_encours_lignes_c.date_debut,
nb_rubrique = w_factures_encours_lignes_c.nb_rubrique - w_factures_encours_lignes_sup_c_gen_tot.nb_rubrique,
nb_prestation = w_factures_encours_lignes_c.nb_prestation - w_factures_encours_lignes_sup_c_gen_tot.nb_prestation,
montant_encours = w_factures_encours_lignes_c.montant_encours - w_factures_encours_lignes_sup_c_gen_tot.montant_encours,
montant_encours_0 = w_factures_encours_lignes_c.montant_encours_0 - w_factures_encours_lignes_sup_c_gen_tot.montant_encours_0,
montant_encours_1 = w_factures_encours_lignes_c.montant_encours_1 - w_factures_encours_lignes_sup_c_gen_tot.montant_encours_1,
montant_encours_2 = w_factures_encours_lignes_c.montant_encours_2 - w_factures_encours_lignes_sup_c_gen_tot.montant_encours_2,
montant_encours_22 = w_factures_encours_lignes_c.montant_encours_22 - w_factures_encours_lignes_sup_c_gen_tot.montant_encours_22
FROM w_factures_encours_lignes_sup_c_gen_tot
WHERE w_factures_encours_lignes_c.oid = from_oid;
INSERT INTO w_factures_encours_lignes_c(
oid,
no_sejour,
facture_id,
no_facture,
date_debut,
date_fin,
nb_rubrique,
coefficient,
coefficient_mco,
rubrique_facturation_id,
rubrique_comptabilisation_id,
compte_produit_id,
prestation_id,
taux_0,
taux_1,
taux_2,
taux_22,
prix_unitaire,
lieu_id,
nb_prestation,
montant_encours,
montant_encours_0,
montant_encours_1,
montant_encours_2,
montant_encours_22)
SELECT
nextval('w_factures_encours_lignes_c_sequence'::regclass) AS oid,
no_sejour,
facture_id,
no_facture,
date_debut,
date_fin,
nb_rubrique,
coefficient,
coefficient_mco,
rubrique_facturation_id,
rubrique_comptabilisation_id,
compte_produit_id,
prestation_id,
taux_0,
taux_1,
taux_2,
taux_22,
prix_unitaire,
lieu_id,
nb_prestation,
montant_encours,
montant_encours_0,
montant_encours_1,
montant_encours_2,
montant_encours_22
FROM w_factures_encours_lignes_sup_c_gen;
UPDATE w_factures_encours_lignes_c
SET lieu_id = p_mouvements_sejour.lieu_id
FROM activite[PX].p_mouvements_sejour
WHERE w_factures_encours_lignes_c.no_sejour = p_mouvements_sejour.no_sejour AND
w_factures_encours_lignes_c.date_debut = p_mouvements_sejour.date AND
(p_mouvements_sejour.heure_fin = 240000 OR p_mouvements_sejour.nb_sorties_directes = 1) AND
w_factures_encours_lignes_c.lieu_id IS DISTINCT FROM p_mouvements_sejour.lieu_id;
INSERT INTO activite[PX].p_factures_encours_lignes_c(
facture_id,
no_facture,
date_debut,
date_fin,
nb_rubrique,
coefficient,
coefficient_mco,
rubrique_facturation_id,
rubrique_comptabilisation_id,
compte_produit_id,
prestation_id,
taux_0,
taux_1,
taux_2,
taux_22,
prix_unitaire,
lieu_id,
nb_prestation,
montant_encours,
montant_encours_0,
montant_encours_1,
montant_encours_2,
montant_encours_22
)
SELECT
facture_id,
no_facture,
date_debut,
date_fin,
nb_rubrique,
coefficient,
coefficient_mco,
rubrique_facturation_id,
rubrique_comptabilisation_id,
compte_produit_id,
prestation_id,
taux_0,
taux_1,
taux_2,
taux_22,
prix_unitaire,
lieu_id,
nb_prestation,
montant_encours,
montant_encours_0,
montant_encours_1,
montant_encours_2,
montant_encours_22
FROM w_factures_encours_lignes_c;
SELECT base.cti_vacuum_table('activite[PX]','p_factures_encours');
SELECT base.cti_vacuum_table('activite[PX]','p_factures_encours_lignes_c');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_encours_lignes_c_1');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_encours_lignes_c_2');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_encours_lignes_c_3');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_encours_lignes_c_4');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_encours_lignes_c_5');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_encours_lignes_c_6');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_encours_lignes_c_7');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_encours_lignes_c_8');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_encours_2');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_encours_4');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_encours_5');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_encours_6');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_encours_7');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_encours_8');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_encours_9');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_encours_10');
SELECT base.cti_enable_index('activite[PX]', 'i_factures_encours_11');
-- Suppression des tables de travail non utilisées après
DROP TABLE IF EXISTS w_compte CASCADE;
DROP TABLE IF EXISTS w_factures_encours_salaries CASCADE;
DROP TABLE IF EXISTS w_factures_references CASCADE;
DROP TABLE IF EXISTS w_FAC_FACTURE_DAT_CRE CASCADE;
DROP TABLE IF EXISTS w_factures_encours CASCADE;
DROP TABLE IF EXISTS w_factures_encours_lignes_c CASCADE;
DROP TABLE IF EXISTS w_factures_encours_lignes_sup_c CASCADE;
DROP TABLE IF EXISTS w_factures_encours_lignes_sup_c_gen CASCADE;
DROP TABLE IF EXISTS w_factures_encours_lignes_sup_c_gen_tot CASCADE;
DROP TABLE IF EXISTS w_DOSSIER;
]]></sqlcmd>
</NODE>
</NODE>
</ROOT>