/** * Categorize and check uploaded files * * Files are typed and scanned, if they pass scan, then the file is moved * to the edi_history temp dir and an array ['type'] ['name'] is returned * If an error occurs, false is returned * * @uses edih_x12_file() * @uses csv_file_type() * @uses csv_edih_tmpdir() * @param array $param_ar -- the csv_parameters("ALL") array (so we don't have to keep creating it) * @param array $fidx -- individual file array from $files[$i] array * * @return array|bool */ function edih_upload_match_file($param_ar, $fidx) { // // ============= $edih_upldir = csv_edih_tmpdir(); // ============= $ar_fn = array(); $ftype = ''; // if (is_array($fidx) && isset($fidx['name'])) { $fn = basename($fidx['name']); $ftmp = $fidx['tmp_name']; } else { csv_edihist_log('edih_upload_match_file: Error: invalid file argument'); return false; } //csv_check_x12_obj($filepath, $type='') { $x12obj = new edih_x12_file($ftmp, false); // if ($x12obj->edih_hasGS()) { $ftype = csv_file_type($x12obj->edih_type()); } elseif ($x12obj->edih_valid()) { if (is_array($param_ar) && count($param_ar)) { // csv_parameters("ALL"); foreach ($param_ar as $ky => $par) { if (!isset($param_ar[$ky]['regex'])) { continue; } if (preg_match($param_ar[$ky]['regex'], $fn)) { $ftype = $ky; break; } } } else { csv_edihist_log('edih_upload_match_file: invalid parameters'); return false; } } else { // failed valdity test: unwanted characters or unmatched mime-type csv_edihist_log('edih_upload_match_file: invalid x12_file ' . strip_tags($x12obj->edih_message())); return false; } // if (!$ftype) { csv_edihist_log('edih_upload_match_file: unable to classify file ' . $fn); $ar_fn['reject'] = array('name' => $fn, 'comment' => 'unable to classify'); return $ar_fn; } // $newname = $edih_upldir . DS . $fn; // if (rename($ftmp, $newname)) { if (chmod($newname, 0400)) { $ar_fn['type'] = $ftype; $ar_fn['name'] = $newname; } else { csv_edihist_log('edih_upload_match_file: failed to set permissions for ' . $fn); $ar_fn['reject'] = array('name' => $fn, 'comment' => 'failed to set permissions'); unlink($newname); return false; } } else { csv_edihist_log("edih_upload_match_file: unable to move {$fn} to uploads directory"); return false; } // return $ar_fn; }
/** * Create an html report on rejected files or transactions * * @uses edih_997_ta1_code() * @uses edih_997_code_text() * @uses edih_rsp_st_match() * * @param object * @return array */ function edih_997_err_report($err_array) { // if (!is_array($err_array) || !count($err_array)) { $str_html = "Error: invalid argument for error report"; csv_edihist_log('edih_997_err_report: invalid function argument'); return $str_html; } // $str_html = ""; $batchfile = ""; // if (isset($err_array['summary'])) { extract($err_array['summary'], EXTR_OVERWRITE); // $str_html .= "<p class='rpt997'>" . PHP_EOL; $str_html .= isset($sub_icn) ? "<em>Submitted ICN</em> {$sub_icn}" : "Submitted file unknown"; $str_html .= isset($subdate) ? " <em>Date</em> " . edih_format_date($subdate) : ""; $str_html .= isset($subtime) ? " <em>Time</em> {$subtime}<br />" : "<br />"; $str_html .= isset($ackcode) ? " TA1 {$ackcode} : " . edih_997_ta1_code($ackcode) . " <br />" : ""; $str_html .= isset($acknote) ? " TA1 {$acknote} : " . edih_997_ta1_code($acknote) . " <br />" . PHP_EOL : "<br />" . PHP_EOL; if (isset($fg_type)) { $fgtp = csv_file_type($fg_type); $str_html .= " <em>Functional Group Type</em> {$fg_type} ({$fgtp})"; $str_html .= isset($fg_id) ? " <em>GS06</em> {$fg_id} <br />" . PHP_EOL : "<br />" . PHP_EOL; } // //$str_html .= "</p>".PHP_EOL; // $str_html .= isset($ak901) ? "999/997 {$ak901} " . edih_997_code_text('ak501', $ak901) . "<br />" : ""; $str_html .= isset($ak902) ? " Transactions: submitted {$ak902}" : " "; $str_html .= isset($ak903) ? " received {$ak903}" : ""; $str_html .= isset($ak904) ? " accepted {$ak904}" : ""; $str_html .= isset($ak905) && $ak905 ? "<br />{$ak905} " . edih_997_code_text('ak502', $ak905) . "<br />" : ""; $str_html .= isset($ak906) && $ak906 ? $ak906 . " " . edih_997_code_text('ak502', $ak906) . "<br />" : ""; $str_html .= isset($ak907) && $ak907 ? $ak907 . " " . edih_997_code_text('ak502', $ak907) . "<br />" : ""; $str_html .= isset($ak908) && $ak908 ? $ak908 . " " . edih_997_code_text('ak502', $ak908) . "<br />" : ""; $str_html .= isset($ak909) && $ak909 ? $ak909 . " " . edih_997_code_text('ak502', $ak909) . "<br />" : ""; // $str_html .= "</p>" . PHP_EOL; } // foreach ($err_array['err'] as $k => $v) { // $ct = $k + 1; $icn = isset($sub_icn) ? $sub_icn : ''; $stn = isset($v['substn']) ? $v['substn'] : ''; $rtp = isset($v['subtype']) ? $v['subtype'] : ''; // $str_html .= "<p class='err997'>" . PHP_EOL; $str_html .= "Error {$ct} "; $str_html .= $stn ? "<em>ST</em> {$stn} <br />" : "<br />"; // if ($icn && $stn && $rtp) { $trc = sprintf("%s%04d", $icn, $stn); $srch = array('s_val' => $trc, 's_col' => 4, 'r_cols' => 'All'); // array('s_val'=>'0024', 's_col'=>9, 'r_cols'=>array(1, 2, 7)), $trn_ar = csv_search_record($rtp, 'claim', $srch); if (is_array($trn_ar) && count($trn_ar)) { //'f837':array('PtName', 'SvcDate', 'CLM01', 'InsLevel', 'BHT03', 'FileName', 'Fee', 'PtPaid', 'Provider' ); //'f276':array('PtName', 'SvcDate', 'CLM01', 'ClaimID', 'BHT03', 'FileName', 'Payer', 'Trace'); break; //'f270':array('PtName', 'ReqDate', 'Trace', 'InsBnft', 'BHT03', 'FileName', 'Payer'); break; $pt_name = $trn_ar[0][0]; // $trn_ar['PtName']; $clm01 = $rtp == 'f837' ? $trn_ar[0][2] : $trn_ar[0][4]; // $trn_ar['CLM01'] : $trn_ar['BHT03']; $svcdate = $trn_ar[0][1]; // ($rtp == 'f270') ? $trn_ar['ReqDate'] : $trn_ar['SvcDate']; $btfn = $trn_ar[0][5]; // $trn_ar['FileName']; $str_html .= "{$pt_name} {$svcdate} <em>Trace</em> <a class='rpt' href='edih_main.php?gtbl=claim&fname={$btfn}&ftype={$rtp}&pid={$clm01}&fmt=seg'>{$clm01}</a> <br />" . PHP_EOL; } else { $str_html .= "Unable to locate transaction <em>Trace</em> {$trc} <br />" . PHP_EOL; } } else { $str_html .= "Unable to trace, did not get all of icn, type, and st number <br />" . PHP_EOL; } // $str_html .= isset($v['ctxacct']) ? "<em>Transaction ID</em> " . $v['ctxacct'] : ""; $str_html .= isset($v['ik3segid']) ? " Segment <em>ID</em> " . $v['ik3segid'] : ""; $str_html .= isset($v['ik3segpos']) ? " <em>Position</em> " . $v['ik3segpos'] : ""; $str_html .= isset($v['ik3loop']) ? " <em>Loop</em> " . $v['ik3loop'] : ""; $str_html .= isset($v['ik3code']) ? "<br /> <em>Code</em> " . $v['ik3code'] . " " . edih_997_code_text('ak304', $v['ik3code']) . "<br />" : "<br />"; // $str_html .= isset($v['ctxid']) ? "Situational " . PHP_EOL . "<em>Segment</em> " . $v['ctxid'] : ""; $str_html .= isset($v['ctxpos']) ? " <em>Position</em> " . $v['ctxpos'] : ""; $str_html .= isset($v['ctxloop']) ? " <em>Position</em> " . $v['ctxloop'] : ""; $str_html .= isset($v['ctxelem']) ? " <em>Element</em> " . $v['ctxelem'] . "<br />" . PHP_EOL : PHP_EOL; // $str_html .= isset($v['ik401']) ? "Data Element <em>element</em> " . $v['ik401'] : ""; $str_html .= isset($v['ik402']) ? " <em>ref</em> " . $v['ik402'] : ""; $str_html .= isset($v['ik404']) ? " <em>data</em> " . $v['ik404'] : ""; $str_html .= isset($v['ik403']) ? "<br /> <em>code</em> " . $v['ik403'] . " " . edih_997_code_text('ak403', $v['ik403']) . "<br />" : "<br />"; // $str_html .= isset($v['ik501']) && $v['ik501'] ? "<em>Status</em> " . $v['ik501'] . " " . edih_997_code_text('ak501', $v['ik501']) . "<br />" : ""; $str_html .= isset($v['ik502']) && $v['ik502'] ? " <em>code</em> " . $v['ik502'] . " " . edih_997_code_text('ak502', $v['ik502']) . "<br />" : ""; $str_html .= isset($v['ik503']) && $v['ik503'] ? " <em>code</em> " . $v['ik503'] . " " . edih_997_code_text('ak502', $v['ik503']) . "<br />" : ""; $str_html .= isset($v['ik504']) && $v['ik504'] ? " <em>code</em> " . $v['ik504'] . " " . edih_997_code_text('ak502', $v['ik504']) . "<br />" : ""; $str_html .= isset($v['ik505']) && $v['ik505'] ? " <em>code</em> " . $v['ik505'] . " " . edih_997_code_text('ak502', $v['ik505']) . "<br />" : ""; // $str_html .= "</p>" . PHP_EOL; } return $str_html; }
/** * Render one of our csv record files as an html table * * This function determines the actual csv file from the file_type and the * csv_type. Tthe date field of each row is checked against the optional * lookback period or date parameters. * * @uses csv_file_type() * @uses csv_parameters() * @uses csv_thead_html() * * @param string $file_type -- see function csv_file_type() * @param string $csv_type -- either "file" or "claim" * @param string $period -- lookback 2 weeks, 1 month, ALL, etc * @param string $datestart -- from date CCYY-MM-DD * @param string $dateend -- to date CCYY-MM-DD * * @return string */ function edih_csv_to_html($file_type, $csv_type, $period = '', $datestart = '', $dateend = '') { // $csv_html = ""; $modstr = ''; $csv_d = array(); // debug csv_edihist_log("edih_csv_to_html: period {$period} datestart {$datestart} dateend {$dateend}"); // $is_date = false; $is_period = false; // if ($file_type && $csv_type) { $csv_ar = csv_assoc_array($file_type, $csv_type); if (is_array($csv_ar) && count($csv_ar)) { $rwct = count($csv_ar); } else { csv_edihist_log("edih_csv_to_html: error opening csv file {$file_type} {$csv_type}"); $csv_html .= "error opening csv file {$file_type} {$csv_type}<br>"; return false; } } else { $csv_html .= "invalid arguments for opening csv table<br>"; return false; } $tp = csv_file_type($file_type); if ($tp) { $params = csv_parameters($tp); } else { csv_edihist_log("csv_to_html error: incorrect file type {$file_type}"); $csv_html .= "csv_to_html error: incorrect file type {$file_type} <br />" . PHP_EOL; return false; } // csv tables date is in col 0 for file, col 5 for claim // file name is under FileName for all tables $dtcol = strpos($csv_type, "aim") ? $params['claimdate'] : $params['filedate']; $tp_lbl = strpos($csv_type, "aim") ? 'Claims' : 'Files'; // // given dates shold be in CCYY-MM-DD or CCYY/MM/DD format // edih_view.php is supposed to use CCYY-MM-DD $dts = $dt4 = $dte = ''; if (preg_match('/(19|20)\\d{2}\\D[01][0-9]\\D[0-3][0-9]/', $datestart)) { $dts = implode('', preg_split("/\\D/", $datestart)); if ($dateend && preg_match('/(19|20)\\d{2}\\D[01][0-9]\\D[0-3][0-9]/', $dateend)) { $dte = implode('', preg_split("/\\D/", $dateend)); } else { $dt4 = date_create(date('Y-m-d')); $dte = date_format($dt4, 'Ymd'); } // php DateTime is poorly documented $is_date = $dts && $dte; // debug csv_edihist_log("edih_csv_to_html: dts {$dts} dte {$dte} isdate " . strval($is_date)); // // } elseif ($period) { $dtstr1 = ''; $is_period = preg_match('/\\d{1,2}(?=w|m|y)/', $period, $matches); if (count($matches)) { $pd = $matches[0]; $gtdt = getdate(); $mon = (string) $gtdt['mon']; $day = (string) ($gtdt['mday'] - $gtdt['wday'] + 1); $yr = (string) $gtdt['year']; if (strtoupper($period) == 'ALL') { $is_period = false; $modstr = ''; } elseif (strpos($period, 'w')) { // take the first character of 'period' $modstr = '-' . $pd . ' week'; $dtstr1 = $mon . '/' . $day . '/' . $yr; } elseif (strpos($period, 'm')) { $modstr = '-' . $pd . ' month'; $dtstr1 = $mon . '/01/' . $yr; } elseif (strpos($period, 'y')) { $modstr = '-' . $pd . ' year'; $dtstr1 = $mon . '/01/' . $yr; } else { csv_edihist_log("csv_to_html error: incorrect date period {$period}"); return false; } } // // debug csv_edihist_log("edih_csv_to_html: period {$period} modstr {$modstr} dtstr1 {$dtstr1}"); // if ($is_period && $modstr) { $dtpd1 = date_create($dtstr1); $dtm = date_modify($dtpd1, $modstr); $dtpd2 = $dtm->format('Ymd'); $dtpdlbl = $dtm->format('Y-m-d'); } else { $dtpd2 = ''; $dtpdlbl = 'All Dates'; } } // if ($is_date) { $isok = false; $idx = 0; foreach ($csv_ar as $data) { $isok = strcmp($data[$dtcol], $dts) >= 0 ? true : false; $isok = strcmp($data[$dtcol], $dte) > 0 ? false : $isok; // if ($isok) { $csv_d[] = $data; } } } elseif ($is_period) { foreach ($csv_ar as $data) { if (strcmp($data[$dtcol], $dtpd2) > 0) { $csv_d[] = $data; } } } else { $csv_d =& $csv_ar; } // $ln_ct = count($csv_d); // if ($is_date) { //$csv_html .= "<div id='dttl'>".PHP_EOL; $csv_html .= "<h4>Table: {$tp_lbl} {$tp} Start: {$datestart} End: {$dateend} Rows: {$rwct} Shown: {$ln_ct}</h4>" . PHP_EOL; //$csv_html .= "</div>".PHP_EOL; } elseif ($is_period) { //div id='dttl'></div> $csv_html .= "<h4>Table: {$tp_lbl} {$tp} From Date: {$dtpdlbl} Rows: {$rwct} Shown: {$ln_ct}</h4>" . PHP_EOL; } else { //<div id='dttl'></div> $csv_html .= "<h4>Table: {$tp_lbl} {$tp} All Dates Rows: {$rwct} Shown: {$ln_ct}</h4>" . PHP_EOL; } // //$csv_html .= "<table id='csvTable' class='csvDisplay'>".PHP_EOL; class='display'max-width: fit-content $csv_html .= "<table id='csvTable' style='width: fit-content; float: left'>" . PHP_EOL; $csv_html .= csv_thead_html($tp, $csv_type); $csv_html .= "<tbody>" . PHP_EOL; // // now create the body of the table // $cls = strpos('|f837|f270|f276|f278', $tp) ? 'sub' : 'rsp'; // $idx = 0; if ($csv_type == 'file') { // if ($tp == 'f835') { //array('Date', 'FileName', 'Control', 'Trace', 'Claim_ct', 'Denied', 'Payer') foreach ($csv_d as $val) { $bgc = $idx % 2 == 1 ? 'odd' : 'even'; $csv_html .= "<tr class='{$bgc}'>" . PHP_EOL; foreach ($val as $k => $v) { if ($k == 'Date') { $csv_html .= "<td>" . substr($v, 0, 4) . '-' . substr($v, 4, 2) . '-' . substr($v, 6, 2) . "</td>" . PHP_EOL; } elseif ($k == 'FileName') { $fn = $v; $csv_html .= "<td><a class='{$cls}' href='edih_main.php?gtbl=file&fname={$v}&ftype={$tp}&fmt=htm'>{$v}</a></td>" . PHP_EOL; } elseif ($k == 'Control') { $csv_html .= "<td><a class='seg' href='edih_main.php?gtbl=file&icn={$v}&ftype={$tp}&fmt=seg'>{$v}</a></td>" . PHP_EOL; } elseif ($k == 'Trace') { $trc = $v; $csv_html .= "<td><a class='{$cls}' href='edih_main.php?gtbl=file&trace={$v}&ftype={$tp}&rsptype={$tp}&fmt=htm'>{$v}</a></td>" . PHP_EOL; } elseif ($k == 'Claim_ct') { $csv_html .= "<td>{$v} <a class='sub' href='edih_main.php?tracecheck={$trc}&ckprocessed=yes'><em>P?</em></a></td>" . PHP_EOL; } elseif ($k == 'Denied') { if ((int) $v > 0) { $csv_html .= "<td><a class='sub' href='edih_main.php?chkdenied=yes&fname={$fn}&ftype={$tp}&trace={$trc}'>{$v}</a></td>" . PHP_EOL; } else { $csv_html .= "<td>{$v}</td>" . PHP_EOL; } } else { $csv_html .= "<td>{$v}</td>" . PHP_EOL; } } $csv_html .= "</tr>" . PHP_EOL; $idx++; } } elseif ($tp == 'f997') { //array('Date', 'FileName', 'Control', 'Trace', 'RspType', 'RejCt') foreach ($csv_d as $val) { $bgc = $idx % 2 == 1 ? 'odd' : 'even'; $csv_html .= "<tr class='{$bgc}'>" . PHP_EOL; // $rsp = $val['RspType']; foreach ($val as $k => $v) { if ($k == 'Date') { $csv_html .= "<td>" . substr($v, 0, 4) . '-' . substr($v, 4, 2) . '-' . substr($v, 6, 2) . "</td>" . PHP_EOL; } elseif ($k == 'FileName') { $fn = $v; $csv_html .= "<td><a class='seg' href='edih_main.php?gtbl=file&fname={$v}&ftype={$tp}&fmt=seg'>{$v}</a></td>" . PHP_EOL; } elseif ($k == 'Trace') { $csv_html .= "<td><a class='seg' href='edih_main.php?gtbl=file&trace={$v}&ftype={$tp}&rsptype={$rsp}&fmt=seg'>{$v}</a></td>" . PHP_EOL; } elseif ($k == 'RejCt') { if ((int) $v > 0) { $csv_html .= "<td><a class='rpt' href='edih_main.php?chkdenied=yes&fname={$fn}&ftype={$tp}'>{$v}</a></td>" . PHP_EOL; } else { $csv_html .= "<td>{$v}</td>" . PHP_EOL; } } else { $csv_html .= "<td>{$v}</td>" . PHP_EOL; } } $csv_html .= "</tr>" . PHP_EOL; $idx++; } // } else { // the generic case -- for 'file' type tables foreach ($csv_d as $val) { $bgc = $idx % 2 == 1 ? 'odd' : 'even'; $csv_html .= "<tr class='{$bgc}'>" . PHP_EOL; foreach ($val as $k => $v) { if ($k == 'Date') { $csv_html .= "<td>" . substr($v, 0, 4) . '-' . substr($v, 4, 2) . '-' . substr($v, 6, 2) . "</td>" . PHP_EOL; } elseif ($k == 'FileName') { $csv_html .= "<td><a class='seg' href='edih_main.php?gtbl=file&fname={$v}&ftype={$tp}&fmt=htm'>{$v}</a></td>" . PHP_EOL; } elseif ($k == 'Control') { $csv_html .= "<td><a class='seg' href='edih_main.php?gtbl=file&icn={$v}&ftype={$tp}&fmt=seg'>{$v}</a></td>" . PHP_EOL; } elseif ($k == 'Reject') { if ((int) $v > 0) { $csv_html .= "<td><a class='sub' href='edih_main.php?&chkdenied=yes&fname={$val['FileName']}&ftype={$tp}'>{$v}</a></td>" . PHP_EOL; } else { $csv_html .= "<td>{$v}</td>" . PHP_EOL; } } else { $csv_html .= "<td>{$v}</td>" . PHP_EOL; } } $csv_html .= "</tr>" . PHP_EOL; $idx++; } } } elseif ($csv_type == 'claim') { // if ($tp == 'f837') { // array('PtName', 'SvcDate', 'CLM01', 'InsLevel', 'Control', 'FileName', 'Fee', 'PtPaid', 'Provider' ); foreach ($csv_d as $val) { $bgc = $idx % 2 == 1 ? 'odd' : 'even'; $csv_html .= "<tr class='{$bgc}'>" . PHP_EOL; // needed values for links $fn = $val['FileName']; foreach ($val as $k => $v) { if ($k == 'CLM01') { $csv_html .= "<td><a class='sub' href='edih_main.php?gtbl=claim&fname={$fn}&ftype={$tp}&pid={$v}'>{$v}</a></td>" . PHP_EOL; } elseif ($k == 'SvcDate') { $csv_html .= "<td>" . substr($v, 0, 4) . '-' . substr($v, 4, 2) . '-' . substr($v, 6, 2) . "</td>" . PHP_EOL; } elseif ($k == 'FileName') { $csv_html .= "<td><a class='seg' href='edih_main.php?gtbl=file&fname={$fn}&ftype={$tp}&fmt=seg'>{$v}</a></td>" . PHP_EOL; } else { $csv_html .= "<td>{$v}</td>" . PHP_EOL; } } $csv_html .= "</tr>" . PHP_EOL; $idx++; } } elseif ($tp == 'f835') { // array('PtName', 'SvcDate', 'CLM01', 'Status', 'Trace', 'FileName', 'ClaimID', 'Pmt', 'PtResp', 'Payer') foreach ($csv_d as $val) { $bgc = $idx % 2 == 1 ? 'odd' : 'even'; $csv_html .= "<tr class='{$bgc}'>" . PHP_EOL; // needed values for links $fn = $val['FileName']; $pid = $val['CLM01']; foreach ($val as $k => $v) { if ($k == 'SvcDate') { $csv_html .= "<td>" . substr($v, 0, 4) . '-' . substr($v, 4, 2) . '-' . substr($v, 6, 2) . "</td>" . PHP_EOL; } elseif ($k == 'CLM01') { $csv_html .= "<td>{$v} <a class='{$cls}' href='edih_main.php?gtbl=claim&fname={$fn}&ftype={$tp}&pid={$pid}&fmt=htm'>H</a> "; $csv_html .= " <a class='seg' href='edih_main.php?gtbl=claim&fname={$fn}&ftype={$tp}&pid={$pid}&fmt=seg'>T</a></td>" . PHP_EOL; } elseif ($k == 'Trace') { $csv_html .= "<td><a class='{$cls}' href='edih_main.php?gtbl=file&fname={$fn}&trace={$v}&ftype={$tp}&fmt=htm'>{$v}</a></td>" . PHP_EOL; } elseif ($k == 'FileName') { $csv_html .= "<td title='{$v}'>File <a class='{$cls}' href='edih_main.php?gtbl=file&fname={$fn}&ftype={$tp}&fmt=htm'>H</a> "; $csv_html .= " <a class='{$cls}' href='edih_main.php?gtbl=file&fname={$fn}&ftype={$tp}&fmt=seg'>T</a></td>" . PHP_EOL; } else { $csv_html .= "<td>{$v}</td>" . PHP_EOL; } } $csv_html .= "</tr>" . PHP_EOL; $idx++; } } elseif ($tp == 'f277') { // array('PtName', 'SvcDate', 'CLM01', 'Status', 'BHT03', 'FileName', 'Payer', 'Ins_ID', 'Trace'); foreach ($csv_d as $val) { $bgc = $idx % 2 == 1 ? 'odd' : 'even'; $csv_html .= "<tr class='{$bgc}'>" . PHP_EOL; // needed values for links $fn = $val['FileName']; $bht03 = $val['BHT03']; $trc = $val['CLM01']; foreach ($val as $k => $v) { if ($k == 'SvcDate') { $csv_html .= "<td>" . substr($v, 0, 4) . '-' . substr($v, 4, 2) . '-' . substr($v, 6, 2) . "</td>" . PHP_EOL; } elseif ($k == 'CLM01') { $csv_html .= "<td><a class='sub' href='edih_main.php?gtbl=claim&trace={$v}&ftype={$tp}&rsptype=f837&fmt=seg'>{$v}</a></td>" . PHP_EOL; } elseif ($k == 'BHT03') { $csv_html .= "<td>{$v} <a class='rsp' href='edih_main.php?gtbl=claim&fname={$fn}&ftype={$tp}&bht03={$v}&fmt=htm'>H</a> "; $csv_html .= " <a class='seg' href='edih_main.php?gtbl=claim&fname={$fn}&ftype={$tp}&bht03={$v}&fmt=seg'>T</a></td>" . PHP_EOL; } elseif ($k == 'FileName') { $csv_html .= "<td title='{$v}'>File <a class='rsp' href='edih_main.php?gtbl=file&fname={$v}&ftype={$tp}&fmt=htm'>H</a> "; $csv_html .= " <a class='seg' href='edih_main.php?gtbl=file&fname={$v}&ftype={$tp}&fmt=seg'>T</a></td>" . PHP_EOL; } else { $csv_html .= "<td>{$v}</td>" . PHP_EOL; } } $csv_html .= "</tr>" . PHP_EOL; $idx++; } } elseif ($tp == 'f276') { // array('PtName', 'ReqDate', 'CLM01', 'InsBnft', 'BHT03', 'FileName', 'Payer', 'Trace'); foreach ($csv_d as $val) { $bgc = $idx % 2 == 1 ? 'odd' : 'even'; $csv_html .= "<tr class='{$bgc}'>" . PHP_EOL; // needed values for links $fn = $val['FileName']; $bht03 = $val['BHT03']; $trc = $val['CLM01']; foreach ($val as $k => $v) { if ($k == 'ReqDate') { $csv_html .= "<td>" . substr($v, 0, 4) . '-' . substr($v, 4, 2) . '-' . substr($v, 6, 2) . "</td>" . PHP_EOL; } elseif ($k == 'CLM01') { $csv_html .= "<td><a class='sub' href='edih_main.php?gtbl=claim&trace={$v}&ftype={$tp}&rsptype=f837&fmt=seg'>{$v}</a></td>" . PHP_EOL; } elseif ($k == 'BHT03') { $csv_html .= "<td>{$v} <a class='{$cls}' href='edih_main.php?gtbl=claim&fname={$fn}&ftype={$tp}&bht03={$v}&fmt=htm'>H</a> "; $csv_html .= " <a class='seg' href='edih_main.php?gtbl=claim&fname={$fn}&ftype={$tp}&bht03={$v}&fmt=seg'>T</a></td>" . PHP_EOL; } elseif ($k == 'FileName') { $csv_html .= "<td><a class='{$cls}' href='edih_main.php?gtbl=file&fname={$fn}&ftype={$tp}&fmt=seg'>{$v}</a></td>" . PHP_EOL; } else { $csv_html .= "<td>{$v}</td>" . PHP_EOL; } } $csv_html .= "</tr>" . PHP_EOL; $idx++; } } elseif ($tp == 'f270') { // array('PtName', 'ReqDate', 'Trace', 'InsBnft', 'BHT03', 'FileName', 'Payer'); foreach ($csv_d as $val) { $bgc = $idx % 2 == 1 ? 'odd' : 'even'; $csv_html .= "<tr class='{$bgc}'>" . PHP_EOL; // needed values for links $fn = $val['FileName']; $bht03 = $val['BHT03']; foreach ($val as $k => $v) { if ($k == 'ReqDate') { $csv_html .= "<td>" . substr($v, 0, 4) . '-' . substr($v, 4, 2) . '-' . substr($v, 6, 2) . "</td>" . PHP_EOL; } elseif ($k == 'BHT03') { $csv_html .= "<td> <a class='{$cls}' href='edih_main.php?gtbl=claim&fname={$fn}&ftype={$tp}&bht03={$v}&fmt=seg'>{$v}</a></td>" . PHP_EOL; } elseif ($k == 'FileName') { $csv_html .= "<td><a class='{$cls}' href='edih_main.php?gtbl=file&fname={$fn}&ftype={$tp}&fmt=seg'>{$v}</a></td>" . PHP_EOL; } else { $csv_html .= "<td>{$v}</td>" . PHP_EOL; } } $csv_html .= "</tr>" . PHP_EOL; $idx++; } } elseif ($tp == 'f271') { // array('PtName', 'RspDate', 'Trace', 'Status', 'BHT03', 'FileName', 'Payer'); foreach ($csv_d as $val) { $bgc = $idx % 2 == 1 ? 'odd' : 'even'; $csv_html .= "<tr class='{$bgc}'>" . PHP_EOL; // needed values for links $fn = $val['FileName']; $bht03 = $val['BHT03']; foreach ($val as $k => $v) { if ($k == 'RspDate') { $csv_html .= "<td>" . substr($v, 0, 4) . '-' . substr($v, 4, 2) . '-' . substr($v, 6, 2) . "</td>" . PHP_EOL; } elseif ($k == 'BHT03') { $csv_html .= "<td>{$v} <a class='{$cls}' href='edih_main.php?gtbl=claim&fname={$fn}&ftype={$tp}&bht03={$v}&fmt=htm'>H</a> " . PHP_EOL; $csv_html .= " <a class='seg' target='_blank' href='edih_main.php?gtbl=claim&fname={$fn}&ftype={$tp}&bht03={$v}&fmt=seg'>T</a></td>" . PHP_EOL; } elseif ($k == 'FileName') { $csv_html .= "<td title='{$v}'> File <a class='{$cls}' href='edih_main.php?gtbl=file&fname={$fn}&ftype={$tp}&fmt=htm'>H</a> "; $csv_html .= " <a class='{$cls}' href='edih_main.php?gtbl=file&fname={$fn}&ftype={$tp}&fmt=seg'>T</a></td>" . PHP_EOL; } else { $csv_html .= "<td>{$v}</td>" . PHP_EOL; } } $csv_html .= "</tr>" . PHP_EOL; $idx++; } } elseif ($tp == 'f278') { // array('PtName', 'FileDate', 'Trace', 'Status', 'BHT03', 'FileName', 'Auth', 'Payer') foreach ($csv_d as $val) { $bgc = $idx % 2 == 1 ? 'odd' : 'even'; $csv_html .= "<tr class='{$bgc}'>" . PHP_EOL; // needed values for links $fn = $val['FileName']; $bht03 = $val['BHT03']; foreach ($val as $k => $v) { if ($k == 'FileDate') { $csv_html .= "<td>" . substr($v, 0, 4) . '-' . substr($v, 4, 2) . '-' . substr($v, 6, 2) . "</td>" . PHP_EOL; } elseif ($k == 'BHT03') { $csv_html .= "<td>{$v} <a class='{$cls}' href='edih_main.php?gtbl=claim&fname={$fn}&ftype={$tp}&bht03={$v}&fmt=htm'>H</a> " . PHP_EOL; $csv_html .= " <a class='seg' href='edih_main.php?gtbl=claim&fname={$fn}&ftype={$tp}&bht03={$v}&fmt=seg'>T</a></td>" . PHP_EOL; } elseif ($k == 'FileName') { $csv_html .= "<td title='{$v}'> File <a class='{$cls}' href='edih_main.php?gtbl=file&fname={$v}&ftype={$tp}&fmt=htm'>H</a> "; $csv_html .= " <a class='{$cls}' href='edih_main.php?gtbl=file&fname={$v}&ftype={$tp}&fmt=seg'>T</a></td>" . PHP_EOL; } else { $csv_html .= "<td>{$v}</td>" . PHP_EOL; } } $csv_html .= "</tr>" . PHP_EOL; $idx++; } } elseif ($tp == 'f997') { // array('PtName', 'RspDate', 'Trace', 'Status', 'Control', 'FileName', 'RspType', 'err_seg'); foreach ($csv_d as $val) { $bgc = $idx % 2 == 1 ? 'odd' : 'even'; $csv_html .= "<tr class='{$bgc}'>" . PHP_EOL; // needed values for links $fn = $val['FileName']; $rsp = $val['RspType']; $err = $val['err_seg']; foreach ($val as $k => $v) { if ($k == 'RspDate') { $csv_html .= "<td>" . substr($v, 0, 4) . '-' . substr($v, 4, 2) . '-' . substr($v, 6, 2) . "</td>" . PHP_EOL; } elseif ($k == 'FileName') { $csv_html .= "<td><a class='seg' href='edih_main.php?gtbl=file&fname={$v}&ftype={$tp}&fmt=seg'>{$v}</a></td>" . PHP_EOL; } elseif ($k == 'Trace') { $csv_html .= "<td><a class='seg' href='edih_main.php?gtbl=claim&fname={$fn}&ftype={$tp}&trace={$v}&rsptype={$rsp}&err={$err}&fmt=seg'>{$v}</a></td>" . PHP_EOL; } elseif ($k == 'err_seg') { $csv_html .= "<td title='{$v}'>" . substr($v, 0, 8) . "...</td>" . PHP_EOL; } else { $csv_html .= "<td>{$v}</td>" . PHP_EOL; } } $csv_html .= "</tr>" . PHP_EOL; $idx++; } } else { // all types in the tables are covered in an elseif, so this is unexpected foreach ($csv_d as $val) { $bgc = $idx % 2 == 1 ? 'odd' : 'even'; $csv_html .= "<tr class='{$bgc}'>" . PHP_EOL; foreach ($val as $k => $v) { if ($k == 'FileName') { $csv_html .= "<td><a class='{$cls}' href='edih_main.php?gtbl=file&fname={$v}&ftype={$tp}&fmt=seg'>{$v}</a></td>" . PHP_EOL; } else { $csv_html .= "<td>{$v}</td>" . PHP_EOL; } } $csv_html .= "</tr>" . PHP_EOL; $idx++; } } } // end body of the table //$csv_html .= "</tbody>".PHP_EOL."</table>".PHP_EOL."</div>".PHP_EOL; $csv_html .= "</tbody>" . PHP_EOL . "</table>" . PHP_EOL; // return $csv_html; }
/** * list claim records with Denied or Reject status in given file * * @param string * @param string * * @return array */ function csv_denied_by_file($filetype, $filename, $trace = '') { // $ret_ar = array(); $ft = csv_file_type($filetype); if (strpos('|f997|f271|f277|f835', $ft)) { $param = csv_parameters($ft); $csv_file = $param['claims_csv']; } else { csv_edihist_log("csv_errors_by_file: incorrect file type {$filetype}"); return $ret_ar; } // csv_edihist_log("csv_errors_by_file: {$ft} searching {$filename} with trace {$trace}"); // if (($fh1 = fopen($csv_file, "r")) !== false) { if ($ft == 'f835') { while (($data = fgetcsv($fh1, 1024, ",")) !== false) { // check filename, then status if ($trace) { if ($data[4] == $trace) { if (!in_array($data[3], array('1', '2', '3', '19', '20', '21'))) { $ret_ar[] = $data; } } } elseif ($data[5] == $filename) { if (!in_array($data[3], array('1', '2', '3', '19', '20', '21'))) { $ret_ar[] = $data; } } } } elseif ($ft == 'f277') { while (($data = fgetcsv($fh1, 1024, ",")) !== false) { if ($data[5] == $filename) { if (!strpos('|A1|A2|A5', substr($data[3], 0, 2))) { $ret_ar[] = $data; } } } } elseif (strpos('|f997|f999|f271', $ft)) { while (($data = fgetcsv($fh1, 1024, ",")) !== false) { if ($data[5] == $filename) { if ($data[3] !== 'A') { $ret_ar[] = $data; } } } } else { csv_edihist_log("csv_errors_by_file: file type did not match {$filetype}"); } fclose($fh1); } // return $ret_ar; }
/** * Display of x12 edi transaction listing or all segments in the files. * When using $err_info, you must use the filepath of the submitted file * * @param string $filepath path to desired file * @param string $filetype used when filepath is just filename * @param string optional $claimid CLM01, or BHT03 to identify a transaction or a trace value * @param bool false: $claimid is pt transaction, true: $claimid is trace from 835 or 999 * @param string optional $err_info the prepared error info from a 997/999 response * @return string html for display of file segments */ function edih_display_text($filepath, $filetype = '', $claimid = '', $trace = false, $err_info = '') { // $str_html = ''; $de = ''; $segments = ''; $stsegkey = ''; $ft = $filetype ? $filetype : ''; $errs = strlen($err_info) ? $err_info : ''; $bht03 = ''; // // verify x12 file $x12obj = csv_check_x12_obj($filepath, $ft); // if ($x12obj && 'edih_x12_file' == get_class($x12obj)) { $ftype = $x12obj->edih_type(); $ft = csv_file_type($ftype); $delims = $x12obj->edih_delimiters(); $de = $delims['e']; $fn = $x12obj->edih_filename(); $segs_ar = $x12obj->edih_segments(); $env_ar = $x12obj->edih_envelopes(); if (!$de || strlen($de) != 1) { // error in object // debug $str_html = 'edih_display_text(): error in delimiters<br />' . PHP_EOL; $str_html .= $x12obj->edih_message() . PHP_EOL; return $str_html; } if (!is_array($segs_ar) || !count($segs_ar)) { // unknown error $str_html = "<p>unknown error retrieving segments for {$fn}</p>" . PHP_EOL; $str_html .= $x12obj->edih_message() . PHP_EOL; return $str_html; } } else { //debug csv_edihist_log('edih_transaction_text(): invalid path ' . $filepath); $str_html = 'edih_display_text(): error accessing file<br />' . PHP_EOL; return $str_html; } // if ($claimid) { // claimid can be for transaction, payment, or error response if ($trace && array_key_exists($claimid, $env_ar['ISA'])) { $arg_ar = array('ISA13' => $claimid, 'keys' => true); $segments = $x12obj->edih_x12_slice($arg_ar); } else { // claimid alone can be clm01 or bht03, if trace=true, expect trn02 for claimid foreach ($env_ar['ST'] as $st) { if ($trace && $claimid == $st['trace']) { $arg_ar = array('ISA13' => $st['icn'], 'GS06' => $st['gsn'], 'trace' => $claimid, 'keys' => true); $segments = $x12obj->edih_x12_slice($arg_ar); break; } elseif (in_array($claimid, $st['acct'])) { if ($errs) { $arg_ar = array('ST02' => $st['stn'], 'ISA13' => $st['icn'], 'GS06' => $st['gsn'], 'keys' => true); $segments = $x12obj->edih_x12_slice($arg_ar); } else { // request for individual transaction segments $segments = $x12obj->edih_x12_transaction($claimid); } break; } elseif (in_array($claimid, $st['bht03'])) { // also possible that bht03 number is given for claimid // this will likely be a 27x if ($errs) { $arg_ar = array('ST02' => $st['stn'], 'ISA13' => $st['icn'], 'GS06' => $st['gsn'], 'keys' => true); $segments = $x12obj->edih_x12_slice($arg_ar); } else { $segments = $x12obj->edih_x12_transaction($claimid); } $bht03 = $claimid; break; } } } } else { $segments = $segs_ar; } // // now check if we have segments if (empty($segments) || !count($segments)) { if ($claimid) { $str_html = "<p>error: transaction {$claimid} not found in {$fn}</p>" . PHP_EOL; $str_html .= $x12obj->edih_message() . PHP_EOL; return $str_html; } else { // unknown error $str_html = "<p>unknown error retrieving segments for {$fn}</p>" . PHP_EOL; $str_html .= $x12obj->edih_message() . PHP_EOL; return $str_html; } } // if the segments are from a slice or transaction // a multidimensional array segs[i][j] must be flattened $ar_sngl = csv_singlerecord_test($segments); // false when segments are a transaction or trace only if (!$ar_sngl) { // // append segments to single array // keys should not duplicate since all segments // are from the same x12 file $trnsegs = array(); for ($i = 0; $i < count($segments); $i++) { $trnsegs = array_merge($trnsegs, $segments[$i]); } $segments = $trnsegs; unset($trnsegs); } // $capstr = ''; $tbl_id = $claimid ? $claimid : $fn; // //'HB'=>'271', 'HS'=>'270', 'HR'=>'276', 'HI'=>'278','HN'=>'277', 'HP'=>'835', 'FA'=>'999', 'HC'=>'837'); switch ((string) $ftype) { case 'HC': $capstr = "Claim "; //$cls = "txt837"; $trn_html = edih_837_text($segments, $de, $errs); break; case 'HP': $capstr = "Payment "; //$cls = "txt835"; $trn_html = edih_835_text($segments, $de); break; case 'HR': $capstr = "Status Query "; //$cls = "txt276"; $trn_html = edih_277_text($segments, $de, $errs); break; case 'HN': $capstr = "Claim Status "; //$cls = "txt277"; $trn_html = edih_277_text($segments, $de, $stsegkey); break; case 'HS': $capstr = "Eligibility Query "; //$cls = "txt270"; $trn_html = edih_271_text($segments, $de, $errs); break; case 'HB': $capstr = "Eligibility Report "; //$cls = "txt271"; $trn_html = edih_271_text($segments, $de); break; case 'HI': $capstr = "Authorization "; //$cls = "txt278"; $trn_html = edih_278_text($segments, $de, $errs); break; case 'FA': $capstr = "Batch Acknowledgment "; //$cls = "txt997"; $trn_html = edih_997_text($segments, $de); break; default: $capstr = "x12 {$ftype} "; //$cls = "txt_x12"; $trn_html = edih_segments_text($segments, $de); break; } // $capstr .= $claimid ? " <em>ID:</em> {$claimid}" : ""; // $str_html .= "<table id={$tbl_id} cols=3 class='segtxt'><caption>{$capstr}</caption>" . PHP_EOL; $str_html .= "<thead>" . PHP_EOL; $str_html .= "<tr><th class='btloop'>Loop</th><th class='btloop'>Num</th>"; $str_html .= "<th class='segtxt'>Segment (<em>File:</em> {$fn})</th></tr>" . PHP_EOL; $str_html .= "</thead>" . PHP_EOL . "<tbody>" . PHP_EOL; // $str_html .= $trn_html; // $str_html .= "</tbody></table>" . PHP_EOL; // return $str_html; }
/** * parse an x12 270/271 file into data rows for csv tables * * @param object x12_file_object * @return array */ function edih_271_csv_data($obj270) { //'f270 claim = array('PtName', 'ReqDate', 'PtAcct', 'InsLevel', 'BHT03', 'FileName', 'Payer'); //'f270 file = array('Date', 'FileName', 'Control', 'Claim_ct', 'x12_partner'); //'f271 file = array('Date', 'FileName', 'Control', 'Claim_ct', 'Denied', 'Payer'); //'f271 claim = array('PtName', 'RspDate', 'Trace', 'Status', 'BHT03', 'FileName', 'Payer'); // $ret_ar = array(); // $de = $obj270->edih_delimiters()['e']; $ds = $obj270->edih_delimiters()['s']; $fn = $obj270->edih_filename(); $seg_ar = $obj270->edih_segments(); $env_ar = $obj270->edih_envelopes(); $ft = csv_file_type($obj270->edih_type()); // // $rsptype = array('HS'=>'270', 'HB'=>'271', 'HC'=>'837', 'HR'=>'276', 'HI'=>'278'); if (!isset($env_ar['ST'])) { csv_edihist_log('edih_271_csv_data: envelope error ' . $fn); return $ret_ar; } // if (!isset($env_ar['GS'])) { csv_edihist_log('edih_271_csv_data: envelope error'); return $ret_ar; } // foreach ($env_ar['ISA'] as $icn => $isa) { // array('Date', 'FileName', 'Control', 'ta1ctrl', 'RejCt'); $ret_ar[$icn]['type'] = $ft; $ret_ar[$icn]['claim'] = array(); $ret_ar[$icn]['file'] = array(); $rspdate = $isa['date']; $x12ptnr = $isa['receiver']; // foreach ($env_ar['GS'] as $gs) { if ($gs['icn'] == $icn) { $gsdate = $gs['date']; break; } } foreach ($env_ar['ST'] as $st) { // if ($st['icn'] != $icn) { continue; } // $stsegs = array_slice($seg_ar, $st['start'], $st['count']); $loopid = '0'; $hl = 0; // $isaicn = $st['icn']; $stn = $st['stn']; $has_le = false; // // for "claim" array // 'f270' array('PtName', 'ReqDate', 'Trace', 'InsBnft', 'BHT03', 'FileName', 'Payer'); break; // 'f271'array('PtName', 'RspDate', 'Trace', 'Status', 'BHT03', 'FileName', 'Payer'); break; // foreach ($stsegs as $seg) { // if (strncmp($seg, 'BHT' . $de, 4) === 0) { // new transaction $cdx = isset($ret_ar[$icn]['claim']) ? count($ret_ar[$icn]['claim']) : 0; // $sar = explode($de, $seg); // $isrqst = isset($sar[2]) && $sar[2] == '13' ? true : false; $isrsp = isset($sar[2]) && $sar[2] == '11' ? true : false; $loopid = 0; $bnfteq = ''; $rej_ct = 0; // $dtkey = $ft == 'f271' ? 'RspDate' : 'ReqDate'; // $ret_ar[$icn]['claim'][$cdx]['PtName'] = ''; $ret_ar[$icn]['claim'][$cdx][$dtkey] = $gsdate; $ret_ar[$icn]['claim'][$cdx]['Trace'] = ''; if ($isrsp || $ft == 'f271') { $ret_ar[$icn]['claim'][$cdx]['Status'] = 'A'; // 271 $ret_ar[$icn]['claim'][$cdx]['BHT03'] = isset($sar[3]) ? $sar[3] : ''; //bht03 = $sar[3]; } else { $ret_ar[$icn]['claim'][$cdx]['InsBnft'] = ''; // 270 $ret_ar[$icn]['claim'][$cdx]['BHT03'] = sprintf("%s%04d", $isaicn, $stn); } $ret_ar[$icn]['claim'][$cdx]['FileName'] = $fn; $ret_ar[$icn]['claim'][$cdx]['Payer'] = ''; // continue; } // if (strncmp($seg, 'HL' . $de, 3) === 0) { $sar = explode($de, $seg); $hl = $sar[1]; $hlpc = $sar[2]; // parent code $hllc = $sar[3]; $hlcc = isset($sar[4]) ? $sar[4] : ''; // child code if ($sar[3] == '20') { // level code $loopid = '2000A'; // info source (payer) } elseif ($sar[3] == '21') { $loopid = '2000B'; // info receiver (clinic) } elseif ($sar[3] == '22') { $loopid = '2000C'; // subscriber } elseif ($sar[3] == '23') { $loopid = '2000D'; // dependent } else { //debug csv_edihist_log('HL has no level ' . $seg . ' in ' . $fn); } continue; } // if (strncmp($seg, 'NM1' . $de, 4) === 0) { $sar = explode($de, $seg); $nm1 = $sar[3]; $nm1 = $sar[4] ? $nm1 . ', ' . $sar[4] : $nm1; $nm1 = $sar[5] ? $nm1 . ' ' . $sar[5] : $nm1; if ($loopid == '2000A') { $ret_ar[$icn]['claim'][$cdx]['Payer'] = $nm1; // $payer_name = $nm1; } elseif ($loopid == '2000C' || $loopid == '2000D') { $ret_ar[$icn]['claim'][$cdx]['PtName'] = $nm1; //$ptname = $nm1; } continue; } // for 271 eligibility response (invalid data in 270 request) if (strncmp($seg, 'AAA' . $de, 4) === 0) { $sar = explode($de, $seg); $status = 'R'; $rej_ct++; $aaa_code = $sar[3]; $rsp_code = $sar[4]; if ($loopid == '2000A') { $status = $status . ' Src ' . $aaa_code; } elseif ($loopid == '2000B') { $status = $status . ' Rcv ' . $aaa_code; } elseif ($loopid == '2000C') { $status = $status . ' Sbr ' . $aaa_code; } elseif ($loopid == '2000D') { $status = $status . ' Dep ' . $aaa_code; } // $ret_ar[$icn]['claim'][$cdx]['Status'] = $status; // continue; } // // for 270 eligibility request if (strncmp($seg, 'EQ' . $de, 3) === 0) { if (strlen((string) $sar[1])) { $bnfteq .= $bnfteq ? '|' . $sar[1] : $sar[1]; } elseif (strlen((string) $sar[2])) { $bnfteq .= $bnfteq ? '|' . $sar[2] : $sar[2]; } else { csv_edihist_log('Invalid EQ segment, missing benefit type in ' . $fn); continue; } $ret_ar[$icn]['claim'][$cdx]['InsBnft'] = $bnfteq; continue; } // overridden by REF*EJ* (not) if (strncmp($seg, 'TRN' . $de, 4) === 0) { if ($loopid = '2000C' || $loopid == '2000D') { $sar = explode($de, $seg); $ret_ar[$icn]['claim'][$cdx]['Trace'] = $sar[2]; //$ptacct = $sar[2]; } // continue; } // for 271 eligibility response if (strncmp($seg, 'EB' . $de, 3) === 0) { $status = isset($status) ? $status : ''; // if (strpos($ret_ar[$icn]['claim'][$cdx]['Status'], 'tive')) { continue; } // $sar = explode($de, $seg); // if (isset($sar[2])) { if ($sar[2] == '6' || $sar[2] == '7' || $sar[2] == '8') { $status = 'Inactive'; } elseif ($sar[2] == 'I') { $status = 'Non-Covered'; $rej_ct++; } elseif ($sar[2] == 'E') { $status = 'Exclusions'; $rej_ct++; } elseif ($sar[2] == 'N') { $status = 'Restricted'; $rej_ct++; } elseif ($sar[2] == 'V') { $status = 'Unknown'; $rej_ct++; } elseif ($sar[2] == 'T') { $status = 'Card Lost'; $rej_ct++; } elseif ($sar[2] == 'U') { $status = 'Contact'; $rej_ct++; } elseif ($sar[2] == '1') { $status = 'Active'; } elseif ($sar[2] == '2' || $sar[2] == '3' || $sar[2] == '4') { $status = 'Active Cap'; } } // $ret_ar[$icn]['claim'][$cdx]['Status'] = $status; // continue; } // if (strncmp($seg, 'DTP' . $de, 4) === 0) { $sar = explode($de, $seg); $dtp03 = isset($sar[2]) && $sar[2] == 'D8' ? $sar[3] : substr($sar[3], 0, 8); if ($isrsp) { if ($loopid == '2100C' || $loopid == '2110C') { $ret_ar[$icn]['claim'][$cdx]['RspDate'] = $dtp03; } elseif ($loopid == '2100D' || $loopid == '2110D') { $ret_ar[$icn]['claim'][$cdx]['RspDate'] = $dtp03; } } else { if ($loopid == '2100C' || $loopid == '2110C') { $ret_ar[$icn]['claim'][$cdx]['ReqDate'] = $dtp03; } elseif ($loopid == '2100D' || $loopid == '2110D') { $ret_ar[$icn]['claim'][$cdx]['ReqDate'] = $dtp03; } } // continue; } // /* if (strncmp($seg, 'REF'.$de.'EJ'.$de, 7) === 0 ) { // patient account -- replaces or replaced by TRN02 $sar = explode($de, $seg); $ret_ar[$icn]['claim'][$cdx]['PtAcct'] = $sar[2]; //$ptacct = $sar[2]; // continue; } */ // } // end foreach($stsegs as $seg) // } // endforeach($env_ar['ST'] as $st // file: 'f271': array('Date', 'FileName', 'Control', 'Claim_ct', 'Reject', 'Payer') $fdx = count($ret_ar[$icn]['file']); //'f270': $hdr = array('Date', 'FileName', 'Control', 'Claim_ct', 'x12Partner'); $ret_ar[$icn]['file'][$fdx]['Date'] = $gsdate; $ret_ar[$icn]['file'][$fdx]['FileName'] = $fn; // for 270 type, could use GSO6 if it were unique $ret_ar[$icn]['file'][$fdx]['Control'] = $icn; $ret_ar[$icn]['file'][$fdx]['Claim_ct'] = $cdx; if ($isrsp || $ft == 'f271') { $ret_ar[$icn]['file'][$fdx]['Reject'] = $rej_ct; $ret_ar[$icn]['file'][$fdx]['Payer'] = $payer_name; } else { $ret_ar[$icn]['file'][$fdx]['x12Partner'] = $x12ptnr; } // } // endforeach($env_ar['ISA'] as $icn=>$isa) // return $ret_ar; }
/** * display the contents of an x12_edi transaction selected from * a csv table or processed files table * * @uses csv_file_by_enctr() * @uses csv_file_by_controlnum() * @uses ibr_batch_get_st_block() * @return string */ function edih_disp_x12trans() { // // query source ['gtbl'] file claim hist // // file: FileName fname=$fn1&ftype=$ft&fmt=htm' filename x12type format // file: Control fname=$fn1&ftype=$ft&icn=$ctl&fmt=seg filename x12type isa13 format // file: Trace trace=$tr&ftype=$typ&fmt=htm trace x12type format // // claim: FileName fname=$fn1&ftype=$ft&fmt=htm filename x12type format:html // claim: Control fname=$fn1&ftype=$ft&icn=$ctl&fmt=seg filename x12type icn format:segment text // claim: CLM01 fname=$fn1&ftype=$ft&pid=$pid filename x12type pid-enctr // claim: Status fname=fname=$fn1&ftype=$ft&pid=$pid&summary=yes filename x12type pid-enctr summary // claim: Status fname=$fn1&ftype=$ft&pid=$pid&summary=no' filename x12type pid-enctr detail // claim: Trace (835) fname=$fn1&ftype=$ft&trace=$trc trace filename x12type // claim: Trace (999) trace=$trc&rsptype=$typ&ftype=$ft trace(bht03syn) response-type x12type // claim: Trace (277) trace=$v&ftype=$tp&rsptype=f837&fmt=seg' trace(clm01) response-type {837) x12type // claim: BHT03 (27x) fname=$fn1&ftype=$ft&bht03=$bht03&fmt=htm filename x12type bht03 // claim: err_seg fname=$fn1&ftype=$ft&trace=$trc&rsptype=$typ&err=$err filename x12type trace(bht03syn) response_type error_segment // // use files (1) x12 display of file segments (2) 835 html RA or Payment Trace (3) trace from 997 or 271/277/278 // $fn or $icn & $ft $fn $icn $trace & $ft $trace & $rsptype // claims (1) html of transaction (2) segments of transaction (3) trace to precedent transaction // $fn & $ft $ pid $trace & $rsptype // $str_htm = ''; if (isset($_GET['gtbl'])) { $qs = filter_input(INPUT_GET, 'gtbl', FILTER_SANITIZE_STRING); } if (!$qs) { $str_htm .= '<p>edih_disp_x12 error: missing parameter</p>'; csv_edihist_log("edih_io_disp_x12: missing parameter, no 'gtbl' value"); return $str_htm; } // $fmt = isset($_GET['fmt']) ? filter_input(INPUT_GET, 'fmt', FILTER_SANITIZE_STRING) : ''; // $fn = isset($_GET['fname']) ? filter_input(INPUT_GET, 'fname', FILTER_SANITIZE_STRING) : ''; $ft = isset($_GET['ftype']) ? filter_input(INPUT_GET, 'ftype', FILTER_SANITIZE_STRING) : ''; $icn = isset($_GET['icn']) ? filter_input(INPUT_GET, 'icn', FILTER_SANITIZE_STRING) : ''; $rsptype = isset($_GET['rsptype']) ? filter_input(INPUT_GET, 'rsptype', FILTER_SANITIZE_STRING) : ''; // $clm01 = isset($_GET['pid']) ? filter_input(INPUT_GET, 'pid', FILTER_SANITIZE_STRING) : ''; $trace = isset($_GET['trace']) ? filter_input(INPUT_GET, 'trace', FILTER_SANITIZE_STRING) : ''; $bht03 = isset($_GET['bht03']) ? filter_input(INPUT_GET, 'bht03', FILTER_SANITIZE_STRING) : ''; $err = isset($_GET['err']) ? filter_input(INPUT_GET, 'err', FILTER_SANITIZE_STRING) : ''; $summary = isset($_GET['summary']) ? filter_input(INPUT_GET, 'summary', FILTER_SANITIZE_STRING) : false; // // debug //$str_htm .= "<p>edih_disp_x12trans values: <br>".PHP_EOL; //$str_htm .= "qs $qs fmt $fmt fn $fn ft $ft icn $icn rsptype $rsptype clm01 $clm01 trace $trace bht03 $bht03 err $err summary $summary</p>".PHP_EOL; // if ($ft) { $ft = csv_file_type($ft); } // if ($qs == 'claim') { if ($ft == 'f997') { if ($trace && $rsptype) { $fname = csv_file_by_trace($trace, $ft, $rsptype); if ($fname) { $str_htm .= edih_display_text($fname, $rsptype, $trace, $err); } else { $str_htm .= "<p>Did not find {$trace} in the {$rsptype} claims table.</p>"; } //$fnar = csv_file_by_enctr($trace, $rsptype, $srchtype='ptidn' ); //if (is_array($fnar) && count($fnar)) { //foreach($fnar as $fa) { //$fname = $fa['FileName']; //$str_htm .= edih_display_text($fname, $rsptype, $trace, $err); //} //} else { //$str_htm .= "<p>Did not find $trace in the $rsptype claims table.</p>"; //} } } elseif ($ft == 'f837') { // either transaction or file $str_htm .= edih_display_text($fn, $ft, $clm01); } elseif ($ft == 'f835') { if ($fmt == 'seg') { // either transaction or file $str_htm .= edih_display_text($fn, $ft, $clm01); } elseif ($trace) { // the check trace $str_htm .= edih_835_html($fn, $trace); } elseif ($clm01) { // this claim payment $str_htm .= edih_835_html($fn, '', $clm01, $summary); } } elseif (strpos('|f270|f271|f276|f277|f278', $ft)) { if ($fmt == 'seg') { if ($trace && $rsptype) { // 270|276|278|837 claim or request segments // here the 'trace' is from trace or clm01 //$fnar = csv_file_by_enctr($trace, $rsptype, $srchtype='ptidn' ); //if (is_array($fnar) && count($fnar)) { //foreach($fnar as $fa) { //$fname = $fa['FileName']; //$str_htm .= edih_display_text($fname, $rsptype, $trace); //} $fname = csv_file_by_trace($trace, $ft, $rsptype); if ($fname) { $str_htm .= edih_display_text($fname, $rsptype, $trace); } else { $str_htm .= "<p>Did not find {$trace} in type {$rsptype} csv_claims table</p>" . PHP_EOL; csv_edihist_log("edih_disp_x12trans: Did not find {$trace} in type {$rsptype} csv_claims table"); } } else { // entire file or transaction if bht03 has a value $str_htm .= edih_display_text($fn, $ft, $bht03); } } else { // html format if ($ft == 'f277') { $str_htm .= edih_277_html($fn, $bht03); } elseif ($ft == 'f271') { $str_htm .= edih_271_html($fn, $bht03); } elseif ($ft == 'f278') { $str_htm .= edih_278_html($fn, $bht03); } else { // html display not available, use segments $str_htm .= edih_display_text($fn, $ft, $bht03); } } } } elseif ($qs == 'hist') { if ($fn && $ft == 'f837') { if ($clm01) { $str_htm .= edih_display_text($fn, $ft, $clm01); } else { $str_htm .= edih_display_text($fn, $ft); } } elseif ($fn && $ft == 'f997') { if ($trace && $rsptype && $err) { $str_htm .= edih_display_text($fn, $rsptype, $trace, true, $err); } elseif ($trace && $rsptype) { $str_htm .= edih_display_text($fn, $rsptype); } else { $str_htm .= edih_display_text($fn, $ft); } } elseif ($fn && $ft == 'f277') { if ($trace && $rsptype) { $fname = csv_file_by_trace($trace, $ft, $rsptype); if ($fname) { $str_htm .= edih_display_text($fname, $rsptype, $trace); } else { $str_htm .= "<p>Did not find {$trace} in type {$rsptype} csv_claims table</p>" . PHP_EOL; csv_edihist_log("edih_disp_x12trans: Did not find {$trace} in type {$rsptype} csv_claims table"); } } elseif ($clm01) { $str_htm .= edih_277_html($fn, $clm01); } elseif ($bht03) { $str_htm .= edih_277_html($fn, $bht03); } else { $str_htm .= edih_display_text($fn, $ft); } } elseif ($fn && $ft == 'f835') { if ($clm01) { if ($summary == 'yes') { $str_htm .= edih_835_html($fn, '', $clm01, true); } else { $str_htm .= edih_835_html($fn, '', $clm01); } } elseif ($trace) { $str_htm .= edih_835_html($fn, $trace); } } } else { $str_htm .= 'error: could not process request.'; } return $str_htm; }