FG_YEAR) { $fg0FileExt = "_" . FG_YEAR . "VS" . (FG_YEAR_RSS-1) . "_" . strtoupper(FG_VERSION) . $extCurrent; // Non Groupé } $fg1FileExt = "_" . strtoupper(FG_VERSION) . "." . strtoupper(FG_VERSION); // Groupé // Définition des fichiers // $fileFG12 = $_POST['file']; correspond au fichier de base non groupe -> support pour récupérer le nom de fichier $manual_file = "_MANUEL"; if (isset($fileFG12)) { $fileFG13 = substr($fileFG12, 0, strlen($fileFG12) - strlen($fg1FileExt)) . $fg1FileExt; $manual_file = $fileFG13 . "_MANUEL"; } // Calcul des dates clés : 1er mars => 31 déc. => 1 janv. => 28/29 fév. $d1 = (FG_YEAR_RSS - 1) . '-03-01'; $d2 = (FG_YEAR_RSS - 1) . '-12-31'; $d3 = FG_YEAR_RSS . '-01-01'; $d4 = FG_YEAR_RSS . '-02-' . date('d', mktime(0, 0, 0, 3, 0, FG_YEAR_RSS)); $d5 = FG_YEAR . '-03-01'; // Tables temporaire et de simulation $tempTableFG = "w_simulation_" . FG_VERSION; $simulationTableFG = "p_simulation_" . FG_VERSION; $tempTableLPP = "w_lpp_" . FG_VERSION; $tempTableUCD = "w_ucd_" . FG_VERSION; $tempTableSuppl = "w_simulation_suppl_" . FG_VERSION; $environmentVars=array(); $environmentVars["DATE_1"] = $d1; $environmentVars["DATE_2"] = $d2; $environmentVars["DATE_3"] = $d3; $environmentVars["DATE_4"] = $d4; $environmentVars["DATE_5"] = $d5; $environmentVars["tempTableFG"] = $tempTableFG; $environmentVars["simulationTableFG"] = $simulationTableFG; $environmentVars["tempTableLPP"] = $tempTableLPP; $environmentVars["tempTableUCD"] = $tempTableUCD; $environmentVars["FG_YEAR"] = FG_YEAR; $environmentVars["FG_YEAR_RSS"] = FG_YEAR_RSS; $environmentVars["typeEts"] = $typeEts; $environmentVars["tempTableSuppl"] = $tempTableSuppl; $httpString = ""; $httpString .= "\n"; $return_code = "OK"; $return_message = ""; $return_warning = ""; $return_complement = ""; $return_complement_v1 = ""; $return_complement_v2 = ""; $return_complement_v3 = ""; $httpCTISante = new HttpCTISante(); $_finess = utf8_encode($finess); $_serverName = utf8_encode($serverName); $_serverName = strtoupper($_serverName); $_serverName = str_replace("-", "", $_serverName); $_serverName = str_replace("_", "", $_serverName); $_serverName = str_replace(".", "", $_serverName); $tmp_path = rootDir() . "temp"; $remote_file = "$_finess" . "_" . "$_serverName" . $fg0FileExt; $local_file = $tmp_path . "/" . $remote_file; $headerFG12 = utf8_encode( "$_finess" . "_" . "$_serverName" ); if (FG_YEAR_RSS <> FG_YEAR) { $headerFG12 = utf8_encode( "$_finess" . "_" . "$_serverName" . "_" . FG_YEAR . "VS" . (FG_YEAR_RSS-1) ); } $http_connect = HttpFactory::createInstance(); $url = $siteCTI . "/" . $CTISantePHP ; // Connexion base de données. $database = new Database("iCTI"); // Connexion iCTI $iCTI_connexion = Database2Factory::getInstance(Environnement::PROVIDER_CTI); // Selon la commande envoyé depuis le swf action: switch ($operation) { case kill_all: $to_operation = "kill_all"; $content = $httpCTISante->get_streamdata($CTISantePHP . "?header=$headerFG12&operation=$to_operation"); $contentNode = @simplexml_load_string($content); if ($contentNode) { if ($contentNode["returnCode"] != "OK") { $return_code = "KO"; $return_message = "Erreur lors du ménage http http (1) " . $contentNode["returnMessage"]; } } else { $return_code = "KO"; $return_message = "Erreur lors du ménage http http (2) " . $content; } if ($return_code == "OK") { $return_message = $contentNode["returnSize"] . " fichier(s) supprimé(s)"; } break; case get_list: $messages = array(); // Controle GHS $sqlcmd = "select count(*) from pmsi.t_ghs where '$d5'::date IN (date_debut_prive_1, date_debut_prive_2,date_debut_prive_3,date_debut_prive_4,date_debut_prive_5,date_debut_prive_6,date_debut_prive_7,date_debut_prive_8,date_debut_prive_9)"; $result = $database->exec($sqlcmd); if ($result !== false) { $record = $database->nextRecordInto(); if ($record !== false) { if ($record[0] == 0) { $tmpDate = new DateTime($d5); $messages[] = "Pas de GHS daté du " . $tmpDate->format('d/m/Y') . ".\rVous devriez actualiser les tables PMSI."; } } } // Traitement des messages d'avertissement. $return_warning = (count($messages) > 0 ? 'ATTENTION' . PHP_EOL : '') . implode(PHP_EOL, $messages); // recuperation liste $params = array('header'=>$headerFG12, 'operation'=>"get_list", 'FG_YEAR'=>"$fg_year", 'PMSI_TYPE'=>"MCO" ); $returnContentNode = url_request($http_connect, $url ,$params, "Erreur lors de l'initialisation de la liste " , $headerFG12, '', "get_list"); if ($returnContentNode['return_code'] == 'OK') { $contentNode = $returnContentNode['return_content']; foreach ($contentNode->FILE as $fileNode) { $httpString .= "\n" . $fileNode->asXML(); } } break; case send_file: // Vérification présence d'imports sur année N et N-1 et récupére les id $result = getLastImports($database, $d1); // Si on a des imports alors on va recuperer les fichiers RSS des differents import, les compiler pour les transformer partiellement et enfin envoye sur le servuer pour la suite envoi groupeur if ($result['return_code'] == "OK" ) { $tmp_RSSoutfile = $tmp_path . "/rss_out.txt"; if (file_exists($tmp_RSSoutfile)){ unlink($tmp_RSSoutfile); } // Unites medicales extract_um(); // récupére les rss les tarnsforme et les ecrits dans un nouveau fichier globalise pour tous les imports disponibles foreach ($result as $import => $value){ switch ($import ){ CASE 'import_id_N_moins_1_editeur_1' : CASE 'import_id_N_moins_1_editeur_2': $year_import = FG_YEAR_RSS - 1; break ; CASE 'import_id_N_editeur_1' : CASE 'import_id_N_editeur_2': $year_import = FG_YEAR_RSS; break; default : $year_import = FG_YEAR_RSS; break; } $tmp_RSSinfile = ''; if ($import != 'return_code'){ if ($value > 0){ $tmp_RSSinfile = extract_rss($value, $year_import); transform_extract_rss( $tmp_RSSinfile, $tmp_RSSoutfile, $year_import ); } } } // envoi vers le serveur $dataFG12 = compress64(file_get_contents($tmp_RSSoutfile)); file_put_contents($local_file, $dataFG12); $fileFG12 = utf8_encode($remote_file); $fileFG12_size = filesize($local_file); $to_operation = "send_init"; $start = 0; while ($start <= $fileFG12_size) { $dataFG12_5000 = file_get_contents($local_file, FALSE, NULL, $start, BUFFER_SIZE); $params = array( 'file' => $fileFG12, 'data' => $dataFG12_5000, 'operation' => $to_operation ); $url = $siteCTI . "/" . $CTISantePHP ; $content = $http_connect->get($url, $params); $contentNode = @simplexml_load_string($content); if ($contentNode) { if ($contentNode["returnCode"] != "OK") { $return_code = "KO"; $return_message = "Erreur lors de l'envoi http (1)"; break; } } else { $return_code = "KO"; $return_message = "Erreur lors de l'envoi http (2) " . $content; break; } $start += BUFFER_SIZE; $to_operation = "send_append"; } if ($return_code == "OK") { $params = array( 'file' => $fileFG12, 'operation' => "send_end" ); $url = $siteCTI . "/" . $CTISantePHP ; $content = $http_connect->get($url, $params); $contentNode = @simplexml_load_string($content); if ($contentNode) { if ($contentNode["returnCode"] != "OK") { $return_code = "KO"; $return_message = "Erreur lors de la validation http (1)"; } else { $return_message = $contentNode["returnSize"] . " octets envoyés par HTTP dans fichier " . $remote_file; } } else { $return_code = "KO"; $return_message = "Erreur lors de la validation http (2) " . $content; } } if ($return_code == "KO") { $return_complement = $httpCTISante->site . '/' . $CTISantePHP; $return_complement_v1 = $fileFG12; $return_complement_v2 = $dataFG12; $return_complement_v3 = "send_oneshot"; } unlink($local_file); } else { $return_code = $result['return_code']; $return_message = $result['return_message']; } break; case get_file: //fileFG13 est le fichier regroupe par le nouveau groupeur if (file_exists($tmp_path . "/" . $manual_file)) { if (file_exists($tmp_path . "/" . $fileFG13)) { unlink($tmp_path . "/" . $fileFG13); } $dataFG13 = uncompress(utf8_decode(file_get_contents($tmp_path . "/" . $manual_file))); file_put_contents($tmp_path . "/" . $fileFG13, $dataFG13); $return_message = strlen($dataFG13) . " octets chargés dans " . $fileFG13; break; } else { // On recupere le nom du fichier groupé sur le Web le plus récent. // recuperation liste $params = array('header' => $headerFG12, 'operation' => "get_list", 'FG_YEAR' => "$fg_year", 'PMSI_TYPE' => "MCO" ); $content = $http_connect->get($url, $params); $contentNode = simplexml_load_string($content); if ($contentNode) { if ($contentNode["returnCode"] != "OK") { $return_code = "KO"; $return_message = "Erreur lors de l'initialisation de la liste " . $contentNode["returnMessage"]; break; } else { foreach ($contentNode->FILE as $fileNode) { $tmpAtt = (string)$fileNode['fg1_name']; if ($fileFG12 < $tmpAtt) { $fileFG12 = $tmpAtt; } } } } else { $return_code = "KO"; $return_message = "Erreur HTTP lors de l'initialisation de la liste " . $content; $return_complement = $httpCTISante->site . '/' . $CTISantePHP; $return_complement_v1 = $headerFG12; $return_complement_v2 = ""; $return_complement_v3 = "get_list"; break; } $fileFG13 = substr($fileFG12, 0, strlen($fileFG12) - strlen($fg1FileExt)) . $fg1FileExt; // On le télécharge unlink($tmp_path . "/" . $fileFG13); if ($fileFG13 != "") { $params = array( 'file' => $fileFG13 , 'operation' => "get_file" , 'FG_YEAR' => "$fg_year", 'PMSI_TYPE' => "MCO" ); $returnContentNode = url_request($http_connect, $url ,$params, "Erreur lors de la récupération " , $fileFG13, '', "get_file"); if ($returnContentNode['return_code'] == 'OK') { $contentNode = $returnContentNode['return_content']; $dataFG13 = uncompress(utf8_decode($contentNode["returnData"])); file_put_contents($tmp_path . "/" . $fileFG13, $dataFG13); $return_code = "OK"; $return_message = strlen($dataFG13) . " octets chargés par HTTP dans " . $fileFG13; } } else { $return_code = "KO"; $return_message = "Pas de fichier regroupé disponible" . $content; $return_complement = $httpCTISante->site . '/' . $CTISantePHP; $return_complement_v1 = $fileFG13; $return_complement_v2 = ""; $return_complement_v3 = "get_list"; } } break; case trt_file: if ($fileFG13 == "") { // recuperation liste $params = array('header' => $headerFG12, 'operation' => "get_list", 'FG_YEAR' => "$fg_year", 'PMSI_TYPE' => "MCO" ); $content = $http_connect->get($url, $params); $contentNode = simplexml_load_string($content); if ($contentNode) { if ($contentNode["returnCode"] != "OK") { $return_code = "KO"; $return_message = "Erreur lors de l'initialisation de la liste " . $contentNode["returnMessage"]; break; } else { foreach ($contentNode->FILE as $fileNode) { $tmpAtt = (string)$fileNode['fg1_name']; if ($fileFG12 < $tmpAtt) { $fileFG12 = $tmpAtt; } } } } else { $return_code = "KO"; $return_message = "Erreur HTTP lors de l'initialisation de la liste " . $content; $return_complement = $httpCTISante->site . '/' . $CTISantePHP; $return_complement_v1 = $headerFG12; $return_complement_v2 = ""; $return_complement_v3 = "get_list"; break; } $fileFG13 = substr($fileFG12, 0, strlen($fileFG12) - strlen($fg1FileExt)) . $fg1FileExt; } $realpathfileFG13 = realpath($tmp_path . "/" . $fileFG13); $realpathfileFG13 = str_replace("\\", "/", $realpathfileFG13); $environmentVars['realpathfileFG13'] = $realpathfileFG13 ; if ($return_code == "OK") { // Défintion des différents noeuds a executer l'etape 15 est conditionnée sur le type d'etbs $etapes = array( 'ETAPE_1', 'ETAPE_2', 'ETAPE_3', 'ETAPE_4', 'ETAPE_5', 'ETAPE_6', 'ETAPE_7', 'ETAPE_8', 'ETAPE_9', 'ETAPE_10', 'ETAPE_11', 'ETAPE_12', 'ETAPE_13', 'ETAPE_14', 'ETAPE_15', 'ETAPE_16', 'ETAPE_17', 'ETAPE_18', 'ETAPE_19', 'ETAPE_20', 'ETAPE_21', 'ETAPE_22', 'ETAPE_23', 'ETAPE_24', 'ETAPE_25' ); // stoppe le script s erreur $stopError = TRUE; $sqlOptions= array('-stop', '-debugsql', '--show-queries'); $nodesXml = __ROOT__ . '/modules/pmsi/php/lib_simulations/iCTI_simulation_FG' . $fg_year . '.XML'; if (!file_exists($nodesXml)) { $return_message = "Erreur chargement fichier de traitement de RSS de simulation"; $return_code = "KO"; break; } $cti_sqlStatements = new CTI_SqlStatements_class($nodesXml,$iCTI_connexion,$environmentVars,$sqlOptions); // Exécution requetes SQL foreach($etapes as $etape){ $return_codee = $cti_sqlStatements->executeStatementsNode($etape); if ($return_codee == 'ERROR') { $return_message = "Une erreur SQL a interrompu le traitement / voir $etape"; $return_code = "KO"; break; } } if ($return_code == "OK") { $sqlcmd = "SELECT count(*) as count FROM pmsi.$simulationTableFG WHERE est_regroupe = '1' "; $count = 0; $result = $database->exec($sqlcmd); if ($result != false) { $record = $database->nextRecordInto(); if ($record != FALSE) { $count = $record[0] + 0; } } if ($count > 0) { $return_message = filesize($tmp_path . "/" . $fileFG13) . " octets chargés dans " . $fileFG13 . ", $count dossiers regroupés"; } else { $return_code = "KO"; $return_message = filesize($tmp_path . "/" . $fileFG13) . " octets chargés dans " . $fileFG13 . ", mais aucun dossier regroupé"; } } } // Nettoyage du cache PMSI MCO. cleanAllCache("iCTI_pmsi"); break; } // tableau contenant les retour en cas d'erreur if ($returnContentNode['return_code'] == 'KO') { $return_code = $returnContentNode['return_code'] ; $return_message = $returnContentNode['return_message'] ; //$return_complement = $returnContentNode['return_complement'] ; $return_complement_v1 = $returnContentNode['return_complement_v1'] ; $return_complement_v2 = $returnContentNode['return_complement_v2'] ; $return_complement_v3 = $returnContentNode['return_complement_v3'] ; } $httpString .= ""; $httpString .= "\n"; echo "$httpString"; @pg_close($iCTI_connexion); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////// FONCTIONS /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /** * Extrait les unités médicales paramétrées dans iCTI et les ecrits dans le fichier de sortie. * * @global type $database * @global type $tmp_RSSoutfile * @global type $typeEts * @global string $d1 * @global type $finess */ function extract_um() { global $database; global $tmp_RSSoutfile; global $typeEts; global $d1; global $finess; $tmp_RSSouthandle = fopen($tmp_RSSoutfile, 'a'); fwrite($tmp_RSSouthandle, "TYPEETS=$typeEts\r\n"); $sqlcmd = " SELECT 'UNITEMEDIC' || rpad(trim(code), 4, ' ') || '$finess' || 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' GROUP BY 1) GROUP BY 1; "; $result = $database->exec($sqlcmd); while ($row = pg_fetch_array($result)) { $data = $row[0]; fwrite($tmp_RSSouthandle, "$data\r\n"); } fclose($tmp_RSSouthandle); } function extract_rss($import_id, $anneeToExtract) { global $database; global $tmp_path; // Restauration fichier $tmp_RSSinfile = $tmp_path . "/rss_" . $anneeToExtract . "_in.txt"; if (file_exists($tmp_RSSinfile)) { unlink($tmp_RSSinfile); } $tmp_RSSinfileZip = $tmp_path . "/rss_" . $anneeToExtract . "_in.zip"; if (file_exists($tmp_RSSinfileZip)) { unlink($tmp_RSSinfileZip); } // Aller dans IN.ZIP $sqlcmd = " SELECT data FROM pmsi.p_imports_data WHERE import_id = $import_id AND data_type = 'ZIN' ORDER BY data_num "; $result = $database->exec($sqlcmd); while ($row = pg_fetch_array($result)) { $data = $row[0]; $handle = fopen($tmp_RSSinfileZip, 'a'); fwrite($handle, uncompress(pg_unescape_bytea($data))); 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); $filesuffixIni = substr($filename, strlen($filename) - 11, 11); if ($filesuffix == "rss.txt") { $buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); file_put_contents($tmp_RSSinfile, $buf); } elseif ($filesuffixIni == "rss.ini.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); } return $tmp_RSSinfile; } function transform_extract_rss($tmp_RSSinfile, $tmp_RSSoutfile, $anneeToExtract ) { // préparation fichier // Premier passage, RSS à extraire (>= $d1) // rss à traiter $rss_array = array(); $rss_ecart_array = array(); $no_ligne = 0; $time_31032011 = mktime(0, 0, 0, 03, 31, FG_YEAR); $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))); $date_in = substr($buffer, 102, 8); $mktime_in = mktime(0, 0, 0, substr($date_in, 2, 2), substr($date_in, 0, 2), substr($date_in, 4, 4)); $rss_ecart_array[$no_rss] = floor(($time_31032011 - $mktime_in) / (60 * 60 * 24)); $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 2011 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 ($RUMversionFormat == "017") { if ($RUMannee == (FG_YEAR_RSS - 1) && $RUMmois >= '03' && $RUMmois <= '12') { $rss_array[$no_rss] = "OK"; } if ($RUMannee == FG_YEAR_RSS && $RUMmois >= '01' && $RUMmois <= '02') { $rss_array[$no_rss] = "OK"; } } if ($RUMversionFormat == "018") { if ($RUMannee == (FG_YEAR_RSS - 1) && $RUMmois >= '03' && $RUMmois <= '12') { $rss_array[$no_rss] = "OK"; } if ($RUMannee == FG_YEAR_RSS && $RUMmois >= '01' && $RUMmois <= '02') { $rss_array[$no_rss] = "OK"; } } if ($RUMversionFormat == "019") { if ($RUMannee == (FG_YEAR_RSS - 1) && $RUMmois >= '03' && $RUMmois <= '12') { $rss_array[$no_rss] = "OK"; } if ($RUMannee == FG_YEAR_RSS && $RUMmois >= '01' && $RUMmois <= '02') { $rss_array[$no_rss] = "OK"; } } if ($RUMversionFormat == "020") { if ($RUMannee == (FG_YEAR_RSS - 1) && $RUMmois >= '03' && $RUMmois <= '12') { $rss_array[$no_rss] = "OK"; } if ($RUMannee == FG_YEAR_RSS && $RUMmois >= '01' && $RUMmois <= '02') { $rss_array[$no_rss] = "OK"; } } if ($RUMversionFormat == "021") { if ($RUMannee == (FG_YEAR_RSS - 1) && $RUMmois >= '03' && $RUMmois <= '12') { $rss_array[$no_rss] = "OK"; } if ($RUMannee == FG_YEAR_RSS && $RUMmois >= '01' && $RUMmois <= '02') { $rss_array[$no_rss] = "OK"; } } if ($RUMversionFormat == "022") { if ($RUMannee == (FG_YEAR_RSS - 1) && $RUMmois >= '03' && $RUMmois <= '12') { $rss_array[$no_rss] = "OK"; } if ($RUMannee == FG_YEAR_RSS && $RUMmois >= '01' && $RUMmois <= '02') { $rss_array[$no_rss] = "OK"; } } } } } } } fclose($tmp_RSSinhandle); // second passage, creation fichier en sortie $tmp_RSSinhandle = fopen($tmp_RSSinfile, "r"); $no_ligne = 0; while (!feof($tmp_RSSinhandle)) { $buffer = fgets($tmp_RSSinhandle, 10240); if (trim($buffer) != "" && $no_ligne < 1000000000000000) { $no_rss = get_num(trim(substr($buffer, 27, 20))); $no_rss_out = $anneeToExtract . substr("000000000000000000000" . $no_rss, -16, 16); if ($rss_array[$no_rss] == "OK") { $no_ligne++; // Translation n° rss $buffer = substr_replace($buffer, $no_rss_out, 27, 20); // Translation des dates $ecart = $rss_ecart_array[$no_rss]; $date_in = substr($buffer, 77, 8); $mktime_out = mktime(0, 0, 0, substr($date_in, 2, 2), substr($date_in, 0, 2) + $ecart, substr($date_in, 4, 4)); $date_out = date("dmY", $mktime_out); $buffer = substr_replace($buffer, $date_out, 77, 8); $date_in = substr($buffer, 92, 8); $mktime_out = mktime(0, 0, 0, substr($date_in, 2, 2), substr($date_in, 0, 2) + $ecart, substr($date_in, 4, 4)); $date_out = date("dmY", $mktime_out); $buffer = substr_replace($buffer, $date_out, 92, 8); $date_in = substr($buffer, 102, 8); $mktime_out = mktime(0, 0, 0, substr($date_in, 2, 2), substr($date_in, 0, 2) + $ecart, substr($date_in, 4, 4)); $date_out = date("dmY", $mktime_out); $buffer = substr_replace($buffer, $date_out, 102, 8); $codepost = substr($buffer, 112, 2) . "000"; $buffer = substr_replace($buffer, $codepost, 112, 5); //Une nouvelle variable en 2023 passage urgence récupère les provenances 'U' //On modifie leur place rss pour ne pas avoir d'erreur de la part du groupeur if (FG_YEAR_RSS >= "2023"){ $provenance = substr($buffer, 101, 1); if ($provenance === "U" || $provenance === "5") { $buffer = substr_replace($buffer, ' ', 101, 1); $buffer = substr_replace($buffer, $provenance, 184, 1); } } $nb_diags = substr($buffer, 133, 2) + 0; $nb_datac = substr($buffer, 135, 2) + 0; $nb_actes = substr($buffer, 137, 3) + 0; // forcage de la confiration$buffer $buffer = substr_replace($buffer, '1', 179, 1); $i = 192 + ($nb_diags * 8) + ($nb_datac * 8); $n = 1; for ($x = 1; $x <= $nb_actes; $x++) { $date_in = substr($buffer, $i, 8); if ($date_in + 0 > 0) { $mktime_out = mktime(0, 0, 0, substr($date_in, 2, 2), substr($date_in, 0, 2) + $ecart, substr($date_in, 4, 4)); $date_out = date("dmY", $mktime_out); $buffer = substr_replace($buffer, $date_out, $i, 8); } $i = $i + 29; $n++; } file_put_contents($tmp_RSSoutfile, $buffer, FILE_APPEND); } } } fclose($tmp_RSSinhandle); } function get_num($value, $defaultValue = 0) { if (!is_numeric($value)) { return $defaultValue; } return $value + 0; } function getLastImports($database, $dateDebutImport) { $toRet = false; $sqlcmd = " SELECT (MAX(ARRAY[CASE WHEN data_type = 'ZIN' AND numero_editeur_pmsi <> 2 AND annee = " . (FG_YEAR_RSS - 1) . " THEN nombre ELSE 0 END, CASE WHEN numero_editeur_pmsi <> 2 AND annee = " . (FG_YEAR_RSS - 1) . " THEN import_id ELSE 0 END]))[2] as import_id_" . (FG_YEAR_RSS - 1) . " , (MAX(ARRAY[CASE WHEN data_type = 'ZIN' AND numero_editeur_pmsi <> 2 AND annee = " . FG_YEAR_RSS . " THEN nombre ELSE 0 END, CASE WHEN numero_editeur_pmsi <> 2 AND annee = " . FG_YEAR_RSS . " THEN import_id ELSE 0 END]))[2] as import_id_" . FG_YEAR_RSS . " , (MAX(ARRAY[CASE WHEN data_type = 'ZIN' AND numero_editeur_pmsi = 2 AND annee = " . (FG_YEAR_RSS - 1) . " THEN nombre ELSE 0 END, CASE WHEN numero_editeur_pmsi = 2 AND annee = " . (FG_YEAR_RSS - 1) . " THEN import_id ELSE 0 END]))[2] as import_id_2_" . (FG_YEAR_RSS - 1) . " , (MAX(ARRAY[CASE WHEN data_type = 'ZIN' AND numero_editeur_pmsi = 2 AND annee = " . FG_YEAR_RSS . " THEN nombre ELSE 0 END, CASE WHEN numero_editeur_pmsi = 2 AND annee = " . FG_YEAR_RSS . " THEN import_id ELSE 0 END]))[2] as import_id_2_" . FG_YEAR_RSS . " FROM ( SELECT extract('year' from date_sortie) AS annee, p_rss.import_id, numero_editeur_pmsi, count(*) as nombre, data_type FROM pmsi.p_rss JOIN pmsi.p_imports_data on p_rss.import_id = p_imports_data.import_id AND data_type = 'ZIN' WHERE 1=1 AND date_sortie >= '$dateDebutImport' AND en_cours = '0' AND etat = '' GROUP BY 1,2,3,data_type ) AS subq "; $result = $database->exec($sqlcmd); if ($result != false) { $record = $database->nextRecordInto(); if ($record != FALSE) { $toRet['return_code'] = "OK"; $toRet['import_id_N_moins_1_editeur_1'] = $record[0]; $toRet['import_id_N_editeur_1'] = $record[1]; $toRet['import_id_N_moins_1_editeur_2'] = $record[2]; $toRet['import_id_N_editeur_2'] = $record[3]; } if ( ($toRet['import_id_N_moins_1_editeur_1'] == 0 && $toRet['import_id_N_editeur_1'] == 0 && $toRet['import_id_N_moins_1_editeur_2'] == 0 && $toRet['import_id_N_editeur_2'] == 0) OR ($toRet['import_id_N_moins_1_editeur_1'] == '' && $toRet['import_id_N_editeur_1'] == '' && $toRet['import_id_N_moins_1_editeur_2'] == '' && $toRet['import_id_N_editeur_2'] == '')) { $return['return_code'] = "KO"; $return['return_message'] = "Aucun import pour " . (FG_YEAR_RSS - 1) . " ou " . FG_YEAR_RSS; return $return; } return $toRet; } else{ $return['return_code'] = "KO"; $return['return_message'] = "Erreur SQL" . $sqlcmd ; return $return; } } function generation_donnees_complementaires_execute($environmentVars, $node, $provider) { global $iCTI_connexion; // stoppe le script s erreur $stopError = TRUE; $sqlOptions=array('-stop', 'debugsql'); $cti_sqlStatements = new CTI_SqlStatements_class("$provider.XML",$iCTI_connexion,$environmentVars,$sqlOptions); // Exécution requetes SQL $rer = $cti_sqlStatements->executeStatementsNode($node); return $rer; } function url_request($http_connect, $url, $parametres, $libelle_erreur = "Erreur lors de l'initialisation de la liste ", $return_complement_v1 = '', $return_complement_v2 = '', $return_complement_v3 = ''){ $return = ''; $content = $http_connect->get($url, $parametres); $contentNode = simplexml_load_string($content); if ($contentNode) { if ($contentNode["returnCode"] != "OK") { $return['return_code'] = "KO"; $return['return_message'] = $libelle_erreur . $contentNode["returnMessage"]; } else { $return['return_code'] = "OK"; $return['return_content'] = $contentNode; } } else { $return['return_code'] = "KO"; $return['$return_message'] = $libelle_erreur; //$return['$return_complement'] = $httpCTISante->site . '/' . $CTISantePHP; $return['$return_complement_v1'] = $return_complement_v1; $return['$return_complement_v2'] = $return_complement_v2; $return['$return_complement_v3'] = $return_complement_v3; } return $return; } ?>