Fixing Payer Problems with CMS 1500 or X12

From OpenEMR Project Wiki

Fixing Payer Issues With CMS 1500 or X12 Outputs

Please excuse the lack of indents below - the Wiki publications format differently (undesired) if items indent. Follow the indents in the real files.

Some payers and Clearinghouses have problems with OpenEMR outputs, while others work fine with the standard X12 and CMS 1500 outputs.

To correct these, you will make what I refer to a "contingencies", which will occur only in the specific case which you wish to overcome. A fairly frequent problem has been the X12 output for HL when the patient is not the subscriber (for example, the patient is a child of the parent who actually carries the insurance). Some insurers, but NOT ALL, balk at the code which follows "SBR" in the case where HL value is "0" most of the time, but that causes an error if the subscriber is the parent, for example, so we substitute the acceptable "1", and replace the follow-on code with a blank.. To make it work for my particular cases (Aetna and UBH/UHC) I used the common string in their Payer ID to replace the code with a blank using the change below from about line 206. If you are not a programmer, you are strongly advised to seek the services of one of the commercial providers listed on the oemr.org site as they will be familiar with the issues and the fixes. Because there are so many variables involved, it is not possible to pre-construct for these few problems we are aware of. The code below is found in the file ../library/gen_x12_837.inc.php which controls the build of the X12 file for submittal:

$PatientHL = 0; // Value was 0 causes HL Loop Children Error at UHC 2/10/09 JCH

$Joe = (substr($claim->insuredRelationship(), 0, 2)); // Need to eliminate code after SBR when Pt is not the Insured 2/10/09 JCH

if ($Joe != "18") {

$PatientHL = "1";

if (substr($claim->x12gsreceiverid(), 0, 6) == "908011") {

$Joe = "";

}

}

++$edicount;

$out .= "HL" . // Loop 2000B Subscriber HL Loop

"*$HLcount" .

"*$HLBillingPayToProvider" .

"*22" .

"*$PatientHL" .

"~\n";


$HLSubscriber = $HLcount++;


if (!$claim->payerSequence()) {

$log .= "*** Error: Insurance information is missing!\n";

}

++$edicount;

$out .= "SBR" . // Subscriber Information

"*" . $claim->payerSequence() .

"*" . $claim->insuredRelationship() .

"*" . $claim->groupNumber() .

"*" . $claim->groupName() .

"*" . $claim->insuredTypeCode() . // applies for secondary medicare

"*" .

"*" .

"*" .

"*" . $claim->claimType() . // Zirmed replaces this

"~\n";


Similarly, a known issue for a few of the Medicare handlers like NGS has been their insistence on the date being in a "Signature On File" field, despite their published rules to the contrary. Rather than argue, which gets you nowhere, you can simply modify ../library/gen_hcfa_1500.ins.php in the area of the field itself. Note, though, that this file acts via another file for ezpdf, so simple changes in print positions are not always as simple as they seem. In the example below, where they want the date shown in Box 31 of the CMS 1500 form, you must actually allocate space for it in front of the line for 32a (the billing facility NPI) and fill it with blank spaces when the normal print (other than the NGS) is desired, using the code below. I also suggest replacing the FECA value of "39" with "45" near line 92 so those will print as "Other" in the checkbox, since they share the same designation. We have never had a claim rejected for having done that. The date code starts near line 538:

// 31. Signature of Physician or Supplier

// FreeB printed the rendering provider's name and the current date here,

// but according to my instructions it must be a real signature and date,

// or else "Signature on File" or "SOF".

put_hcfa(60, 1, 20, 'Signature on File');

//

// $tmp = $claim->providerFirstName();

// if ($claim->providerMiddleName()) $tmp .= ' ' . substr($claim->providerMiddleName(),0,1);

// put_hcfa(60, 1, 20, $tmp . ' ' . $claim->providerLastName());


// 32. Service Facility Location Information: City State Zip

$tmp = $claim->facilityCity() ? ($claim->facilityCity() . ' ') : ;

put_hcfa(60, 23, 25, $tmp . $claim->facilityState() . ' ' .

$claim->facilityZip());


// 32. Billing Provider: City State Zip

$tmp = $claim->billingFacilityCity() ? ($claim->billingFacilityCity() . ' ') : ;

put_hcfa(60, 50, 25, $tmp . $claim->billingFacilityState() . ' ' .

$claim->billingFacilityZip());


// 31. Form Date: Added Date Printed 7/5/09 for Medicare returns PIA JCH

$formdate = " ";

if ($ct === 'MB') {

$formdate = date('Y-m-d');

}


// 32a. Service Facility NPI

put_hcfa(61, 12, 22, $formdate . ' ' . $claim->facilityNPI()); // inserted $formdate & space 7/5/09 JCH


I hope these give you a good idea how to fix these issues. But I again advise that if you are not a strong programmer, you probably would be best to hire one of those who are listed as commercial resources like myself to fix your issue. Even missing a single close-bracket can cause nightmarish behaviors you certainly want to avoid. Good Luck. Let us know if this has helped you. Thanks. Joe Holzer - Idea Man