0 AND p_factures_lignes_c.compte_produit_id IS DISTINCT FROM CASE WHEN est_compte_force = '1' THEN t_service_rubrique.compte_id WHEN p_factures_lignes_c.compte_produit_id = 0 THEN t_service_rubrique.compte_id ELSE p_factures_lignes_c.compte_produit_id END ; -- Déduction depuis historique service rubrique DROP TABLE IF EXISTS w_factures_lignes_c_compte_serrub; CREATE TEMP TABLE w_factures_lignes_c_compte_serrub AS SELECT rubrique_facturation_id, service_facturation_id, (MAX(Array[date_vente::text || to_char(nb,'FM000000000000'), compte_produit_id::text]))[2]::bigint AS compte_produit_id FROM ( SELECT rubrique_facturation_id, service_facturation_id, date(date_trunc('month',date_vente)) AS date_vente, compte_produit_id, count(*) AS nb FROM activite.p_factures_lignes_c JOIN activite.p_factures ON p_factures_lignes_c.no_facture = p_factures.no_facture JOIN activite.t_lieux ON p_factures_lignes_c.lieu_id = t_lieux.oid WHERE compte_produit_id <> 0 AND date_vente < '20991231' GROUP BY 1,2,3,4 ) subview GROUP BY 1,2; CREATE INDEX w_factures_lignes_c_compte_serrub_i1 ON w_factures_lignes_c_compte_serrub USING btree (rubrique_facturation_id); UPDATE activite.p_factures_lignes_c SET compte_produit_id = w_factures_lignes_c_compte_serrub.compte_produit_id FROM w_factures_lignes_c_compte_serrub, activite.t_lieux WHERE p_factures_lignes_c.compte_produit_id = 0 AND p_factures_lignes_c.lieu_id = t_lieux.oid AND p_factures_lignes_c.rubrique_facturation_id = w_factures_lignes_c_compte_serrub.rubrique_facturation_id AND t_lieux.service_facturation_id = w_factures_lignes_c_compte_serrub.service_facturation_id; -- Déduction depuis historique service prestation DROP TABLE IF EXISTS w_factures_lignes_c_compte_serpre; CREATE TEMP TABLE w_factures_lignes_c_compte_serpre AS SELECT prestation_id, service_facturation_id, (MAX(Array[date_vente::text || to_char(nb,'FM000000000000'), compte_produit_id::text]))[2]::bigint AS compte_produit_id FROM ( SELECT prestation_id, service_facturation_id, date(date_trunc('month',date_vente)) AS date_vente, compte_produit_id, count(*) AS nb FROM activite.p_factures_lignes_c JOIN activite.p_factures ON p_factures_lignes_c.no_facture = p_factures.no_facture JOIN activite.t_lieux ON p_factures_lignes_c.lieu_id = t_lieux.oid WHERE compte_produit_id <> 0 AND date_vente < '20991231' GROUP BY 1,2,3,4 ) subview GROUP BY 1,2; CREATE INDEX w_factures_lignes_c_compte_serpre_i1 ON w_factures_lignes_c_compte_serpre USING btree (prestation_id); UPDATE activite.p_factures_lignes_c SET compte_produit_id = w_factures_lignes_c_compte_serpre.compte_produit_id FROM w_factures_lignes_c_compte_serpre, activite.t_lieux WHERE p_factures_lignes_c.compte_produit_id = 0 AND p_factures_lignes_c.lieu_id = t_lieux.oid AND p_factures_lignes_c.prestation_id = w_factures_lignes_c_compte_serpre.prestation_id AND t_lieux.service_facturation_id = w_factures_lignes_c_compte_serpre.service_facturation_id; -- Déduction depuis historique rubrique uniquement DROP TABLE IF EXISTS w_factures_lignes_c_compte_rub; CREATE TEMP TABLE w_factures_lignes_c_compte_rub AS SELECT rubrique_facturation_id, (MAX(Array[date_vente::text || to_char(nb,'FM000000000000'), compte_produit_id::text]))[2]::bigint AS compte_produit_id FROM ( SELECT rubrique_facturation_id, date(date_trunc('month',date_vente)) AS date_vente, compte_produit_id, count(*) AS nb FROM activite.p_factures_lignes_c JOIN activite.p_factures ON p_factures_lignes_c.no_facture = p_factures.no_facture WHERE compte_produit_id <> 0 AND date_vente < '20991231' GROUP BY 1,2,3 ) subview GROUP BY 1; CREATE INDEX w_factures_lignes_c_compte_rub_i1 ON w_factures_lignes_c_compte_rub USING btree (rubrique_facturation_id); UPDATE activite.p_factures_lignes_c SET compte_produit_id = w_factures_lignes_c_compte_rub.compte_produit_id FROM w_factures_lignes_c_compte_rub WHERE p_factures_lignes_c.compte_produit_id = 0 AND p_factures_lignes_c.rubrique_facturation_id = w_factures_lignes_c_compte_rub.rubrique_facturation_id; -- Forcage depuis parametrage UPDATE activite.p_factures_encours_lignes_c SET compte_produit_id = CASE WHEN est_compte_force = '1' THEN t_service_rubrique.compte_id WHEN p_factures_encours_lignes_c.compte_produit_id = 0 THEN t_service_rubrique.compte_id ELSE p_factures_encours_lignes_c.compte_produit_id END FROM activite.t_lieux, activite.t_service_rubrique WHERE lieu_id = t_lieux.oid AND t_service_rubrique.service_facturation_id = t_lieux.service_facturation_id AND t_service_rubrique.rubrique_facturation_id = p_factures_encours_lignes_c.rubrique_facturation_id AND t_service_rubrique.compte_id <> 0 AND p_factures_encours_lignes_c.compte_produit_id IS DISTINCT FROM CASE WHEN est_compte_force = '1' THEN t_service_rubrique.compte_id WHEN p_factures_encours_lignes_c.compte_produit_id = 0 THEN t_service_rubrique.compte_id ELSE p_factures_encours_lignes_c.compte_produit_id END ; -- Déduction depuis historiques service rubrique UPDATE activite.p_factures_encours_lignes_c SET compte_produit_id = w_factures_lignes_c_compte_serrub.compte_produit_id FROM w_factures_lignes_c_compte_serrub, activite.t_lieux WHERE (p_factures_encours_lignes_c.compte_produit_id = 0 OR p_factures_encours_lignes_c.compte_produit_id IS NULL) AND p_factures_encours_lignes_c.lieu_id = t_lieux.oid AND p_factures_encours_lignes_c.rubrique_facturation_id = w_factures_lignes_c_compte_serrub.rubrique_facturation_id AND t_lieux.service_facturation_id = w_factures_lignes_c_compte_serrub.service_facturation_id; -- Déduction depuis historiques service prestation UPDATE activite.p_factures_encours_lignes_c SET compte_produit_id = w_factures_lignes_c_compte_serpre.compte_produit_id FROM w_factures_lignes_c_compte_serpre, activite.t_lieux WHERE p_factures_encours_lignes_c.compte_produit_id = 0 AND p_factures_encours_lignes_c.lieu_id = t_lieux.oid AND p_factures_encours_lignes_c.prestation_id = w_factures_lignes_c_compte_serpre.prestation_id AND t_lieux.service_facturation_id = w_factures_lignes_c_compte_serpre.service_facturation_id; -- Déduction depuis historiques rubrique uniquement UPDATE activite.p_factures_encours_lignes_c SET compte_produit_id = w_factures_lignes_c_compte_rub.compte_produit_id FROM w_factures_lignes_c_compte_rub WHERE (p_factures_encours_lignes_c.compte_produit_id = 0 OR p_factures_encours_lignes_c.compte_produit_id IS NULL) AND p_factures_encours_lignes_c.rubrique_facturation_id = w_factures_lignes_c_compte_rub.rubrique_facturation_id; -- Maintenance rubrique_facturation CTI SELECT activite.cti_reorganize_rubrique_facture_c('activite.p_factures_lignes_c'); SELECT activite.cti_reorganize_rubrique_facture_c('activite.p_factures_encours_lignes_c'); -- Regroupement des lignes de CP (cas de rubriques facturées deux fois sur même date pour pb tarif patient/mutuelle DROP TABLE IF EXISTS w_cp_double; CREATE TEMP TABLE w_cp_double AS SELECT no_facture, date_debut, date_fin, prestation_id, rubrique_facturation_id, nb_rubrique, nb_prestation, coefficient, SUM(prix_unitaire) AS prix_unitaire, round(base.cti_division(SUM(montant_facture_1),SUM(montant_facture))*100.00,0) AS taux_1, round(base.cti_division(SUM(montant_facture_2),SUM(montant_facture))*100.00,0) AS taux_2, round(base.cti_division(SUM(montant_facture_22),SUM(montant_facture))*100.00,0) AS taux_22, round(base.cti_division(SUM(montant_facture_0),SUM(montant_facture))*100.00,0) AS taux_0, 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, MIN(p_factures_lignes_c.CTID) AS keepCTID FROM activite.p_factures_lignes_c WHERE rubrique_facturation_id IN (SELECT to_id FROM activite.v_listes_3 WHERE liste_code = 'CTI_SHO_R') AND montant_facture <> 0 GROUP BY 1,2,3,4,5,6,7,8 HAVING count(*) > 1; INSERT INTO w_cp_double SELECT no_facture, date_debut, date_fin, MAX(prestation_id) AS prestation_id, rubrique_facturation_id, 1 AS nb_rubrique, 1 AS nb_prestation, 1 AS coefficient, SUM(montant_encours) AS prix_unitaire, round(base.cti_division(SUM(montant_facture_1),SUM(montant_facture))*100.00,0) AS taux_1, round(base.cti_division(SUM(montant_facture_2),SUM(montant_facture))*100.00,0) AS taux_2, round(base.cti_division(SUM(montant_facture_22),SUM(montant_facture))*100.00,0) AS taux_22, round(base.cti_division(SUM(montant_facture_0),SUM(montant_facture))*100.00,0) AS taux_0, 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, MIN(p_factures_lignes_c.CTID) AS keepCTID FROM activite.p_factures_lignes_c WHERE rubrique_facturation_id IN (SELECT to_id FROM activite.v_listes_3 WHERE liste_code = 'CTI_SHO_R') AND montant_encours <> 0 GROUP BY 1,2,3,5,6,7 HAVING count(*) > 1; UPDATE w_cp_double SET prestation_id = subview.prestation_id FROM ( SELECT rubrique_facturation_id, (MAX(ARRAY[nb,prestation_id]))[2] AS prestation_id FROM ( SELECT rubrique_facturation_id, prestation_id, count(*) AS nb FROM w_cp_double GROUP BY 1,2) subview GROUP BY 1 ) subview WHERE w_cp_double.rubrique_facturation_id = subview.rubrique_facturation_id AND w_cp_double.prestation_id <> subview.prestation_id; CREATE INDEX w_cp_double_i1 ON w_cp_double USING btree (no_facture); DELETE FROM activite.p_factures_lignes_c USING w_cp_double WHERE p_factures_lignes_c.no_facture = w_cp_double.no_facture AND p_factures_lignes_c.date_debut = w_cp_double.date_debut AND p_factures_lignes_c.date_fin = w_cp_double.date_fin AND (p_factures_lignes_c.prestation_id = w_cp_double.prestation_id OR w_cp_double.montant_encours <> 0) AND p_factures_lignes_c.rubrique_facturation_id = w_cp_double.rubrique_facturation_id AND (p_factures_lignes_c.nb_rubrique = w_cp_double.nb_rubrique OR w_cp_double.montant_encours <> 0) AND (p_factures_lignes_c.nb_prestation = w_cp_double.nb_prestation OR w_cp_double.montant_encours <> 0) AND (p_factures_lignes_c.coefficient = w_cp_double.coefficient OR w_cp_double.montant_encours <> 0) AND p_factures_lignes_c.CTID <> keepCTID; UPDATE activite.p_factures_lignes_c SET prestation_id = w_cp_double.prestation_id, nb_rubrique = w_cp_double.nb_rubrique, nb_prestation = w_cp_double.nb_prestation, coefficient = w_cp_double.coefficient, prix_unitaire = w_cp_double.prix_unitaire, taux_0 = w_cp_double.taux_0, taux_1 = w_cp_double.taux_1, taux_2 = w_cp_double.taux_2, taux_22 = w_cp_double.taux_22, montant_facture = w_cp_double.montant_facture, montant_facture_0 = w_cp_double.montant_facture_0, montant_facture_1 = w_cp_double.montant_facture_1, montant_facture_2 = w_cp_double.montant_facture_2, montant_facture_22 = w_cp_double.montant_facture_22, montant_comptabilise = w_cp_double.montant_comptabilise, montant_comptabilise_0 = w_cp_double.montant_comptabilise_0, montant_comptabilise_1 = w_cp_double.montant_comptabilise_1, montant_comptabilise_2 = w_cp_double.montant_comptabilise_2, montant_comptabilise_22 = w_cp_double.montant_comptabilise_22, montant_encours = w_cp_double.montant_encours, montant_encours_0 = w_cp_double.montant_encours_0, montant_encours_1 = w_cp_double.montant_encours_1, montant_encours_2 = w_cp_double.montant_encours_2, montant_encours_22 = w_cp_double.montant_encours_22 FROM w_cp_double WHERE p_factures_lignes_c.no_facture = w_cp_double.no_facture AND p_factures_lignes_c.date_debut = w_cp_double.date_debut AND p_factures_lignes_c.date_fin = w_cp_double.date_fin AND (p_factures_lignes_c.prestation_id = w_cp_double.prestation_id OR w_cp_double.montant_encours <> 0) AND p_factures_lignes_c.rubrique_facturation_id = w_cp_double.rubrique_facturation_id AND (p_factures_lignes_c.nb_rubrique = w_cp_double.nb_rubrique OR w_cp_double.montant_encours <> 0) AND (p_factures_lignes_c.nb_prestation = w_cp_double.nb_prestation OR w_cp_double.montant_encours <> 0) AND (p_factures_lignes_c.coefficient = w_cp_double.coefficient OR w_cp_double.montant_encours <> 0); -- Reconstitution factures références DROP TABLE IF EXISTS w_factures_reference; CREATE TEMP TABLE w_factures_reference AS SELECT no_facture_reference, SUM(p_factures.montant_encours_c + p_factures.montant_encours_h) AS montant_encours, SUM(p_factures.montant_encours_c) AS montant_encours_c, SUM(p_factures.montant_encours_h) AS montant_encours_h, SUM(p_factures.montant_encours_0_c + p_factures.montant_encours_0_h) AS montant_encours_0, SUM(p_factures.montant_encours_0_c) AS montant_encours_0_c, SUM(p_factures.montant_encours_0_h) AS montant_encours_0_h, SUM(p_factures.montant_encours_1_c + p_factures.montant_encours_1_h) AS montant_encours_1, SUM(p_factures.montant_encours_1_c) AS montant_encours_1_c, SUM(p_factures.montant_encours_1_h) AS montant_encours_1_h, SUM(p_factures.montant_encours_2_c + p_factures.montant_encours_2_h + p_factures.montant_encours_22_c + p_factures.montant_encours_22_h) AS montant_encours_2, SUM(p_factures.montant_encours_2_c + p_factures.montant_encours_22_c) AS montant_encours_2_c, SUM(p_factures.montant_encours_2_h + p_factures.montant_encours_22_h) AS montant_encours_2_h FROM activite.p_sejours JOIN activite.p_factures ON p_factures.no_sejour = p_sejours.no_sejour JOIN activite.t_lieux ON p_sejours.lieu_sortie_id = t_lieux.oid JOIN activite.t_services_facturation ON service_facturation_id = t_services_facturation.oid WHERE t_services_facturation.est_sans_facturation IS DISTINCT FROM '1' AND code_prevu <> 1 GROUP BY 1 ; UPDATE activite.p_factures_reference SET montant_encours = w_factures_reference.montant_encours, montant_encours_c = w_factures_reference.montant_encours_c, montant_encours_h = w_factures_reference.montant_encours_h, montant_encours_0 = w_factures_reference.montant_encours_0, montant_encours_0_c = w_factures_reference.montant_encours_0_c, montant_encours_0_h = w_factures_reference.montant_encours_0_h, montant_encours_1 = w_factures_reference.montant_encours_1, montant_encours_1_c = w_factures_reference.montant_encours_1_c, montant_encours_1_h = w_factures_reference.montant_encours_1_h, montant_encours_2 = w_factures_reference.montant_encours_2, montant_encours_2_c = w_factures_reference.montant_encours_2_c, montant_encours_2_h = w_factures_reference.montant_encours_2_h FROM w_factures_reference WHERE p_factures_reference.no_facture_reference = w_factures_reference.no_facture_reference AND p_factures_reference.montant_encours <> w_factures_reference.montant_encours ; ]]>