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.
 
 
 

654 lines
22 KiB

return: text
lang: plpgsql
src: |
DECLARE
_module_pmsimco TEXT;
_module_activite TEXT;
_module_pmsissr TEXT;
result TEXT;
BEGIN
IF EXISTS (SELECT * FROM pg_tables WHERE schemaname = 'pmsi' AND tablename = 'p_rss') THEN
_module_pmsimco = '1';
ELSE
_module_pmsimco = '0';
END IF;
IF EXISTS (SELECT * FROM pg_tables WHERE schemaname = 'activite' AND tablename = 'p_sejours') THEN
_module_activite = '1';
ELSE
_module_activite = '0';
END IF;
IF EXISTS (SELECT * FROM pg_tables WHERE schemaname = 'pmsissr' AND tablename = 'p_ssr') THEN
_module_pmsissr = '1';
ELSE
_module_pmsissr = '0';
END IF;
PERFORM base.cti_execute('INSERT INTO eco.t_divers(code,texte,valeur,description)
VALUES (''UPDATE_PMSI'',''Mise à jour des LPP et UCD dans le module Pmsi Mco à partir du module Gestion Economique'',''0'',''0: Non 1: Oui'')',1)
WHERE (SELECT count(*) FROM eco.t_divers WHERE code = 'UPDATE_PMSI') = 0
;
DROP TABLE IF EXISTS w_mvt_sejours;
CREATE TABLE w_mvt_sejours AS
SELECT
sejour_id
,rss_id
,COALESCE(t_lpp_c.code,t_ucd_c.code,'') AS code
,SUM(sortie_montant-entree_montant) AS sortie_montant
FROM eco.p_mouvements_articles
JOIN eco.p_sejours ON mouvement_id = p_mouvements_articles.oid
LEFT JOIN eco.t_lpp_c ON lpp_id = t_lpp_c.oid
LEFT JOIN eco.t_ucd_c ON ucd_id = t_ucd_c.oid
WHERE (lpp_id != 0 OR ucd_id != 0)
AND type_mouvement_id IN (SELECT to_id from eco.t_classes JOIN eco.t_classes_sections ON t_classes.oid = classe_id
JOIN eco.t_classes_sections_elements ON section_id = t_classes_sections.oid
WHERE t_classes.code = 'CTI_TYPMVT' AND t_classes_sections.code = '01')
GROUP BY 1,2,3
;
CREATE INDEX w_mvt_sejours_i1 on w_mvt_sejours USING btree (sejour_id);
CREATE INDEX w_mvt_sejours_i2 on w_mvt_sejours USING btree (rss_id);
CREATE INDEX w_mvt_sejours_i3 on w_mvt_sejours USING btree (code);
-- Mise à jour des ucd et lpp
DROP TABLE IF EXISTS w_fac;
CREATE TEMP TABLE w_fac AS
SELECT
0::bigint AS mco_rss_id,
0::bigint AS act_sejour_id,
''::text AS fac_code,
''::text AS fac_code_orig,
0 AS from_eco,
0 AS nombre,
0 AS montant_facture
;
DROP TABLE IF EXISTS w_ghs;
CREATE TEMP TABLE w_ghs AS
SELECT
0::bigint AS mco_rss_id,
0::bigint AS act_sejour_id,
0::int AS encours,
0::numeric AS ca_ghs_theorique
;
IF _module_pmsimco = '1' THEN
INSERT INTO w_fac
SELECT
rss_id AS mco_rss_id,
0::bigint AS act_sejour_id,
lpp_code AS fac_code,
'',
COALESCE(from_eco,0),
sum(nombre) AS nombre,
sum(montant_facture) AS montant_facture
FROM pmsi.v_rss_lpp_1
WHERE rss_id = ANY(ARRAY(SELECT rss_id FROM w_mvt_sejours))
GROUP BY 1,2,3,4,5
;
INSERT INTO w_fac
SELECT
rss_id AS mco_rss_id,
0::bigint AS act_sejour_id,
ucd_code AS fac_code,
'',
COALESCE(from_eco,0),
sum(nombre) AS nombre,
sum(montant_facture) AS montant_facture
FROM pmsi.v_rss_ucd_1
WHERE rss_id = ANY(ARRAY(SELECT rss_id FROM w_mvt_sejours))
GROUP BY 1,2,3,4,5
;
INSERT INTO w_ghs
SELECT
v_rss_1.rss_id AS mco_rss_id,
0,
0::bigint AS act_sejour_id,
SUM(ca_ghs_theorique) AS ca_ghs_theorique
FROM pmsi.v_rss_1
WHERE ca_ghs_theorique != 0
AND rss_id = ANY(ARRAY(SELECT rss_id FROM w_mvt_sejours))
GROUP BY 1,2,3
;
END IF;
IF _module_activite = '1' THEN
INSERT INTO w_fac
SELECT
p_sejour_pmsi.rss_id,
p_sejours.oid AS act_sejour_id,
CASE WHEN lpp_id != 0 THEN t_lpp.code
WHEN ucd_id != 0 THEN t_ucd.code
WHEN t_prestations.code IN ('PME','PII') THEN 'LPP' || (montant_facture+montant_encours)::text
ELSE 'UCD' || (montant_facture+montant_encours)::text END,
'',
0 AS from_eco,
sum(nb_prestation),
sum(montant_facture + montant_encours)
FROM
activite.v_factures_lignes_c_5
JOIN activite.p_sejours ON v_factures_lignes_c_5.no_sejour = p_sejours.no_sejour
JOIN activite.p_sejour_pmsi ON v_factures_lignes_c_5.no_sejour = p_sejour_pmsi.no_sejour
LEFT JOIN base.t_ucd on ucd_id = t_ucd.oid
LEFT JOIN base.t_lpp on lpp_id = t_lpp.oid
JOIN activite.t_prestations ON prestation_id = t_prestations.oid AND t_prestations.code IN ('PII','PME','LPP','PH8','PHX','UCD')
WHERE
p_sejours.oid = ANY(ARRAY(SELECT sejour_id FROM w_mvt_sejours)) AND
(p_sejour_pmsi.rss_id = 0 OR (p_sejour_pmsi.rss_id,COALESCE(t_ucd.code,t_lpp.code)) NOT IN (SELECT mco_rss_id, fac_code FROM w_fac))
GROUP BY 1,2,3,4,5
;
INSERT INTO w_ghs
SELECT
p_sejour_pmsi.rss_id,
p_sejours.oid AS act_sejour_id,
CASE WHEN montant_encours != 0 THEN 1 ELSE 0 END as encours,
sum(montant_facture + montant_encours) as ca_ghs_theorique
FROM
activite.v_factures_lignes_c_1
JOIN activite.p_sejours ON v_factures_lignes_c_1.no_sejour = p_sejours.no_sejour
LEFT JOIN activite.p_sejour_pmsi ON v_factures_lignes_c_1.no_sejour = p_sejour_pmsi.no_sejour
WHERE
prestation_code = 'GHS' AND
p_sejours.oid = ANY(ARRAY(SELECT sejour_id FROM w_mvt_sejours)) AND
(p_sejour_pmsi.rss_id = 0 OR p_sejour_pmsi.rss_id NOT IN (SELECT mco_rss_id FROM w_ghs))
GROUP BY 1,2,3
;
UPDATE w_ghs
SET encours = 1
FROM
activite.v_factures_lignes_c_1
JOIN activite.p_sejours ON v_factures_lignes_c_1.no_sejour = p_sejours.no_sejour
LEFT JOIN activite.p_sejour_pmsi ON v_factures_lignes_c_1.no_sejour = p_sejour_pmsi.no_sejour
WHERE
prestation_code = 'GHS' AND
montant_encours != 0 AND
p_sejour_pmsi.rss_id = mco_rss_id
;
END IF;
CREATE INDEX w_fac_i1 on w_fac USING btree (mco_rss_id);
CREATE INDEX w_fac_i2 on w_fac USING btree (act_sejour_id);
CREATE INDEX w_ghs_i1 on w_ghs USING btree (mco_rss_id);
CREATE INDEX w_ghs_i2 on w_ghs USING btree (act_sejour_id);
ANALYSE w_fac;
ANALYSe w_ghs;
UPDATE w_fac
SET fac_code_orig = w_fac.fac_code
,fac_code = sub.code
FROM (
SELECT w_fac.*
,sub.*
FROM w_fac
JOIN (
SELECT sejour_id
,rss_id
,code
,sortie_montant
FROM w_mvt_sejours
LEFT JOIN w_fac ON (
rss_id = mco_rss_id
AND rss_id != 0
OR sejour_id = act_sejour_id
AND sejour_id != 0
)
AND code = fac_code
WHERE
COALESCE(from_eco,1) != 0
) sub ON (
rss_id = mco_rss_id
AND rss_id != 0
OR sejour_id = act_sejour_id
AND sejour_id != 0
)
LEFT JOIN w_mvt_sejours ON (
w_mvt_sejours.rss_id = mco_rss_id
AND w_mvt_sejours.rss_id != 0
OR w_mvt_sejours.sejour_id = act_sejour_id
AND w_mvt_sejours.sejour_id != 0
)
AND w_mvt_sejours.code = fac_code
WHERE w_mvt_sejours.code IS NULL
AND base.cti_division(abs(sub.sortie_montant - montant_facture), sub.sortie_montant) < 0.01
) sub
WHERE (
sub.mco_rss_id = w_fac.mco_rss_id
AND sub.act_sejour_id = w_fac.act_sejour_id
AND sub.fac_code = w_fac.fac_code
);
UPDATE eco.p_sejours
SET ca_ghs = ca_ghs_theorique,
encours = w_ghs.encours
FROM w_ghs
WHERE p_sejours.sejour_id = w_ghs.act_sejour_id AND w_ghs.act_sejour_id != 0
;
UPDATE eco.p_sejours
SET ca_ghs = ca_ghs_theorique,
encours = w_ghs.encours
FROM w_ghs
WHERE p_sejours.rss_id = w_ghs.mco_rss_id AND w_ghs.mco_rss_id != 0 AND
ca_ghs = 0
;
UPDATE w_fac
SET fac_code_orig = w_fac.fac_code
,fac_code = sub.code
FROM (
SELECT w_fac.*
,sub.*
FROM w_fac
JOIN (
SELECT sejour_id
,rss_id
,code
,sortie_montant
FROM w_mvt_sejours
LEFT JOIN w_fac ON (
rss_id = mco_rss_id
AND rss_id != 0
OR sejour_id = act_sejour_id
AND sejour_id != 0
)
AND code = fac_code
WHERE
COALESCE(from_eco,1) != 0
) sub ON (
rss_id = mco_rss_id
AND rss_id != 0
OR sejour_id = act_sejour_id
AND sejour_id != 0
)
LEFT JOIN w_mvt_sejours ON (
w_mvt_sejours.rss_id = mco_rss_id
AND w_mvt_sejours.rss_id != 0
OR w_mvt_sejours.sejour_id = act_sejour_id
AND w_mvt_sejours.sejour_id != 0
)
AND w_mvt_sejours.code = fac_code
WHERE w_mvt_sejours.code IS NULL
AND base.cti_division(abs(sub.sortie_montant - montant_facture), sub.sortie_montant) < 0.1
) sub
WHERE (
sub.mco_rss_id = w_fac.mco_rss_id
AND sub.act_sejour_id = w_fac.act_sejour_id
AND sub.fac_code = w_fac.fac_code
);
UPDATE eco.p_sejours
SET ca_ghs = ca_ghs_theorique,
encours = w_ghs.encours
FROM w_ghs
WHERE p_sejours.sejour_id = w_ghs.act_sejour_id AND w_ghs.act_sejour_id != 0
;
UPDATE eco.p_sejours
SET ca_ghs = ca_ghs_theorique,
encours = w_ghs.encours
FROM w_ghs
WHERE p_sejours.rss_id = w_ghs.mco_rss_id AND w_ghs.mco_rss_id != 0 AND ca_ghs = 0
;
DROP TABLE IF EXISTS w_fac_sej;
CREATE TEMP TABLE w_fac_sej AS
SELECT w_fac.*, mouvement_id
FROM w_fac JOIN eco.p_sejours ON (
rss_id != 0 AND mco_rss_id != 0 AND rss_id = mco_rss_id)
;
INSERT INTO w_fac_sej
SELECT w_fac.*, p_sejours.mouvement_id
FROM w_fac JOIN eco.p_sejours ON (
sejour_id != 0
AND act_sejour_id != 0
AND sejour_id = act_sejour_id)
LEFT JOIN (SELECT DISTINCT mouvement_id FROM w_fac_sej) sub ON sub.mouvement_id = p_sejours.mouvement_id
WHERE sub.mouvement_id IS NULL
;
UPDATE eco.p_mouvements_articles
SET quantite_ligne_facture = nombre,
montant_ligne_facture = montant_facture
FROM
w_fac_sej
LEFT JOIN eco.t_lpp_c ON w_fac_sej.fac_code = t_lpp_c.code
LEFT JOIN eco.t_ucd_c ON w_fac_sej.fac_code = t_ucd_c.code
WHERE
mouvement_id = p_mouvements_articles.oid
AND (lpp_id = t_lpp_c.oid
OR ucd_id = t_ucd_c.oid)
;
IF _module_pmsimco = '1' AND (SELECT count(*) FROM eco.t_divers WHERE code = 'UPDATE_PMSI' AND valeur = '1') = 1 THEN
BEGIN
-- maj et ajout des ucd
DELETE FROM pmsi.p_rss_ucd
WHERE from_eco = 1
;
UPDATE pmsi.p_rss_ucd
SET
montant_consommation = sortie_montant
FROM eco.p_sejours
JOIN pmsi.p_rss ON p_rss.oid = p_sejours.rss_id
JOIN eco.p_mouvements_articles ON p_mouvements_articles.oid = mouvement_id
JOIN eco.t_ucd_c ON t_ucd_c.oid = p_mouvements_articles.ucd_id AND p_mouvements_articles.ucd_id != 0
JOIN pmsi.t_ucd ON t_ucd.code = t_ucd_c.code
JOIN pmsi.t_ucd_tarifs ON t_ucd.oid = t_ucd_tarifs.ucd_id AND date BETWEEN t_ucd_tarifs.date_debut AND t_ucd_tarifs.date_fin
WHERE p_rss_ucd.rss_id = p_rss.oid AND t_ucd.oid = p_rss_ucd.ucd_id AND sortie_quantite = nombre
;
INSERT INTO pmsi.p_rss_ucd (
finess,
no_rss,
date_ucd,
ucd_id,
nombre,
prix_unitaire_achat,
montant_consommation,
rss_id,
type_ucd_id,
from_eco)
SELECT
p_rss.finess,
p_rss.no_rss,
date,
t_ucd.oid,
sortie_quantite,
COALESCE(prix_unitaire_ttc,prix_unitaire),
sortie_montant,
p_rss.oid,
CASE WHEN t_ucd_tarifs.ucd_id IS NULL OR top_taa = 0 THEN 0 ELSE 1 END ,
1
FROM eco.p_sejours
JOIN pmsi.p_rss ON p_rss.oid = p_sejours.rss_id
JOIN eco.p_mouvements_articles ON p_mouvements_articles.oid = mouvement_id
JOIN eco.t_ucd_c ON t_ucd_c.oid = p_mouvements_articles.ucd_id AND p_mouvements_articles.ucd_id != 0
JOIN pmsi.t_ucd ON t_ucd.code = t_ucd_c.code
LEFT JOIN pmsi.t_ucd_tarifs ON t_ucd.oid = t_ucd_tarifs.ucd_id AND date BETWEEN t_ucd_tarifs.date_debut AND t_ucd_tarifs.date_fin
LEFT JOIN pmsi.p_rss_ucd ON p_rss_ucd.rss_id = p_rss.oid AND t_ucd.oid = p_rss_ucd.ucd_id
WHERE p_rss_ucd.ucd_id IS NULL AND type_mouvement_id IN
(SELECT to_id FROM eco.t_classes JOIN eco.t_classes_sections on classe_id = t_classes.oid
JOIN eco.t_classes_sections_elements ON section_id = t_classes_sections.oid
WHERE t_classes.code = 'CTI_TYPMVT' AND t_classes_sections.code = '01')
;
-- maj et ajout des lpp
DELETE FROM pmsi.p_rss_lpp
WHERE from_eco = 1
;
UPDATE pmsi.p_rss_lpp
SET
montant_consommation = sortie_montant
FROM eco.p_sejours
JOIN pmsi.p_rss ON p_rss.oid = p_sejours.rss_id
JOIN eco.p_mouvements_articles ON p_mouvements_articles.oid = mouvement_id
JOIN eco.t_lpp_c ON t_lpp_c.oid = p_mouvements_articles.lpp_id AND p_mouvements_articles.lpp_id != 0
JOIN pmsi.t_lpp ON t_lpp.code = t_lpp_c.code
JOIN pmsi.t_lpp_tarifs ON t_lpp.oid = t_lpp_tarifs.lpp_id AND date BETWEEN t_lpp_tarifs.date_debut AND t_lpp_tarifs.date_fin
WHERE p_rss_lpp.rss_id = p_rss.oid AND t_lpp.oid = p_rss_lpp.lpp_id AND sortie_quantite = nombre
;
INSERT INTO pmsi.p_rss_lpp (
finess,
no_rss,
date_lpp,
lpp_id,
nombre,
prix_unitaire,
montant_consommation,
rss_id,
type_lpp_id,
from_eco)
SELECT
p_rss.finess,
p_rss.no_rss,
date,
t_lpp.oid,
sortie_quantite,
COALESCE(t_lpp_tarifs.prix_unitaire, p_mouvements_articles.prix_unitaire),
sortie_montant,
p_rss.oid,
CASE WHEN annexe = 1 OR (annexe = 2 AND type_etablissement = 1) THEN 1 ELSE 0 END ,
1
FROM eco.p_sejours
JOIN pmsi.p_rss ON p_rss.oid = p_sejours.rss_id
JOIN base.t_finess ON finess = t_finess.code
JOIN eco.p_mouvements_articles ON p_mouvements_articles.oid = mouvement_id
JOIN eco.t_lpp_c ON t_lpp_c.oid = p_mouvements_articles.lpp_id AND p_mouvements_articles.lpp_id != 0
JOIN pmsi.t_lpp ON t_lpp.code = t_lpp_c.code
LEFT JOIN base.t_lpp_sus ON t_lpp.oid = t_lpp_sus.lpp_id AND date BETWEEN t_lpp_sus.date_debut AND t_lpp_sus.date_fin
LEFT JOIN pmsi.t_lpp_tarifs ON t_lpp.oid = t_lpp_tarifs.lpp_id AND date BETWEEN t_lpp_tarifs.date_debut AND t_lpp_tarifs.date_fin
LEFT JOIN pmsi.p_rss_lpp ON p_rss_lpp.rss_id = p_rss.oid AND t_lpp.oid = p_rss_lpp.lpp_id
WHERE p_rss_lpp.lpp_id IS NULL AND type_mouvement_id IN
(SELECT to_id FROM eco.t_classes JOIN eco.t_classes_sections on classe_id = t_classes.oid
JOIN eco.t_classes_sections_elements ON section_id = t_classes_sections.oid
WHERE t_classes.code = 'CTI_TYPMVT' AND t_classes_sections.code = 'CO')
;
END;
END IF;
-- Mise à jour des prestation PII et PH8
IF _module_activite = '1' AND _module_pmsimco = '1' AND false THEN
BEGIN
-- maj et ajout des lpp
DELETE FROM activite.p_factures_lignes_non_facturees_c
WHERE from_eco = 1
;
DROP TABLE IF EXISTS w_factures_lignes_non_facturees_c;
CREATE TEMP TABLE w_factures_lignes_non_facturees_c AS
SELECT
finess,
sejour_id,
sejour_act.no_sejour,
ghs_id,
date,
lieu_sortie_id,
t_prestations.code,
t_lpp_tarifs.prix_unitaire,
t_lpp_tarifs.prix_unitaire * sortie_quantite AS montant_non_facture,
sortie_quantite,
sejour_act.date_entree,
sejour_act.date_sortie
FROM eco.p_sejours
JOIN eco.p_mouvements_articles ON mouvement_id = p_mouvements_articles.oid
JOIN activite.p_sejours sejour_act ON p_sejours.sejour_id = sejour_act.oid
LEFT JOIN base.t_finess ON sejour_act.finess = t_finess.code
JOIN eco.t_lpp_c on lpp_id = t_lpp_c.oid
JOIN pmsi.t_lpp on t_lpp_c.code = t_lpp.code
JOIN pmsi.t_prestations on t_lpp.prestation_defaut_id = t_prestations.oid
JOIN base.t_lpp_sus on t_lpp_sus.lpp_id = t_lpp.oid AND date BETWEEN t_lpp_sus.date_debut AND t_lpp_sus.date_fin
JOIN pmsi.t_lpp_tarifs on t_lpp_tarifs.lpp_id = t_lpp.oid AND date BETWEEN t_lpp_tarifs.date_debut AND t_lpp_tarifs.date_fin
WHERE p_mouvements_articles.lpp_id != 0
AND (annexe = 1 OR annexe = 2 AND COALESCE(type_etablissement,'1') = '1')
AND type_sejour = '1'
;
DELETE FROM w_factures_lignes_non_facturees_c
USING activite.p_factures
JOIN activite.p_factures_lignes_c ON facture_id = p_factures.oid
JOIN activite.t_prestations ON p_factures_lignes_c.prestation_id = t_prestations.oid
WHERE
p_factures.sejour_id = w_factures_lignes_non_facturees_c.sejour_id AND
(t_prestations.code = w_factures_lignes_non_facturees_c.code OR code_cloture = 'H')
;
INSERT INTO activite.p_factures (
sejour_id,
finess,
no_sejour,
no_facture,
no_facture_reference,
type_facture,
code_facture,
date_facture,
ghs_id,
date_debut,
date_fin,
montant_encours_c)
SELECT
w_factures_lignes_non_facturees_c.sejour_id,
w_factures_lignes_non_facturees_c.finess,
w_factures_lignes_non_facturees_c.no_sejour,
'E' || w_factures_lignes_non_facturees_c.no_sejour,
'E' || w_factures_lignes_non_facturees_c.no_sejour,
'E',
'0',
'20991231'::date,
w_factures_lignes_non_facturees_c.ghs_id,
date_entree AS date_debut,
date_sortie AS date_fin,
sum(prix_unitaire * sortie_quantite)
FROM w_factures_lignes_non_facturees_c
LEFT JOIN activite.p_factures ON p_factures.sejour_id = w_factures_lignes_non_facturees_c.sejour_id AND montant_encours_c != 0
WHERE p_factures.no_facture IS NULL
GROUP BY 1,2,3,4,5,6,7,8,9,10,11;
INSERT INTO activite.p_factures_lignes_non_facturees_c(
no_facture,
date_debut,
date_fin,
nb_rubrique,
coefficient,
rubrique_facturation_id,
prestation_id,
prix_unitaire,
lieu_id,
from_eco)
SELECT
no_facture,
date,
date,
sortie_quantite,
1,
0,
t_prestations.oid,
prix_unitaire,
lieu_sortie_id,
1
FROM w_factures_lignes_non_facturees_c
JOIN activite.p_factures ON w_factures_lignes_non_facturees_c.sejour_id = p_factures.sejour_id
AND montant_encours_c != 0
LEFT JOIN activite.t_prestations ON w_factures_lignes_non_facturees_c.code = t_prestations.code
--LEFT JOIN activite.t_rubriques_facturation ON w_factures_lignes_non_facturees_c.code = t_prestations.code
;
-- maj et ajout des ucd
DROP TABLE IF EXISTS w_factures_lignes_non_facturees_c;
CREATE TEMP TABLE w_factures_lignes_non_facturees_c AS
SELECT
finess,
sejour_id,
sejour_act.no_sejour,
ghs_id,
date,
lieu_sortie_id,
t_prestations.code,
t_ucd_tarifs.prix_unitaire_ttc,
sortie_montant,
sortie_quantite,
sejour_act.date_entree,
sejour_act.date_sortie
FROM eco.p_sejours
JOIN eco.p_mouvements_articles ON mouvement_id = p_mouvements_articles.oid
JOIN activite.p_sejours sejour_act ON p_sejours.sejour_id = sejour_act.oid
LEFT JOIN base.t_finess ON sejour_act.finess = t_finess.code
JOIN eco.t_ucd_c on ucd_id = t_ucd_c.oid
JOIN pmsi.t_ucd on t_ucd_c.code = t_ucd.code
JOIN pmsi.t_prestations on t_ucd.prestation_defaut_id = t_prestations.oid
JOIN pmsi.t_ucd_tarifs on t_ucd_tarifs.ucd_id = t_ucd.oid AND date BETWEEN t_ucd_tarifs.date_debut AND t_ucd_tarifs.date_fin
WHERE p_mouvements_articles.ucd_id != 0
AND type_sejour = '1'
;
DELETE FROM w_factures_lignes_non_facturees_c
USING activite.p_factures
JOIN activite.p_factures_lignes_c ON facture_id = p_factures.oid
JOIN activite.t_prestations ON p_factures_lignes_c.prestation_id = t_prestations.oid
WHERE
p_factures.sejour_id = w_factures_lignes_non_facturees_c.sejour_id AND
(t_prestations.code = w_factures_lignes_non_facturees_c.code OR code_cloture = 'H')
;
INSERT INTO activite.p_factures (
sejour_id,
finess,
no_sejour,
no_facture,
no_facture_reference,
type_facture,
code_facture,
date_facture,
ghs_id,
date_debut,
date_fin,
montant_encours_c)
SELECT
w_factures_lignes_non_facturees_c.sejour_id,
w_factures_lignes_non_facturees_c.finess,
w_factures_lignes_non_facturees_c.no_sejour,
'E' || w_factures_lignes_non_facturees_c.no_sejour,
'E' || w_factures_lignes_non_facturees_c.no_sejour,
'E',
'0',
'20991231'::date,
w_factures_lignes_non_facturees_c.ghs_id,
date_entree AS date_debut,
date_sortie AS date_fin,
sum(prix_unitaire_ttc * sortie_quantite)
FROM w_factures_lignes_non_facturees_c
LEFT JOIN activite.p_factures ON p_factures.sejour_id = w_factures_lignes_non_facturees_c.sejour_id AND montant_encours_c != 0
WHERE p_factures.no_facture IS NULL
GROUP BY 1,2,3,4,5,6,7,8,9,10,11;
INSERT INTO activite.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,
date,
prix_unitaire_ttc * sortie_quantite,
1,
0,
t_prestations.oid,
prix_unitaire_ttc,
lieu_sortie_id
FROM w_factures_lignes_non_facturees_c
JOIN activite.p_factures ON w_factures_lignes_non_facturees_c.sejour_id = p_factures.sejour_id
AND montant_encours_c != 0
LEFT JOIN activite.t_prestations ON w_factures_lignes_non_facturees_c.code = t_prestations.code
--LEFT JOIN activite.t_rubriques_facturation ON w_factures_lignes_non_facturees_c.code = t_prestations.code
;
END;
END IF;
REINDEX TABLE eco.p_sejours;
RETURN 'OK';
END;