return: text
|
|
lang: plpgsql
|
|
src: |
|
|
DECLARE
|
|
result TEXT;
|
|
BEGIN
|
|
|
|
-- Non comptabilisation des honoaraires / patients
|
|
|
|
DROP TABLE IF EXISTS w_medecin_non_solde;
|
|
CREATE TEMP TABLE w_medecin_non_solde AS
|
|
SELECT no_facture,
|
|
facture_id,
|
|
medecin_comptabilise_id,
|
|
|
|
rubrique_comptabilisee_id,
|
|
prestation_id,
|
|
MIN(date_comptable) AS date_comptable,
|
|
SUM(montant_comptabilise_0) - SUM(montant_regle_0) AS solde_0
|
|
FROM activite.p_factures_soldes_h
|
|
JOIN activite.t_medecins_administratifs ON medecin_comptabilise_id = t_medecins_administratifs.oid
|
|
WHERE medecin_comptabilise_id <> 0 AND
|
|
KIWEE_SIGEMS_HONPATCPT = '0'
|
|
GROUP BY 1,2,3,4,5
|
|
HAVING SUM(montant_comptabilise_0) <> SUM(montant_regle_0)
|
|
;
|
|
|
|
ANALYSE w_medecin_non_solde
|
|
;
|
|
|
|
-- Deduction du montant depassement dans les lignes comptables
|
|
INSERT INTO activite.p_factures_soldes_h(
|
|
facture_id,
|
|
no_facture,
|
|
date_comptable,
|
|
medecin_comptabilise_id,
|
|
prestation_id,
|
|
rubrique_comptabilisee_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_non_comptabilise
|
|
|
|
)
|
|
SELECT
|
|
facture_id,
|
|
no_facture,
|
|
date_comptable,
|
|
medecin_comptabilise_id,
|
|
prestation_id,
|
|
rubrique_comptabilisee_id,
|
|
0::numeric - solde_0 AS montant_comptabilise,
|
|
0::numeric - solde_0 AS montant_comptabilise_0,
|
|
0::numeric AS montant_comptabilise_1,
|
|
0::numeric AS montant_comptabilise_2,
|
|
0::numeric AS montant_comptabilise_22,
|
|
0::numeric AS montant_regle,
|
|
0::numeric AS montant_regle_0,
|
|
0::numeric AS montant_regle_1,
|
|
0::numeric AS montant_regle_2,
|
|
0 AS montant_regle_22,
|
|
'1'::text AS od_non_comptabilise
|
|
FROM w_medecin_non_solde
|
|
;
|
|
|
|
|
|
-- Modification montant comptabilise dans les lignes facturees
|
|
UPDATE activite.p_factures_lignes_h SET
|
|
montant_comptabilise = montant_comptabilise - montant_comptabilise_0,
|
|
montant_comptabilise_0 = 0
|
|
FROM activite.t_medecins_administratifs
|
|
WHERE medecin_comptabilise_id = t_medecins_administratifs.oid AND
|
|
KIWEE_SIGEMS_HONPATCPT = '0' AND
|
|
montant_comptabilise_0 <> 0
|
|
;
|
|
|
|
-- Correction des totaux factures (comptabilise)
|
|
DROP TABLE IF EXISTS w_depassement_non_compta_corr;
|
|
CREATE TEMP TABLE w_depassement_non_compta_corr AS
|
|
SELECT no_facture, SUM(montant_comptabilise) AS montant_comptabilise,
|
|
SUM(montant_comptabilise_0) AS montant_comptabilise_0
|
|
FROM activite.p_factures_lignes_h
|
|
WHERE no_facture IN (SELECT no_facture FROM w_medecin_non_solde)
|
|
GROUP BY 1
|
|
;
|
|
|
|
ANALYSE w_depassement_non_compta_corr
|
|
;
|
|
|
|
UPDATE activite.p_factures SET
|
|
montant_comptabilise_h = w_depassement_non_compta_corr.montant_comptabilise,
|
|
montant_comptabilise_0_h = w_depassement_non_compta_corr.montant_comptabilise_0
|
|
FROM w_depassement_non_compta_corr
|
|
WHERE w_depassement_non_compta_corr.no_facture = p_factures.no_facture AND
|
|
(
|
|
montant_comptabilise_h IS DISTINCT FROM w_depassement_non_compta_corr.montant_comptabilise OR
|
|
montant_comptabilise_0_h IS DISTINCT FROM w_depassement_non_compta_corr.montant_comptabilise_0
|
|
)
|
|
;
|
|
|
|
|
|
-- Non comptabilisation des dépassements / patients
|
|
|
|
-- Reperage des factures honoraires non soldees (les soldees ne sont pas concernees)
|
|
DROP TABLE IF EXISTS w_medecin_non_solde;
|
|
CREATE TEMP TABLE w_medecin_non_solde AS
|
|
SELECT no_facture,
|
|
medecin_comptabilise_id,
|
|
rubrique_comptabilisee_id,
|
|
prestation_id
|
|
FROM activite.p_factures_soldes_h
|
|
JOIN activite.t_medecins_administratifs ON medecin_comptabilise_id = t_medecins_administratifs.oid
|
|
WHERE medecin_comptabilise_id <> 0 AND
|
|
KIWEE_SIGEMS_HONPATCPTDEP = '0'
|
|
GROUP BY 1,2,3,4
|
|
HAVING SUM(montant_comptabilise_0) <> SUM(montant_regle_0)
|
|
;
|
|
|
|
ANALYSE w_medecin_non_solde
|
|
;
|
|
|
|
-- Lignes honoraires avec depassement honoraire patient (sauf les medecins parametres)
|
|
DROP TABLE IF EXISTS w_depassement_non_compta;
|
|
CREATE TEMP TABLE w_depassement_non_compta AS
|
|
SELECT p_factures_lignes_h.no_facture,
|
|
p_factures.oid AS facture_id,
|
|
p_factures.date_vente,
|
|
p_factures_lignes_h.medecin_facture_id,
|
|
t_medecins_administratifs.code,
|
|
p_factures_lignes_h.montant_comptabilise_0,
|
|
p_factures_lignes_h.montant_depassement,
|
|
p_factures_lignes_h.rubrique_facturation_id,
|
|
p_factures_lignes_h.prestation_id,
|
|
p_factures_lignes_h.CTID AS from_CTID
|
|
FROM activite.p_factures_lignes_h
|
|
JOIN activite.p_factures ON p_factures_lignes_h.no_facture = p_factures.no_facture
|
|
JOIN activite.t_medecins_administratifs ON medecin_facture_id = t_medecins_administratifs.oid
|
|
JOIN w_medecin_non_solde ON
|
|
p_factures_lignes_h.no_facture = w_medecin_non_solde.no_facture AND
|
|
p_factures_lignes_h.medecin_facture_id = w_medecin_non_solde.medecin_comptabilise_id AND
|
|
p_factures_lignes_h.prestation_id = w_medecin_non_solde.prestation_id AND
|
|
p_factures_lignes_h.rubrique_facturation_id = w_medecin_non_solde.rubrique_comptabilisee_id
|
|
WHERE KIWEE_SIGEMS_HONPATCPTDEP = '0' AND
|
|
montant_depassement <> 0 AND
|
|
abs(montant_depassement) <= abs(montant_comptabilise_0) AND
|
|
montant_comptabilise_0 <> 0
|
|
;
|
|
|
|
ANALYSE w_depassement_non_compta
|
|
;
|
|
|
|
-- Total par medecin et prestation
|
|
DROP TABLE IF EXISTS w_depassement_non_compta_ven;
|
|
CREATE TEMP TABLE w_depassement_non_compta_ven AS
|
|
SELECT no_facture,
|
|
facture_id,
|
|
date_vente,
|
|
medecin_facture_id,
|
|
prestation_id,
|
|
rubrique_facturation_id,
|
|
SUM(montant_comptabilise_0) AS montant_comptabilise_0,
|
|
SUM(montant_depassement) AS montant_depassement
|
|
FROM w_depassement_non_compta
|
|
GROUP BY 1,2,3,4,5,6
|
|
;
|
|
|
|
|
|
ANALYSE w_depassement_non_compta_ven
|
|
;
|
|
|
|
-- Deduction du montant depassement dans les lignes comptables
|
|
INSERT INTO activite.p_factures_soldes_h(
|
|
facture_id,
|
|
no_facture,
|
|
date_comptable,
|
|
medecin_comptabilise_id,
|
|
prestation_id,
|
|
rubrique_comptabilisee_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_non_comptabilise
|
|
|
|
)
|
|
SELECT
|
|
facture_id,
|
|
no_facture,
|
|
date_vente,
|
|
medecin_facture_id,
|
|
prestation_id,
|
|
rubrique_facturation_id,
|
|
0::numeric - montant_depassement AS montant_comptabilise,
|
|
0::numeric - montant_depassement AS montant_comptabilise_0,
|
|
0::numeric AS montant_comptabilise_1,
|
|
0::numeric AS montant_comptabilise_2,
|
|
0::numeric AS montant_comptabilise_22,
|
|
0::numeric AS montant_regle,
|
|
0::numeric AS montant_regle_0,
|
|
0::numeric AS montant_regle_1,
|
|
0::numeric AS montant_regle_2,
|
|
0 AS montant_regle_22,
|
|
'0'::text AS od_non_comptabilise
|
|
FROM w_depassement_non_compta_ven
|
|
;
|
|
|
|
-- Deduction des depassements dans les lignes de reglements regul
|
|
INSERT INTO activite.p_factures_soldes_h(
|
|
facture_id,
|
|
no_facture,
|
|
date_comptable,
|
|
medecin_comptabilise_id,
|
|
prestation_id,
|
|
rubrique_comptabilisee_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_non_comptabilise
|
|
|
|
)
|
|
SELECT
|
|
facture_id,
|
|
no_facture,
|
|
date_vente,
|
|
0::bigint AS medecin_comptabilise_id,
|
|
0::bigint AS prestation_id,
|
|
0::bigint AS rubrique_comptabiliseen_id,
|
|
0::numeric AS montant_comptabilise,
|
|
0::numeric AS montant_comptabilise_0,
|
|
0::numeric AS montant_comptabilise_1,
|
|
0::numeric AS montant_comptabilise_2,
|
|
0::numeric AS montant_comptabilise_22,
|
|
0::numeric - SUM(montant_depassement) AS montant_regle,
|
|
0::numeric - SUM(montant_depassement) AS montant_regle_0,
|
|
0::numeric AS montant_regle_1,
|
|
0::numeric AS montant_regle_2,
|
|
0 AS montant_regle_22,
|
|
'1'::text AS od_non_comptabilise
|
|
FROM w_depassement_non_compta_ven
|
|
WHERE no_facture IN (SELECT no_facture FROM activite.p_factures_soldes_h WHERE medecin_comptabilise_id = 0 AND montant_regle_0 <> 0)
|
|
GROUP BY 1,2,3
|
|
;
|
|
|
|
-- Modification montant comptabilise dans les lignes facturees
|
|
UPDATE activite.p_factures_lignes_h SET
|
|
montant_comptabilise = p_factures_lignes_h.montant_comptabilise - w_depassement_non_compta.montant_depassement,
|
|
montant_comptabilise_0 = p_factures_lignes_h.montant_comptabilise_0 - w_depassement_non_compta.montant_depassement
|
|
FROM w_depassement_non_compta
|
|
WHERE p_factures_lignes_h.no_facture = w_depassement_non_compta.no_facture AND
|
|
p_factures_lignes_h.CTID = w_depassement_non_compta.from_CTID
|
|
;
|
|
|
|
-- Correction des totaux factures (comptabilise)
|
|
DROP TABLE IF EXISTS w_depassement_non_compta_corr;
|
|
CREATE TEMP TABLE w_depassement_non_compta_corr AS
|
|
SELECT no_facture, SUM(montant_comptabilise) AS montant_comptabilise,
|
|
SUM(montant_comptabilise_0) AS montant_comptabilise_0
|
|
FROM activite.p_factures_lignes_h
|
|
WHERE no_facture IN (SELECT no_facture FROM w_depassement_non_compta_ven)
|
|
GROUP BY 1
|
|
;
|
|
|
|
ANALYSE w_depassement_non_compta_corr
|
|
;
|
|
|
|
UPDATE activite.p_factures SET
|
|
montant_comptabilise_h = w_depassement_non_compta_corr.montant_comptabilise,
|
|
montant_comptabilise_0_h = w_depassement_non_compta_corr.montant_comptabilise_0
|
|
FROM w_depassement_non_compta_corr
|
|
WHERE w_depassement_non_compta_corr.no_facture = p_factures.no_facture
|
|
;
|
|
|
|
|
|
-- Purge des montants OD regles (annules par negatif)
|
|
DROP TABLE IF EXISTS w_depassement_non_compta_corr_purge;
|
|
CREATE TEMP TABLE w_depassement_non_compta_corr_purge AS
|
|
SELECT p_factures_soldes_h.no_facture,
|
|
SUM(montant_regle_0) AS montant_regle_0,
|
|
SUM(montant_regle) AS montant_regle
|
|
FROM activite.p_factures_soldes_h
|
|
JOIN activite.p_factures On p_factures_soldes_h.no_facture = p_factures.no_facture
|
|
WHERE medecin_comptabilise_id = 0 AND
|
|
montant_regle_0 <> 0
|
|
GROUP BY 1
|
|
HAVING SUM(p_factures.montant_facture_h) >= 0 AND SUM(montant_regle_0) <= 0 OR
|
|
SUM(p_factures.montant_facture_h) < 0 AND SUM(montant_regle_0) > 0
|
|
;
|
|
|
|
ANALYSE w_depassement_non_compta_corr_purge
|
|
;
|
|
|
|
DELETE FROM activite.p_factures_soldes_h
|
|
USING w_depassement_non_compta_corr_purge
|
|
WHERE p_factures_soldes_h.no_facture = w_depassement_non_compta_corr_purge.no_facture AND
|
|
p_factures_soldes_h.medecin_comptabilise_id = 0 AND
|
|
p_factures_soldes_h.montant_regle_0 <> 0
|
|
;
|
|
|
|
-- Correction des totaux factures (regle)
|
|
DROP TABLE IF EXISTS w_depassement_non_compta_corr;
|
|
CREATE TEMP TABLE w_depassement_non_compta_corr AS
|
|
SELECT p_factures_soldes_h.no_facture,
|
|
SUM(p_factures_soldes_h.montant_regle) AS montant_regle,
|
|
SUM(p_factures_soldes_h.montant_regle_0) AS montant_regle_0
|
|
FROM activite.p_factures_soldes_h
|
|
JOIN activite.p_factures ON p_factures_soldes_h.no_facture = p_factures.no_facture
|
|
GROUP BY 1
|
|
HAVING SUM(p_factures_soldes_h.montant_regle_0) <> MAX(p_factures.montant_regle_0_h)
|
|
;
|
|
|
|
ANALYSE w_depassement_non_compta_corr
|
|
;
|
|
|
|
UPDATE activite.p_factures SET
|
|
montant_regle_h = w_depassement_non_compta_corr.montant_regle,
|
|
montant_regle_0_h = w_depassement_non_compta_corr.montant_regle_0
|
|
FROM w_depassement_non_compta_corr
|
|
WHERE w_depassement_non_compta_corr.no_facture = p_factures.no_facture
|
|
;
|
|
|
|
|
|
RETURN 'OK';
|
|
END;
|