Custom Edit Checks
Custom Edit Checks
You can use the Setup/Edit Checks menu in SolAce to add custom edits using JavaScript. These edits can perform a variety of functions, including automatically correcting claims, clearing warnings from the built-in edits, and adding warnings of your own.
Syntax
Custom edit checks are written in a language called JavaScript. The script that you write will execute for every claim that is imported or edited in SolAce. There are three variables that can be used in your custom edits to access data:
- acc is the record accessor. It is used to get and set data on the claim being edited.
- fields is the field dictionary that lets you reference the field you want to get or set data in. The field names can be seen in the mapping screen of SolAce.
- severity is the severity list that lets you assign a severity when adding a warning on a field. The options are: severity.Low, severity.Medium, and severity.High. High severity warnings cannot be ignored by the user.
- record represents the record holding the claim, and is the object that lets you add and remove warnings on the claim.
Loops
Some fields are only available in loops depending on the transaction type that your edits apply to. In case it helps, some other names for loops are: instances, occurrences, items, or array. These fields are not accessed via the acc variable, which represents the top-level accessor for the claim. These fields must be accessed via a sub-level accessor, which is retrieved from the top-level acc accessor by asking for the line you want. The first loop is always numbered 1. Custom edit scripts for the 837P transaction type have the following loops: Insured - All the insured fields are accessed via a sub-accessor that can be retrieved with this code.
var accIns = acc.getInsAcc([payer #]);
where [payer #] is the payer number that you want. Note that 837P equates to HCFA-1500 claims, and the first payer is always the destination payer with a pay sequence indicated by the claim's BILL_TO field. This differs from 837I claims where the payers are always in pay sequence order (e.g. 1=Primary, 2=Secondary). Service Lines - All the service line fields are accessed via a sub-accessor that can be retrieved with this code.
var accSvc = acc.getSvcAcc([svc line #]);
where [svc line #] specifies the service line you want to access. Or, get an array of the service lines that already exist with:
var accSvcs = acc.getSvcAccs();
Service Line COB - The service line level COB fields are not at the service line level, but are accessed via loops that are subordinate to the service line accessor.
var accSvcCob = accSvc.getCobAcc([cob line #]);
Service Line COB Adjustments - The adjustments for a service line are attached to a specific COB line on that service line, so multiple levels below the top.
var accSvcCobAdj = accSvcCob.getCobAdjAcc([adj line #]);
Claim Level COB - Claim level COB fields are accessed via a sub-accessor that can be retrieved with this code.
var accCob = acc.getCobAcc([cob line #]);
where [cob line #] specifies the COB loop that you want. The first COB loop (getCobAcc(1)) corresponds to the first 'other payer' on the claim. There should be one less COB loop than there are total payers on the claim. Claim Level Adjustments - Claim level adjustment fields are attached to a specific claim level COB line.
var accCobAdj = accCob.getAdjAcc([adj line #]);
Or, get an array of the adjustments that already exist with:
var accCobAdjs = accCob.getAdjAccs();
Example Edit Checks
Set CLIA on claims for a specific Payer/Provider
var providerId = acc.get(fields.PROVIDER_ID); var payerId = acc.getInsAcc(1).get(fields.PAYER_NAME); if (payerId.equals("00824") && providerId.equals("12345")) acc.set(fields.CLIA_NUMBER, "00D1234567");
Strip dashes from hyphenated patient names for OMAP
var patientName = acc.getName(fields.PATIENT_NAME); var payerId = acc.getInsAcc(1).get(fields.PAYER_NAME); if (payerId.startsWith("ORDHS") && patientName.getLast().indexOf('-') != -1) { patientName.setLast(patientName.getLast().replace('-',' ')); acc.setName(fields.PATIENT_NAME, patientName); }
Texas Medicaid PPI Numbers Custom Warning
var isRefPhysPinRequired = false; var isTexasMedicaid = false; var isCommunityFirst = false; // REF-PHYS-PIN is required for Texas Medicaid Managed Care claims // (THN or PCCM in box 11c), and for all Community First // (COMMF payer ID) claims var accIns1 = acc.getInsAcc(1); var payerId = accIns1.get(fields.PAYER_NAME); isTexasMedicaid = payerId.equals("86916"); isCommunityFirst = payerId.equals("COMMF"); if (isCommunityFirst || (isTexasMedicaid && (accIns1.get(fields.INSURED_PLAN).startsWith("THN") || accIns1.get(fields.INSURED_PLAN).startsWith("PCCM")) ) ) { isRefPhysPinRequired = true; } if (isRefPhysPinRequired) { // make sure a referring physician PIN is present on the claim if (acc.get(fields.REFERPHYS_PIN).length() == 0) { record.addWarning(fields.REFERPHYS_PIN, severity.Medium, 1, "Referring Physician information is incomplete."); } }
Community First Custom Auto-Fill of Modifier 25
var isCommunityFirst = false; var accIns1 = acc.getInsAcc(1); var payerId = accIns1.get(fields.PAYER_NAME); isCommunityFirst = payerId.equals("COMMF"); // Community First requires modifier 25 on all claims. don't even warn // on it, just fill it in if it's missing. if (isCommunityFirst) { var accSvc = acc.getSvcAccs(); for (var line=0; line<accSvc.length; line++) { var proc = accSvc[line].get(fields.SVC_PROCEDURE); if (proc.length() == 0) continue; var mod1 = accSvc[line].get(fields.SVC_MOD1); var mod2 = accSvc[line].get(fields.SVC_MOD2); if (!mod1.equals("25") && !mod2.equals("25")) { if (mod1.length() == 0) accSvc[line].set(fields.SVC_MOD1, "25"); else if (mod2.length() == 0) accSvc[line].set(fields.SVC_MOD2, "25"); else accSvc[line].set(fields.SVC_MOD3, "25"); // blindly sets SVC_MOD3 if first two were filled } } }
Southwest Medical Custom Rendering Provider Not Found
/*Give warning if Rendering Provider does not exist in the SolAce Provider list*/ // Check if Rendering NPI is present if(acc.get(fields.RENDERING_NPI).length() > 0){ // Search SolAce provider list for NPI var provider = record.getBatchModel().getProviderCache().findProviderByNPI( acc.get(fields.RENDERING_NPI)); //Add warning if provider is not found if(provider == null){ record.addWarning(fields.RENDERING_NAME, severity.High, "Rendering Provider not on file."); } } // Check if Rendering Pin is present else if(acc.get(fields.RENDERING_PIN).length() > 0){ //resolve payer to search for pin var payer = record.getBatchModel().resolvePayer(acc); if(payer != null){ var provider = record.getBatchModel().getProviderCache().findProviderByPayerAndPIN( payer, acc.get(fields.RENDERING_PIN)); //Add warning if provider is not found if(provider == null){ record.addWarning(fields.RENDERING_NAME, severity.High, "Rendering Provider not on file."); } } }
customer Testimonial
From our customers
I am very pleased with our SolAce billing software and how easy it is to navigate. They have a great team who can train you to do billing even if you don’t have billing experience. Special thanks to Cathy, Gigi, and Skyler who always helps me out every time I have issues.
SolAce is awesome software. I absolutely LOVE it. For over three years I have used this software daily for multiple long term care facilities to submit claims to various MACs, Medicaid, and Medicare Advantage and Supplemental Insurance carriers. It is convenient, simple to use and far less costly than any Clearing House software I had explored. The ability to import from my Practice Management Software and Therapy Providers has reduced any RTP claims edits and denials are a thing of the past. Customer Support is “Johnny on the spot”, but terrific as they may be, it gets better - RARELY do I need to call. LOVE IT, LOVE IT, AND LOVE IT.
I think our medical office was one of the first to use SolAce in the mid 1990’s and we are still using it today for all of our electronic billing because it works ! It was simple for our staff to learn and it integrated easily with our accounting/billing program. It has been especially nice to know that the Axiom staff is there when Medicare changes something and they are right on it. They made the 5010 change a simple process plus made educational seminars available to us. Thank you to all the Axiom/ Ivertex professionals who have helped us for the last 15+ years.
SolAce has been a valuable tool that has been a life saver for my billing service for years. It has allowed me to bill professional and institutional claims with ease. Customer service @ SolAce is top rated in my opinion. The SolAce product is very user friendly and affordable. Thank you SolAce team for a great product.
Easy to use, Customer support has always been excellent, Thanks SolAce Team.
I am a new client and was having a tough time getting everything set up just right. I had to make calls to CEDI and when I called back the rep I spoke with prior even helped the 2nd rep to make sure I got all the info I needed. They definitely work as a team. Within a short period of time they had my system up and running. I never could've done it without them.
Awesome customer service every time!
I can't tell you how wonderful it is to work with your agency. They are courteous, knowledgeable,friendly, and a joy to work with - I can't say enough. Thank you!!
The service was very good. Phone answered promptly even though it was around 6 p.m. my time. Very courteous and helpful. So far I have had really good experiences with your support team.
The follow-up is outstanding - whenever there is an issue I am contacted to be sure that all is working well and to my satisfaction.
Everyone in your company is very helpful and pleasant, and they always have the quickest response time on fixing the situation.
Tech was very helpful, very patient and very professional. She knew of the issue quickly and stayed at hand until issue was resolved. Very satisifed with the service.