pour déploiement auto v2 via gitlab
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.
 
 

1050 lines
42 KiB

<?php
$MODULE="pmsi";
$TITLE="Impact Diagnostic";
$ARGS="-raz";
$DFTENDSTATUS="OK";
/*
Influence de la suppression d'une liste de diagnostic associées sur le groupage
objectif: %, CA des rss impactés par non existence d'un diagnostic
méthodologie:
fichier In => extraction RSS => supression des diagnostic liste 1 => groupage 1 => fichier RDS 1 => import csv dans table spe pour analyse (+tempo et comparative)
=> supression des diagnostic liste 2 => groupage 2 => fichier RDS 2
=> supression des diagnostic liste 3 => groupage 3 => fichier RDS 3
2 années d'antériorité (à partir de mars)) => changeable dans $nb_annees
requis:
- Listes > Diagnostics > Etude Impact Diagnostics > listes $diag_list_rootX répliquées dans les environnements consolidés
- table pmsi.t_impact_diagnotiques
- groupeur dans $mgt_path
affichage fait
- analyse, justificatifs, affichage des erreurs
- filtre sur diagnostiques présents, changements de GHM, de racine, de sévérité
- pourcentages(dans analyse) en fonction du filtre (référentiel)
a faire:
- optimisation par flag sur changement de liste ou import de lot
- changement de liste dans le consoliudé change les liste partout
*/
require_once("../../../modules/base/php/lib/cti/Batch/iCTI_batch_common.php" );
require_once('../../base/php/lib/cti/Database/Database2Factory.class.php');
require_once("../../base/php/classSimpleXML.php");
require_once("../../base/php/Functions.php" );
require_once("../../outils/php/httpService_cacheManager_cleanCache.php");
//chargement des paramètres
$annee = date("Y");
$nb_annees= 2;
$mgt_path = 'C:/CTI/iCTI_System/mgt';
$tmp_path = '../../../temp';
$diag_list_root = 'CTI_DIAG_IMP_';
$nr_diag_list = 4;
$diag_code_list = Array();
$yearVars = Array();
$simulationTable = 'p_impact_diagnostics';
$conn = Database2Factory::getInstance(Environnement::PROVIDER_CTI);
$ngExt = '.ng';
echo "\r\n" . date("d/m/Y H:i:s") . "\t" . "START" . "\t" . "SIMULATION IMPACT diagnostic PMSI";
$sql = "TRUNCATE pmsi.$simulationTable;";
$result = $conn->queryFetchAllAssoc($sql);
if (!$result) {
$return_code = "$sql";
$return_message = "Une erreur SQL a interrompu le traitement 0";
}
//reprend le groupeur precedent si l fichier relatif au groupeur de l'annéen'est pas trouvé
if (!file_exists("$mgt_path/$annee/iCTI_impact_diag_group_$annee.php")) {
$annee = $annee - 1;
echo "\r\n" . date("d/m/Y H:i:s") . "\t" . " " . "\t" . "Groupeur année en cours absent. Calcul avec les groupeurs des années précédentes";
}
//itérations sur années et listes
for($y = $annee - ($nb_annees-1) ; $y < $annee+1 ; $y++) {
include_once("$mgt_path/$y/iCTI_impact_diag_group_$y.php");
$sql = "SELECT max(substr(t_listes.code,length('$diag_list_root')+1)::int) as nr
FROM pmsi.t_listes
WHERE pmsi.t_listes.code like '$diag_list_root%'";
$result = $conn->queryFetchAllAssoc($sql);
$nr_diag_list = $result[0]['nr'];
for($num = 1 ; $num <= $nr_diag_list ; $num++) {
$sql = "SELECT t_listes.oid
FROM pmsi.t_listes
WHERE pmsi.t_listes.code = '$diag_list_root$num'";
$result = $conn->queryFetchAllAssoc($sql);
$liste_id = $result[0]['oid'];
$sql = "SELECT t_listes_tables.select_cmd
FROM pmsi.t_listes_tables
WHERE t_listes_tables.oid IN (
SELECT t_listes.table_id
FROM pmsi.t_listes
WHERE pmsi.t_listes.code = '$diag_list_root$num')";
$result = $conn->queryFetchAllAssoc($sql);
if (!$result) echo "\r\n" . date("d/m/Y H:i:s") . "\t" . "ABORT" . "\t" . "SIMULATION $y liste $diag_list_root$num n'existe pas";
else {
$sql = "SELECT d.code
FROM (".$result[0]['select_cmd'].") as d
WHERE d.oid IN (
SELECT to_id
FROM pmsi.t_listes_contenu
WHERE liste_id = (
SELECT t_listes.oid
FROM pmsi.t_listes
WHERE pmsi.t_listes.code = '$diag_list_root$num'))";
$result = $conn->queryFetchAllAssoc($sql);
foreach($result as $value) $diag_code_list[$liste_id][] = $value['code'];
if (empty($diag_code_list[$liste_id])) echo "\r\n" . date("d/m/Y H:i:s") . "\t" . "ABORT" . "\t" . "SIMULATION $y liste $diag_list_root$num est vide (oid $liste_id)";
else {
$tmp_RSSoutfile = $mgt_path . '/' .$y . '/files/' . Environnement::getFiness();
if (!file_exists($tmp_RSSoutfile)) {
mkdir($tmp_RSSoutfile);
}
$tmp_RSSoutfile .= '/rss_out'.$ngExt;
echo "\r\n" . date("d/m/Y H:i:s") . "\t" . "START" . "\t" . "SIMULATION $y liste $diag_list_root$num (oid $liste_id)";
//création des fichiers pour le groupeur
createFile($liste_id);
//group
call_user_func("group_file_$y");
//traite
trtFile($liste_id);
}
}
}
}
// recup des fichier in et placement pour récupération par le groupeur(+tard juste le dernier si les listes n'ont pas été changées)
function createFile($list_id)
{
global $y;
global $conn;
global $tmp_RSSoutfile;
global $local_file;
global $diag_code_list;
echo "\r\n" . date("d/m/Y H:i:s") . "\t" . "creation fichier non groupé pour ".$y;
// Calcul des dates clés : 1er mars => 31 déc. => 1 janv. => 28/29 fév.
$d1 = $y . '-03-01';
$d5 = ($y+1) . '-03-01';
$sql = "SELECT
(MAX(ARRAY[CASE WHEN numero_editeur_pmsi <> 2 AND annee = " . $y . " THEN nombre ELSE 0 END, CASE WHEN numero_editeur_pmsi <> 2 AND annee = " . $y . " THEN import_id ELSE 0 END]))[2] as import_id_y_1,
(MAX(ARRAY[CASE WHEN numero_editeur_pmsi <> 2 AND annee = " . ($y+1) . " THEN nombre ELSE 0 END, CASE WHEN numero_editeur_pmsi <> 2 AND annee = " . ($y+1) . " THEN import_id ELSE 0 END]))[2] as import_id_y,
(MAX(ARRAY[CASE WHEN numero_editeur_pmsi = 2 AND annee = " . $y . " THEN nombre ELSE 0 END, CASE WHEN numero_editeur_pmsi = 2 AND annee = " . $y . " THEN import_id ELSE 0 END]))[2] as import_id_2_y_1,
(MAX(ARRAY[CASE WHEN numero_editeur_pmsi = 2 AND annee = " . ($y+1) . " THEN nombre ELSE 0 END, CASE WHEN numero_editeur_pmsi = 2 AND annee = " . ($y+1) . " THEN import_id ELSE 0 END]))[2] as import_id_2_y
FROM
(
SELECT
extract('year' from date_sortie) AS annee,
import_id,
numero_editeur_pmsi,
count(*) as nombre
FROM pmsi.p_rss
WHERE 1=1
AND date_sortie >= '$d1'
AND date_sortie < '$d5'
AND en_cours = '0'
AND etat = ''
GROUP BY 1,2,3
) AS subq";
$result = $conn->queryFetchAllAssoc($sql);
// Définition des extentions de fichier
if (count($result)) {
$return_code = "OK";
$result=$result[0];
} else {
$return_code = "$sql";
$return_message = "Erreur SQL";
}
if ($return_code == "OK") {
if (array_sum($result) == 0) {
$return_code = "$sql";
$return_message = "Aucun import pour " . ($y) . " ou " . $y+1;
}
}
if ($return_code == "OK") {
$tmp_RSSinfileZip = $tmp_path . "/rss_" . $y . "_in.zip";
if (file_exists($tmp_RSSinfileZip)) {
unlink($tmp_RSSinfileZip);
}
@unlink($tmp_RSSoutfile);
// Unites medicales
extract_um($d1,$d5);
// Restauration fichier 2
if ($result['import_id_y_1'] > 0) {
extract_rss($result['import_id_y_1'], $y);
filterDiag($diag_code_list[$list_id], $y);
}
if ($result['import_id_2_y_1'] > 0) {
extract_rss($result['import_id_2_y_1'], $y);
filterDiag($diag_code_list[$list_id], $y);
}
if ($result['import_id_y'] > 0) {
extract_rss($result['import_id_y'], $y);
filterDiag($diag_code_list[$list_id], $y+1);
}
if ($result['import_id_2_y'] > 0) {
extract_rss($result['import_id_2_y'], $y);
filterDiag($diag_code_list[$list_id], $y+1);
}
}
@unlink($local_file);
}
// update/insert dans table
function trtFile($liste_id) {
global $y;
global $num;
global $conn;
global $ngExt;
global $FG_VERSION;
global $simulationTable;
global $tmp_path;
global $tmp_RSSoutfile;
global $csvColumns;
global $diag_list_root;
$csvFile = str_replace($ngExt,'.'.$FG_VERSION,$tmp_RSSoutfile);
$nextY = $y+1;
$d5 = $nextY."-03-01";
$d1 = $y."-03-01";
$sql = "
INSERT INTO pmsi.$simulationTable
(
liste_id,
liste_code,
finess,
rss_id,
no_rss,
annee_sortie,
ghm_fg0_id,
ghs_fg0_id
)
SELECT
$liste_id,
'$diag_list_root$num',
v_rss_1.finess,
v_rss_1.rss_id,
v_rss_1.no_rss,
date_part('year',v_rss_1.date_sortie),
ghm_id,
ghs_id
FROM pmsi.v_rss_1
WHERE 1=1
AND date_sortie >= '$y-03-01'
AND date_sortie < '$nextY-03-01'
AND en_cours = '0'
AND mco IN ('M', 'C', 'O')
;
";
$result = $conn->dbQuery($sql);
if($result) {
// echo $sql;
$return_code = "OK";
} else {
$return_code = "$sql";
$return_message = "Une erreur SQL a interrompu le traitement 0";
}
if ($return_code == "OK") {
$sql = "
UPDATE pmsi.$simulationTable
SET
coefficient_mco_fg0 = subview.coefficient_mco_fg0,
montant_ghs_theorique_fg0 = subview.montant_ghs_theorique_fg0,
nb_sej_exb_fg0 = subview.nb_sej_exb_fg0,
montant_exb_fg0 = subview.montant_exb_fg0,
nb_exh_fg0 = subview.nb_exh_fg0,
montant_exh_fg0 = subview.montant_exh_fg0
FROM
(
SELECT v_rsf_detail_1.rss_id,
MIN(CASE WHEN prestation_code = 'GHS' THEN coefficient_mco ELSE null END) AS coefficient_mco_fg0,
SUM(
CASE WHEN prestation_code = 'GHS' THEN
CASE WHEN coefficient >= 1 THEN v_rsf_detail_1.base_remboursement ELSE round(v_rsf_detail_1.nombre * v_rsf_detail_1.coefficient_mco * v_rsf_detail_1.prix_unitaire,2) END
ELSE 0 END
) AS montant_ghs_theorique_fg0,
COUNT (DISTINCT CASE WHEN prestation_code = 'GHS' AND coefficient < 1 THEN v_rsf_detail_1.rss_id ELSE null END) AS nb_sej_exb_fg0,
SUM(CASE WHEN prestation_code = 'GHS' AND coefficient < 1 THEN v_rsf_detail_1.base_remboursement - round(v_rsf_detail_1.nombre * v_rsf_detail_1.coefficient_mco * v_rsf_detail_1.prix_unitaire,2) ELSE 0 END) AS montant_exb_fg0,
SUM(CASE WHEN prestation_code = 'EXH' THEN nombre ELSE 0 END) as nb_exh_fg0,
SUM(CASE WHEN prestation_code = 'EXH' THEN v_rsf_detail_1.base_remboursement ELSE 0 END) as montant_exh_fg0
FROM pmsi.v_rss_7 AS v_rss_1, pmsi.v_rsf_detail_1
WHERE 1=1
AND date_sortie >= '$y-03-01'
AND date_sortie < '$nextY-03-01'
AND v_rsf_detail_1.rss_id = v_rss_1.rss_id
AND prestation_code IN ('GHS', 'EXH')
AND en_cours = '0'
GROUP BY v_rsf_detail_1.rss_id
) AS subview
WHERE subview.rss_id = $simulationTable.rss_id
;
";
$result = $conn->dbQuery($sql);
if (!$result) {
$return_code = "$sql";
$return_message = "Une erreur SQL a interrompu le traitement 2";
}
}
// On reporte le nombre de GHS 9605 en prod. (fg0) dans le simulé (fg1).
if ($return_code == "OK") {
$sql = "
UPDATE pmsi.$simulationTable
SET nb_9605_fg1 = nb_9605_fg0
;
UPDATE pmsi.$simulationTable
SET nb_9604_fg1 = nb_9604_fg0
;
";
$result = $conn->dbQuery($sql);
if (!$result) {
$return_code = "$sql";
$return_message = "Une erreur SQL a interrompu le traitement 3";
}
}
if ($return_code == "OK") {
$sql = "
DROP TABLE IF EXISTS w_tmp
;
CREATE TEMP TABLE w_tmp
(".$csvColumns[$y].")
;
";
$result = $conn->dbQuery($sql);
if (!$result) {
$return_code = "$sql";
$return_message = "Une erreur SQL a interrompu le traitement 4";
}
}
if ($return_code == "OK") {
$sql = "COPY w_tmp
FROM '$csvFile'
WITH DELIMITER AS ';'
CSV QUOTE AS '\"' ;";
$result = $conn->dbQuery($sql);
if (!$result) {
$return_code = "$sql";
$return_message = "Une erreur SQL a interrompu le traitement 5";
}
// Attention 05K12
$sql = "UPDATE w_tmp
SET ghs_fg1_code = 1808
FROM pmsi.v_rss_actes_1, pmsi.$simulationTable
WHERE $simulationTable.annee_sortie = w_tmp.annee_sortie
AND $simulationTable.no_rss = w_tmp.no_rss
AND $liste_id = $simulationTable.liste_id
AND w_tmp.ghm_fg1_code = '05K121'
AND w_tmp.ghs_fg1_code = 1707
AND acte_code = 'DENF003' AND activite_ccam = '1'
;
UPDATE w_tmp
SET ghs_fg1_code = 1809
FROM pmsi.v_rss_actes_1, pmsi.$simulationTable
WHERE $simulationTable.annee_sortie = w_tmp.annee_sortie
AND $simulationTable.no_rss = w_tmp.no_rss
AND $liste_id = $simulationTable.liste_id
AND w_tmp.ghm_fg1_code = '05K123'
AND w_tmp.ghs_fg1_code = 1708
AND acte_code = 'DENF003' AND activite_ccam = '1';
UPDATE w_tmp
SET ghs_fg1_code = 1810
FROM pmsi.v_rss_actes_1, pmsi.$simulationTable
WHERE $simulationTable.annee_sortie = w_tmp.annee_sortie
AND $simulationTable.no_rss = w_tmp.no_rss
AND $liste_id = $simulationTable.liste_id
AND w_tmp.ghm_fg1_code = '05K123'
AND w_tmp.ghs_fg1_code = 1709
AND acte_code = 'DENF003' AND activite_ccam = '1';
UPDATE w_tmp
SET ghs_fg1_code = 1812
FROM pmsi.v_rss_actes_1, pmsi.$simulationTable
WHERE $simulationTable.annee_sortie = w_tmp.annee_sortie
AND $simulationTable.no_rss = w_tmp.no_rss
AND $liste_id = $simulationTable.liste_id
AND w_tmp.ghm_fg1_code = '05K124'
AND w_tmp.ghs_fg1_code = 1710
AND acte_code = 'DENF003' AND activite_ccam = '1';
UPDATE w_tmp
SET ghs_fg1_code = 1813
FROM pmsi.v_rss_actes_1, pmsi.$simulationTable
WHERE $simulationTable.annee_sortie = w_tmp.annee_sortie
AND $simulationTable.no_rss = w_tmp.no_rss
AND $liste_id = $simulationTable.liste_id
AND w_tmp.ghm_fg1_code = '05K12T'
AND w_tmp.ghs_fg1_code = 1712
AND acte_code = 'DENF003' AND activite_ccam = '1';
";
$result = $conn->dbQuery($sql);
if (!$result) {
$return_code = "$sql";
$return_message = "Une erreur SQL a interrompu le traitement 6";
}
// Attention soins palliatifs
$sql = "
UPDATE w_tmp
SET ghs_fg1_code = t_ghs.code
FROM pmsi.$simulationTable
JOIN pmsi.t_ghs ON ghs_fg0_id = t_ghs.oid
WHERE 1=1
AND $simulationTable.annee_sortie = w_tmp.annee_sortie
AND $simulationTable.no_rss = w_tmp.no_rss
AND t_ghs.code IN (7991, 7992, 7993, 7994, 7267, 7281)
AND w_tmp.ghs_fg1_code IN (7991, 7992, 7993, 7994, 7267, 7281)
;
";
$result = $conn->dbQuery($sql);
if (!$result) {
$return_code = "$sql";
$return_message = "Une erreur SQL a interrompu le traitement 7";
}
}
if ($return_code == "OK") {
if ($typeEts != "2" && $typeEts != "3") {
$sql = "UPDATE pmsi.$simulationTable
SET
erreur = CASE WHEN w_tmp.erreur IS NOT NULL THEN substr(trim(w_tmp.erreur),1,255) ELSE '' END,
commentaire = CASE WHEN w_tmp.commentaire IS NOT NULL THEN substr(trim(w_tmp.commentaire),1,255) ELSE '' END,
ghm_fg1_code = w_tmp.ghm_fg1_code,
ghm_fg1_id = t_ghm.oid,
ghs_fg1_code = w_tmp.ghs_fg1_code,
ghs_fg1_id = t_ghs.oid,
ghs_fg1_tarif_ghs =
CASE
WHEN '$d1' >= t_ghs.date_debut_prive_1 AND '$d1' <= t_ghs.date_fin_prive_1 THEN t_ghs.tarif_ghs_prive_1
WHEN '$d1' >= t_ghs.date_debut_prive_2 AND '$d1' <= t_ghs.date_fin_prive_2 THEN t_ghs.tarif_ghs_prive_2
WHEN '$d1' >= t_ghs.date_debut_prive_3 AND '$d1' <= t_ghs.date_fin_prive_3 THEN t_ghs.tarif_ghs_prive_3
WHEN '$d1' >= t_ghs.date_debut_prive_4 AND '$d1' <= t_ghs.date_fin_prive_4 THEN t_ghs.tarif_ghs_prive_4
WHEN '$d1' >= t_ghs.date_debut_prive_5 AND '$d1' <= t_ghs.date_fin_prive_5 THEN t_ghs.tarif_ghs_prive_5
WHEN '$d1' >= t_ghs.date_debut_prive_6 AND '$d1' <= t_ghs.date_fin_prive_6 THEN t_ghs.tarif_ghs_prive_6
WHEN '$d1' >= t_ghs.date_debut_prive_7 AND '$d1' <= t_ghs.date_fin_prive_7 THEN t_ghs.tarif_ghs_prive_7
WHEN '$d1' >= t_ghs.date_debut_prive_8 AND '$d1' <= t_ghs.date_fin_prive_8 THEN t_ghs.tarif_ghs_prive_8
WHEN '$d1' >= t_ghs.date_debut_prive_9 AND '$d1' <= t_ghs.date_fin_prive_9 THEN t_ghs.tarif_ghs_prive_9
ELSE 0::numeric
END,
ghs_fg1_tarif_exh =
CASE
WHEN '$d1' >= t_ghs.date_debut_prive_1 AND '$d1' <= t_ghs.date_fin_prive_1 THEN t_ghs.tarif_exh_prive_1
WHEN '$d1' >= t_ghs.date_debut_prive_2 AND '$d1' <= t_ghs.date_fin_prive_2 THEN t_ghs.tarif_exh_prive_2
WHEN '$d1' >= t_ghs.date_debut_prive_3 AND '$d1' <= t_ghs.date_fin_prive_3 THEN t_ghs.tarif_exh_prive_3
WHEN '$d1' >= t_ghs.date_debut_prive_4 AND '$d1' <= t_ghs.date_fin_prive_4 THEN t_ghs.tarif_exh_prive_4
WHEN '$d1' >= t_ghs.date_debut_prive_5 AND '$d1' <= t_ghs.date_fin_prive_5 THEN t_ghs.tarif_exh_prive_5
WHEN '$d1' >= t_ghs.date_debut_prive_6 AND '$d1' <= t_ghs.date_fin_prive_6 THEN t_ghs.tarif_exh_prive_6
WHEN '$d1' >= t_ghs.date_debut_prive_7 AND '$d1' <= t_ghs.date_fin_prive_7 THEN t_ghs.tarif_exh_prive_7
WHEN '$d1' >= t_ghs.date_debut_prive_8 AND '$d1' <= t_ghs.date_fin_prive_8 THEN t_ghs.tarif_exh_prive_8
WHEN '$d1' >= t_ghs.date_debut_prive_9 AND '$d1' <= t_ghs.date_fin_prive_9 THEN t_ghs.tarif_exh_prive_9
ELSE 0::numeric
END,
ghs_fg1_tarif_exb =
CASE
WHEN '$d1' >= t_ghs.date_debut_prive_1 AND '$d1' <= t_ghs.date_fin_prive_1 THEN t_ghs.tarif_exb_prive_1
WHEN '$d1' >= t_ghs.date_debut_prive_2 AND '$d1' <= t_ghs.date_fin_prive_2 THEN t_ghs.tarif_exb_prive_2
WHEN '$d1' >= t_ghs.date_debut_prive_3 AND '$d1' <= t_ghs.date_fin_prive_3 THEN t_ghs.tarif_exb_prive_3
WHEN '$d1' >= t_ghs.date_debut_prive_4 AND '$d1' <= t_ghs.date_fin_prive_4 THEN t_ghs.tarif_exb_prive_4
WHEN '$d1' >= t_ghs.date_debut_prive_5 AND '$d1' <= t_ghs.date_fin_prive_5 THEN t_ghs.tarif_exb_prive_5
WHEN '$d1' >= t_ghs.date_debut_prive_6 AND '$d1' <= t_ghs.date_fin_prive_6 THEN t_ghs.tarif_exb_prive_6
WHEN '$d1' >= t_ghs.date_debut_prive_7 AND '$d1' <= t_ghs.date_fin_prive_7 THEN t_ghs.tarif_exb_prive_7
WHEN '$d1' >= t_ghs.date_debut_prive_8 AND '$d1' <= t_ghs.date_fin_prive_8 THEN t_ghs.tarif_exb_prive_8
WHEN '$d1' >= t_ghs.date_debut_prive_9 AND '$d1' <= t_ghs.date_fin_prive_9 THEN t_ghs.tarif_exb_prive_9
ELSE 0::numeric
END,
ghs_fg1_forfait_exb =
CASE
WHEN '$d1' >= t_ghs.date_debut_prive_1 AND '$d1' <= t_ghs.date_fin_prive_1 THEN t_ghs.forfait_exb_prive_1
WHEN '$d1' >= t_ghs.date_debut_prive_2 AND '$d1' <= t_ghs.date_fin_prive_2 THEN t_ghs.forfait_exb_prive_2
WHEN '$d1' >= t_ghs.date_debut_prive_3 AND '$d1' <= t_ghs.date_fin_prive_3 THEN t_ghs.forfait_exb_prive_3
WHEN '$d1' >= t_ghs.date_debut_prive_4 AND '$d1' <= t_ghs.date_fin_prive_4 THEN t_ghs.forfait_exb_prive_4
WHEN '$d1' >= t_ghs.date_debut_prive_5 AND '$d1' <= t_ghs.date_fin_prive_5 THEN t_ghs.forfait_exb_prive_5
WHEN '$d1' >= t_ghs.date_debut_prive_6 AND '$d1' <= t_ghs.date_fin_prive_6 THEN t_ghs.forfait_exb_prive_6
WHEN '$d1' >= t_ghs.date_debut_prive_7 AND '$d1' <= t_ghs.date_fin_prive_7 THEN t_ghs.forfait_exb_prive_7
WHEN '$d1' >= t_ghs.date_debut_prive_8 AND '$d1' <= t_ghs.date_fin_prive_8 THEN t_ghs.forfait_exb_prive_8
WHEN '$d1' >= t_ghs.date_debut_prive_9 AND '$d1' <= t_ghs.date_fin_prive_9 THEN t_ghs.forfait_exb_prive_9
ELSE 0::numeric
END,
ghs_fg1_borne_basse =
CASE
WHEN '$d1' >= t_ghs.date_debut_prive_1 AND '$d1' <= t_ghs.date_fin_prive_1 THEN t_ghs.borne_basse_prive_1
WHEN '$d1' >= t_ghs.date_debut_prive_2 AND '$d1' <= t_ghs.date_fin_prive_2 THEN t_ghs.borne_basse_prive_2
WHEN '$d1' >= t_ghs.date_debut_prive_3 AND '$d1' <= t_ghs.date_fin_prive_3 THEN t_ghs.borne_basse_prive_3
WHEN '$d1' >= t_ghs.date_debut_prive_4 AND '$d1' <= t_ghs.date_fin_prive_4 THEN t_ghs.borne_basse_prive_4
WHEN '$d1' >= t_ghs.date_debut_prive_5 AND '$d1' <= t_ghs.date_fin_prive_5 THEN t_ghs.borne_basse_prive_5
WHEN '$d1' >= t_ghs.date_debut_prive_6 AND '$d1' <= t_ghs.date_fin_prive_6 THEN t_ghs.borne_basse_prive_6
WHEN '$d1' >= t_ghs.date_debut_prive_7 AND '$d1' <= t_ghs.date_fin_prive_7 THEN t_ghs.borne_basse_prive_7
WHEN '$d1' >= t_ghs.date_debut_prive_8 AND '$d1' <= t_ghs.date_fin_prive_8 THEN t_ghs.borne_basse_prive_8
WHEN '$d1' >= t_ghs.date_debut_prive_9 AND '$d1' <= t_ghs.date_fin_prive_9 THEN t_ghs.borne_basse_prive_9
ELSE 0::numeric
END,
ghs_fg1_borne_haute =
CASE
WHEN '$d1' >= t_ghs.date_debut_prive_1 AND '$d1' <= t_ghs.date_fin_prive_1 THEN t_ghs.borne_haute_prive_1
WHEN '$d1' >= t_ghs.date_debut_prive_2 AND '$d1' <= t_ghs.date_fin_prive_2 THEN t_ghs.borne_haute_prive_2
WHEN '$d1' >= t_ghs.date_debut_prive_3 AND '$d1' <= t_ghs.date_fin_prive_3 THEN t_ghs.borne_haute_prive_3
WHEN '$d1' >= t_ghs.date_debut_prive_4 AND '$d1' <= t_ghs.date_fin_prive_4 THEN t_ghs.borne_haute_prive_4
WHEN '$d1' >= t_ghs.date_debut_prive_5 AND '$d1' <= t_ghs.date_fin_prive_5 THEN t_ghs.borne_haute_prive_5
WHEN '$d1' >= t_ghs.date_debut_prive_6 AND '$d1' <= t_ghs.date_fin_prive_6 THEN t_ghs.borne_haute_prive_6
WHEN '$d1' >= t_ghs.date_debut_prive_7 AND '$d1' <= t_ghs.date_fin_prive_7 THEN t_ghs.borne_haute_prive_7
WHEN '$d1' >= t_ghs.date_debut_prive_8 AND '$d1' <= t_ghs.date_fin_prive_8 THEN t_ghs.borne_haute_prive_8
WHEN '$d1' >= t_ghs.date_debut_prive_9 AND '$d1' <= t_ghs.date_fin_prive_9 THEN t_ghs.borne_haute_prive_9
ELSE 0::numeric
END,
nb_exb_fg1 = w_tmp.nb_exb_fg1,
nb_sej_exb_fg1 = CASE WHEN w_tmp.nb_exb_fg1 > 0 THEN 1 ELSE 0 END,
nb_exh_fg1 = CASE WHEN t_ghm.oid <> ghm_fg0_id THEN w_tmp.nb_exh_fg1 ELSE nb_exh_fg0 END,
tarif_9605_fg1 = (SELECT tarif_ghs
FROM base.t_ghs
JOIN base.t_ghs_tarifs ON t_ghs_tarifs.ghs_id = t_ghs.oid
WHERE 1=1
AND t_ghs.code = '9605'
AND t_ghs_tarifs.secteur = 1
AND '$d1'::date BETWEEN date_debut AND date_fin),
tarif_9604_fg1 = (SELECT tarif_ghs
FROM base.t_ghs
JOIN base.t_ghs_tarifs ON t_ghs_tarifs.ghs_id = t_ghs.oid
WHERE 1=1
AND t_ghs.code = '9604'
AND t_ghs_tarifs.secteur = 1
AND '$d1'::date BETWEEN date_debut AND date_fin)
FROM w_tmp, pmsi.t_ghm, pmsi.t_ghs
WHERE $simulationTable.annee_sortie = w_tmp.annee_sortie
AND $simulationTable.no_rss = w_tmp.no_rss
AND $simulationTable.liste_id = $liste_id
AND w_tmp.ghm_fg1_code = t_ghm.code
AND w_tmp.ghs_fg1_code = t_ghs.code;
";
$result = $conn->dbQuery($sql);
if (!$result) {
$return_code = "$sql";
$return_message = "Une erreur SQL a interrompu le traitement 8";
}
} else {
$sql = "UPDATE pmsi.$simulationTable
SET
erreur = CASE WHEN w_tmp.erreur IS NOT NULL THEN substr(trim(w_tmp.erreur),1,255) ELSE '' END,
commentaire = CASE WHEN w_tmp.commentaire IS NOT NULL THEN substr(trim(w_tmp.commentaire),1,255) ELSE '' END,
ghm_fg1_code = w_tmp.ghm_fg1_code,
ghm_fg1_id = t_ghm.oid,
ghs_fg1_code = w_tmp.ghs_fg1_code,
ghs_fg1_id = t_ghs.oid,
ghs_fg1_tarif_ghs =
CASE
WHEN '$d1' >= t_ghs.date_debut_public_1 AND '$d1' <= t_ghs.date_fin_public_1 THEN t_ghs.tarif_ghs_public_1
WHEN '$d1' >= t_ghs.date_debut_public_2 AND '$d1' <= t_ghs.date_fin_public_2 THEN t_ghs.tarif_ghs_public_2
WHEN '$d1' >= t_ghs.date_debut_public_3 AND '$d1' <= t_ghs.date_fin_public_3 THEN t_ghs.tarif_ghs_public_3
WHEN '$d1' >= t_ghs.date_debut_public_4 AND '$d1' <= t_ghs.date_fin_public_4 THEN t_ghs.tarif_ghs_public_4
WHEN '$d1' >= t_ghs.date_debut_public_5 AND '$d1' <= t_ghs.date_fin_public_5 THEN t_ghs.tarif_ghs_public_5
WHEN '$d1' >= t_ghs.date_debut_public_6 AND '$d1' <= t_ghs.date_fin_public_6 THEN t_ghs.tarif_ghs_public_6
WHEN '$d1' >= t_ghs.date_debut_public_7 AND '$d1' <= t_ghs.date_fin_public_7 THEN t_ghs.tarif_ghs_public_7
WHEN '$d1' >= t_ghs.date_debut_public_8 AND '$d1' <= t_ghs.date_fin_public_8 THEN t_ghs.tarif_ghs_public_8
WHEN '$d1' >= t_ghs.date_debut_public_9 AND '$d1' <= t_ghs.date_fin_public_9 THEN t_ghs.tarif_ghs_public_9
ELSE 0::numeric
END,
ghs_fg1_tarif_exh =
CASE
WHEN '$d1' >= t_ghs.date_debut_public_1 AND '$d1' <= t_ghs.date_fin_public_1 THEN t_ghs.tarif_exh_public_1
WHEN '$d1' >= t_ghs.date_debut_public_2 AND '$d1' <= t_ghs.date_fin_public_2 THEN t_ghs.tarif_exh_public_2
WHEN '$d1' >= t_ghs.date_debut_public_3 AND '$d1' <= t_ghs.date_fin_public_3 THEN t_ghs.tarif_exh_public_3
WHEN '$d1' >= t_ghs.date_debut_public_4 AND '$d1' <= t_ghs.date_fin_public_4 THEN t_ghs.tarif_exh_public_4
WHEN '$d1' >= t_ghs.date_debut_public_5 AND '$d1' <= t_ghs.date_fin_public_5 THEN t_ghs.tarif_exh_public_5
WHEN '$d1' >= t_ghs.date_debut_public_6 AND '$d1' <= t_ghs.date_fin_public_6 THEN t_ghs.tarif_exh_public_6
WHEN '$d1' >= t_ghs.date_debut_public_7 AND '$d1' <= t_ghs.date_fin_public_7 THEN t_ghs.tarif_exh_public_7
WHEN '$d1' >= t_ghs.date_debut_public_8 AND '$d1' <= t_ghs.date_fin_public_8 THEN t_ghs.tarif_exh_public_8
WHEN '$d1' >= t_ghs.date_debut_public_9 AND '$d1' <= t_ghs.date_fin_public_9 THEN t_ghs.tarif_exh_public_9
ELSE 0::numeric
END,
ghs_fg1_tarif_exb =
CASE
WHEN '$d1' >= t_ghs.date_debut_public_1 AND '$d1' <= t_ghs.date_fin_public_1 THEN t_ghs.tarif_exb_public_1
WHEN '$d1' >= t_ghs.date_debut_public_2 AND '$d1' <= t_ghs.date_fin_public_2 THEN t_ghs.tarif_exb_public_2
WHEN '$d1' >= t_ghs.date_debut_public_3 AND '$d1' <= t_ghs.date_fin_public_3 THEN t_ghs.tarif_exb_public_3
WHEN '$d1' >= t_ghs.date_debut_public_4 AND '$d1' <= t_ghs.date_fin_public_4 THEN t_ghs.tarif_exb_public_4
WHEN '$d1' >= t_ghs.date_debut_public_5 AND '$d1' <= t_ghs.date_fin_public_5 THEN t_ghs.tarif_exb_public_5
WHEN '$d1' >= t_ghs.date_debut_public_6 AND '$d1' <= t_ghs.date_fin_public_6 THEN t_ghs.tarif_exb_public_6
WHEN '$d1' >= t_ghs.date_debut_public_7 AND '$d1' <= t_ghs.date_fin_public_7 THEN t_ghs.tarif_exb_public_7
WHEN '$d1' >= t_ghs.date_debut_public_8 AND '$d1' <= t_ghs.date_fin_public_8 THEN t_ghs.tarif_exb_public_8
WHEN '$d1' >= t_ghs.date_debut_public_9 AND '$d1' <= t_ghs.date_fin_public_9 THEN t_ghs.tarif_exb_public_9
ELSE 0::numeric
END,
ghs_fg1_forfait_exb =
CASE
WHEN '$d1' >= t_ghs.date_debut_public_1 AND '$d1' <= t_ghs.date_fin_public_1 THEN t_ghs.forfait_exb_public_1
WHEN '$d1' >= t_ghs.date_debut_public_2 AND '$d1' <= t_ghs.date_fin_public_2 THEN t_ghs.forfait_exb_public_2
WHEN '$d1' >= t_ghs.date_debut_public_3 AND '$d1' <= t_ghs.date_fin_public_3 THEN t_ghs.forfait_exb_public_3
WHEN '$d1' >= t_ghs.date_debut_public_4 AND '$d1' <= t_ghs.date_fin_public_4 THEN t_ghs.forfait_exb_public_4
WHEN '$d1' >= t_ghs.date_debut_public_5 AND '$d1' <= t_ghs.date_fin_public_5 THEN t_ghs.forfait_exb_public_5
WHEN '$d1' >= t_ghs.date_debut_public_6 AND '$d1' <= t_ghs.date_fin_public_6 THEN t_ghs.forfait_exb_public_6
WHEN '$d1' >= t_ghs.date_debut_public_7 AND '$d1' <= t_ghs.date_fin_public_7 THEN t_ghs.forfait_exb_public_7
WHEN '$d1' >= t_ghs.date_debut_public_8 AND '$d1' <= t_ghs.date_fin_public_8 THEN t_ghs.forfait_exb_public_8
WHEN '$d1' >= t_ghs.date_debut_public_9 AND '$d1' <= t_ghs.date_fin_public_9 THEN t_ghs.forfait_exb_public_9
ELSE 0::numeric
END,
ghs_fg1_borne_basse =
CASE
WHEN '$d1' >= t_ghs.date_debut_public_1 AND '$d1' <= t_ghs.date_fin_public_1 THEN t_ghs.borne_basse_public_1
WHEN '$d1' >= t_ghs.date_debut_public_2 AND '$d1' <= t_ghs.date_fin_public_2 THEN t_ghs.borne_basse_public_2
WHEN '$d1' >= t_ghs.date_debut_public_3 AND '$d1' <= t_ghs.date_fin_public_3 THEN t_ghs.borne_basse_public_3
WHEN '$d1' >= t_ghs.date_debut_public_4 AND '$d1' <= t_ghs.date_fin_public_4 THEN t_ghs.borne_basse_public_4
WHEN '$d1' >= t_ghs.date_debut_public_5 AND '$d1' <= t_ghs.date_fin_public_5 THEN t_ghs.borne_basse_public_5
WHEN '$d1' >= t_ghs.date_debut_public_6 AND '$d1' <= t_ghs.date_fin_public_6 THEN t_ghs.borne_basse_public_6
WHEN '$d1' >= t_ghs.date_debut_public_7 AND '$d1' <= t_ghs.date_fin_public_7 THEN t_ghs.borne_basse_public_7
WHEN '$d1' >= t_ghs.date_debut_public_8 AND '$d1' <= t_ghs.date_fin_public_8 THEN t_ghs.borne_basse_public_8
WHEN '$d1' >= t_ghs.date_debut_public_9 AND '$d1' <= t_ghs.date_fin_public_9 THEN t_ghs.borne_basse_public_9
ELSE 0::numeric
END,
ghs_fg1_borne_haute =
CASE
WHEN '$d1' >= t_ghs.date_debut_public_1 AND '$d1' <= t_ghs.date_fin_public_1 THEN t_ghs.borne_haute_public_1
WHEN '$d1' >= t_ghs.date_debut_public_2 AND '$d1' <= t_ghs.date_fin_public_2 THEN t_ghs.borne_haute_public_2
WHEN '$d1' >= t_ghs.date_debut_public_3 AND '$d1' <= t_ghs.date_fin_public_3 THEN t_ghs.borne_haute_public_3
WHEN '$d1' >= t_ghs.date_debut_public_4 AND '$d1' <= t_ghs.date_fin_public_4 THEN t_ghs.borne_haute_public_4
WHEN '$d1' >= t_ghs.date_debut_public_5 AND '$d1' <= t_ghs.date_fin_public_5 THEN t_ghs.borne_haute_public_5
WHEN '$d1' >= t_ghs.date_debut_public_6 AND '$d1' <= t_ghs.date_fin_public_6 THEN t_ghs.borne_haute_public_6
WHEN '$d1' >= t_ghs.date_debut_public_7 AND '$d1' <= t_ghs.date_fin_public_7 THEN t_ghs.borne_haute_public_7
WHEN '$d1' >= t_ghs.date_debut_public_8 AND '$d1' <= t_ghs.date_fin_public_8 THEN t_ghs.borne_haute_public_8
WHEN '$d1' >= t_ghs.date_debut_public_9 AND '$d1' <= t_ghs.date_fin_public_9 THEN t_ghs.borne_haute_public_9
ELSE 0::numeric
END,
nb_exb_fg1 = w_tmp.nb_exb_fg1,
nb_sej_exb_fg1 = CASE WHEN w_tmp.nb_exb_fg1 > 0 THEN 1 ELSE 0 END,
nb_exh_fg1 = w_tmp.nb_exh_fg1,
tarif_9605_fg1 = (SELECT tarif_ghs
FROM base.t_ghs
JOIN base.t_ghs_tarifs ON t_ghs_tarifs.ghs_id = t_ghs.oid
WHERE 1=1
AND t_ghs.code = '9605'
AND t_ghs_tarifs.secteur = 1
AND '$d5'::date BETWEEN date_debut AND date_fin),
tarif_9604_fg1 = (SELECT tarif_ghs
FROM base.t_ghs
JOIN base.t_ghs_tarifs ON t_ghs_tarifs.ghs_id = t_ghs.oid
WHERE 1=1
AND t_ghs.code = '9604'
AND t_ghs_tarifs.secteur = 1
AND '$d5'::date BETWEEN date_debut AND date_fin)
FROM w_tmp, pmsi.t_ghm, pmsi.t_ghs
WHERE $simulationTable.annee_sortie = w_tmp.annee_sortie
AND $simulationTable.no_rss = w_tmp.no_rss
AND $simulationTable.liste_id = $liste_id
AND w_tmp.ghm_fg1_code = t_ghm.code
AND w_tmp.ghs_fg1_code = t_ghs.code
";
$result = $conn->dbQuery($sql);
if (!$result) {
$return_code = "$sql";
$return_message = "Une erreur SQL a interrompu le traitement 9";
}
}
}
// Calcul des montants simulés.
if ($return_code == "OK") {
$sql = "
UPDATE pmsi.$simulationTable
SET
montant_ghs_theorique_fg1 = round(
ghs_fg1_tarif_ghs
* CASE WHEN p_rss.nb_seances <= 1 THEN 1 ELSE p_rss.nb_seances END
* coefficient_mco_fg1,2
)
+ round(tarif_9605_fg1 * nb_9605_fg1 * coefficient_mco_fg1,2)
+ round(tarif_9604_fg1 * nb_9604_fg1 * coefficient_mco_fg1,2),
montant_exh_fg1 = round(ghs_fg1_tarif_exh * nb_exh_fg1 * coefficient_mco_fg1,2)
FROM pmsi.p_rss
WHERE 1=1
AND p_rss.oid = $simulationTable.rss_id
;
";
$result = $conn->dbQuery($sql);
if (!$result) {
$return_code = "$sql";
$return_message = "Une erreur SQL a interrompu le traitement 10";
}
}
if ($return_code == "OK") {
$sql = "UPDATE pmsi.$simulationTable
SET montant_exb_fg1 =
CASE WHEN ghs_fg1_forfait_exb > 0 THEN 0 - round(ghs_fg1_forfait_exb * coefficient_mco_fg1,2)
ELSE 0 - round(nb_exb_fg1 * ghs_fg1_tarif_exb * coefficient_mco_fg1,2) END
WHERE nb_exb_fg1 > 0;";
$result = $conn->dbQuery($sql);
if (!$result) {
$return_code = "$sql";
$return_message = "Une erreur SQL a interrompu le traitement 11";
}
}
// Coefficient prodentiel
if ($return_code == "OK") {
$sql = "UPDATE pmsi.$simulationTable
SET montant_exb_fg1 = round( montant_exb_fg1 * 0.9965),
montant_exh_fg1 = round( montant_exh_fg1 * 0.9965),
montant_ghs_theorique_fg1 = round(montant_ghs_theorique_fg1 * 0.9965);";
$result = $conn->dbQuery($sql);
if (!$result) {
$return_code = "$sql";
$return_message = "Une erreur SQL a interrompu le traitement 11";
}
$sql = "UPDATE pmsi.$simulationTable
SET montant_exb_fg1 = montant_exb_fg0,
montant_exh_fg1 = montant_exh_fg0,
montant_ghs_theorique_fg1 = montant_ghs_theorique_fg0
WHERE ghm_fg1_id = ghm_fg0_id;";
$result = $conn->dbQuery($sql);
if (!$result) {
$return_code = "$sql";
$return_message = "Une erreur SQL a interrompu le traitement 11";
}
$sql = "UPDATE pmsi.$simulationTable
SET montant_exb_fg1 = montant_exb_fg0,
montant_exh_fg1 = montant_exh_fg0,
montant_ghs_theorique_fg1 = montant_ghs_theorique_fg0
WHERE ghm_fg1_id = 0 OR erreur <> '';";
$result = $conn->dbQuery($sql);
if (!$result) {
$return_code = "$sql";
$return_message = "Une erreur SQL a interrompu le traitement 11";
}
}
if ($return_code == "OK") {
$sql = "UPDATE pmsi.$simulationTable
SET erreur = 'RSS en double'
WHERE no_rss IN (SELECT no_rss FROM pmsi.$simulationTable WHERE liste_id = $liste_id GROUP BY 1 HAVING count(*) > 1);";
$result = $conn->dbQuery($sql);
}
// RSS significatifs
if ($return_code == "OK") {
$sql = "
UPDATE pmsi.p_impact_diagnostics
SET ok_diag = subview.ok_diag,
diags_enleves = subview.diags_enleves
FROM
(
SELECT p_impact_diagnostics.liste_id, p_impact_diagnostics.rss_id,
MAX(CASE WHEN t_listes_contenu.liste_id IS NOT NULL THEN '1' ELSE '0' END) AS ok_diag,
base.cti_group_concat(DISTINCT CASE WHEN t_listes_contenu.liste_id IS NOT NULL THEN t_diagnostics.code ELSE NULL END) AS diags_enleves
FROM pmsi.p_impact_diagnostics
LEFT JOIN pmsi.p_rss_diagnostics ON p_rss_diagnostics.rss_id = p_impact_diagnostics.rss_id
LEFT JOIN pmsi.t_diagnostics ON diagnostic_id = t_diagnostics.oid
LEFT JOIN pmsi.t_listes_contenu ON p_rss_diagnostics.diagnostic_id = t_listes_contenu.to_id AND p_impact_diagnostics.liste_id = t_listes_contenu.liste_id
GROUP BY 1,2
) subview
WHERE p_impact_diagnostics.liste_id = subview.liste_id AND
p_impact_diagnostics.rss_id = subview.rss_id AND
(p_impact_diagnostics.ok_diag IS DISTINCT FROM subview.ok_diag OR
p_impact_diagnostics.diags_enleves IS DISTINCT FROM subview.diags_enleves );
";
$result = $conn->dbQuery($sql);
if (!$result) {
$return_code = "$sql";
$return_message = "Une erreur SQL a interrompu le traitement 10";
}
}
/* if ($return_code == "OK") {
$sql = "SELECT count(*) as count FROM pmsi.$simulationTable WHERE est_regroupe = '1' ";
$count = 0;
$result = $conn->queryFetchAllAssoc($sql);
if ($result != false) {
$record = $database->nextRecordInto();
if ($record != FALSE) {
$count = $record[0] + 0;
}
}
if ($count > 0) {
$return_message = filesize($csvFile) . " octets chargés dans " . $csvFile . ", $count dossiers regroupés";
} else {
$return_code = "$sql";
$return_message = filesize($csvFile) . " octets chargés dans " . $csvFile . ", mais aucun dossier regroupé";
}
}*/
echo "$return_code $return_message";
// Nettoyage du cache PMSI MCO.
cleanAllCache("iCTI_pmsi");
}
//functions utiles
function extract_um($d1,$d5) {
global $conn;
global $tmp_RSSoutfile;
$tmp_RSSouthandle = fopen($tmp_RSSoutfile, 'a');
fwrite($tmp_RSSouthandle, "TYPEETS=".Environnement::getTypeets()."\r\n");
$sql = "SELECT
'UNITEMEDIC' ||
rpad(trim(code), 4, ' ') ||
'".Environnement::getFiness()."' ||
rpad(trim(type_autorisation), 3, ' ') ||
to_char(date_effet_autorisation, 'DDMMYYYY') ||
lpad(nb_lits, 3, '0') ||
mode_hospitalisation
FROM pmsi.t_unites_medicales
WHERE 1=1
AND oid > 0
AND trim(code) <> ''
AND trim(type_autorisation) != ''
AND oid IN (
SELECT unite_medicale_id
FROM pmsi.p_rss
JOIN pmsi.p_rss_rum ON p_rss_rum.rss_id = p_rss.oid
WHERE p_rss.date_sortie >= '$d1'
AND p_rss.date_sortie < '$d5'
GROUP BY 1)
";
foreach($conn->queryFetchAllNum($sql) as $data) fwrite($tmp_RSSouthandle, "$data[0]\r\n");
fclose($tmp_RSSouthandle);
}
function extract_rss($import_id,$year) {
global $conn;
global $tmp_path;
// Restauration fichier
$tmp_RSSinfile = $tmp_path . "/rss_" . $year . "_in.txt";
if (file_exists($tmp_RSSinfile)) {
unlink($tmp_RSSinfile);
}
$tmp_RSSinfileZip = $tmp_path . "/rss_" . $year . "_in.zip";
if (file_exists($tmp_RSSinfileZip)) {
unlink($tmp_RSSinfileZip);
}
$qrss = FALSE;
$sql = "SELECT data FROM pmsi.p_imports_data
WHERE import_id = $import_id AND data_type = 'RSS'
ORDER BY data_num ";
foreach($conn->queryFetchAllNum($sql) as $data) {
$handle = fopen($tmp_RSSinfile, 'a');
fwrite($handle, uncompress(pg_unescape_bytea($data[0])));
fclose($handle);
$qrss = TRUE;
}
// pas de RSS, aller dans IN.ZIP
if ($qrss == FALSE) {
$sql = "SELECT data FROM pmsi.p_imports_data
WHERE import_id = $import_id AND data_type = 'ZIN'
ORDER BY data_num ";
foreach($conn->queryFetchAllNum($sql) as $data) {
$handle = fopen($tmp_RSSinfileZip, 'a');
fwrite($handle, uncompress(pg_unescape_bytea($data[0])));
fclose($handle);
}
if (file_exists($tmp_RSSinfileZip)) {
$zip = zip_open(realpath($tmp_RSSinfileZip));
if ($zip) {
while ($zip_entry = zip_read($zip)) {
if (zip_entry_open($zip, $zip_entry)) {
$filename = trim(zip_entry_name($zip_entry));
$filesuffix = substr($filename, strlen($filename) - 7, 7);
if ($filesuffix == "rss.txt") {
$buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
file_put_contents($tmp_RSSinfile, $buf);
}
zip_entry_close($zip_entry);
}
}
zip_close($zip);
}
@unlink($tmp_RSSinfileZip);
}
}
}
// traitement texte pour elenver diagnostics choisi
function filterDiag($diag_code_list,$year) {
global $tmp_path;
global $tmp_RSSoutfile;
global $y;
// préparation fichier
// Premier passage, RSS à extraire (>= $d1)
// rss à traiter
$rss_array = array();
$no_ligne = 0;
$time_3103 = mktime(0, 0, 0, 03, 31, $y);
$tmp_RSSinfile = $tmp_path . "/rss_" . $y . "_in.txt";
$tmp_RSSinhandle = @fopen($tmp_RSSinfile, "r");
$tmp_RSSouthandle = fopen($tmp_RSSoutfile, "a");
if ($tmp_RSSinhandle) {
while (!feof($tmp_RSSinhandle)) {
$buffer = fgets($tmp_RSSinhandle, 10240);
$no_ligne++;
if (trim($buffer) != "" && $no_ligne < 1000000000000000) {
$no_rss = get_num(trim(substr($buffer, 27, 20)));
$cmd_code = trim(substr($buffer, 3, 2));
$rss_array[$no_rss] = "KO";
if ($cmd_code != "" && $cmd_code != "90" && $cmd_code != "00") {
if (substr($buffer, 100, 1) != "0" || substr($buffer, 120, 1)) {
// Le format possible est 016 UNIQUEMENT pour les années de mars à décembre
// et 2012 de janvier à février.
$RUMversionFormat = substr($buffer, 24, 3);
$RUMannee = substr($buffer, 106, 4);
$RUMmois = substr($buffer, 104, 2);
if (substr($RUMannee,0,2) == "20" and (int)substr($RUMversionFormat,1,2) >= 16 ) {
if ($RUMannee == $y && $RUMmois >= '03' && $RUMmois <= '12') $rss_array[$no_rss] = "OK";
if ($RUMannee == ($y+1) && $RUMmois >= '01' && $RUMmois <= '02') $rss_array[$no_rss] = "OK";
}
}
}
}
}
}
fclose($tmp_RSSinhandle);
//echo "\r\n" . date("d/m/Y H:i:s") . "\t" . "FILTE" . "\t" . "Filtrage diagnostics ".$diag_code_list;
$no_ligne = 0;
$tmp_RSSinhandle = @fopen($tmp_RSSinfile, "r");
if ($tmp_RSSinhandle) {
while (!feof($tmp_RSSinhandle)) {
$buffer = fgets($tmp_RSSinhandle, 10240);
$no_ligne++;
if (trim($buffer) != "" && $no_ligne < 1000000000000000) {
$no_rss = get_num(trim(substr($buffer, 27, 20)));
if ($rss_array[$no_rss] == "OK") {
$no_rss_out = $year . substr("000000000000000000000" . $no_rss, -16, 16);
$buffer = substr_replace($buffer, $no_rss_out, 27, 20);
$codepost = substr($buffer, 112, 2) . "000";
$buffer = substr_replace($buffer, $codepost, 112, 5);
$nb_diags = (int)(substr($buffer, 133, 2));
for ($i=0 ; $i < $nb_diags ; $i++) {
if(in_array(trim(substr($buffer,192 + ($i * 8),8)) ,$diag_code_list)) {
$nb_diags--;
$buffer = substr_replace($buffer, ($nb_diags < 10 ? '0'.$nb_diags : $nb_diags) , 133 , 2);
$buffer = substr_replace($buffer,'',192 + ($i * 8),8);
$changed = true;
}
}
fwrite($tmp_RSSouthandle, $buffer);
}
}
}
fclose($tmp_RSSouthandle);
fclose($tmp_RSSinhandle);
}
}
function get_num($value, $defaultValue = 0) {
if (!is_numeric($value)) {
return $defaultValue;
}
return $value + 0;
}
//get ghm for grouping function
function get_ghm($from_code) {
global $conn;
global $ghms_array;
global $ok_ghms_array;
$texte = "";
if ($from_code == "") {
return $texte;
}
if ($ok_ghms_array !== TRUE) {
$ghms_array = array();
foreach($conn->queryFetchAllAssoc("SELECT code, texte FROM pmsi.t_ghm ") as $record) {
$code = trim($record["code"]);
$texte = $record["texte"];
$ghms_array[$code] = $texte;
}
$ok_ghms_array = TRUE;
}
$texte = "";
if ($ok_ghms_array === TRUE) {
$texte = @$ghms_array[$from_code];
}
return $texte;
}
//get error for grouping function
function get_err($from_code) {
global $workDir;
global $errs_array;
global $ok_errs_array;
$texte = "";
if ($from_code == "") {
return $texte;
}
if ($ok_errs_array !== TRUE) {
$errs_array = array();
$err_handle = fopen($workDir ."/pgm/fg/LIB/LIBERRFG.TXT", "r");
while (($data = fgetcsv($err_handle, 1000, "|")) !== FALSE) {
$code = substr(trim($data[0]), 1);
$texte = trim($data[0]) . " " . $data[1];
$errs_array[$code] = $texte;
}
fclose($err_handle);
$ok_errs_array = TRUE;
}
$texte = $from_code;
if ($ok_errs_array === TRUE) {
$texte = @$errs_array[$from_code];
}
return $texte;
}
?>