/** * Append rows to one of the csv record files. * * @uses csv_singlerecord_test() * @uses csv_parameters() * @uses csv_files_header() * @param array $csv_data the data array, either file data or claim data * @param string $file_type which of our file types to use * @param string $csv_type either 'claim' or 'file' * @return int number of characters written per fputcsv() */ function csv_write_record($csv_data, $file_type, $csv_type) { // if (!is_array($csv_data)) { return FALSE; } // use CSV_RECORD class to write ibr or ebr claims data to the csv file // csv, batch, ibr, ebr, f997, or era if (!strpos("|era|f997|ibr|ebr|dpr|f277|batch|ta1|ack", $file_type)) { csv_edihist_log("csv_write_record error: incorrect file type {$file_type}"); return FALSE; } $ft = $file_type; $ft = strpos("|835", $file_type) ? 'era' : $ft; $ft = strpos("|837", $file_type) ? 'batch' : $ft; $ft = strpos("|999|ack|ta1", $file_type) ? 'f997' : $ft; $params = csv_parameters($ft); // if ($csv_type == "claim") { $fp = $params['claims_csv']; } elseif ($csv_type == "file") { $fp = $params['files_csv']; } else { csv_edihist_log("csv_writedata_csv error: incorrect csv type {$csv_type}"); return FALSE; } // $fh = fopen($fp, 'a'); // count characters written -- returned by fputcsv $indc = 0; // if we fail to open the file, return the result, expect FALSE if (!$fh) { return FALSE; } // test for a new file if (filesize($fp) === 0) { $ar_h = csv_files_header($file_type, $csv_type); $td = fgetcsv($fh); if ($td === FALSE || $td === NULL) { // assume we have an empty file // write header row if this is a new csv file if (count($ar_h)) { $indc += fputcsv($fh, $ar_h); } } } // test array for dimension counts $is_sngl = csv_singlerecord_test($csv_data); if ($is_sngl) { $indc += fputcsv($fh, $csv_data); } else { // multi-dimensional array -- we rely on array_flatten to // assure us that the array depth is 1 foreach ($csv_data as $row) { $wr = csv_array_flatten($row); // $wr is false if $row is not an array if ($wr) { $indc += fputcsv($fh, $wr); } else { continue; } } } fclose($fh); // return $indc; }
/** * 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; }
/** * List files in the directory for the given type * * Write an entry in the log if an file is in the directory * that does not match the type * * @uses csv_parameters() * @param string $type a type from our list * @return array */ function csv_dirfile_list($type) { // return false if location is not appropriate $tp = csv_file_type($type); if (!$tp) { csv_edihist_log("csv_dirfile_list error: incorrect type {$type}"); return false; } $params = csv_parameters($tp); if (empty($params) || csv_singlerecord_test($params) == false) { csv_edihist_log("csv_dirfile_list() error: incorrect type {$type}"); return false; } $search_dir = $params['directory']; $ext_re = $params['regex']; $dirfiles = array(); // if (is_dir($search_dir)) { if ($dh = opendir($search_dir)) { while (($file = readdir($dh)) !== false) { if ($file == '.' || $file == '..') { continue; } elseif ($tp == 'f837' && ($file == 'history' || $file == 'README.txt')) { continue; } elseif (is_file($search_dir . DS . $file)) { $dirfiles[] = $file; } else { if ($tp == 'f837' && $file == 'history') { continue; } csv_edihist_log("csv_dirfile_list {$type} : not a file {$file}"); } } } else { csv_edihist_log("csv_dirfile_list {$type} : error in scan {$search_dir}"); } } else { csv_edihist_log("csv_dirfile_list {$type} : not a directory {$search_dir}"); } // return $dirfiles; }
/** * Create html string for an x12 835 claim payment * * @param array * @param object * @param object * @param array * @param string * * @return string */ function edih_835_transaction_html($trans_array, $codes27x, $codes835, $delimiters, $fname = '') { // $str_html = ""; if (is_array($trans_array) && count($trans_array)) { if (csv_singlerecord_test($trans_array)) { $clp_ar = array(); $clp_ar[] = $trans_array; } else { $clp_ar = $trans_array; } } else { csv_edihist_log("edih_835_transaction_html: Did not get transaction segments"); $str_html .= "<p>Did not get transaction segments</p>" . PHP_EOL; return $str_html; } $de = isset($delimiters['e']) ? $delimiters['e'] : ""; $ds = isset($delimiters['s']) ? $delimiters['s'] : ""; $dr = isset($delimiters['r']) ? $delimiters['r'] : ""; // if (!$de || !$ds) { csv_edihist_log("edih_835_transaction_html: Did not get delimiters"); $str_html .= "<p>Did not get delimiters</p>" . PHP_EOL; return $str_html; } // $fn = $fname ? trim($fname) : ""; // // get the code objects right $cd835 = $cd27x = ''; if ('edih_835_codes' == get_class($codes835)) { $cd835 = $codes835; } elseif ('edih_835_codes' == get_class($codes27x)) { $cd835 = $codes27x; } if ('edih_271_codes' == get_class($codes27x)) { $cd27x = $codes27x; } elseif ('edih_271_codes' == get_class($codes835)) { $cd27x = $codes835; } if (!$cd835 || !$cd27x) { csv_edihist_log('edih_835_payment_html: invalid code class argument'); $str_html .= "<p>invalid code class argument</p>" . PHP_EOL; return $str_html; } // $str_html = ""; // $tblid = ""; $capstr = ""; $mia_str = ""; // $hdr_html = "<tr><th>Reference</th><th colspan=3>Information {$fn}</th></tr>" . PHP_EOL; $hdr_html .= "</thead>" . PHP_EOL . "<tbody>" . PHP_EOL; $clp_html = ""; $svc_html = ""; $sbr_html = ""; $moa_html = ""; // foreach ($clp_ar as $trans) { $lq_ar = array(); $cas_ar = array(); $moa_ar = array(); $rarc_str = ""; $clp_html = ""; $svc_html = ""; $sbr_html = ""; $moa_html = ""; foreach ($trans as $seg) { // if (strncmp('REF' . $de, $seg, 4) === 0) { $sar = explode($de, $seg); // if (isset($sar[1]) && $sar[1]) { if ($sar[1] == 'LU') { $ref01 = 'Location'; $ref02 = isset($sar[2]) ? $cd27x->get_271_code('POS', $sar[2]) : ''; } else { // entity ID code $ref01 = isset($sar[1]) ? $cd27x->get_271_code('REF', $sar[1]) : ''; // entity ID $ref02 = isset($sar[2]) ? $sar[2] : ''; } // if ($loopid == '2100') { $clp_html .= "<tr class='{$cls}'><td>></td><td colspan=3><em>{$ref01}</em> {$ref02}</td></tr>" . PHP_EOL; } elseif ($loopid == '2110') { $svc_html .= "<tr class='{$cls}'><td>></td><td colspan=3><em>{$ref01}</em> {$ref02}</td></tr>" . PHP_EOL; } } // continue; } // if (strncmp('DTM' . $de, $seg, 4) === 0) { $sar = explode($de, $seg); // DTM in 835 use DTP codes from 271 codes $dtm01 = isset($sar[1]) ? $cd27x->get_271_code('DTP', $sar[1]) : ''; // date qualifier $dtm02 = isset($sar[2]) ? edih_format_date($sar[2]) : ''; // production date $dtm05 = isset($sar[5]) ? $sar[5] : ''; $dtm06 = isset($sar[6]) ? edih_format_date($sar[2]) : ''; // //if ( $elem02 == 'D8' && $elem03) { //$dtmar = edih_format_date($elem03); //} elseif ( $elem02 == 'RD8' && $elem03) { //$dtmar = edih_format_date( substr($elem03, 0, 8) ); //$dtmar .= ' - '.edih_format_date( substr($elem03, -8) ); //} //} if ($loopid == '2100') { $clp_html .= "<tr class='{$cls}'><td>></td><td colspan=3><em>{$dtm01}</em> {$dtm02}</td></tr>" . PHP_EOL; } elseif ($loopid == '2110') { $svc_html .= "<tr class='{$cls}'><td>></td><td colspan=3><em>{$dtm01}</em> {$dtm02}</td></tr>" . PHP_EOL; } // continue; } // if (strncmp('PER' . $de, $seg, 4) === 0) { $sar = explode($de, $seg); // $per01_ar = array('CX' => 'Claims Dept', 'BL' => 'Technical Dept', 'IC' => 'Website'); $per01 = $per02 = $per03 = $per04 = $per05 = $per06 = $per07 = $per08 = ''; foreach ($sar as $k => $v) { switch ((int) $k) { case 0: break; case 1: $per01 = isset($per01_ar[$v]) ? $per01_ar[$v] : $v; break; case 2: $per02 = $v; break; case 3: $per03 = $v; break; case 4: $per04 = $per03 == 'TE' ? edih_format_telephone($v) : $v; break; case 5: $per05 = $v; break; case 6: $per06 = $per03 == 'TE' ? edih_format_telephone($v) : $v; break; case 7: $per07 = $v; break; case 8: $per08 = $per03 == 'TE' ? edih_format_telephone($v) : $v; } } // if ($loopid == '2100') { $clp_html .= "<tr class='{$cls}'><td>></td><td colspan=3>{$per01} {$per02} {$per03} {$per04} </td></tr>" . PHP_EOL; $clp_html .= $per05 || $per07 ? "<tr class='{$cls}'><td>></td><td colspan=3>{$per05} {$per06} {$per07} {$per08}</td></tr>" . PHP_EOL : ""; } // continue; } // if (strncmp('CLP' . $de, $seg, 4) === 0) { $sar = explode($de, $seg); $loopid = '2100'; $cls = 'clp'; // $clp01 = $clp02 = $clp03 = $clp04 = $clp05 = $clp06 = $clp07 = $clp08 = $clp09 = $clp11 = $clp12 = $clp13 = $capstr = ''; // $clp01 = isset($sar[1]) && $sar[1] ? $sar[1] : ''; // Pt ID CLM01 $clp02 = isset($sar[2]) && $sar[2] ? $cd835->get_835_code('CLAIM_STATUS', $sar[2]) : ''; // status code $clp03 = isset($sar[3]) && $sar[3] ? edih_format_money($sar[3]) : '0'; // fee amont $clp04 = isset($sar[4]) && $sar[4] ? edih_format_money($sar[4]) : '0'; // paid amount $clp05 = isset($sar[5]) && $sar[5] ? edih_format_money($sar[5]) : '0'; // pt responsibility amont $clp06 = isset($sar[6]) && $sar[6] ? $cd835->get_835_code('CLP06', $sar[6]) : ''; // filing indicator code $clp07 = isset($sar[7]) && $sar[7] ? $sar[7] : ''; // Payer reference ID $clp08 = isset($sar[8]) && $sar[8] ? "<em>Location</em> " . $cd27x->get_271_code('POS', $sar[8]) : ''; // Faciliy code place of service // frequency type code 1 original 7 replacement 8 void $clp09ar = array('1' => 'original', '7' => 'replacement', '8' => 'void'); if (isset($sar[9]) && array_key_exists($sar[9], $clp09ar)) { // claim frequency code $clp09 = "<em>Freq</em> " . $clp09ar[$sar[9]]; } else { $clp09 = isset($sar[9]) && $sar[9] ? "<em>Freq</em> " . $sar[9] : ""; } // DRG code not expected $clp11 = isset($sar[11]) && $sar[11] ? "<em>DRG Code</em> " . $sar[11] : ''; // DRG weight $clp12 = isset($sar[12]) && $sar[12] ? "<em>DRG Weight</em> " . $sar[12] : ''; // DRG percentage $clp13 = isset($sar[13]) && $sar[13] ? "<em>Dischg Frctn</em> " . edih_format_percent($sar[13]) : ''; // // table caption PtID PtName $capstr .= $clp01; $tblid = $clp01; // $clp_html .= "<tr class='{$cls}'><td><em>Pt ID</em> {$clp01}</td><td colspan=3><em>Status</em> {$clp02} <em>{$clp06}</em></td></tr>" . PHP_EOL; $clp_html .= "<tr class='{$cls}'><td>></td><td colspan=3><em>Fee</em> {$clp03} <em>Pmt</em> {$clp04} <em>PtRsp</em> {$clp05} <em>PR Ref</em> {$clp07} </td></tr>" . PHP_EOL; $clp_html .= $clp08 || $clp09 ? "<tr class='{$cls}'><td>></td><td colspan=3>{$clp08} {$clp09}</td></tr>" . PHP_EOL : ""; $clp_html .= $clp11 || $clp12 || $clp13 ? "<tr class='{$cls}'><td>></td><td colspan=3>{$clp11} {$clp12} {$clp13}</td></tr>" . PHP_EOL : ""; // continue; // } if (strncmp('CAS' . $de, $seg, 4) === 0) { $sar = explode($de, $seg); // claim adjustments $cls = $loopid == '2100' ? 'clp' : 'svc'; // claim adjustment group; expect CAS segment for each adjustment group if (isset($sar[1]) && $sar[1]) { $cas_ar[$loopid][$sar[1]] = array_chunk(array_slice($sar, 2), 3); // debug //echo '== array_chunk'.PHP_EOL; //var_dump( $cas_ar ).PHP_EOL; } // continue; // } // if (strncmp('NM1' . $de, $seg, 4) === 0) { $sar = explode($de, $seg); $nm1_str = ""; // if (isset($sar[1]) && $sar[1]) { if (strpos('|IL|QC|72', $sar[1])) { $cls = 'sbr'; } else { $cls = 'clp'; } $descr = $cd27x->get_271_code('NM101', $sar[1]); } else { $cls = 'clp'; $descr = ''; } // $name = isset($sar[3]) && $sar[3] ? $sar[3] : ""; $name .= isset($sar[7]) && $sar[7] ? " {$sar[7]}" : ""; $name .= isset($sar[4]) && $sar[4] ? ", {$sar[4]}" : ""; $name .= isset($sar[5]) && $sar[5] ? " {$sar[5]}" : ""; $name .= isset($sar[6]) && $sar[6] ? " {$sar[6]}" : ""; // $nm108 = isset($sar[8]) && $sar[8] ? $cd27x->get_271_code('NM108', $sar[8]) : ""; $nm109 = isset($sar[9]) && $sar[9] ? $sar[9] : ""; // complete table caption if (isset($sar[1]) && $sar[1] == "QC") { $capstr .= " {$name}"; } // if ($nm108) { $nm1_str .= "<tr class='{$cls}'><td><em>{$descr}</em></td><td colspan=3>{$name} <em>{$nm108}</em> {$nm109}</td></tr>" . PHP_EOL; } else { $nm1_str .= "<tr class='{$cls}'><td><em>{$descr}</em></td><td colspan=3>{$name} </td></tr>" . PHP_EOL; } if ($loopid == '2100') { $clp_html .= $nm1_str; } elseif ($loopid == '2110') { $svc_html .= $nm1_str; } // $descr = $name = $nm108 = $nm109 = ''; continue; } // if (strncmp('MIA' . $de, $seg, 4) === 0) { // Inpatient Adjudication information $sar = explode($de, $seg); // <tr class='mia'><td>></td><td> </td></tr>".PHP_EOL; $tr1 = "<tr class='mia'><td>></td><td colspan=3>"; $tr2 = "</td></tr>" . PHP_EOL; // $mia_str .= isset($sar[1]) && $sar[1] ? $tr1 . "Covered Days or Visits: " . $sar[1] . $tr2 : ""; // days or visits $mia_str .= isset($sar[2]) && $sar[2] ? $tr1 . "PPS Operating Outlier Amt: " . edih_format_money($sar[2]) . $tr2 : ""; $mia_str .= isset($sar[3]) && $sar[3] ? $tr1 . "Lifetime Psychiatric Days: " . $sar[3] . $tr2 : ""; $mia_str .= isset($sar[4]) && $sar[4] ? $tr1 . "Claim DRG Amt: " . edih_format_money($sar[4]) . $tr2 : ""; $mia_str .= isset($sar[5]) && $sar[5] ? "<tr class='mia'><td>" . $sar[5] . "</td><td colspan=3>" . $cd835->get_835_code('RARC', $sar[5]) . $tr2 : ""; $mia_str .= isset($sar[6]) && $sar[6] ? $tr1 . "Claim DSH Amt: " . edih_format_money($sar[6]) . $tr2 : ""; $mia_str .= isset($sar[7]) && $sar[7] ? $tr1 . "Claim MSP Pass Thru Amt: " . edih_format_money($sar[7]) . $tr2 : ""; $mia_str .= isset($sar[8]) && $sar[8] ? $tr1 . "Claim PPS Capital Amt: " . edih_format_money($sar[8]) . $tr2 : ""; $mia_str .= isset($sar[9]) && $sar[9] ? $tr1 . "PPS Capital FSP DRG Amt: " . edih_format_money($sar[9]) . $tr2 : ""; $mia_str .= isset($sar[10]) && $sar[10] ? $tr1 . "PPS Capital HSP DRG Amt: " . edih_format_money($sar[10]) . $tr2 : ""; $mia_str .= isset($sar[11]) && $sar[11] ? $tr1 . "PPS Capital DSH DRG Amt: " . edih_format_money($sar[11]) . $tr2 : ""; $mia_str .= isset($sar[12]) && $sar[12] ? $tr1 . "Old Capital Amt: " . edih_format_money($sar[12]) . $tr2 : ""; $mia_str .= isset($sar[13]) && $sar[13] ? $tr1 . "PPS Capital Ind Med Edu Amt: " . edih_format_money($sar[13]) . $tr2 : ""; $mia_str .= isset($sar[14]) && $sar[14] ? $tr1 . "PPS Oper HSP Spec DRG Amt: " . edih_format_money($sar[14]) . $tr2 : ""; $mia_str .= isset($sar[15]) && $sar[15] ? $tr1 . "Cost Report Day Count: " . $sar[15] . $tr2 : ""; $mia_str .= isset($sar[16]) && $sar[16] ? $tr1 . "PPS Oper FSP Spec DRG Amt: " . edih_format_money($sar[16]) . $tr2 : ""; $mia_str .= isset($sar[17]) && $sar[17] ? $tr1 . "Claim PPS Outlier Amt: " . edih_format_money($sar[17]) . $tr2 : ""; $mia_str .= isset($sar[18]) && $sar[18] ? $tr1 . "Claim Indirect Teaching: " . edih_format_money($sar[18]) . $tr2 : ""; $mia_str .= isset($sar[19]) && $sar[19] ? $tr1 . "Non Pay Prof Component Amt: " . edih_format_money($sar[19]) . $tr2 : ""; $mia_str .= isset($sar[20]) && $sar[20] ? "<tr class='mia'><td>" . $sar[20] . "</td><td colspan=3>" . $cd835->get_835_code('RARC', $sar[20]) . $tr2 : ""; $mia_str .= isset($sar[21]) && $sar[21] ? "<tr class='mia'><td>" . $sar[21] . "</td><td colspan=3>" . $cd835->get_835_code('RARC', $sar[21]) . $tr2 : ""; $mia_str .= isset($sar[22]) && $sar[22] ? "<tr class='mia'><td>" . $sar[22] . "</td><td colspan=3>" . $cd835->get_835_code('RARC', $sar[22]) . $tr2 : ""; // continue; } // if (strncmp('MOA' . $de, $seg, 4) === 0) { // Inpatient Adjudication information $sar = explode($de, $seg); // $moa_str = 'Claim Level Remarks: '; foreach ($sar as $k => $v) { switch ((int) $k) { case 0: break; case 1: $moa_str .= $v ? 'Reimbursement Rate: ' . edih_format_percent($v) : ''; break; case 2: $moa_str .= $v ? 'Allowed Amt: ' . edih_format_money($v) : ''; break; case 8: $moa_str .= $v ? 'ESRD Amt: ' . edih_format_money($v) : ''; break; case 9: $moa_str .= $v ? 'Non-Pay Prof Cmpnt: ' . edih_format_money($v) : ''; break; default: // case 3, 4, 5, 6, 7 are remark codes $moa_str .= $v ? ' ' . $v : ''; $moa_ar[] = $v ? $v : ''; } } // $clp_html .= $moa_str ? "<tr class='{$cls}'><td>></td><td colspan=3>{$moa_str}</td></tr>" . PHP_EOL : ""; // continue; } // if (strncmp('AMT' . $de, $seg, 4) === 0) { // Payment information $sar = explode($de, $seg); // $amt01 = isset($sar[1]) && $sar[1] ? $cd835->get_835_code('AMT', $sar[1]) : ""; $amt02 = isset($sar[2]) && $sar[2] ? edih_format_money($sar[2]) : ""; // if ($loopid == '2100') { $clp_html .= $amt01 ? "<tr class='{$cls}'><td>></td><td colspan=3>{$amt01} {$amt02}</td></tr>" . PHP_EOL : ""; } elseif ($loopid == '2110') { $svc_html .= $amt01 ? "<tr class='{$cls}'><td>></td><td colspan=3>{$amt01} {$amt02}</td></tr>" . PHP_EOL : ""; } // continue; } // if (strncmp('QTY' . $de, $seg, 4) === 0) { // Payment information $sar = explode($de, $seg); // $qty01 = isset($sar[1]) && $sar[1] ? $cd835->get_835_code('AMT', $sar[1]) : ""; $qty02 = isset($sar[2]) && $sar[2] ? edih_format_money($sar[2]) : ""; // if ($loopid == '2100') { $clp_html .= $qty01 ? "<tr class='{$cls}'><td>></td><td colspan=3>{$qty01} {$qty02}</td></tr>" . PHP_EOL : ""; } elseif ($loopid == '2110') { $svc_html .= $qty01 ? "<tr class='{$cls}'><td>></td><td colspan=3>{$qty01} {$qty02}</td></tr>" . PHP_EOL : ""; } // continue; } // if (strncmp('SVC' . $de, $seg, 4) === 0) { // $sar = explode($de, $seg); $loopid = '2110'; $cls = 'svc'; $rarc_str = ''; // used in LQ segment stanza // composite procedure code source:code:modifier:modifier $svc01 = ''; if (isset($sar[1]) && $sar[1]) { // construct a code source code modifier string if (strpos($sar[1], $ds)) { $scda = explode($ds, $sar[1]); reset($scda); while (list($key, $val) = each($scda)) { if ($key == 0 && $val) { $svc01 = $cd27x->get_271_code('EB13', $val); } else { $svc01 .= ":" . $val; } } } else { $svc01 = $sar[1]; } } // $svc02 = isset($sar[2]) && $sar[2] ? edih_format_money($sar[2]) : ""; // billed amount $svc03 = isset($sar[3]) && $sar[3] ? edih_format_money($sar[3]) : ""; // paid amount $svc04 = isset($sar[4]) && $sar[4] ? "<em>NUBC</em> " . $sar[4] : ""; // NUBC revenue code $svc05 = isset($sar[5]) && $sar[5] ? "<em>Units</em> " . $sar[5] : ""; // quantity // $svc06 = ''; if (isset($sar[6]) && $sar[6]) { // construct a code source code modifier string if (strpos($sar[6], $ds)) { $scda = explode($ds, $sar[6]); reset($scda); while (list($key, $val) = each($scda)) { if ($key == 0 && $val) { $svc06 = $cd27x->get_271_code('EB13', $val) . " "; } else { $svc06 .= ":" . $val; } } } else { $svc06 = $sar[6]; } } $svc07 = isset($sar[7]) && $sar[7] ? $sar[7] : ""; // original unis of service // $svc_html .= "<tr class='{$cls}'><td>></td><td colspan=3><em>Service</em> {$svc01} <em>Fee</em> {$svc02} <em>Pmt</em> {$svc03} {$svc05} {$svc04}</td></tr>" . PHP_EOL; $svc_html .= $svc06 ? "<tr class='{$cls}'><td>></td><td colspan=3><em>Submitted Svc</em> {$svc06} <em>Units</em> {$svc07}</td></tr>" . PHP_EOL : ""; // continue; } // if (strncmp('LQ' . $de, $seg, 3) === 0) { $sar = explode($de, $seg); // Health Care Remark Codes $lq01 = isset($sar[1]) && $sar[1] ? $sar[1] : ""; if (isset($sar[2])) { $lq02 = $lq01 == 'HE' ? $sar[2] : ""; //$lq02 = $cd835->get_835_code('RARC', $sar[2]); $rarc_str .= $rarc_str ? ' ' . $sar[2] : '<em>Service Remarks</em> ' . $sar[2]; $lq_ar[] = $sar[2]; } else { $lq02 = ""; } //$lq02 = (isset($sar[2]) && $sar[2] && $lq01 == 'HE') ? $cd835->get_835_code('RARC', $sar[2]) : ""; // // $svc_html .= ($rarc_str) ? "<tr class='$cls'><td>></td><td colspan=3>$rarc_str</td></tr>".PHP_EOL : ""; // continue; } // } // end foreach trans as seg // assemble the html table at end of the inside foreach loop // $str_html .= "<table name='{$tblid}' class='h835c' columns=4><caption>{$capstr}</caption>" . PHP_EOL . "<thead>" . PHP_EOL; $str_html .= $hdr_html; $str_html .= $sbr_html; $str_html .= $clp_html; $str_html .= $mia_str ? $mia_str : ''; $str_html .= $svc_html; $str_html .= $rarc_str ? "<tr class='svc'><td>></td><td colspan=3>{$rarc_str}</td></tr>" . PHP_EOL : ""; if (count($cas_ar)) { foreach ($cas_ar as $key => $cas) { if (!is_array($cas) && !count($cas)) { continue; } if ($key == '2100' && count($cas)) { $cls = 'remc'; $str_html .= "<tr class='{$cls}'><td>></td><td colspan=3><em>Claim Level Adjustments</em></td></tr>" . PHP_EOL; } else { $cls = 'rems'; $str_html .= "<tr class='{$cls}'><td>></td><td colspan=3><em>Service Level Adjustments</em></td></tr>" . PHP_EOL; } $cg = ''; foreach ($cas as $ky => $trp) { //echo '==== cas_ar unwind cas as ky trp '.$ky.PHP_EOL; //var_dump ($trp).PHP_EOL; // if (!is_array($trp) && !count($trp)) { continue; } $cg = $cd835->get_835_code('CAS_GROUP', $ky); foreach ($trp as $tr) { // debug //echo '==== cas_ar unwind trp as tr '.PHP_EOL; //var_dump ($tr).PHP_EOL; // $cd = $cr = $ca = $cq = ''; foreach ($tr as $k => $c) { //echo '==== cas_ar unwind tr as k c '.$k.PHP_EOL; //var_dump ($c).PHP_EOL; // switch ((int) $k) { case 0: $cd = $c; $cr = $cd835->get_835_code('CARC', $c); break; case 1: $ca = $c ? edih_format_money($c) : ""; break; case 2: $cq = $c ? $c : ""; } } } // $str_html .= "<tr class='{$cls}'><td>></td><td colspan=3>{$ky} {$cg} {$cd} {$ca} {$cq}</td></tr>" . PHP_EOL; $str_html .= "<tr class='{$cls}'><td style='text-align: center;'>{$ky} {$cd}</td><td colspan=3>{$cr}</td></tr>" . PHP_EOL; } } } if (count($moa_ar)) { $cls = 'remc'; $str_html .= "<tr class='{$cls}'><td colspan=4><em>Remarks</em></td></tr>" . PHP_EOL; foreach ($moa_ar as $moa) { $moar = $cd835->get_835_code('RARC', $moa); $str_html .= "<tr class='{$cls}'><td style='text-align: center;'>{$moa}</td><td colspan=3>{$moar}</td></tr>" . PHP_EOL; } } if (count($lq_ar)) { $cls = 'mia'; $str_html .= $rarc_str ? "<tr class='{$cls}'><td colspan=4>{$rarc_str}</td></tr>" . PHP_EOL : ""; foreach ($lq_ar as $lq) { $lqr = $cd835->get_835_code('RARC', $lq); $str_html .= "<tr class='{$cls}'><td style='text-align: center;'>{$lq}</td><td colspan=3>{$lqr}</td></tr>" . PHP_EOL; } } // bottom border $str_html .= "<tr class='remc'><td colspan=4> </td></tr>" . PHP_EOL; // end tags for table $str_html .= "</tbody>" . PHP_EOL . "</table>" . PHP_EOL; } // return $str_html; }