added days of week to reccurence widget (#286)
[openemr.git] / library / edihistory / edih_csv_data.php
blob3272bb460bc2d26ebd3b4b51237e1f0adba439da
1 <?php
2 /*
3 * edih_csv_data.php
5 * Copyright 2016 Kevin McCormick Longview, Texas
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License as published by
15 * the Free Software Foundation; version 3 or later. You should have
16 * received a copy of the GNU General Public License along with this program;
17 * if not, write to the Free Software Foundation, Inc.,
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19 * <http://opensource.org/licenses/gpl-license.php>
23 * @link: http://www.open-emr.org
24 * @package ediHistory
28 /**
29 * Display csv table data in an HTML table for newly processed files
31 * This function uses the csv table header row to order the csv data
32 * The data array should be file table rows and claim table rows,
33 * and have this structure:
34 * array[icn]['type'] => x12 type
35 * array[icn]['file'][i][array( --- data row---) ]
36 * array[icn]['claim'][i][array( --- data row---) ]
38 * @uses csv_table_header()
39 * @uses csv_thead_html()
40 * @param array
41 * @param bool
42 * @return string
44 function edih_csv_process_html($data_ar, $err_only=false) {
46 $str_html = '';
47 $clm_html = '';
49 foreach ($data_ar as $icn=>$csvdata) {
50 if ( array_key_exists('type', $csvdata) ) {
51 $ft = $csvdata['type'];
53 } else {
54 $str_html .= 'edih_csv_process_html() for '.$icn.' did not get type value';
55 csv_edihist_log('edih_csv_process_html: for '.$icn.' did not get type value');
56 return $str_html;
59 $cls = (strpos('|f837|f270|f276|f278', $ft)) ? 'sub' : 'rsp';
61 if ( array_key_exists('file', $csvdata) ) {
63 $fidx = 0;
64 foreach($csvdata['file'] as $key=>$csvfile) {
66 $oe = ( $fidx % 2 == 1 ) ? 'fodd' : 'feven';
67 $cls = (strpos('|f837|f270|f276|f278', $ft)) ? 'sub' : 'rsp';
69 $dt_str = "";
71 $dte = (isset($csvfile['Date'])) ? $csvfile['Date'] : '';
72 $fn1 = (isset($csvfile['FileName'])) ? $csvfile['FileName'] : '';
73 $ctl = (isset($csvfile['Control'])) ? $csvfile['Control'] : '';
74 $clmct = (isset($csvfile['Claim_ct'])) ? $csvfile['Claim_ct'] : '';
75 $trc = (isset($csvfile['Trace'])) ? $csvfile['Trace'] : '';
76 $typ = (isset($csvfile['RspType'])) ? $csvfile['RspType'] : '';
77 $rej = (isset($csvfile['RejCt'])) ? $csvfile['RejCt'] : '';
79 $dt_str .= ($fn1) ? "<a class='$cls' href='edih_main.php?gtbl=file&fname=$fn1&ftype=$ft&fmt=seg'>$fn1</a>&nbsp;" : "";
80 $dt_str .= ($dte) ? " &nbsp;".substr($dte,0,4)."-".substr($dte,4,2)."-".substr($dte,6,2) : "";
81 $dt_str .= ($clmct) ? " &nbsp;<em>Claims</em> ".$clmct : "";
82 if ($ft == 'f997' || $ft == 'ta1') {
83 $dt_str .= ($typ) ? " &nbsp;".$typ : "";
84 $dt_str .= ($rej) ? " &nbsp;".$rej : "";
85 $dt_str .= ($trc) ? "&nbsp; <a class='$cls' title=$trc href='edih_main.php?gtbl=file&trace=$trc&ftype=$ft&rsptype=$typ'><em>trace</em></a>&nbsp;" : "";
86 } elseif ($ft == 'f277') {
87 $dt_str .= (isset($csvfile['Accept'])) ? " &nbsp;<em>Accpt</em> ".$csvfile['Accept'] : "";
88 $dt_str .= (isset($csvfile['Reject'])) ? " &nbsp;<em>Rej</em> ".$csvfile['Reject'] : "";
89 } elseif ($ft == 'f835') {
90 $dt_str .= (isset($csvfile['Denied'])) ? " &nbsp;<em>Denied</em> ".$csvfile['Denied'] : "";
91 $dt_str .= ($trc) ? " &nbsp;<em>Chk</em> <a class='$cls' href='edih_main.php?gtbl=file&fname=$fn1&trace=$trc&ftype=$ft&fmt=htm'>$trc</a>&nbsp;" : "";
92 $dt_str .= (isset($csvfile['Payer'])) ? " &nbsp;".$csvfile['Payer'] : "";
95 $str_html .= "<dt class=$oe>$dt_str</dt>".PHP_EOL;
96 $fidx++;
99 // &nbsp;&nbsp;
100 // handle the claim array
101 if ( array_key_exists('claim', $csvdata) ) {
103 $cidx = 0;
104 $errct = 0;
106 foreach($csvdata['claim'] as $claim) {
107 if ($err_only) {
108 // output err_only is when claim status is a rejected type
109 if ($ft == 'f835') {
110 if ( in_array($claim['Status'], array('1', '2', '3', '19', '20', '21')) ) {
111 continue;
113 } elseif ($ft == 'f277') {
114 if (substr_count($claim['Status'],'A1') || substr_count($claim['Status'],'A2') || substr_count($claim['Status'],'A5')) {
115 continue;
117 } elseif (strpos('|f997|f999|f271', $ft) && $claim['Status'] == 'A') {
118 continue;
119 } elseif ( strpos('|f837|f270|f276', $ft) ) {
120 continue;
124 $errct++;
125 $dd_str = "";
126 $oe = ( $errct % 2 ) ? 'codd' : 'ceven';
128 $ptn = (isset($claim['PtName'])) ? $claim['PtName'] : '';
129 $fn1 = (isset($claim['FileName'])) ? $claim['FileName'] : '';
130 $ctl = (isset($claim['Control'])) ? $claim['Control'] : '';
131 $pid = (isset($claim['CLM01'])) ? $claim['CLM01'] : '';
132 $sts = (isset($claim['Status'])) ? $claim['Status'] : '';
133 $err = (isset($claim['err_seg'])) ? $claim['err_seg'] : '';
134 $trc = (isset($claim['Trace'])) ? $claim['Trace'] : '';
135 $bht03 = (isset($claim['BHT03'])) ? $claim['BHT03'] : '';
136 $pay = (isset($claim['Payer'])) ? $claim['Payer'] : '';
137 $typ = (isset($csvfile['RspType'])) ? $claim['RspType'] : '';
138 $auth = (isset($csvfile['Auth'])) ? $claim['Auth'] : '';
140 $ins = (isset($csvfile['InsBnft'])) ? $claim['InsBnft'] : '';
141 $ins = (isset($csvfile['InsLevel'])) ? $claim['InsLevel'] : $ins;
143 $clm = (isset($csvfile['ClaimID'])) ? $claim['ClaimID'] : $ins;
145 $dte = (isset($claim['SvcDate'])) ? $claim['SvcDate'] : '';
146 $dte = (isset($claim['ReqDate'])) ? $claim['ReqDate'] : $dte;
147 $dte = (isset($claim['RspDate'])) ? $claim['RspDate'] : $dte;
148 $dte = (isset($claim['FileDate'])) ? $claim['FileDate'] : $dte;
150 $dd_str .= ($ptn) ? $ptn."&nbsp; " : "";
151 $dd_str .= ($dte) ? " &nbsp;".substr($dte,0,4)."-".substr($dte,4,2)."-".substr($dte,6,2) : "";
152 if (strpos('|f277|f276|f270|f271|f278', $ft)) {
153 $dd_str .= ($sts) ? " &nbsp;$sts" : "";
154 $dd_str .= ($ins) ? " &nbsp;$ins" : "";
155 $dd_str .= ($clm) ? " &nbsp;$clm" : "";
156 $dd_str .= ($bht03) ? " &nbsp;<em>view</em> <a class='$cls' href='edih_main.php?gtbl=claim&fname=$fn1&ftype=$ft&bht03=$bht03&fmt=htm'>H</a>&nbsp; <a class='seg' href='edih_main.php?gtbl=claim&fname=$fn1&ftype=$ft&bht03=$bht03&fmt=seg'>T</a>&nbsp;" : "";
157 $dd_str .= ($pid) ? " &nbsp;<em>trace</em> <a class='sub' href='edih_main.php?gtbl=claim&ftype=$ft&rsptype=f837&trace=$pid&fmt=seg'>$pid</a>" : "";
158 $dd_str .= ($auth && $auth == 'Rsp' || $auth == 'Reply') ? "<a class='sub' href='edih_main.php?gtbl=claim&ftype=$ft&rsptype=f278&trace=$trc&fmt=seg'><em>trace</em></a>" : "";
159 } elseif ($ft == 'f835') {
160 $dd_str .= ($clm) ? " &nbsp;<em>Claim ID</em> $ins" : "";
161 $dd_str .= ($ins) ? " &nbsp;<em>InsLevel</em> $ins" : "";
162 $dd_str .= ($pid) ? " &nbsp;$pid <a class='$cls' href='edih_main.php?gtbl=claim&fname=$fn1&ftype=$ft&pid=$pid&fmt=htm'>H</a> <a class='$cls' href='edih_main.php?gtbl=claim&fname=$fn1&ftype=$ft&pid=$pid&fmt=seg'>T</a>" : "";
163 } elseif ($ft == 'f997') {
164 $dd_str .= ($trc) ? " &nbsp;<a class='$cls' title='$trc' href='edih_main.php?gtbl=claim&ftype=$ft&trace=$trc&rsptype=$typ&errseg=$err&fmt=seg'><em>trace</em></a>" : "";
165 $dd_str .= ($err) ? " &nbsp;".substr($err, 0, 8) : "";
166 } else {
167 $dd_str .= ($pid) ? " &nbsp;<a class='$cls' href='edih_main.php?gtbl=claim&fname=$fn1&ftype=$ft&pid=$pid&fmt=seg'>$pid</a>" : "";
169 $dd_str .= ($fn1) ? " &nbsp;<a class='$cls' title='$fn1' href='edih_main.php?gtbl=file&fname=$fn1&ftype=$ft&fmt=htm'><em>file</em></a>" : "";
171 $clm_html .= "<dd class='$oe'>$dd_str</dd>".PHP_EOL;
176 if ($err_only) {
177 if ($errct) { $str_html .= $clm_html; }
178 } else {
179 $str_html .= $clm_html;
181 } // end foreach ($data_ar as $icn=>$csvdata)
183 return $str_html;
187 * make a list of brief information and links to claims where a problem
188 * has been identified.
190 * @uses csv_file_type()
191 * @uses edih_997_error()
192 * @uses csv_denied_by_file()
194 * @param string
195 * @param string
196 * @param string
198 * @return string
200 function edih_list_denied_claims($filetype, $filename, $trace='') {
202 $str_html = '';
203 $row_ar = array();
205 $ft = csv_file_type($filetype);
206 if ($ft == 'f997') {
207 $str_html = edih_997_error($filename);
208 return $str_html;
209 } elseif (strpos('|f271|f277|f835', $ft)) {
210 $row_ar = csv_denied_by_file($ft, $filename, $trace);
211 } else {
212 $str_html .= "Invalid file type $filetype for denied claim search<br />";
213 csv_edihist_log("edih_list_denied_claims: wrong filetype $filetype");
214 return $str_html;
217 if (count($row_ar)) {
218 $rw_ct = count($row_ar);
219 $rwct = 0;
220 $str_html .= "<h4>Denied/Rejected Claims Listing</h4>".PHP_EOL;
221 $str_html .= "<dl class ='$ft'>$rw_ct claims <em>File</em> $filename ";
222 $str_html .= ($trace) ? "<em>Trace</em> $trace</dl>".PHP_EOL : "".PHP_EOL;
223 if ($ft == 'f835') {
224 foreach($row_ar as $row) {
225 $oe = ( $rwct % 2 ) ? 'codd' : 'ceven'; $rwct++;
226 $str_html .= "<dt class='$oe'>{$row[0]} <a class='rpt' href='edih_main.php?gtbl=claim&fname={$row[5]}&ftype=$ft&pid={$row[2]}&fmt=htm'>{$row[2]}</a></dt>".PHP_EOL;
228 } elseif ($ft == 'f277') {
229 foreach($row_ar as $row) {
230 $oe = ( $rwct % 2 ) ? 'codd' : 'ceven'; $rwct++;
231 $str_html .= "<dt class='$oe'>{$row[0]} <a class='rpt' href='edih_main.php?gtbl=claim&fname={$row[5]}&ftype=$ft&bht03={$row[4]}&fmt=htm'>{$row[4]}</a></dt>".PHP_EOL;
233 } elseif ($ft == 'f271') {
234 foreach($row_ar as $row) {
235 $oe = ( $rwct % 2 ) ? 'codd' : 'ceven'; $rwct++;
236 $str_html .= "<dt class='$oe'>{$row[0]} <a class='rpt' href='edih_main.php?gtbl=claim&fname={$row[5]}&ftype=$ft&bht03={$row[4]}&fmt=htm'>{$row[4]}</a></dt>".PHP_EOL;
238 } elseif ($ft == 'f997') {
239 foreach($row_ar as $row) {
240 $oe = ( $rwct % 2 ) ? 'codd' : 'ceven'; $rwct++;
241 $str_html .= "<dt class='$oe'>{$row[0]} <a class='rpt' href='edih_main.php?gtbl=claim&ftype=$tp&trace={$row[2]}&rsptype={$row[6]}&err={$row[7]}'>{$row[2]}</a></dt>".PHP_EOL;
245 $str_html .= "</dl>".PHP_EOL;
246 } else {
247 $str_html .= "Search returned no data rows from file $filename<br />";
248 csv_edihist_log("edih_list_denied_claims: no rows returned $filetype $filename $trace");
251 return $str_html;
256 * check the csv claims tables and return rows for a particular encounter
258 * @uses csv_pid_enctr_parse()
259 * @uses csv_file_with_pid_enctr()
260 * @uses csv_table_select_list()
261 * @uses csv_search_record()
263 * @param string encounter number
265 * @return string
267 function edih_claim_history($encounter) {
269 if ($encounter) {
270 $e = (string)$encounter;
271 } else {
272 return 'invalid encounter value '.$encounter.'<br />'.PHP_EOL;
274 // use function csv_table_select_list() so that only
275 // existing csv tables are queried
276 $tbl2 = csv_table_select_list('array');
278 $rtypes = array();
279 if (is_array($tbl2['claims']) && count($tbl2['claims']) ) {
280 $rtypes = array_keys($tbl2['claims']);
281 } else {
282 csv_edihist_log("csv_claim_history: failed to get csv table names");
283 return "failed to get csv table names";
286 $ch_html = "<table class='clmhist' columns=4><caption>Encounter Record for $e</caption>";
287 $ch_html .= "<tbody>".PHP_EOL;
289 if (in_array('f837', $rtypes)) {
290 $tp = 'f837';
291 $btar = csv_file_by_enctr($e, $tp);
293 if (is_array($btar) && count($btar)) {
294 $ch_html .= "<tr class='ch837'><td colspan=4>837 Claim ".count($btar)."</td></tr>".PHP_EOL;
295 $ch_html .= "<tr class='chhead'>".PHP_EOL;
296 $ch_html .= "<td>Name</td><td>SvcDate</td><td>CLM01</td><td>File</td>".PHP_EOL;
297 $ch_html .= "</tr>".PHP_EOL;
298 foreach($btar as $ch) {
299 $dt = substr($ch['SvcDate'], 0, 4).'-'.substr($ch['SvcDate'], 4, 2).'-'.substr($ch['SvcDate'], 6, 2);
300 //array('PtName', 'SvcDate', 'CLM01', 'InsLevel', 'Control', 'FileName', 'Fee', 'PtPaid', 'Provider' );
301 $ch_html .= "<tr class='ch837'>".PHP_EOL;
303 $ch_html .= "<td>{$ch['PtName']}</td>".PHP_EOL;
304 $ch_html .= "<td>$dt</td>".PHP_EOL;
305 $ch_html .= "<td><a class='seg' href='edih_main.php?gtbl=claim&fname={$ch['FileName']}&ftype=$tp&pid={$ch['CLM01']}&fmt=seg'>{$ch['CLM01']}</a></td>".PHP_EOL;
306 $ch_html .= "<td title='{$ch['Control']}'><a class='seg' href='edih_main.php?gtbl=file&fname={$ch['FileName']}&ftype=$tp&fmt=seg'>{$ch['FileName']}</a></td>".PHP_EOL;
308 $ch_html .= "</tr>".PHP_EOL;
310 } else {
311 $ch_html .= "<tr class='ch837'>".PHP_EOL;
312 $ch_html .= "<td colspan=4>837 Claim -- Nothing found for $e</td>".PHP_EOL;
313 $ch_html .= "</tr>".PHP_EOL;
317 if (in_array('f997', $rtypes)) {
318 $tp = 'f997';
319 $f997ar = csv_file_by_enctr($e, $tp);
321 if (is_array($f997ar) && count($f997ar)) {
322 $ch_html .= "<tr class='ch997'><td colspan=4>Ack 997/999 ".count($f997ar)."</td></tr>".PHP_EOL;
323 $ch_html .= "<tr class='chhead'>".PHP_EOL;
324 $ch_html .= "<td colspan=3>Acknowledgement File</td><td>Notes</td>".PHP_EOL;
325 $ch_html .= "</tr>".PHP_EOL;
326 foreach($f997ar as $ch) {
328 $msg = strlen($ch[7]) ? $ch[7] : 'ST Number';
329 //array('PtName', 'RspDate', 'Trace', 'Status', 'Control', 'FileName', 'RspType', 'err_seg');;
330 $ch_html .= "<tr class='ch997'>";
331 $ch_html .= "<td>Rsp Ack</td>".PHP_EOL;
332 $ch_html .= "<td><a class='rsp' target='_blank' href='edih_main.php?gtbl=claim&fname={$ch['FileName']}&ftype=$tp&trace={$ch['Trace']}&rsptype={$ch['RspType']}&errseg={$ch['err_seg']}'>{$ch['Status']}</a></td>".PHP_EOL;
333 $ch_html .= "<td><a class='seg' href='edih_main.php?gtbl=file&fname={$ch['FileName']}&ftype=$tp&fmt=seg'>{$ch['FileName']}</a></td>".PHP_EOL;
334 $ch_html .= "<td title='Response type/date'>{$ch['RspType']} {$ch['RspDate']}</td>".PHP_EOL;
335 $ch_html .= "</tr>".PHP_EOL;
337 } else {
338 $ch_html .= "<tr class='ch997'>";
339 $ch_html .= "<td colspan=4>Ack 997/999 -- Nothing found for $e</td>".PHP_EOL;
340 $ch_html .= "</tr>".PHP_EOL;
344 if (in_array('f277', $rtypes)) {
345 $tp = 'f277';
346 $f277ar = csv_file_by_enctr($e, $tp);
348 if (is_array($f277ar) && count($f277ar)) {
349 $ch_html .= "<tr class='ch277'><td colspan=4>Status 277 ".count($f277ar)."</td></tr>".PHP_EOL;
350 $ch_html .= "<tr class='chhead'>".PHP_EOL;
351 $ch_html .= "<td>Response</td><td>Status</td><td>File</td><td>ClaimID</td>".PHP_EOL;
352 $ch_html .= "</tr>".PHP_EOL;
353 foreach($f277ar as $ch) {
354 //'f277':array('PtName', 'SvcDate', 'CLM01', 'Status', 'BHT03', 'FileName', 'Payer', 'Trace');
355 $ch_html .= "<tr class='ch277'>";
357 $ch_html .= "<td>Claim Status</td>".PHP_EOL;
358 $ch_html .= "<td><a class='rsp' href='edih_main.php?gtbl=claim&fname={$ch['FileName']}&ftype=$tp&bht03={$ch['BHT03']}&fmt=htm'>{$ch['Status']}</a></td>".PHP_EOL;
359 $ch_html .= "<td title='{$ch['FileName']}'><a href='edih_main.php?gtbl=file&fname={$ch['FileName']}&ftype=$tp&fmt=seg'>{$ch['FileName']}</a></td>".PHP_EOL;
360 $ch_html .= "<td title='Payer {$ch['Payer']}'>{$ch['Trace']}</td>".PHP_EOL;
362 $ch_html .= "</tr>".PHP_EOL;
364 } else {
365 $ch_html .= "<tr class='ch277'>";
366 $ch_html .= "<td colspan=4>Status 277 -- Nothing found for $e</td>".PHP_EOL;
367 $ch_html .= "</tr>".PHP_EOL;
371 if (in_array('f835', $rtypes)) {
372 $tp = 'f835';
373 $f835ar = csv_file_by_enctr($e, $tp);
375 if (is_array($f835ar) && count($f835ar)) {
376 $ch_html .= "<tr class='ch835'><td colspan=4>Payment 835 ".count($f835ar)."</td></tr>".PHP_EOL;
377 $ch_html .= "<tr class='chhead'>".PHP_EOL;
378 $ch_html .= "<td>Response</td><td>Status</td><td>Trace</td><td>Payer</td>".PHP_EOL;
379 $ch_html .= "</tr>".PHP_EOL;
380 foreach($f835ar as $ch) {
382 $msg = $ch['ClaimID'] .' '.$ch['Pmt'].' '.$ch['PtResp'];
383 // array('PtName', 'SvcDate', 'CLM01', 'Status', 'Trace', 'FileName', 'ClaimID', 'Pmt', 'PtResp', 'Payer');
384 $ch_html .= "<tr class='ch835'>";
386 $ch_html .= "<td>{$ch['PtName']}</td>".PHP_EOL;
387 $ch_html .= "<td><a class='rsp' href='edih_main.php?gtbl=claim&fname={$ch['FileName']}&ftype=$tp&pid={$ch['CLM01']}&summary=no'>{$ch['Status']}</a></td>".PHP_EOL;
388 $ch_html .= "<td><a href='edih_main.php?gtbl=file&fname={$ch['FileName']}&ftype=$tp&trace={$ch['Trace']}&fmt=htm'>{$ch['Trace']}</a></td>".PHP_EOL;
389 $ch_html .= "<td title=$msg>{$ch['Payer']}</td>".PHP_EOL;
391 $ch_html .= "</tr>".PHP_EOL;
393 } else {
394 $ch_html .= "<tr class='ch835'>";
395 $ch_html .= "<td colspan=4>Payment 835 -- Nothing found for $e</td>".PHP_EOL;
396 $ch_html .= "</tr>".PHP_EOL;
399 } // end if($tp ...
400 // -- this is where a query on the payments datatable could be used to show if payment
401 // has been received, even if no era file shows the payment.
403 $ch_html .= "</tbody>".PHP_EOL;
404 $ch_html .= "</table>".PHP_EOL;
406 return $ch_html;
411 * Render one of our csv record files as an html table
413 * This function determines the actual csv file from the file_type and the
414 * csv_type. Tthe date field of each row is checked against the optional
415 * lookback period or date parameters.
417 * @uses csv_file_type()
418 * @uses csv_parameters()
419 * @uses csv_thead_html()
421 * @param string $file_type -- see function csv_file_type()
422 * @param string $csv_type -- either "file" or "claim"
423 * @param string $period -- lookback 2 weeks, 1 month, ALL, etc
424 * @param string $datestart -- from date CCYY-MM-DD
425 * @param string $dateend -- to date CCYY-MM-DD
427 * @return string
429 function edih_csv_to_html($file_type, $csv_type, $period='', $datestart='', $dateend='') {
431 $csv_html = "";
432 $modstr = '';
433 $csv_d = array();
434 // debug
435 csv_edihist_log("edih_csv_to_html: period $period datestart $datestart dateend $dateend");
437 $is_date = false;
438 $is_period = false;
440 if ($file_type && $csv_type) {
441 $csv_ar = csv_assoc_array($file_type, $csv_type);
442 if (is_array($csv_ar) && count($csv_ar) ) {
443 $rwct = count($csv_ar);
444 } else {
445 csv_edihist_log("edih_csv_to_html: error opening csv file $file_type $csv_type");
446 $csv_html .= "error opening csv file $file_type $csv_type<br>";
447 return false;
449 } else {
450 $csv_html .= "invalid arguments for opening csv table<br>";
451 return false;
454 $tp = csv_file_type($file_type);
455 if ($tp) {
456 $params = csv_parameters($tp);
457 } else {
458 csv_edihist_log("csv_to_html error: incorrect file type $file_type");
459 $csv_html .= "csv_to_html error: incorrect file type $file_type <br />".PHP_EOL;
460 return false;
462 // csv tables date is in col 0 for file, col 5 for claim
463 // file name is under FileName for all tables
464 $dtcol = (strpos($csv_type, "aim")) ? $params['claimdate'] : $params['filedate'];
465 $tp_lbl = (strpos($csv_type, "aim")) ? 'Claims' : 'Files';
467 // given dates shold be in CCYY-MM-DD or CCYY/MM/DD format
468 // edih_view.php is supposed to use CCYY-MM-DD
469 $dts = $dt4 = $dte = '';
470 if ( preg_match('/(19|20)\d{2}\D[01][0-9]\D[0-3][0-9]/', $datestart) ) {
471 $dts = implode('', preg_split("/\D/", $datestart) );
472 if ( $dateend && preg_match('/(19|20)\d{2}\D[01][0-9]\D[0-3][0-9]/', $dateend) ) {
473 $dte = implode('', preg_split("/\D/", $dateend) );
474 } else {
475 $dt4 = date_create(date('Y-m-d'));
476 $dte = date_format($dt4, 'Ymd');
478 // php DateTime is poorly documented
479 $is_date = ($dts && $dte);
480 // debug
481 csv_edihist_log("edih_csv_to_html: dts $dts dte $dte isdate ".strval($is_date));
484 } elseif ($period) {
485 $dtstr1 = '';
486 $is_period = preg_match('/\d{1,2}(?=w|m|y)/', $period, $matches);
487 if ( count($matches) ) {
488 $pd = $matches[0];
489 $gtdt = getdate();
490 $mon = (string)$gtdt['mon'];
491 $day = (string)($gtdt['mday'] - $gtdt['wday'] + 1);
492 $yr = (string)$gtdt['year'];
493 if ( strtoupper($period) == 'ALL' ) {
494 $is_period = false;
495 $modstr = '';
496 } elseif ( strpos($period, 'w') ) {
497 // take the first character of 'period'
498 $modstr = '-'.$pd.' week';
499 $dtstr1 = $mon.'/'.$day.'/'.$yr;
500 } elseif ( strpos($period, 'm') ) {
501 $modstr = '-'.$pd.' month';
502 $dtstr1 = $mon.'/01/'.$yr;
503 } elseif ( strpos($period, 'y') ) {
504 $modstr = '-'.$pd.' year';
505 $dtstr1 = $mon.'/01/'.$yr;
506 } else {
507 csv_edihist_log("csv_to_html error: incorrect date period $period");
508 return false;
512 // debug
513 csv_edihist_log("edih_csv_to_html: period $period modstr $modstr dtstr1 $dtstr1");
515 if ($is_period && $modstr) {
516 $dtpd1 = date_create( $dtstr1 );
517 $dtm = date_modify($dtpd1, $modstr);
518 $dtpd2 = $dtm->format('Ymd');
519 $dtpdlbl = $dtm->format('Y-m-d');
520 } else {
521 $dtpd2 = '';
522 $dtpdlbl = 'All Dates';
526 if ($is_date) {
527 $isok = false;
528 $idx = 0;
529 foreach($csv_ar as $data) {
530 $isok = (strcmp($data[$dtcol], $dts) >= 0) ? true : false;
531 $isok = (strcmp($data[$dtcol], $dte) > 0) ? false : $isok;
533 if ($isok) { $csv_d[] = $data; }
535 } elseif ($is_period) {
536 foreach($csv_ar as $data) {
537 if (strcmp($data[$dtcol], $dtpd2) > 0) { $csv_d[] = $data; }
539 } else {
540 $csv_d = &$csv_ar;
543 $ln_ct = count($csv_d);
545 if ($is_date) {
546 //$csv_html .= "<div id='dttl'>".PHP_EOL;
547 $csv_html .= "<h4>Table: $tp_lbl &nbsp;$tp &nbsp; Start: $datestart &nbsp; End: $dateend &nbsp;Rows: $rwct &nbsp;Shown: $ln_ct</h4>".PHP_EOL;
548 //$csv_html .= "</div>".PHP_EOL;
549 } elseif ($is_period) {
550 //div id='dttl'></div>
551 $csv_html .= "<h4>Table: $tp_lbl &nbsp;$tp &nbsp;From Date: $dtpdlbl &nbsp;Rows: $rwct &nbsp;Shown: $ln_ct</h4>".PHP_EOL;
552 } else {
553 //<div id='dttl'></div>
554 $csv_html .= "<h4>Table: $tp_lbl &nbsp;$tp &nbsp;All Dates Rows: $rwct &nbsp; Shown: $ln_ct</h4>".PHP_EOL;
557 //$csv_html .= "<table id='csvTable' class='csvDisplay'>".PHP_EOL; class='display'max-width: fit-content
558 $csv_html .= "<table id='csvTable' style='width: fit-content; float: left'>".PHP_EOL;
559 $csv_html .= csv_thead_html($tp, $csv_type);
560 $csv_html .= "<tbody>".PHP_EOL;
562 // now create the body of the table
564 $cls = (strpos('|f837|f270|f276|f278', $tp)) ? 'sub' : 'rsp';
566 $idx = 0;
567 if ($csv_type == 'file') {
569 if ($tp == 'f835') {
570 //array('Date', 'FileName', 'Control', 'Trace', 'Claim_ct', 'Denied', 'Payer')
571 foreach($csv_d as $val) {
572 $bgc = ($idx % 2 == 1 ) ? 'odd' : 'even';
573 $csv_html .= "<tr class='$bgc'>".PHP_EOL;
574 foreach($val as $k=>$v) {
575 if ($k == 'Date') {
576 $csv_html .= "<td>".substr($v, 0, 4).'-'.substr($v, 4, 2).'-'.substr($v, 6, 2)."</td>".PHP_EOL;
577 } elseif ($k == 'FileName') {
578 $fn = $v;
579 $csv_html .= "<td><a class='$cls' href='edih_main.php?gtbl=file&fname=$v&ftype=$tp&fmt=htm'>$v</a></td>".PHP_EOL;
580 } elseif ($k == 'Control') {
581 $csv_html .= "<td><a class='seg' href='edih_main.php?gtbl=file&icn=$v&ftype=$tp&fmt=seg'>$v</a></td>".PHP_EOL;
582 } elseif ($k == 'Trace') {
583 $trc = $v;
584 $csv_html .= "<td><a class='$cls' href='edih_main.php?gtbl=file&trace=$v&ftype=$tp&rsptype=$tp&fmt=htm'>$v</a></td>".PHP_EOL;
585 } elseif ($k == 'Claim_ct') {
586 $csv_html .= "<td>$v <a class='sub' href='edih_main.php?tracecheck=$trc&ckprocessed=yes'><em>P?</em></a></td>".PHP_EOL;
587 } elseif ($k == 'Denied') {
588 if ((int)$v > 0) {
589 $csv_html .= "<td><a class='sub' href='edih_main.php?chkdenied=yes&fname=$fn&ftype=$tp&trace=$trc'>$v</a></td>".PHP_EOL;
590 } else {
591 $csv_html .= "<td>$v</td>".PHP_EOL;
593 } else {
594 $csv_html .= "<td>$v</td>".PHP_EOL;
597 $csv_html .= "</tr>".PHP_EOL;
598 $idx++;
600 } elseif ($tp == 'f997') {
601 //array('Date', 'FileName', 'Control', 'Trace', 'RspType', 'RejCt')
602 foreach($csv_d as $val) {
603 $bgc = ($idx % 2 == 1 ) ? 'odd' : 'even';
604 $csv_html .= "<tr class='$bgc'>".PHP_EOL;
606 $rsp = $val['RspType'];
607 foreach($val as $k=>$v) {
608 if ($k == 'Date') {
609 $csv_html .= "<td>".substr($v, 0, 4).'-'.substr($v, 4, 2).'-'.substr($v, 6, 2)."</td>".PHP_EOL;
610 } elseif ($k == 'FileName') {
611 $fn = $v;
612 $csv_html .= "<td><a class='seg' href='edih_main.php?gtbl=file&fname=$v&ftype=$tp&fmt=seg'>$v</a></td>".PHP_EOL;
613 } elseif ($k == 'Trace') {
614 $csv_html .= "<td><a class='seg' href='edih_main.php?gtbl=file&trace=$v&ftype=$tp&rsptype=$rsp&fmt=seg'>$v</a></td>".PHP_EOL;
615 } elseif ($k == 'RejCt') {
616 if ((int)$v > 0) {
617 $csv_html .= "<td><a class='rpt' href='edih_main.php?chkdenied=yes&fname=$fn&ftype=$tp'>$v</a></td>".PHP_EOL;
618 } else {
619 $csv_html .= "<td>$v</td>".PHP_EOL;
621 } else {
622 $csv_html .= "<td>$v</td>".PHP_EOL;
625 $csv_html .= "</tr>".PHP_EOL;
626 $idx++;
629 } else {
630 // the generic case -- for 'file' type tables
631 foreach($csv_d as $val) {
632 $bgc = ($idx % 2 == 1 ) ? 'odd' : 'even';
633 $csv_html .= "<tr class='$bgc'>".PHP_EOL;
634 foreach($val as $k=>$v) {
635 if ($k == 'Date') {
636 $csv_html .= "<td>".substr($v, 0, 4).'-'.substr($v, 4, 2).'-'.substr($v, 6, 2)."</td>".PHP_EOL;
637 } elseif ($k == 'FileName') {
638 $csv_html .= "<td><a class='seg' href='edih_main.php?gtbl=file&fname=$v&ftype=$tp&fmt=htm'>$v</a></td>".PHP_EOL;
639 } elseif ($k == 'Control') {
640 $csv_html .= "<td><a class='seg' href='edih_main.php?gtbl=file&icn=$v&ftype=$tp&fmt=seg'>$v</a></td>".PHP_EOL;
641 } elseif ($k == 'Reject') {
642 if ((int)$v > 0) {
643 $csv_html .= "<td><a class='sub' href='edih_main.php?&chkdenied=yes&fname={$val['FileName']}&ftype=$tp'>$v</a></td>".PHP_EOL;
644 } else {
645 $csv_html .= "<td>$v</td>".PHP_EOL;
647 } else {
648 $csv_html .= "<td>$v</td>".PHP_EOL;
651 $csv_html .= "</tr>".PHP_EOL;
652 $idx++;
655 } elseif ($csv_type == 'claim') {
657 if ($tp == 'f837') {
658 // array('PtName', 'SvcDate', 'CLM01', 'InsLevel', 'Control', 'FileName', 'Fee', 'PtPaid', 'Provider' );
659 foreach($csv_d as $val) {
660 $bgc = ($idx % 2 == 1 ) ? 'odd' : 'even';
661 $csv_html .= "<tr class='$bgc'>".PHP_EOL;
662 // needed values for links
663 $fn = $val['FileName'];
664 foreach($val as $k=>$v) {
665 if ($k == 'CLM01') {
666 $csv_html .= "<td><a class='sub' href='edih_main.php?gtbl=claim&fname=$fn&ftype=$tp&pid=$v'>$v</a></td>".PHP_EOL;
667 } elseif ($k == 'SvcDate') {
668 $csv_html .= "<td>".substr($v, 0, 4).'-'.substr($v, 4, 2).'-'.substr($v, 6, 2)."</td>".PHP_EOL;
669 } elseif ($k == 'FileName') {
670 $csv_html .= "<td><a class='seg' href='edih_main.php?gtbl=file&fname=$fn&ftype=$tp&fmt=seg'>$v</a></td>".PHP_EOL;
671 } else {
672 $csv_html .= "<td>$v</td>".PHP_EOL;
675 $csv_html .= "</tr>".PHP_EOL;
676 $idx++;
678 } elseif ($tp == 'f835') {
679 // array('PtName', 'SvcDate', 'CLM01', 'Status', 'Trace', 'FileName', 'ClaimID', 'Pmt', 'PtResp', 'Payer')
680 foreach($csv_d as $val) {
681 $bgc = ($idx % 2 == 1 ) ? 'odd' : 'even';
682 $csv_html .= "<tr class='$bgc'>".PHP_EOL;
683 // needed values for links
684 $fn = $val['FileName'];
685 $pid = $val['CLM01'];
686 foreach($val as $k=>$v) {
687 if ($k == 'SvcDate') {
688 $csv_html .= "<td>".substr($v, 0, 4).'-'.substr($v, 4, 2).'-'.substr($v, 6, 2)."</td>".PHP_EOL;
689 } elseif ($k == 'CLM01') {
690 $csv_html .= "<td>$v <a class='$cls' href='edih_main.php?gtbl=claim&fname=$fn&ftype=$tp&pid=$pid&fmt=htm'>H</a>&nbsp;";
691 $csv_html .= "&nbsp;<a class='seg' href='edih_main.php?gtbl=claim&fname=$fn&ftype=$tp&pid=$pid&fmt=seg'>T</a></td>".PHP_EOL;
692 } elseif ($k == 'Trace') {
693 $csv_html .= "<td><a class='$cls' href='edih_main.php?gtbl=file&fname=$fn&trace=$v&ftype=$tp&fmt=htm'>$v</a></td>".PHP_EOL;
694 } elseif ($k == 'FileName') {
695 $csv_html .= "<td title='$v'>File <a class='$cls' href='edih_main.php?gtbl=file&fname=$fn&ftype=$tp&fmt=htm'>H</a>&nbsp;";
696 $csv_html .= "&nbsp;<a class='$cls' href='edih_main.php?gtbl=file&fname=$fn&ftype=$tp&fmt=seg'>T</a></td>".PHP_EOL;
697 } else {
698 $csv_html .= "<td>$v</td>".PHP_EOL;
701 $csv_html .= "</tr>".PHP_EOL;
702 $idx++;
704 } elseif ($tp == 'f277') {
705 // array('PtName', 'SvcDate', 'CLM01', 'Status', 'BHT03', 'FileName', 'Payer', 'Ins_ID', 'Trace');
706 foreach($csv_d as $val) {
707 $bgc = ($idx % 2 == 1 ) ? 'odd' : 'even';
708 $csv_html .= "<tr class='{$bgc}'>".PHP_EOL;
709 // needed values for links
710 $fn = $val['FileName'];
711 $bht03 = $val['BHT03'];
712 $trc = $val['CLM01'];
713 foreach($val as $k=>$v) {
714 if ($k == 'SvcDate') {
715 $csv_html .= "<td>".substr($v, 0, 4).'-'.substr($v, 4, 2).'-'.substr($v, 6, 2)."</td>".PHP_EOL;
716 } elseif ($k == 'CLM01') {
717 $csv_html .= "<td><a class='sub' href='edih_main.php?gtbl=claim&trace=$v&ftype=$tp&rsptype=f837&fmt=seg'>$v</a></td>".PHP_EOL;
718 } elseif ($k == 'BHT03') {
719 $csv_html .= "<td>$v <a class='rsp' href='edih_main.php?gtbl=claim&fname=$fn&ftype=$tp&bht03=$v&fmt=htm'>H</a>&nbsp;";
720 $csv_html .= "&nbsp;<a class='seg' href='edih_main.php?gtbl=claim&fname=$fn&ftype=$tp&bht03=$v&fmt=seg'>T</a></td>".PHP_EOL;
721 } elseif ($k == 'FileName') {
722 $csv_html .= "<td title='$v'>File <a class='rsp' href='edih_main.php?gtbl=file&fname=$v&ftype=$tp&fmt=htm'>H</a>&nbsp;";
723 $csv_html .= "&nbsp;<a class='seg' href='edih_main.php?gtbl=file&fname=$v&ftype=$tp&fmt=seg'>T</a></td>".PHP_EOL;
724 } else {
725 $csv_html .= "<td>$v</td>".PHP_EOL;
728 $csv_html .= "</tr>".PHP_EOL;
729 $idx++;
731 } elseif ($tp == 'f276') {
732 // array('PtName', 'ReqDate', 'CLM01', 'InsBnft', 'BHT03', 'FileName', 'Payer', 'Trace');
733 foreach($csv_d as $val) {
734 $bgc = ($idx % 2 == 1 ) ? 'odd' : 'even';
735 $csv_html .= "<tr class='$bgc'>".PHP_EOL;
736 // needed values for links
737 $fn = $val['FileName'];
738 $bht03 = $val['BHT03'];
739 $trc = $val['CLM01'];
740 foreach($val as $k=>$v) {
741 if ($k == 'ReqDate') {
742 $csv_html .= "<td>".substr($v, 0, 4).'-'.substr($v, 4, 2).'-'.substr($v, 6, 2)."</td>".PHP_EOL;
743 } elseif ($k == 'CLM01') {
744 $csv_html .= "<td><a class='sub' href='edih_main.php?gtbl=claim&trace=$v&ftype=$tp&rsptype=f837&fmt=seg'>$v</a></td>".PHP_EOL;
745 } elseif ($k == 'BHT03') {
746 $csv_html .= "<td>$v <a class='$cls' href='edih_main.php?gtbl=claim&fname=$fn&ftype=$tp&bht03=$v&fmt=htm'>H</a>&nbsp;";
747 $csv_html .= "&nbsp;<a class='seg' href='edih_main.php?gtbl=claim&fname=$fn&ftype=$tp&bht03=$v&fmt=seg'>T</a></td>".PHP_EOL;
748 } elseif ($k == 'FileName') {
749 $csv_html .= "<td><a class='$cls' href='edih_main.php?gtbl=file&fname=$fn&ftype=$tp&fmt=seg'>$v</a></td>".PHP_EOL;
750 } else {
751 $csv_html .= "<td>$v</td>".PHP_EOL;
754 $csv_html .= "</tr>".PHP_EOL;
755 $idx++;
757 } elseif ($tp == 'f270') {
758 // array('PtName', 'ReqDate', 'Trace', 'InsBnft', 'BHT03', 'FileName', 'Payer');
759 foreach($csv_d as $val) {
760 $bgc = ($idx % 2 == 1 ) ? 'odd' : 'even';
761 $csv_html .= "<tr class='$bgc'>".PHP_EOL;
762 // needed values for links
763 $fn = $val['FileName'];
764 $bht03 = $val['BHT03'];
765 foreach($val as $k=>$v) {
766 if ($k == 'ReqDate') {
767 $csv_html .= "<td>".substr($v, 0, 4).'-'.substr($v, 4, 2).'-'.substr($v, 6, 2)."</td>".PHP_EOL;
768 } elseif ($k == 'BHT03') {
769 $csv_html .= "<td> <a class='$cls' href='edih_main.php?gtbl=claim&fname=$fn&ftype=$tp&bht03=$v&fmt=seg'>$v</a></td>".PHP_EOL;
770 } elseif ($k == 'FileName') {
771 $csv_html .= "<td><a class='$cls' href='edih_main.php?gtbl=file&fname=$fn&ftype=$tp&fmt=seg'>$v</a></td>".PHP_EOL;
772 } else {
773 $csv_html .= "<td>$v</td>".PHP_EOL;
776 $csv_html .= "</tr>".PHP_EOL;
777 $idx++;
779 } elseif ($tp == 'f271') {
780 // array('PtName', 'RspDate', 'Trace', 'Status', 'BHT03', 'FileName', 'Payer');
781 foreach($csv_d as $val) {
782 $bgc = ($idx % 2 == 1 ) ? 'odd' : 'even';
783 $csv_html .= "<tr class='$bgc'>".PHP_EOL;
784 // needed values for links
785 $fn = $val['FileName'];
786 $bht03 = $val['BHT03'];
787 foreach($val as $k=>$v) {
788 if ($k == 'RspDate') {
789 $csv_html .= "<td>".substr($v, 0, 4).'-'.substr($v, 4, 2).'-'.substr($v, 6, 2)."</td>".PHP_EOL;
790 } elseif ($k == 'BHT03') {
791 $csv_html .= "<td>$v <a class='$cls' href='edih_main.php?gtbl=claim&fname=$fn&ftype=$tp&bht03=$v&fmt=htm'>H</a>&nbsp;".PHP_EOL;
792 $csv_html .= "&nbsp;<a class='seg' target='_blank' href='edih_main.php?gtbl=claim&fname=$fn&ftype=$tp&bht03=$v&fmt=seg'>T</a></td>".PHP_EOL;
793 } elseif ($k == 'FileName') {
794 $csv_html .= "<td title='$v'> File <a class='$cls' href='edih_main.php?gtbl=file&fname=$fn&ftype=$tp&fmt=htm'>H</a>&nbsp;";
795 $csv_html .= "&nbsp;<a class='$cls' href='edih_main.php?gtbl=file&fname=$fn&ftype=$tp&fmt=seg'>T</a></td>".PHP_EOL;
796 } else {
797 $csv_html .= "<td>$v</td>".PHP_EOL;
800 $csv_html .= "</tr>".PHP_EOL;
801 $idx++;
803 } elseif ($tp == 'f278') {
804 // array('PtName', 'FileDate', 'Trace', 'Status', 'BHT03', 'FileName', 'Auth', 'Payer')
805 foreach($csv_d as $val) {
806 $bgc = ($idx % 2 == 1 ) ? 'odd' : 'even';
807 $csv_html .= "<tr class='$bgc'>".PHP_EOL;
808 // needed values for links
809 $fn = $val['FileName'];
810 $bht03 = $val['BHT03'];
811 foreach($val as $k=>$v) {
812 if ($k == 'FileDate') {
813 $csv_html .= "<td>".substr($v, 0, 4).'-'.substr($v, 4, 2).'-'.substr($v, 6, 2)."</td>".PHP_EOL;
814 } elseif ($k == 'BHT03') {
815 $csv_html .= "<td>$v <a class='$cls' href='edih_main.php?gtbl=claim&fname=$fn&ftype=$tp&bht03=$v&fmt=htm'>H</a>&nbsp;".PHP_EOL;
816 $csv_html .= "&nbsp;<a class='seg' href='edih_main.php?gtbl=claim&fname=$fn&ftype=$tp&bht03=$v&fmt=seg'>T</a></td>".PHP_EOL;
817 } elseif ($k == 'FileName') {
818 $csv_html .= "<td title='$v'> File <a class='$cls' href='edih_main.php?gtbl=file&fname=$v&ftype=$tp&fmt=htm'>H</a>&nbsp;";
819 $csv_html .= "&nbsp;<a class='$cls' href='edih_main.php?gtbl=file&fname=$v&ftype=$tp&fmt=seg'>T</a></td>".PHP_EOL;
820 } else {
821 $csv_html .= "<td>$v</td>".PHP_EOL;
824 $csv_html .= "</tr>".PHP_EOL;
825 $idx++;
827 } elseif ($tp == 'f997') {
828 // array('PtName', 'RspDate', 'Trace', 'Status', 'Control', 'FileName', 'RspType', 'err_seg');
829 foreach($csv_d as $val) {
830 $bgc = ($idx % 2 == 1 ) ? 'odd' : 'even';
831 $csv_html .= "<tr class='$bgc'>".PHP_EOL;
832 // needed values for links
833 $fn = $val['FileName'];
834 $rsp = $val['RspType'];
835 $err = $val['err_seg'];
836 foreach($val as $k=>$v) {
837 if ($k == 'RspDate') {
838 $csv_html .= "<td>".substr($v, 0, 4).'-'.substr($v, 4, 2).'-'.substr($v, 6, 2)."</td>".PHP_EOL;
839 } elseif ($k == 'FileName') {
840 $csv_html .= "<td><a class='seg' href='edih_main.php?gtbl=file&fname=$v&ftype=$tp&fmt=seg'>$v</a></td>".PHP_EOL;
841 } elseif ($k == 'Trace') {
842 $csv_html .= "<td><a class='seg' href='edih_main.php?gtbl=claim&fname=$fn&ftype=$tp&trace=$v&rsptype=$rsp&err=$err&fmt=seg'>$v</a></td>".PHP_EOL;
843 } elseif ($k == 'err_seg') {
844 $csv_html .= "<td title='$v'>".substr($v, 0, 8)."...</td>".PHP_EOL;
845 } else {
846 $csv_html .= "<td>$v</td>".PHP_EOL;
849 $csv_html .= "</tr>".PHP_EOL;
850 $idx++;
852 } else {
853 // all types in the tables are covered in an elseif, so this is unexpected
854 foreach($csv_d as $val) {
855 $bgc = ($idx % 2 == 1 ) ? 'odd' : 'even';
856 $csv_html .= "<tr class='$bgc'>".PHP_EOL;
857 foreach($val as $k=>$v) {
858 if ($k == 'FileName') {
859 $csv_html .= "<td><a class='$cls' href='edih_main.php?gtbl=file&fname=$v&ftype=$tp&fmt=seg'>$v</a></td>".PHP_EOL;
860 } else {
861 $csv_html .= "<td>$v</td>".PHP_EOL;
864 $csv_html .= "</tr>".PHP_EOL;
865 $idx++;
868 } // end body of the table
869 //$csv_html .= "</tbody>".PHP_EOL."</table>".PHP_EOL."</div>".PHP_EOL;
870 $csv_html .= "</tbody>".PHP_EOL."</table>".PHP_EOL;
872 return $csv_html;