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;