installation bug fix
[openemr.git] / library / edihistory / edih_835_html.php
blob8260e814e88f44fa9aff7f2ad4b1066c6b4b3059
1 <?php
2 /*
3 * new_edih_835_html.php
4 *
5 * Copyright 2016 Kevin McCormick <kevin@kt61p>
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
20 * MA 02110-1301, USA.
26 // lookup codes
27 //require_once("$srcdir/edihistory/codes/edih_835_code_class.php");
28 //require_once("$srcdir/edihistory/codes/edih_271_code_class.php");
30 /**
31 * callback to round floats to 2 digit precision
33 * @param float
34 * @param string
35 * @return float
37 function edih_round_cb(&$v, $k) {
38 $v = round($v, 2);
40 /**
41 * Create summary html string for an x12 835 claim payment
43 * @param array
44 * @param object
45 * @param object
46 * @param array
47 * @param string
49 * @return string
51 function edih_835_clp_summary($trans_array, $codes27x, $codes835, $delimiters, $fname='') {
52 // NM1 CPL
53 $str_html = "";
54 if ( is_array($trans_array) && count($trans_array) ) {
55 if (csv_singlerecord_test($trans_array)) {
56 $clp_ar = array();
57 $clp_ar[] = $trans_array;
58 } else {
59 $clp_ar = $trans_array;
61 } else {
62 csv_edihist_log("edih_835_transaction_html: Did not get transaction segments");
63 $str_html .= "<p>Did not get transaction segments</p>".PHP_EOL;
64 return $str_html;
66 $de = (isset($delimiters['e'])) ? $delimiters['e'] : "";
67 $ds = (isset($delimiters['s'])) ? $delimiters['s'] : "";
68 $dr = (isset($delimiters['r'])) ? $delimiters['r'] : "";
70 if ( !$de || !$ds ) {
71 csv_edihist_log("edih_835_transaction_html: Did not get delimiters");
72 $str_html .= "<p>Did not get delimiters</p>".PHP_EOL;
73 return $str_html;
76 $fn = ($fname) ? trim($fname) : "";
78 // get the code objects right
79 $cd835 = $cd27x = '';
80 if ( 'edih_835_codes' == get_class($codes835) ) {
81 $cd835 = $codes835;
82 } elseif ('edih_835_codes' == get_class($codes27x) ) {
83 $cd835 = $codes27x;
85 if ( 'edih_271_codes' == get_class($codes27x) ) {
86 $cd27x = $codes27x;
87 } elseif ('edih_271_codes' == get_class($codes835) ) {
88 $cd27x = $codes835;
90 if (!$cd835 || !$cd27x) {
91 csv_edihist_log('edih_835_payment_html: invalid code class argument');
92 $str_html .= "<p>invalid code class argument</p>".PHP_EOL;
93 return $str_html;
96 $tblid = "";
97 $capstr = "";
98 $mia_str = "";
100 $hdr_html = "<tr><th>Reference</th><th colspan=2>Information</th><th colspan=2>$fn</th></tr>".PHP_EOL;
101 $hdr_html .= "</thead>".PHP_EOL."<tbody>".PHP_EOL;
102 $clp_html = "";
103 $svc_html = "";
104 $sbr_html = "";
105 $chksegs = array('CLP', 'NM1', 'AMT', 'QTY');
106 foreach($trans_array as $trans) {
107 $capstr = "Summary ";
108 $loopid = 'NA';
109 foreach($trans as $seg) {
111 $test_str = substr($seg, 0, 3);
112 if ($test_str == 'SVC') { break; }
113 if ( !in_array($test_str, $chksegs, true) ) { continue; }
115 if ( strncmp('CLP'.$de, $seg, 4) === 0 ) {
116 $sar = explode($de, $seg);
117 $loopid = '2100';
118 $cls = 'clp';
120 $clp09ar = array('1'=>'Original', '7'=>'Replacement', '8'=>'Void');
122 $clp01 = $clp02 = $clp03 = $clp04 = $clp05 = $clp06 = $clp07 = '';
123 $clp08 = $clp09 = $clp11 = $clp12 = $clp13 = $capstr = $tblid = '';
124 foreach($sar as $k=>$v) {
125 switch((int)$k) {
126 case 0: break;
127 case 1: $clp01 = $v; $capstr = $v; $tblid = $v; break; // Pt ID CLM01
128 case 2: $clp02 = $cd835->get_835_code('CLAIM_STATUS', $v); break;
129 case 3: $clp03 = ($v) ? "<em>Fee:</em> ".edih_format_money($v) : "0"; break;
130 case 4: $clp04 = ($v) ? "<em>Pmt:</em> ".edih_format_money($v) : "0"; break;
131 case 5: $clp05 = ($v) ? "<em>PtRsp:</em> ".edih_format_money($v) : "0"; break;
132 case 7: $clp07 = ($v) ? "<em>PR Ref:</em> ".$v : ""; break;
133 case 8: $clp08 = ($v) ? "<em>Location</em> ".$cd27x->get_271_code('POS', $v) : ''; break;
134 case 9: $clp09 = ($v && isset($clp09ar[$v])) ? "<em>Freq</em> ".$clp09ar[$v] : $v;
138 $clp_html .= "<tr class='$cls'><td><em>PtID:</em> $clp01</td><td colspan=3><em>Status</em> $clp02 <em>$clp06</em></td></tr>".PHP_EOL;
139 $clp_html .= "<tr class='$cls'><td>&gt;</td><td colspan=3>$clp03 $clp04 $clp05 $clp07 </td></tr>".PHP_EOL;
140 $clp_html .= ($clp08 || $clp09) ? "<tr class='$cls'><td>&gt;</td><td colspan=3>$clp08 $clp09</td></tr>".PHP_EOL : "";
142 continue;
145 if ($loopid == '2100') {
146 if ( strncmp('AMT'.$de, $seg, 4) === 0 ) {
147 // Payment information
148 $sar = explode($de, $seg);
150 $amt01 = (isset($sar[1]) && $sar[1]) ? $cd835->get_835_code('AMT', $sar[1]) : "";
151 $amt02 = (isset($sar[2]) && $sar[2]) ? edih_format_money($sar[2]) : "";
153 $clp_html .= ($amt01) ? "<tr class='$cls'><td>&gt;</td><td colspan=3>$amt01 $amt02</td></tr>".PHP_EOL : "";
155 continue;
158 if ( strncmp('QTY'.$de, $seg, 4) === 0 ) {
159 // Payment information
160 $sar = explode($de, $seg);
162 $qty01 = (isset($sar[1]) && $sar[1]) ? $cd835->get_835_code('AMT', $sar[1]) : "";
163 $qty02 = (isset($sar[2]) && $sar[2]) ? edih_format_money($sar[2]) : "";
165 if ($loopid == '2100') {
166 $clp_html .= ($qty01) ? "<tr class='$cls'><td>&gt;</td><td colspan=3>$qty01 $qty02</td></tr>".PHP_EOL : "";
169 continue;
172 if ( strncmp('NM1'.$de, $seg, 4) === 0 ) {
173 $sar = explode($de, $seg);
175 $descr = (isset($sar[1]) && $sar[1]) ? $cd27x->get_271_code('NM101', $sar[1]) : "";
177 $name = (isset($sar[3]) && $sar[3]) ? $sar[3] : "";
178 $name .= (isset($sar[7]) && $sar[7]) ? " {$sar[7]}" : "";
179 $name .= (isset($sar[4]) && $sar[4]) ? ", {$sar[4]}" : "";
180 $name .= (isset($sar[5]) && $sar[5]) ? " {$sar[5]}" : "";
181 $name .= (isset($sar[7]) && $sar[7]) ? " {$sar[7]}" : "";
183 $nm108 = (isset($sar[8]) && $sar[8]) ? $cd27x->get_271_code('NM108', $sar[8]) : "";
184 $nm109 = (isset($sar[9]) && $sar[9]) ? $sar[9] : "";
185 // complete table caption
186 if (isset($sar[1]) && $sar[1] == "QC") { $capstr .= " $name"; }
188 if ($nm108) {
189 $sbr_html .= "<tr class='sbr'><td><em>$descr</em></td><td colspan=3>$name <em>$nm108</em> $nm109</td></tr>" .PHP_EOL;
190 } else {
191 $sbr_html .= "<tr class='sbr'><td><em>$descr</em></td><td colspan=3>$name </td></tr>" .PHP_EOL;
194 $descr = $name = $nm108 = $nm109 = '';
195 continue;
197 if ( strncmp('CAS'.$de, $seg, 4) === 0 ) {
198 $sar = explode($de, $seg);
199 $cas_str = '';
200 // claim adjustment group; expect CAS segment for each adjustment group
201 foreach($sar as $k=>$v) {
202 switch ((int)$k) {
203 case 0: break;
204 case 1: $cas_str .= "$v ".$cd835->get_835_code('CAS_GROUP', $v); break;
205 case 2: $cas_str .= ($v) ? " $v" : ""; break;
206 case 3: $cas_str .= ($v) ? " ".edih_format_money($v) : ""; break;
207 case 4: $cas_str .= ($v) ? "x$v" : ""; break;
208 case 5: $cas_str .= ($v) ? " $v" : ""; break;
209 case 6: $cas_str .= ($v) ? " ".edih_format_money($v) : ""; break;
210 case 7: $cas_str .= ($v) ? "x$v" : ""; break;
211 case 8: $cas_str .= ($v) ? " $v" : ""; break;
212 case 9: $cas_str .= ($v) ? " ".edih_format_money($v) : ""; break;
213 case 10: $cas_str .= ($v) ? "x$v" : ""; break;
214 default: $cas_str .= " *";
217 $clp_html .= ($cas_str) ? "<tr class='$cls'><td>&gt;</td><td colspan=3>$cas_str</td></tr>".PHP_EOL : "";
219 continue;
224 $str_html .= "<table name='$tblid' class='h835c' columns=4><caption>$capstr</caption>".PHP_EOL."<thead>".PHP_EOL;
225 $str_html .= $hdr_html;
226 $str_html .= $sbr_html;
227 $str_html .= $clp_html;
228 $str_html .= "</tbody>".PHP_EOL."</table>".PHP_EOL;
231 return $str_html;
237 * Create html string for an x12 835 claim payment
239 * @param array
240 * @param object
241 * @param object
242 * @param array
243 * @param string
245 * @return string
247 function edih_835_transaction_html($trans_array, $codes27x, $codes835, $delimiters, $fname='') {
249 $str_html = "";
250 if ( is_array($trans_array) && count($trans_array) ) {
251 if (csv_singlerecord_test($trans_array)) {
252 $clp_ar = array();
253 $clp_ar[] = $trans_array;
254 } else {
255 $clp_ar = $trans_array;
257 } else {
258 csv_edihist_log("edih_835_transaction_html: Did not get transaction segments");
259 $str_html .= "<p>Did not get transaction segments</p>".PHP_EOL;
260 return $str_html;
262 $de = (isset($delimiters['e'])) ? $delimiters['e'] : "";
263 $ds = (isset($delimiters['s'])) ? $delimiters['s'] : "";
264 $dr = (isset($delimiters['r'])) ? $delimiters['r'] : "";
266 if ( !$de || !$ds ) {
267 csv_edihist_log("edih_835_transaction_html: Did not get delimiters");
268 $str_html .= "<p>Did not get delimiters</p>".PHP_EOL;
269 return $str_html;
272 $fn = ($fname) ? trim($fname) : "";
274 // get the code objects right
275 $cd835 = $cd27x = '';
276 if ( 'edih_835_codes' == get_class($codes835) ) {
277 $cd835 = $codes835;
278 } elseif ('edih_835_codes' == get_class($codes27x) ) {
279 $cd835 = $codes27x;
281 if ( 'edih_271_codes' == get_class($codes27x) ) {
282 $cd27x = $codes27x;
283 } elseif ('edih_271_codes' == get_class($codes835) ) {
284 $cd27x = $codes835;
286 if (!$cd835 || !$cd27x) {
287 csv_edihist_log('edih_835_payment_html: invalid code class argument');
288 $str_html .= "<p>invalid code class argument</p>".PHP_EOL;
289 return $str_html;
292 $str_html = "";
294 $tblid = "";
295 $capstr = "";
296 $mia_str = "";
298 $hdr_html = "<tr><th>Reference</th><th colspan=3>Information &nbsp;$fn</th></tr>".PHP_EOL;
299 $hdr_html .= "</thead>".PHP_EOL."<tbody>".PHP_EOL;
300 $clp_html = "";
301 $svc_html = "";
302 $sbr_html = "";
303 $moa_html = "";
305 foreach($clp_ar as $trans) {
306 $lq_ar = array();
307 $cas_ar = array();
308 $moa_ar = array();
309 $rarc_str = "";
310 $clp_html = "";
311 $svc_html = "";
312 $sbr_html = "";
313 $moa_html = "";
314 foreach($trans as $seg) {
316 if ( strncmp('REF'.$de, $seg, 4) === 0 ) {
317 $sar = explode($de, $seg);
319 if (isset($sar[1]) && $sar[1]) {
320 if ($sar[1] == 'LU') {
321 $ref01 = 'Location';
322 $ref02 = (isset($sar[2])) ? $cd27x->get_271_code('POS', $sar[2]) : '';
323 } else {
324 // entity ID code
325 $ref01 = (isset($sar[1])) ? $cd27x->get_271_code('REF', $sar[1]) : '';
326 // entity ID
327 $ref02 = (isset($sar[2])) ? $sar[2] : '';
330 if ($loopid == '2100') {
331 $clp_html .= "<tr class='$cls'><td>&gt;</td><td colspan=3><em>$ref01</em> $ref02</td></tr>".PHP_EOL;
332 } elseif ($loopid == '2110') {
333 $svc_html .= "<tr class='$cls'><td>&gt;</td><td colspan=3><em>$ref01</em> $ref02</td></tr>".PHP_EOL;
337 continue;
340 if ( strncmp('DTM'.$de, $seg, 4) === 0 ) {
341 $sar = explode($de, $seg);
342 // DTM in 835 use DTP codes from 271 codes
343 $dtm01 = (isset($sar[1])) ? $cd27x->get_271_code('DTP', $sar[1]) : ''; // date qualifier
344 $dtm02 = (isset($sar[2])) ? edih_format_date($sar[2]) : ''; // production date
345 $dtm05 = (isset($sar[5])) ? $sar[5] : '';
346 $dtm06 = (isset($sar[6])) ? edih_format_date($sar[2]) : '';
348 //if ( $elem02 == 'D8' && $elem03) {
349 //$dtmar = edih_format_date($elem03);
350 //} elseif ( $elem02 == 'RD8' && $elem03) {
351 //$dtmar = edih_format_date( substr($elem03, 0, 8) );
352 //$dtmar .= ' - '.edih_format_date( substr($elem03, -8) );
354 //}
355 if ($loopid == '2100') {
356 $clp_html .= "<tr class='$cls'><td>&gt;</td><td colspan=3><em>$dtm01</em> $dtm02</td></tr>".PHP_EOL;
357 } elseif ($loopid == '2110') {
358 $svc_html .= "<tr class='$cls'><td>&gt;</td><td colspan=3><em>$dtm01</em> $dtm02</td></tr>".PHP_EOL;
361 continue;
364 if ( strncmp('PER'.$de, $seg, 4) === 0 ) {
365 $sar = explode($de, $seg);
367 $per01_ar = array('CX'=>'Claims Dept','BL'=>'Technical Dept','IC'=>'Website');
368 $per01 = $per02 = $per03 = $per04 = $per05 = $per06 = $per07 = $per08 = '';
369 foreach($sar as $k=>$v) {
370 switch((int)$k) {
371 case 0: break;
372 case 1: $per01 = (isset($per01_ar[$v])) ? $per01_ar[$v] : $v; break;
373 case 2: $per02 = $v; break;
374 case 3: $per03 = $v; break;
375 case 4: $per04 = ($per03=='TE') ? edih_format_telephone($v) : $v; break;
376 case 5: $per05 = $v; break;
377 case 6: $per06 = ($per03=='TE') ? edih_format_telephone($v) : $v; break;
378 case 7: $per07 = $v; break;
379 case 8: $per08 = ($per03=='TE') ? edih_format_telephone($v) : $v;
383 if ($loopid == '2100') {
384 $clp_html .= "<tr class='$cls'><td>&gt;</td><td colspan=3>$per01 $per02 $per03 $per04 </td></tr>".PHP_EOL;
385 $clp_html .= ($per05 || $per07) ? "<tr class='$cls'><td>&gt;</td><td colspan=3>$per05 $per06 $per07 $per08</td></tr>".PHP_EOL : "";
388 continue;
391 if ( strncmp('CLP'.$de, $seg, 4) === 0 ) {
392 $sar = explode($de, $seg);
393 $loopid = '2100';
394 $cls = 'clp';
396 $clp01 = $clp02 = $clp03 = $clp04 = $clp05 = $clp06 = $clp07 = $clp08 = $clp09 = $clp11 = $clp12 = $clp13 = $capstr = '';
398 $clp01 = (isset($sar[1]) && $sar[1]) ? $sar[1] : ''; // Pt ID CLM01
399 $clp02 = (isset($sar[2]) && $sar[2]) ? $cd835->get_835_code('CLAIM_STATUS', $sar[2]) : ''; // status code
400 $clp03 = (isset($sar[3]) && $sar[3]) ? edih_format_money($sar[3]) : '0'; // fee amont
401 $clp04 = (isset($sar[4]) && $sar[4]) ? edih_format_money($sar[4]) : '0'; // paid amount
402 $clp05 = (isset($sar[5]) && $sar[5]) ? edih_format_money($sar[5]) : '0'; // pt responsibility amont
403 $clp06 = (isset($sar[6]) && $sar[6]) ? $cd835->get_835_code('CLP06', $sar[6]) : ''; // filing indicator code
404 $clp07 = (isset($sar[7]) && $sar[7]) ? $sar[7] : ''; // Payer reference ID
405 $clp08 = (isset($sar[8]) && $sar[8]) ? "<em>Location</em> ".$cd27x->get_271_code('POS', $sar[8]) : ''; // Faciliy code place of service
406 // frequency type code 1 original 7 replacement 8 void
407 $clp09ar = array('1'=>'original', '7'=>'replacement', '8'=>'void');
408 if (isset($sar[9]) && array_key_exists($sar[9], $clp09ar) ) { // claim frequency code
409 $clp09 = "<em>Freq</em> ".$clp09ar[$sar[9]];
410 } else {
411 $clp09 = (isset($sar[9]) && $sar[9]) ? "<em>Freq</em> ".$sar[9] : "";
413 // DRG code not expected
414 $clp11 = (isset($sar[11]) && $sar[11]) ? "<em>DRG Code</em> ".$sar[11] : '';
415 // DRG weight
416 $clp12 = (isset($sar[12]) && $sar[12]) ? "<em>DRG Weight</em> ".$sar[12] : '';
417 // DRG percentage
418 $clp13 = (isset($sar[13]) && $sar[13]) ? "<em>Dischg Frctn</em> ".edih_format_percent($sar[13]) : '';
420 // table caption PtID PtName
421 $capstr .= $clp01;
422 $tblid = $clp01;
424 $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;
425 $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;
426 $clp_html .= ($clp08 || $clp09) ? "<tr class='$cls'><td>&gt;</td><td colspan=3>$clp08 $clp09</td></tr>".PHP_EOL : "";
427 $clp_html .= ($clp11 || $clp12 || $clp13) ? "<tr class='$cls'><td>&gt;</td><td colspan=3>$clp11 $clp12 $clp13</td></tr>".PHP_EOL : "";
429 continue;
432 if ( strncmp('CAS'.$de, $seg, 4) === 0 ) {
433 $sar = explode($de, $seg);
434 // claim adjustments
435 $cls = ($loopid == '2100') ? 'clp' : 'svc';
436 // claim adjustment group; expect CAS segment for each adjustment group
437 if (isset($sar[1]) && $sar[1]) {
438 $cas_ar[$loopid][$sar[1]] = array_chunk(array_slice($sar, 2), 3);
439 // debug
440 //echo '== array_chunk'.PHP_EOL;
441 //var_dump( $cas_ar ).PHP_EOL;
444 continue;
448 if ( strncmp('NM1'.$de, $seg, 4) === 0 ) {
449 $sar = explode($de, $seg);
450 $nm1_str = "";
452 if (isset($sar[1]) && $sar[1]) {
453 if (strpos('|IL|QC|72', $sar[1])) {
454 $cls = 'sbr';
455 } else {
456 $cls = 'clp';
458 $descr = $cd27x->get_271_code('NM101', $sar[1]);
459 } else {
460 $cls = 'clp';
461 $descr = '';
464 $name = (isset($sar[3]) && $sar[3]) ? $sar[3] : "";
465 $name .= (isset($sar[7]) && $sar[7]) ? " {$sar[7]}" : "";
466 $name .= (isset($sar[4]) && $sar[4]) ? ", {$sar[4]}" : "";
467 $name .= (isset($sar[5]) && $sar[5]) ? " {$sar[5]}" : "";
468 $name .= (isset($sar[6]) && $sar[6]) ? " {$sar[6]}" : "";
470 $nm108 = (isset($sar[8]) && $sar[8]) ? $cd27x->get_271_code('NM108', $sar[8]) : "";
471 $nm109 = (isset($sar[9]) && $sar[9]) ? $sar[9] : "";
472 // complete table caption
473 if (isset($sar[1]) && $sar[1] == "QC") { $capstr .= " $name"; }
476 if ($nm108) {
477 $nm1_str .= "<tr class='$cls'><td><em>$descr</em></td><td colspan=3>$name <em>$nm108</em> $nm109</td></tr>" .PHP_EOL;
478 } else {
479 $nm1_str .= "<tr class='$cls'><td><em>$descr</em></td><td colspan=3>$name </td></tr>" .PHP_EOL;
481 if ($loopid == '2100') {
482 $clp_html .= $nm1_str;
483 } elseif ($loopid == '2110') {
484 $svc_html .= $nm1_str;
487 $descr = $name = $nm108 = $nm109 = '';
488 continue;
491 if ( strncmp('MIA'.$de, $seg, 4) === 0 ) {
492 // Inpatient Adjudication information
493 $sar = explode($de, $seg);
494 // <tr class='mia'><td>&gt;</td><td> </td></tr>".PHP_EOL;
495 $tr1 = "<tr class='mia'><td>&gt;</td><td colspan=3>";
496 $tr2 = "</td></tr>".PHP_EOL;
498 $mia_str .= (isset($sar[1]) && $sar[1]) ? $tr1."Covered Days or Visits: ".$sar[1].$tr2 : ""; // days or visits
499 $mia_str .= (isset($sar[2]) && $sar[2]) ? $tr1."PPS Operating Outlier Amt: ".edih_format_money($sar[2]).$tr2 : "";
500 $mia_str .= (isset($sar[3]) && $sar[3]) ? $tr1."Lifetime Psychiatric Days: ".$sar[3].$tr2 : "";
501 $mia_str .= (isset($sar[4]) && $sar[4]) ? $tr1."Claim DRG Amt: ".edih_format_money($sar[4]).$tr2 : "";
502 $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 : "";
503 $mia_str .= (isset($sar[6]) && $sar[6]) ? $tr1."Claim DSH Amt: ".edih_format_money($sar[6]).$tr2 : "";
504 $mia_str .= (isset($sar[7]) && $sar[7]) ? $tr1."Claim MSP Pass Thru Amt: ".edih_format_money($sar[7]).$tr2 : "";
505 $mia_str .= (isset($sar[8]) && $sar[8]) ? $tr1."Claim PPS Capital Amt: ".edih_format_money($sar[8]).$tr2 : "";
506 $mia_str .= (isset($sar[9]) && $sar[9]) ? $tr1."PPS Capital FSP DRG Amt: ".edih_format_money($sar[9]).$tr2 : "";
507 $mia_str .= (isset($sar[10]) && $sar[10]) ? $tr1."PPS Capital HSP DRG Amt: ".edih_format_money($sar[10]).$tr2 : "";
508 $mia_str .= (isset($sar[11]) && $sar[11]) ? $tr1."PPS Capital DSH DRG Amt: ".edih_format_money($sar[11]).$tr2 : "";
509 $mia_str .= (isset($sar[12]) && $sar[12]) ? $tr1."Old Capital Amt: ".edih_format_money($sar[12]).$tr2 : "";
510 $mia_str .= (isset($sar[13]) && $sar[13]) ? $tr1."PPS Capital Ind Med Edu Amt: ".edih_format_money($sar[13]).$tr2 : "";
511 $mia_str .= (isset($sar[14]) && $sar[14]) ? $tr1."PPS Oper HSP Spec DRG Amt: ".edih_format_money($sar[14]).$tr2 : "";
512 $mia_str .= (isset($sar[15]) && $sar[15]) ? $tr1."Cost Report Day Count: ".$sar[15].$tr2 : "";
513 $mia_str .= (isset($sar[16]) && $sar[16]) ? $tr1."PPS Oper FSP Spec DRG Amt: ".edih_format_money($sar[16]).$tr2 : "";
514 $mia_str .= (isset($sar[17]) && $sar[17]) ? $tr1."Claim PPS Outlier Amt: ".edih_format_money($sar[17]).$tr2 : "";
515 $mia_str .= (isset($sar[18]) && $sar[18]) ? $tr1."Claim Indirect Teaching: ".edih_format_money($sar[18]).$tr2 : "";
516 $mia_str .= (isset($sar[19]) && $sar[19]) ? $tr1."Non Pay Prof Component Amt: ".edih_format_money($sar[19]).$tr2 : "";
517 $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 : "";
518 $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 : "";
519 $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 : "";
521 continue;
524 if ( strncmp('MOA'.$de, $seg, 4) === 0 ) {
525 // Inpatient Adjudication information
526 $sar = explode($de, $seg);
528 $moa_str = 'Claim Level Remarks: ';
529 foreach($sar as $k=>$v) {
530 switch((int)$k){
531 case 0: break;
532 case 1: $moa_str .= ($v) ? 'Reimbursement Rate: '.edih_format_percent($v) : ''; break;
533 case 2: $moa_str .= ($v) ? 'Allowed Amt: '.edih_format_money($v) : ''; break;
534 case 8: $moa_str .= ($v) ? 'ESRD Amt: '.edih_format_money($v) : ''; break;
535 case 9: $moa_str .= ($v) ? 'Non-Pay Prof Cmpnt: '.edih_format_money($v) : ''; break;
536 default:
537 // case 3, 4, 5, 6, 7 are remark codes
538 $moa_str .= ($v) ? ' '.$v : '';
539 $moa_ar[] = ($v) ? $v : '';
543 $clp_html .= ($moa_str) ? "<tr class='$cls'><td>&gt;</td><td colspan=3>$moa_str</td></tr>".PHP_EOL : "";
545 continue;
548 if ( strncmp('AMT'.$de, $seg, 4) === 0 ) {
549 // Payment information
550 $sar = explode($de, $seg);
552 $amt01 = (isset($sar[1]) && $sar[1]) ? $cd835->get_835_code('AMT', $sar[1]) : "";
553 $amt02 = (isset($sar[2]) && $sar[2]) ? edih_format_money($sar[2]) : "";
555 if ($loopid == '2100') {
556 $clp_html .= ($amt01) ? "<tr class='$cls'><td>&gt;</td><td colspan=3>$amt01 $amt02</td></tr>".PHP_EOL : "";
557 } elseif ($loopid == '2110') {
558 $svc_html .= ($amt01) ? "<tr class='$cls'><td>&gt;</td><td colspan=3>$amt01 $amt02</td></tr>".PHP_EOL : "";
561 continue;
564 if ( strncmp('QTY'.$de, $seg, 4) === 0 ) {
565 // Payment information
566 $sar = explode($de, $seg);
568 $qty01 = (isset($sar[1]) && $sar[1]) ? $cd835->get_835_code('AMT', $sar[1]) : "";
569 $qty02 = (isset($sar[2]) && $sar[2]) ? edih_format_money($sar[2]) : "";
571 if ($loopid == '2100') {
572 $clp_html .= ($qty01) ? "<tr class='$cls'><td>&gt;</td><td colspan=3>$qty01 $qty02</td></tr>".PHP_EOL : "";
573 } elseif ($loopid == '2110') {
574 $svc_html .= ($qty01) ? "<tr class='$cls'><td>&gt;</td><td colspan=3>$qty01 $qty02</td></tr>".PHP_EOL : "";
577 continue;
580 if ( strncmp('SVC'.$de, $seg, 4) === 0 ) {
582 $sar = explode($de, $seg);
583 $loopid = '2110';
584 $cls = 'svc';
585 $rarc_str = ''; // used in LQ segment stanza
586 // composite procedure code source:code:modifier:modifier
587 $svc01 = '';
588 if ( isset($sar[1]) && $sar[1]) {
589 // construct a code source code modifier string
590 if ( strpos($sar[1], $ds) ) {
591 $scda = explode($ds, $sar[1]);
592 reset($scda);
593 while ( list($key, $val) = each($scda) ) {
594 if ($key == 0 && $val) {
595 $svc01 = $cd27x->get_271_code('EB13',$val);
596 } else {
597 $svc01 .= ":".$val;
600 } else {
601 $svc01 = $sar[1];
605 $svc02 = (isset($sar[2]) && $sar[2]) ? edih_format_money($sar[2]) : ""; // billed amount
606 $svc03 = (isset($sar[3]) && $sar[3]) ? edih_format_money($sar[3]) : ""; // paid amount
607 $svc04 = (isset($sar[4]) && $sar[4]) ? "<em>NUBC</em> ".$sar[4] : ""; // NUBC revenue code
608 $svc05 = (isset($sar[5]) && $sar[5]) ? "<em>Units</em> ".$sar[5] : ""; // quantity
610 $svc06 = '';
611 if ( isset($sar[6]) && $sar[6]) {
612 // construct a code source code modifier string
613 if ( strpos($sar[6], $ds) ) {
614 $scda = explode($ds, $sar[6]);
615 reset($scda);
616 while ( list($key, $val) = each($scda) ) {
617 if ($key == 0 && $val) {
618 $svc06 = $cd27x->get_271_code('EB13',$val)." ";
619 } else {
620 $svc06 .= ":".$val;
623 } else {
624 $svc06 = $sar[6];
628 $svc07 = (isset($sar[7]) && $sar[7]) ? $sar[7] : ""; // original unis of service
630 $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;
631 $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 : "";
633 continue;
636 if ( strncmp('LQ'.$de, $seg, 3) === 0 ) {
637 $sar = explode($de, $seg);
638 // Health Care Remark Codes
639 $lq01 = (isset($sar[1]) && $sar[1]) ? $sar[1] : "";
640 if (isset($sar[2])) {
641 $lq02 = ($lq01 == 'HE') ? $sar[2] : "";
642 //$lq02 = $cd835->get_835_code('RARC', $sar[2]);
643 $rarc_str .= ($rarc_str) ? ' '.$sar[2] : '<em>Service Remarks</em> '.$sar[2];
644 $lq_ar[] = $sar[2];
645 } else {
646 $lq02 = "";
649 //$lq02 = (isset($sar[2]) && $sar[2] && $lq01 == 'HE') ? $cd835->get_835_code('RARC', $sar[2]) : "";
651 // $svc_html .= ($rarc_str) ? "<tr class='$cls'><td>&gt;</td><td colspan=3>$rarc_str</td></tr>".PHP_EOL : "";
653 continue;
656 } // end foreach trans as seg
657 // assemble the html table at end of the inside foreach loop
659 $str_html .= "<table name='$tblid' class='h835c' columns=4><caption>$capstr</caption>".PHP_EOL."<thead>".PHP_EOL;
660 $str_html .= $hdr_html;
661 $str_html .= $sbr_html;
662 $str_html .= $clp_html;
663 $str_html .= ($mia_str) ? $mia_str : '';
664 $str_html .= $svc_html;
665 $str_html .= ($rarc_str) ? "<tr class='svc'><td>&gt;</td><td colspan=3>$rarc_str</td></tr>".PHP_EOL : "";
666 if (count($cas_ar)) {
667 foreach($cas_ar as $key=>$cas) {
668 if (!is_array($cas) && !count($cas)) { continue; }
669 if ($key == '2100' && count($cas)) {
670 $cls = 'remc';
671 $str_html .= "<tr class='$cls'><td>&gt;</td><td colspan=3><em>Claim Level Adjustments</em></td></tr>".PHP_EOL;
672 } else {
673 $cls = 'rems';
674 $str_html .= "<tr class='$cls'><td>&gt;</td><td colspan=3><em>Service Level Adjustments</em></td></tr>".PHP_EOL;
676 $cg = '';
677 foreach($cas as $ky=>$trp) {
678 //echo '==== cas_ar unwind cas as ky trp '.$ky.PHP_EOL;
679 //var_dump ($trp).PHP_EOL;
681 if (!is_array($trp) && !count($trp)) { continue; }
682 $cg = $cd835->get_835_code('CAS_GROUP', $ky);
683 foreach($trp as $tr) {
684 // debug
685 //echo '==== cas_ar unwind trp as tr '.PHP_EOL;
686 //var_dump ($tr).PHP_EOL;
688 $cd = $cr = $ca = $cq = '';
689 foreach($tr as $k=>$c) {
691 //echo '==== cas_ar unwind tr as k c '.$k.PHP_EOL;
692 //var_dump ($c).PHP_EOL;
694 switch((int)$k) {
695 case 0:
696 $cd = $c;
697 $cr = $cd835->get_835_code('CARC', $c);
698 break;
699 case 1:
700 $ca = ($c) ? edih_format_money($c) : "";
701 break;
702 case 2:
703 $cq = ($c) ? $c : "";
708 $str_html .= "<tr class='$cls'><td>&gt;</td><td colspan=3>$ky $cg $cd $ca $cq</td></tr>".PHP_EOL;
709 $str_html .= "<tr class='$cls'><td style='text-align: center;'>$ky $cd</td><td colspan=3>$cr</td></tr>".PHP_EOL;
713 if (count($moa_ar)) {
714 $cls = 'remc';
715 $str_html .= "<tr class='$cls'><td colspan=4><em>Remarks</em></td></tr>".PHP_EOL;
716 foreach($moa_ar as $moa) {
717 $moar = $cd835->get_835_code('RARC', $moa);
718 $str_html .= "<tr class='$cls'><td style='text-align: center;'>$moa</td><td colspan=3>$moar</td></tr>".PHP_EOL;
721 if (count($lq_ar)) {
722 $cls = 'mia';
723 $str_html .= ($rarc_str) ? "<tr class='$cls'><td colspan=4>$rarc_str</td></tr>".PHP_EOL : "";
724 foreach($lq_ar as $lq) {
725 $lqr = $cd835->get_835_code('RARC', $lq);
726 $str_html .= "<tr class='$cls'><td style='text-align: center;'>$lq</td><td colspan=3>$lqr</td></tr>".PHP_EOL;
729 // bottom border
730 $str_html .= "<tr class='remc'><td colspan=4>&nbsp;</td></tr>".PHP_EOL;
731 // end tags for table
732 $str_html .= "</tbody>".PHP_EOL."</table>".PHP_EOL;
735 return $str_html;
741 * Create an HTML rendition of the 835 check payment transaction.
744 * @param array
745 * @param object
746 * @param object
747 * @param array
748 * @param string
750 * @return string HTML table
752 function edih_835_payment_html($segments, $codes27x, $codes835, $delimiters, $fname='') {
754 $str_html = '';
755 $pid = $chk = '';
756 if (is_array($segments) && count($segments) ) {
757 $trans_ar = $segments;
758 } else {
759 csv_edihist_log("edih_835_payment_html: invalid segments argument");
760 $str_html .= "<p>invalid segments argument</p>".PHP_EOL;
761 return $str_html;
764 if (is_array($delimiters) && count($delimiters) ) {
765 $de = $delimiters['e'];
766 $ds = $delimiters['s'];
767 $dr = $delimiters['r'];
768 } else {
769 csv_edihist_log("edih_835_payment_html: invalid delimiters argument");
770 $str_html .= "<p>invalid delimiters argument</p>".PHP_EOL;
771 return $str_html;
774 $fn = ($fname) ? trim($fname) : "";
776 // get the code objects right
777 $cd835 = $cd27x = '';
778 if ( 'edih_835_codes' == get_class($codes835) ) {
779 $cd835 = $codes835;
780 } elseif ('edih_835_codes' == get_class($codes27x) ) {
781 $cd835 = $codes27x;
783 if ( 'edih_271_codes' == get_class($codes27x) ) {
784 $cd27x = $codes27x;
785 } elseif ('edih_271_codes' == get_class($codes835) ) {
786 $cd27x = $codes835;
788 if (!$cd835 || !$cd27x) {
789 csv_edihist_log('edih_835_payment_html: invalid code class argument');
790 $str_html .= "<p>invalid code class argument</p>".PHP_EOL;
791 return $str_html;
794 // collect all strings into this variable
795 $str_html = "";
797 $hdr_html = "<thead>".PHP_EOL;
798 $hdr_html .= "<tr><th>Reference</th><th colspan=2>Information</th><th colspan=2>$fn</th></tr>".PHP_EOL;
799 $hdr_html .= "</thead>".PHP_EOL."<tbody>".PHP_EOL;
800 $pmt_html = "";
801 $src_html = "";
802 $rcv_html = "";
803 $lx_html = "";
804 $clp_html = "";
805 $trl_html = "";
807 $acctng = array('pmt'=>0,'fee'=>0,'clmpmt'=>0,'clmadj'=>0, 'ptrsp'=>0, 'svcptrsp'=>0, 'svcfee'=>0,'svcadj'=>0,'plbadj'=>0);
809 foreach($trans_ar as $trans) {
810 $clpsegs = array();
811 $lx_ar = array();
812 $clp_ct = 0;
813 $lx_ct = 0;
814 $loop = '';
815 $lxkey = '';
816 $capstr = "Remittance ";
817 $tblid = "";
819 foreach ($trans as $seg) {
821 if ( strncmp('ST'.$de, $seg, 3) === 0 ) {
822 $loopid = 'header';
823 continue;
826 if ( strncmp('BPR'.$de, $seg, 4) === 0 ) {
827 $loopid = 'header';
828 $cls = 'pmt';
830 $acctng = array('pmt'=>0, 'fee'=>0, 'clmpmt'=>0, 'clmadj'=>0, 'ptrsp'=>0,
831 'svcptrsp'=>0, 'svcfee'=>0, 'svcpmt'=>0, 'svcadj'=>0, 'plbadj'=>0);
833 $sar = explode($de, $seg);
834 $bpr01 = (isset($sar[1]) && $sar[1]) ? $cd835->get_835_code('BPR01', $sar[1]) : ''; // handling code
835 $bpr02 = (isset($sar[2]) && $sar[2]) ? edih_format_money($sar[2]) : ''; // full payment amount
836 $bpr03 = (isset($sar[3]) && $sar[3] == 'D' ) ? 'Debit' : 'Credit'; // credit or debit flag
837 $bpr04 = (isset($sar[4]) && $sar[4]) ? $sar[4] : ''; // payment method ACH|CHK|NON
838 $bpr05 = (isset($sar[5]) && $sar[5]) ? $sar[5] : ''; // payment format code CCP|CTX
839 $bpr06 = (isset($sar[6]) && $sar[6]) ? $sar[6] : ''; // DFI ID qualifier
840 $bpr07 = (isset($sar[7]) && $sar[7]) ? $sar[7] : ''; // bank ID
841 $bpr08 = (isset($sar[8]) && $sar[8]) ? $sar[8] : ''; // account no. qualifier DA
842 $bpr09 = (isset($sar[9]) && $sar[9]) ? $sar[9] : ''; // sender account number
843 $bpr10 = (isset($sar[10]) && $sar[10]) ? $sar[10] : ''; // originating company ID
844 $bpr11 = (isset($sar[11]) && $sar[11]) ? $sar[11] : ''; // originating company supplemental ID
845 $bpr12 = (isset($sar[12]) && $sar[12]) ? $sar[12] : ''; // deposit acount ID
846 $bpr13 = (isset($sar[13]) && $sar[13]) ? $sar[13] : ''; // deposit bank ID
847 $bpr14 = (isset($sar[14]) && $sar[14]) ? $sar[14] : ''; // account type DA deposit SG savings
848 $bpr15 = (isset($sar[15]) && $sar[15]) ? $sar[15] : ''; // account number
849 $bpr16 = (isset($sar[16]) && $sar[16]) ? edih_format_date($sar[16]) : ''; // check or payment date
851 if ($bpr04 == 'NON') {
852 $pmt_html .= "<tr class='$cls'><td>$bpr16</td><td>$bpr03 $bpr04</td><td colspan=2>Non Payment</td></tr>".PHP_EOL;
853 } else {
854 $pmt_html .= "<tr class='$cls'><td>$bpr16</td><td>$bpr03 $bpr04</td><td colspan=2>$bpr02 to $bpr13 $bpr12 $bpr14</td></tr>".PHP_EOL;
856 if ( strpos('|ACH|BOP|FWT', $bpr04) ) {
857 $pmt_html .= "<tr class='$cls'><td>&gt;</td><td colspan=3>$bpr05 from: $bpr07 $bpr09 $bpr10</td></tr>".PHP_EOL;
859 $pmt_html .= ($bpr11) ? "<tr class='$cls'><td>&gt;</td><td colspan=3><em>Pmt No.</em> $bpr11 $bpr01</td></tr>".PHP_EOL : "";
860 $acctng['pmt'] =(isset($sar[2]) && $sar[2]) ? (float)$sar[2] : "";
862 continue;
865 if ( strncmp('TRN'.$de, $seg, 4) === 0 ) {
866 $sar = explode($de, $seg);
868 $trn01 = (isset($sar[1]) && $sar[1]) ? $sar[1] : ''; // trace type code
869 $trn02 = (isset($sar[2]) && $sar[2]) ? $sar[2] : ''; // trace number (= BPR11)
870 $trn03 = (isset($sar[3]) && $sar[3]) ? $sar[3] : ''; // originator ID
871 $trn04 = (isset($sar[4]) && $sar[4]) ? $sar[4] : ''; // originator supplemental ID
872 if ($trn03[0] == '1') { $trn03 = substr($trn03,1); } // originator ID is '1' prepended to EIN or TIN
873 // the html ID for the table
874 $tblid = ($trn02) ? $trn02 : "";
875 $capstr .= ($trn02) ? "Check No: ".$trn02 : "Payment Listing";
877 $pmt_html .= "<tr class='$cls'><td>&gt;</td><td colspan=3><em>Trace</em> $trn02 <em>by</em> $trn03 $trn04</td></tr>".PHP_EOL;
879 continue;
882 if ( strncmp('CUR'.$de, $seg, 4) === 0 ) {
883 $sar = explode($de, $seg);
885 $cur01 = (isset($sar[1])) ? $sar[1] : ''; // entity ID code
886 $cur02 = (isset($sar[2])) ? $sar[2] : ''; // currency code
888 $pmt_html .= "<tr class='$cls'><td>&gt;</td><td colspan=3><em>Trace</em> $cur02 by $cur03 $cur04</td></tr>".PHP_EOL;
890 continue;
893 if ( strncmp('REF'.$de, $seg, 4) === 0 ) {
894 $sar = explode($de, $seg);
896 $ref01 = (isset($sar[1])) ? $cd27x->get_271_code('REF', $sar[1]) : ''; // entity ID code
897 $ref02 = (isset($sar[2])) ? $sar[2] : ''; // entity ID
899 if ($loopid == 'header') {
900 // should not be present for payee receiver
901 $pmt_html .= "<tr class='$cls'><td>&gt;</td><td colspan=3><em>$ref01</em> $ref02</td></tr>".PHP_EOL;
902 } elseif ($loopid == '1000A') {
903 // source
904 $src_html .="<tr class='$cls'><td>&gt;</td><td colspan=3><em>$ref01</em> $ref02</td></tr>".PHP_EOL;
905 } elseif ($loopid == '1000B') {
906 // receiver
907 $rcv_html .= "<tr class='$cls'><td>&gt;</td><td colspan=3><em>$ref01</em> $ref02</td></tr>".PHP_EOL;
908 } elseif ($loopid == '2100') {
910 $clpsegs[] = $seg;
911 } elseif ($loopid == '2110') {
913 $clpsegs[] = $seg;
916 continue;
919 if ( strncmp('DTM'.$de, $seg, 4) === 0 ) {
920 $sar = explode($de, $seg);
921 // DTM in 835 use DTP codes from 271 codes
922 $dtm01 = (isset($sar[1])) ? $cd27x->get_271_code('DTP', $sar[1]) : ''; // date qualifier
923 $dtm02 = (isset($sar[2])) ? edih_format_date($sar[2]) : ''; // production date
924 $dtm05 = (isset($sar[5])) ? $sar[5] : '';
925 $dtm06 = (isset($sar[6])) ? edih_format_date($sar[2]) : '';
927 //if ( $elem02 == 'D8' && $elem03) {
928 //$dtmar = edih_format_date($elem03);
929 //} elseif ( $elem02 == 'RD8' && $elem03) {
930 //$dtmar = edih_format_date( substr($elem03, 0, 8) );
931 //$dtmar .= ' - '.edih_format_date( substr($elem03, -8) );
933 //}
935 if ($loopid == 'header') {
936 // should not be present for payee or receiver
937 $pmt_html .= "<tr class='$cls'><td>&gt;</td><td colspan=3><em>$dtm01</em> $dtm02</td></tr>".PHP_EOL;
938 } elseif ($loopid == '2100') {
939 $clpsegs[] = $seg;
940 } elseif ($loopid == '2110') {
941 $clpsegs[] = $seg;
944 continue;
947 if ( strncmp('N1'.$de, $seg, 3) === 0 ) {
948 $sar = explode($de, $seg);
950 $n101 = (isset($sar[1])) ? $cd27x->get_271_code('NM101', $sar[1]) : ''; // entity ID code
951 $n102 = (isset($sar[2])) ? $sar[2] : ''; // name
952 $n103 = (isset($sar[3])) ? $cd27x->get_271_code('NM108', $sar[3]) : ''; // entity ID type code
953 $n104 = (isset($sar[4])) ? $sar[4] : '';
955 if ($loopid == 'header') {
956 $loopid = '1000A';
957 $cls = 'src';
958 $src_html .= "<tr class='$cls'><td><em>$n101</em></td><td colspan=3>$n102 <em>$n103</em> $n104</td></tr>".PHP_EOL;
959 } elseif ($loopid == '1000A') {
960 $loopid = '1000B';
961 $cls = 'rcv';
962 $rcv_html .= "<tr class='$cls'><td><em>$n101</em></td><td colspan=3>$n102 <em>$n103</em> $n104</td></tr>".PHP_EOL;
966 continue;
969 if ( strncmp('N3'.$de, $seg, 3) === 0 ) {
970 $sar = explode($de, $seg);
972 $n301 = (isset($sar[1])) ? $sar[1] : ''; // address
973 $n302 = (isset($sar[2])) ? $sar[2] : ''; // address line 2
975 if ($loopid == '1000A') {
976 $src_html .= "<tr class='$cls'><td>&gt;</td><td colspan=3>$n301 $n302</td></tr>".PHP_EOL;
977 } elseif ($loopid == '1000B') {
978 $rcv_html .= "<tr class='$cls'><td>&gt;</td><td colspan=3>$n301 $n302</td></tr>".PHP_EOL;
981 continue;
984 if ( strncmp('N4'.$de, $seg, 3) === 0 ) {
985 $sar = explode($de, $seg);
987 $n401 = (isset($sar[1])) ? $sar[1] : ''; // city
988 $n402 = (isset($sar[2])) ? $sar[2] : ''; // state
989 $n403 = (isset($sar[3])) ? $sar[3] : ''; // Postal
990 $n404 = (isset($sar[4])) ? $sar[4] : ''; // Country
991 $n407 = (isset($sar[7])) ? $sar[7] : ''; // Country subdivision
993 if ($loopid == '1000A') {
994 $src_html .= "<tr class='$cls'><td>&gt;</td><td colspan=3>$n401 $n402 $n403</td></tr>".PHP_EOL;
995 $src_html .= ($n404 || $n407) ? "<tr class='$cls'><td>&gt;</td><td colspan=3>$n404 $n405</td></tr>".PHP_EOL : "";
996 } elseif ($loopid == '1000B') {
997 $rcv_html .= "<tr class='$cls'><td>&gt;</td><td colspan=3>$n401 $n402 $n403</td></tr>".PHP_EOL;
998 $rcv_html .= ($n404 || $n407) ? "<tr class='$cls'><td>&gt;</td><td colspan=3>$n404 $n405</td></tr>".PHP_EOL : "";
1001 continue;
1004 if ( strncmp('PER'.$de, $seg, 4) === 0 ) {
1005 if ($loopid == '2100' || $loopid == '2100') {
1006 // loop 2100 only
1007 $clpsegs[] = $seg;
1008 continue;
1010 $sar = explode($de, $seg);
1011 $per01_ar = array('CX'=>'Claims Dept','BL'=>'Technical Dept','IC'=>'Website');
1012 $per01 = $per02 = $per03 = $per04 = $per05 = $per06 = $per07 = $per08 = '';
1013 foreach($sar as $k=>$v) {
1014 switch((int)$k) {
1015 case 0: break;
1016 case 1: $per01 = (isset($per01_ar[$v])) ? $per01_ar[$v] : $v; break;
1017 case 2: $per02 = $v; break;
1018 case 3: $per03 = $v; break;
1019 case 4: $per04 = ($per03=='TE') ? edih_format_telephone($v) : $v; break;
1020 case 5: $per05 = $v; break;
1021 case 6: $per06 = ($per03=='TE') ? edih_format_telephone($v) : $v; break;
1022 case 7: $per07 = $v; break;
1023 case 8: $per08 = ($per03=='TE') ? edih_format_telephone($v) : $v;
1027 if ($loopid == '1000A') {
1028 $src_html .= "<tr class='$cls'><td>&gt;</td><td colspan=3>$per01 $per02 $per03 $per04 </td></tr>".PHP_EOL;
1029 $src_html .= ($per05 || $per07) ? "<tr class='$cls'><td>&gt;</td><td colspan=3>$per05 $per06 $per07 $per08</td></tr>".PHP_EOL : "";
1030 } elseif ($loopid == '1000B') {
1031 $rcv_html .= "<tr class='$cls'><td>&gt;</td><td colspan=3>$per01 $per02 $per03 $per04 </td></tr>".PHP_EOL;
1032 $rcv_html .= ($per05 || $per07) ? "<tr class='$cls'><td>&gt;</td><td colspan=3>$per05 $per06 $per07 $per08</td></tr>".PHP_EOL : "";
1035 continue;
1038 if ( strncmp('RDM'.$de, $seg, 4) === 0 ) {
1039 // remittance delivery method
1040 // loop 1000B -- add to pmt information
1041 $sar = explode($de, $seg);
1043 $rdm01 = (isset($sar[1])) ? $sar[1] : '';
1044 if ($sar[1] == 'BM') {
1045 $rdm01 = 'By mail';
1046 } elseif ($sar[1] == 'EM') {
1047 $rdm01 = 'By e-mail';
1048 } elseif ($sar[1] == 'FT') {
1049 $rdm01 = 'By file transfer';
1050 } elseif ($sar[1] == 'OL') {
1051 $rdm01 = 'By online';
1053 $rdm02 = (isset($sar[2])) ? $sar[2] : ''; // name
1054 $rdm03 = (isset($sar[3])) ? $sar[3] : ''; // number
1056 $pmt_html .= "<tr class='$cls'><td>$rdm01</td><td colspan=3>$rdm02 $rdm03</td></tr>".PHP_EOL;
1058 continue;
1061 if ( strncmp('LX'.$de, $seg, 3) === 0 ) {
1062 // LX can end loop 1000B or a claim grouping
1063 if ($loopid == '1000B') {
1064 // finish off pmt, src, and rcv
1065 $rcv_html .= "</tbody>".PHP_EOL."</table>".PHP_EOL;
1066 } elseif ($loopid == '2110') {
1067 if ($lxkey && array_key_exists($lxkey, $lx_ar)) {
1068 // LX claim grouping -- cannot predict detail
1069 // LX can follow loop 2110
1070 if (count($clpsegs)) {
1071 $clp_html .= edih_835_transaction_html($clpsegs, $codes27x, $codes835, $delimiters);
1072 $clpsegs = array();
1074 $nlx_html = ($lx_html) ? "<table name='lx_$lxkey' class='h835c' columns=4>".PHP_EOL."<tbody>".PHP_EOL.$lx_html.PHP_EOL : "";
1075 $lx_ar[$lxkey]['lx'] = $nlx_html;
1076 $lx_ar[$lxkey]['clp'] = $clp_html;
1077 $lx_html = "";
1078 $clp_html = "";
1079 $clpsegs = array();
1082 $sar = explode($de, $seg);
1083 $lxkey = (isset($sar[1]) && $sar[1]) ? $sar[1] : ''; // identify a grouping for claim info
1084 $lx_ar[$lxkey] = array();
1086 $loopid = '2000';
1087 $cls = 'lx';
1088 //$lx_ct = count($lx_ar);
1089 $lx_html .= ($lxkey) ? "<tr class='$cls'><td colspan=4><em>Claim Group</em> $lxkey</td></tr>".PHP_EOL: "";
1090 continue;
1093 if ( strncmp('TS3'.$de, $seg, 4) === 0 ) {
1094 $sar = explode($de, $seg);
1095 // this looks like a medicare part A or hospital remittance segment
1096 // segment TS2 gives DRG totals -- not read in this sequence. If you need it, code it
1097 $loopid = '2000';
1098 $ts301 = (isset($sar[1]) && $sar[1]) ? $sar[1] : ''; // Provider ID
1099 $ts302 = (isset($sar[2]) && $sar[2]) ? $cd27x->get_271_code('POS', $sar[2]) : ''; // Facility Code (place of service)
1100 $ts303 = (isset($sar[3]) && $sar[3]) ? edih_format_date($sar[3]) : ''; // date - last day of provider fiscal year
1101 $ts304 = (isset($sar[4]) && $sar[4]) ? $sar[4] : ''; // quantity
1102 $ts305 = (isset($sar[5]) && $sar[5]) ? edih_format_money($sar[5]) : ''; // monetary amount
1104 $lx_html .= "<tr class='$cls'><td><em>Prv</em> $ts301</td><td colspan=3>$ts302 <em>Count</em> $ts304 <em>Amount</em> $ts305</td></tr>".PHP_EOL;
1106 // Medicare Part A
1107 $tr1 = "<tr class='$cls'><td>&gt;</td><td colspan=3>";
1108 $tr2 = "</td></tr>".PHP_EOL;
1110 $lx_html .= (isset($sar[13]) && $sar[13]) ? $tr1."Total MSP Payer Amt: ".edih_format_money($sar[13]).$tr2.PHP_EOL : "";
1111 $lx_html .= (isset($sar[15]) && $sar[15]) ? $tr1."Total Non-Lab Chrg Amt: ".edih_format_money($sar[15]).$tr2.PHP_EOL : "";
1112 $lx_html .= (isset($sar[17]) && $sar[17]) ? $tr1."Total HCPCS Rpt Chrg Amt: ".edih_format_money($sar[17]).$tr2.PHP_EOL : "";
1113 $lx_html .= (isset($sar[18]) && $sar[18]) ? $tr1."Total HCPCS Payable Amt: ".edih_format_money($sar[18]).$tr2.PHP_EOL : "";
1114 $lx_html .= (isset($sar[20]) && $sar[20]) ? $tr1."Total Prof Cmpnt Amt: ".edih_format_money($sar[20]).$tr2.PHP_EOL : "";
1115 $lx_html .= (isset($sar[21]) && $sar[21]) ? $tr1."Total MSP Pt Liab Met Amt: ".edih_format_money($sar[21]).$tr2.PHP_EOL : "";
1116 $lx_html .= (isset($sar[22]) && $sar[22]) ? $tr1."Total MSP Pt Reimb Amt: ".edih_format_money($sar[22]).$tr2.PHP_EOL : "";
1117 $lx_html .= (isset($sar[23]) && $sar[23]) ? $tr1."Total PIP Claim Count: ".$sar[23].$tr2.PHP_EOL : "";
1118 $lx_html .= (isset($sar[24]) && $sar[24]) ? $tr1."Total PIP Claim Count: ".edih_format_money($sar[24]).$tr2.PHP_EOL : "";
1120 continue;
1123 if ( strncmp('TS2'.$de, $seg, 4) === 0 ) {
1124 csv_edihist_log("edih_835_transaction_html: segment TS2 present in $fn");
1125 // Medicare Part A
1126 $tr1 = "<tr class='$cls'><td>&gt;</td><td colspan=3>";
1127 $tr2 = "</td></tr>".PHP_EOL;
1129 $lx_html .= (isset($sar[1]) && $sar[1]) ? $tr1."Total DRG Amt: ".edih_format_money($sar[1]).$tr2 : "";
1130 $lx_html .= (isset($sar[2]) && $sar[2]) ? $tr1."Total Fed Specific Amt: ".edih_format_money($sar[2]).$tr2 : "";
1131 $lx_html .= (isset($sar[3]) && $sar[3]) ? $tr1."Total Hosp Specific Amt: ".edih_format_money($sar[3]).$tr2 : "";
1132 $lx_html .= (isset($sar[4]) && $sar[4]) ? $tr1."Total DSP Share Amt: ".edih_format_money($sar[4]).$tr2 : "";
1133 $lx_html .= (isset($sar[5]) && $sar[5]) ? $tr1."Total Capital Amt: ".edih_format_money($sar[5]).$tr2 : "";
1134 $lx_html .= (isset($sar[6]) && $sar[6]) ? $tr1."Total Ind Med Edu Amt: ".edih_format_money($sar[6]).$tr2 : "";
1135 $lx_html .= (isset($sar[7]) && $sar[7]) ? $tr1."Total Outlier Day Amt: ".edih_format_money($sar[7]).$tr2 : "";
1136 $lx_html .= (isset($sar[8]) && $sar[8]) ? $tr1."Total Day Outlier Day Amt: ".edih_format_money($sar[8]).$tr2 : "";
1137 $lx_html .= (isset($sar[9]) && $sar[9]) ? $tr1."Total Cost Outlier Day Amt: ".edih_format_money($sar[9]).$tr2 : "";
1138 $lx_html .= (isset($sar[10]) && $sar[10]) ? $tr1."Avg DRG Length of Stay: ".$sar[10].$tr2 : "";
1139 $lx_html .= (isset($sar[11]) && $sar[11]) ? $tr1."Total Discharge Count: ".$sar[11].$tr2 : "";
1140 $lx_html .= (isset($sar[12]) && $sar[12]) ? $tr1."Total Cost Rpt Day Count: ".$sar[12].$tr2 : "";
1141 $lx_html .= (isset($sar[13]) && $sar[13]) ? $tr1."Total Covered Day Count: ".$sar[13].$tr2 : "";
1142 $lx_html .= (isset($sar[14]) && $sar[14]) ? $tr1."Total Non Covered Day Count: ".$sar[14].$tr2 : "";
1143 $lx_html .= (isset($sar[15]) && $sar[15]) ? $tr1."Total MSP Pass-Thru Amt: ".edih_format_money($sar[15]).$tr2 : "";
1144 $lx_html .= (isset($sar[16]) && $sar[16]) ? $tr1."Avg DRG Weight: ".$sar[16].$tr2 : "";
1145 $lx_html .= (isset($sar[17]) && $sar[17]) ? $tr1."Total PPS Capital FSP DRG Amt: ".edih_format_money($sar[17]).$tr2 : "";
1146 $lx_html .= (isset($sar[18]) && $sar[18]) ? $tr1."Total PPS Capital FSP HSP Amt: ".edih_format_money($sar[18]).$tr2 : "";
1147 $lx_html .= (isset($sar[19]) && $sar[19]) ? $tr1."Total PPS DSH DRG Amt: ".edih_format_money($sar[19]).$tr2 : "";
1149 continue;
1152 if ( strncmp('PLB'.$de, $seg, 4) === 0 ) {
1153 // can signal end of claim transaction
1154 $loopid = 'summary';
1155 $cls = 'pmt';
1156 //if (count($clpsegs)) {
1157 //$clp_html .= edih_835_transaction_html($clpsegs, $codes27x, $codes835, $delimiters);
1158 //$clpsegs = array();
1161 $sar = explode($de, $seg);
1162 // provider ID and fiscal year end date
1163 $plb01 = (isset($sar[1]) && $sar[1]) ? $sar[1] : "";
1164 $plb02 = (isset($sar[2]) && $sar[2]) ? edih_format_date($sar[2]) : "";
1166 $pmt_html .= "<tr class='$cls'><td><em>Provider</em></td><td colspan=3>$plb01 $plb02</td></tr>".PHP_EOL;
1168 $plbar = array_slice($sar, 2);
1169 $plbar = array_chunk($plbar, 2);
1170 // reason code and amount
1171 foreach($plbar as $plb) {
1172 foreach($plb as $k=>$p) {
1173 // PLB 3, 5, 7, 9, 11, 13
1174 // composite element 'code:reference'
1175 if ($k==0) {
1176 if ($p && strpos($p, $ds) ) {
1177 $plb_rc = substr($p, 0, strpos($p, $ds)); // code
1178 $plb_tr = substr($p, strpos($p, $ds)+1); // reference (case #)?
1179 } else {
1180 $plb_rc = ($p) ? $p : "";
1181 $plb_tr = "";
1183 $plb_rt = ($plb_rc) ? $cd835->get_835_code('PLB', $plb_rc) : "";
1184 } else {
1185 // PLB 4, 6, 8, 10, 12, 14
1186 // monetary amount
1187 $plb_amt = ($p) ? edih_format_money($p) : "";
1188 $acctng['plbadj'] += ($p) ? (float)$p : 0;
1191 $pmt_html .= "<tr class='$cls'><td>$plb_tr</td><td colspan=3>$plb_rc $plb_rt $plb_amt</td></tr>".PHP_EOL;
1194 continue;
1197 if (strncmp('SE'.$de, $seg, 3) === 0 ) {
1198 // end of payment transaction, so create the html page
1199 $loopid ='trailer';
1200 $cls = 'pmt';
1201 // include our accounting totals
1202 if (is_array($acctng) && count($acctng)) {
1203 array_walk($acctng, 'edih_round_cb');
1204 $bal = ($acctng['fee'] == ($acctng['pmt'] + $acctng['clmadj'] + $acctng['svcadj'] + $acctng['svcptrsp'] + $acctng['plbadj']) ) ? "Balanced" : "Not Balanced";
1205 $acct_str = "$bal: <em>Fee</em> {$acctng['fee']} <em>Pmt</em> {$acctng['pmt']} ";
1206 $acct_str .= "<em>ClpAdj</em> {$acctng['clmadj']} <em>SvcAdj</em> {$acctng['svcadj']} ";
1207 $acct_str .= "<em>PtRsp</em> {$acctng['ptrsp']} (<em>svcPtRsp</em> {$acctng['svcptrsp']}) <em>PlbAdj</em> {$acctng['plbadj']} ";
1209 $pmt_html .= "<tr class='$cls'><td colspan=4>$acct_str</td></tr>".PHP_EOL;
1212 // create the html page
1213 $str_html .= "<table id=$tblid class='h835' columns=4><caption>$capstr</caption>".PHP_EOL;
1214 $str_html .= $hdr_html;
1215 if ($pmt_html) { $str_html .= $pmt_html; $pmt_html = ""; }
1216 if ($src_html) { $str_html .= $src_html; $src_html = ""; }
1217 if ($rcv_html) { $str_html .= $rcv_html; $rcv_html = ""; }
1219 if (count($lx_ar)) {
1220 // claim segments are in lx array
1221 // make sure we have current collection
1222 if ($lxkey && array_key_exists($lxkey, $lx_ar)) {
1223 if (count($clpsegs)) {
1224 $clp_html .= edih_835_transaction_html($clpsegs, $codes27x, $codes835, $delimiters);
1225 $clpsegs = array();
1227 // note: table ending in CLP if stanza
1228 $nlx_html = "<table name='lx_$lxkey' class='h835c' columns=4>".PHP_EOL."<tbody>".PHP_EOL.$lx_html.PHP_EOL;
1229 $lx_ar[$lxkey]['lx'] = $nlx_html;
1230 $lx_ar[$lxkey]['clp'] = $clp_html;
1231 $lx_html = "";
1232 $clp_html = "";
1233 $clpsegs = array();
1235 // append segments to html
1236 foreach($lx_ar as $key=>$val) {
1237 $str_html .= $val['lx'];
1238 $str_html .= $val['clp'];
1240 } elseif($lx_html) {
1241 $str_html .= $lx_html;
1242 $lx_html = "";
1245 if (count($clpsegs)) {
1246 // would be captured in LX and lx array
1247 $clp_html .= edih_835_transaction_html($clpsegs, $codes27x, $codes835, $delimiters);
1248 $clpsegs = array();
1250 if ($clp_html) {
1251 $str_html .= $clp_html;
1252 $clp_html = "";
1254 if ($trl_html) {
1255 $str_html .= $trl_html;
1256 $trl_html = "";
1258 //$str_html .= "</tbody>".PHP_EOL."</table>".PHP_EOL;
1260 continue;
1263 if (strncmp('CLP'.$de, $seg, 4) === 0 ) {
1264 if ($loopid == '1000B') {
1265 // end of 1000B (receiver) loop
1266 $rcv_html .= ($clp_ct) ? "" : "</tbody>".PHP_EOL."</table>".PHP_EOL;
1267 } elseif ($loopid == '2000') {
1268 // end of LX header (LX TS3 TS2 claim grouping)
1269 $lx_html .= ($clp_ct) ? "" : "</tbody>".PHP_EOL."</table>".PHP_EOL;
1271 $loopid = '2100';
1272 //array('pmt'=>0, 'clmpmt'=>0, 'clmadj'=0, 'prvadj'=>0, 'ptrsp'=>0,'lx'=>array());
1273 $sar = explode($de, $seg);
1274 $acctng['fee'] += (isset($sar[3]) && $sar[3]) ? (float)$sar[3] : 0;
1275 $acctng['clmpmt'] += (isset($sar[4]) && $sar[4]) ? (float)$sar[4] : 0;
1276 $acctng['ptrsp'] += (isset($sar[5]) && $sar[5]) ? (float)$sar[5] : 0;
1278 if (count($clpsegs)) {
1279 $clp_html .= edih_835_transaction_html($clpsegs, $codes27x, $codes835, $delimiters);
1281 $clpsegs = array();
1282 $clpsegs[] = $seg;
1283 $clp_ct++;
1284 continue;
1287 if (strncmp('SVC'.$de, $seg, 4) === 0 ) {
1288 $loopid = '2110';
1289 $sar = explode($de, $seg);
1290 $pmtm = $pmts = 1;
1291 foreach($sar as $k=>$v) {
1292 if ($k == 2) {
1293 $svcfee = ($v) ? (float)$v : 0;
1294 } elseif ($k == 3) {
1295 $svcpmt = ($v) ? (float)$v : 0;
1296 } elseif ($k == 5) {
1297 $pmtm = ($v) ? (int)$v : 1;
1298 } elseif ($k == 7) {
1299 $pmts = ($v) ? (int)$v : 1;
1302 $acctng['svcfee'] += $svcfee * $pmts;
1303 $acctng['svcpmt'] += $svcpmt * $pmtm;
1305 $clpsegs[] = $seg;
1306 continue;
1308 if (strncmp('CAS'.$de, $seg, 4) === 0 ) {
1309 $sar = explode($de, $seg);
1310 // category
1311 $ctg = (isset($sar[1]) && $sar[1]) ? $sar[1] : 'CO';
1312 // slice sar array to get triplet elements
1313 // chunk into triplets
1314 $sar1 = array_slice($sar, 2);
1315 $sar1 = array_chunk($sar1, 3);
1317 foreach($sar1 as $cas) {
1318 $cav = 0;
1319 $cq = '';
1320 foreach($cas as $k=>$v) {
1321 if ($k == 1) {
1322 // monetary amount elem 3, 6, 9, 12, 15, 18
1323 $cav = ($v) ? $v : 0;
1324 } elseif($k == 2) {
1325 // quantity elem 4, 7, 10, 13, 16, 19
1326 $cq = ($v) ? $v : "";
1327 if ($cq && strcmp($cq, '1') > 0) {
1328 $cav = $cav * $cq;
1332 if ($ctg == 'PR') {
1333 $acctng['svcptrsp'] += ($cav) ? (float)$cav : 0;
1334 } else {
1335 $acctky = ($loopid == '2100') ? 'clmadj' : 'svcadj';
1336 $acctng[$acctky] += ($cav) ? (float)$cav : 0;
1339 $clpsegs[] = $seg;
1340 continue;
1342 // uncaught segments should be routed by this
1343 if ($loopid == '2100' || $loopid == '2110') {
1344 $clpsegs[] = $seg;
1345 continue;
1348 } // end foreach(trans as seg)
1349 } // end foreach(trans_ar as trans)
1351 return $str_html;
1356 * create a display for an 835 claim payment file or transaction
1358 * @uses csv_check_x12_obj()
1360 * @param string $filename the filename
1361 * @param string TRN02 identifier from 835 check ir EFT
1362 * @param string CLM01 identifier from 837 CLM
1364 * @return string error message or a table with file information
1366 function edih_835_html($filename, $trace='', $clm01='', $summary=false) {
1368 $html_str = '';
1370 if (trim($filename)) {
1371 $obj835 = csv_check_x12_obj($filename, 'f835');
1372 if ($obj835 && 'edih_x12_file' == get_class($obj835)) {
1373 $fn = $obj835->edih_filename();
1374 $delims = $obj835->edih_delimiters();
1375 $env_ar = $obj835->edih_x12_envelopes();
1377 $de = (isset($delims['e'])) ? $delims['e'] : '';
1378 $ds = (isset($delims['s'])) ? $delims['s'] : '';
1379 $dr = (isset($delims['r'])) ? $delims['r'] : '';
1380 // $dr is not used, but just in case
1381 } else {
1382 $html_str .= "<p>edih_835_html: invalid file name</p>".PHP_EOL;
1383 return $html_str;
1385 } else {
1386 $html_str .= "Error in file name or file parsing <br />".PHP_EOL;
1387 csv_edihist_log("edih_835_html: error in parsing file $filename");
1388 return $html_str;
1390 if ( $de && $ds ) {
1391 // note $dr, repetition separator, is not always available
1392 $cd27x = new edih_271_codes($ds, $dr);
1393 $cd835 = new edih_835_codes($ds, $dr);
1394 } else {
1395 csv_edihist_log("edih_835_html: Did not get delimiters");
1396 $html_str .= "<p>Did not get delimiters for $fn</p>".PHP_EOL;
1397 return $html_str;
1400 // if given, one only of trace or clm01
1401 $pid = $chk = '';
1402 if ($clm01) {
1403 $pid = trim((string)$clm01);
1404 } elseif ($trace) {
1405 $chk = trim((string)$trace);
1408 if ($pid) {
1409 $clp_ar = $obj835->edih_x12_transaction($pid);
1410 // $clp_ar is array[i][j]
1411 if ( count($clp_ar) ) {
1412 if ($summary) {
1413 $html_str .= edih_835_clp_summary($clp_ar, $cd27x, $cd835, $delims, $fn);
1414 } else {
1415 // create a table for this transaction for jquery-ui dialog
1416 $html_str .= edih_835_transaction_html($clp_ar, $cd27x, $cd835, $delims, $fn);
1418 } else {
1419 csv_edihist_log("edih_835_html: Did not find PtID $pid in $fn");
1420 $html_str .= "<p>Did not find PtID $pid in $fn</p>".PHP_EOL;
1421 return $html_str;
1423 } elseif ($chk) {
1424 // check detail
1425 if (isset($env_ar['ST']) && count($env_ar['ST'])) {
1426 $trans_ar = array();
1427 foreach($env_ar['ST'] as $st) {
1428 if ($st['trace'] != $chk) { continue; }
1429 $trans_ar[] = $obj835->edih_x12_slice( array('trace'=>$chk) );
1431 } else {
1432 csv_edihist_log("edih_835_transaction_html: Did not get envelopes information for $fn");
1433 $html_str .= "<p>Did not get envelopes information for $fn</p>".PHP_EOL;
1434 return $html_str;
1436 if (is_array($trans_ar) && count($trans_ar)) {
1437 // $trans_ar is a slice, array[i]
1438 $html_str .= edih_835_payment_html($trans_ar, $cd27x, $cd835, $delims, $fn);
1439 } else {
1440 csv_edihist_log("edih_835_transaction_html: Did not find trace $chk in $fn");
1441 $html_str .= "<p>Did not find trace $chk in $fn</p>".PHP_EOL;
1442 return $html_str;
1444 } else {
1445 // entire file
1446 if (isset($env_ar['ST']) && count($env_ar['ST'])) {
1447 $trans_ar = array();
1448 foreach($env_ar['ST'] as $st) {
1449 $trans_ar[] = $obj835->edih_x12_slice( array('trace'=>$st['trace']) );
1451 } else {
1452 csv_edihist_log("edih_835_transaction_html: Did not envelopes information for $fn");
1453 $html_str .= "<p>Did not get envelopes information for $fn</p>".PHP_EOL;
1454 return $html_str;
1456 if (is_array($trans_ar) && count($trans_ar)) {
1457 // $trans_ar is a slice, array[i]
1458 $html_str .= edih_835_payment_html($trans_ar, $cd27x, $cd835, $delims, $fn);
1459 } else {
1460 csv_edihist_log("edih_835_transaction_html: Did not get ST envelopes for $fn");
1461 $html_str .= "<p>Did not get ST envelopes for $fn</p>".PHP_EOL;
1462 return $html_str;
1466 return $html_str;