Exemplo n.º 1
0
/**
 * 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;
}
Exemplo n.º 2
0
/**
 * 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;
}
Exemplo n.º 3
0
/**
 * 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;
}
Exemplo n.º 4
0
/**
 * 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 &nbsp;{$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>&gt;</td><td colspan=3><em>{$ref01}</em> {$ref02}</td></tr>" . PHP_EOL;
                    } elseif ($loopid == '2110') {
                        $svc_html .= "<tr class='{$cls}'><td>&gt;</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>&gt;</td><td colspan=3><em>{$dtm01}</em> {$dtm02}</td></tr>" . PHP_EOL;
                } elseif ($loopid == '2110') {
                    $svc_html .= "<tr class='{$cls}'><td>&gt;</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>&gt;</td><td colspan=3>{$per01} {$per02} {$per03} {$per04} </td></tr>" . PHP_EOL;
                    $clp_html .= $per05 || $per07 ? "<tr class='{$cls}'><td>&gt;</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>&gt;</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>&gt;</td><td colspan=3>{$clp08} {$clp09}</td></tr>" . PHP_EOL : "";
                $clp_html .= $clp11 || $clp12 || $clp13 ? "<tr class='{$cls}'><td>&gt;</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>&gt;</td><td> </td></tr>".PHP_EOL;
                $tr1 = "<tr class='mia'><td>&gt;</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>&gt;</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>&gt;</td><td colspan=3>{$amt01} {$amt02}</td></tr>" . PHP_EOL : "";
                } elseif ($loopid == '2110') {
                    $svc_html .= $amt01 ? "<tr class='{$cls}'><td>&gt;</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>&gt;</td><td colspan=3>{$qty01} {$qty02}</td></tr>" . PHP_EOL : "";
                } elseif ($loopid == '2110') {
                    $svc_html .= $qty01 ? "<tr class='{$cls}'><td>&gt;</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>&gt;</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>&gt;</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>&gt;</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>&gt;</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>&gt;</td><td colspan=3><em>Claim Level Adjustments</em></td></tr>" . PHP_EOL;
                } else {
                    $cls = 'rems';
                    $str_html .= "<tr class='{$cls}'><td>&gt;</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>&gt;</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>&nbsp;</td></tr>" . PHP_EOL;
        // end tags for table
        $str_html .= "</tbody>" . PHP_EOL . "</table>" . PHP_EOL;
    }
    //
    return $str_html;
}