Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Options
-
- Posts: 26
- Joined: Thu Feb 18, 2021 2:45 pm
Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Options
OpenDental Plug-In/Hook Additions
The following hooks are requested to implement electronic claims, eligibility, reports retrieval (ERAs, 271s, 277s, DentiCal Reports) and some Clearinghouse Setup options in OpenDental using Plug-in/Hooks per our previous discussion. Per Plug-in/Hooks instructions, Hook names were created using class naming conventions.
OpenDental\Forms\FormClearinghouseEdit.cs: OpenDental.FormClearinghouseEdit
1. In FillFields() – Plugins.HookMethod: FormClearinghouseEdit.AllowFeature_ERA
object[] param = new object[] { ClearinghouseCur };
if (ClearinghouseCur.CommBridge.In(EclaimsCommBridge.ClaimConnect, EclaimsCommBridge.EDS, EclaimsCommBridge.Claimstream, EclaimsCommBridge.ITRANS,EclaimsCommBridge.EmdeonMedical, EclaimsCommBridge.EdsMedical) || Plugins.HookMethod(null, "FormClearinghouseEdit.AllowFeature_ERA", param))
{
listBoxEraBehavior.Enabled = true;
checkIsClaimExportAllowed.Enabled = true;
checkIsClaimExportAllowed.Checked = ClearinghouseCur.IsClaimExportAllowed
}
2. In FillFields() – Plugins.HookMethod: FormClearinghouseEdit.AllowFeature_Attachments
(Remove comment since Clearinghouses with Hook can use Attachments)//Uncheck and disable if not ClaimConnect as this checkbox only applies to ClaimConnect.
checkSaveDXC.Checked = PrefC.GetBool(PrefName.SaveDXCAttachments);
if (ClearinghouseCur.CommBridge != EclaimsCommBridge.ClaimConnect && !Plugins.HookMethod(null, "FormClearinghouseEdit.AllowFeature_Attachments", param))
{
checkAllowAttachSend.Enabled = false;
checkAllowAttachSend.Checked = false;
checkSaveDXC.Visible = false;
}
else
{
checkAllowAttachSend.Enabled = true;
checkAllowAttachSend.Checked = ClearinghouseCur.IsAttachmentSendAllowed;
}
OpenDental\Forms\FormInsPlan.cs: OpenDental.FormInsPlan
1. In butGetElectronic_Click() – Plugins.HookMethod: FormInsPlan.Is270Supported
object[] param = new object[] { clearinghouseHq };
if ((clearinghouseHq.CommBridge!=EclaimsCommBridge.ClaimConnect
&& clearinghouseHq.CommBridge!=EclaimsCommBridge.EDS
&& clearinghouseHq.CommBridge!=EclaimsCommBridge.WebMD)
&& clearinghouseHq.Eformat!=ElectronicClaimFormat.Canadian
&& !Plugins.HookMethod(null, "FormInsPlan.Is270Supported", param))
{
(Change Message text since clearinghouse with Hook can use this)MsgBox.Show(this,"So far, eligibility checks only work with ClaimConnect, EDS, WebMD (Emdeon Dental), and CDAnet.");
return;
}
OpenDentBusiness\Data Interface\Clearinghouse.cs: OpenDentBusiness.Clearinghouses
1. In RetrieveReports() – Plugins.HookMethod: Clearinghouses.RetrieveReports
else
{
StringBuilder errorMessage = new StringBuilder();
object[] param = new object[] { clearinghouseClin, errorMessage, progress };
if (!Plugins.HookMethod(null, "Clearinghouses.RetrieveReports", param) && errorMessage.ToString().Length > 0)
{
return OpenDentBusiness.Lans.g("FormClaimReports", "Error retrieving.") + "\r\n" + errorMessage.ToString();
}
}
OpenDentBusiness\Eclaims\Eclaims.cs: OpenDentBusiness.Eclaims.Eclaims
1. In SendBatch() – Plugins.HookMethod: Eclaims.SendBatch
else
{
StringBuilder errorMessage = new StringBuilder();
object[] param = new object[] { clearinghouseClin, messageText, errorMessage };
if (!Plugins.HookMethod(null, "Eclaims.SendBatch", param) && errorMessage.ToString().Length > 0)
{
MessageBox.Show(Lans.g("Eclaims", "Error sending.") + "\r\n" + errorMessage.ToString());
if (clearinghouseClin.IsClaimExportAllowed)
//if a file was written out, delete it on fail
x837Controller.Rollback(clearinghouseClin, batchNum);
return;
}
}
//----------------------------------------------------------------------------------------
//finally, mark the claims sent. (only if not Canadian)
EtransType etype=EtransType.ClaimSent;
if(clearinghouseClin.Eformat==ElectronicClaimFormat.Renaissance){
etype=EtransType.Claim_Ren;
}
OpenDentBusiness\Eclaims\x270Controller.cs: OpenDentBusiness.x270Controller
1. In TryInsVerifyRequest() – Plugins.HookMethod: FormInsPlan.Is270Supported
object[] param = new object[] { clearinghouseHq };
if (!ListTools.In(clearinghouseHq.CommBridge,EclaimsCommBridge.ClaimConnect, EclaimsCommBridge.EDS,EclaimsCommBridge.WebMD) &&
!Plugins.HookMethod(null, "FormInsPlan.Is270Supported", param))
{
(Change message text since clearinghouse with Hook can use this) error="So far, eligibility checks only work with ClaimConnect, EDS, WebMD (Emdeon Dental), and CDAnet.";
return null;
}
2. In RequestBenefits() – Plugins.HookMethod: x270Controller.RequestBenefits
try {
if(!String.IsNullOrWhiteSpace(FakeResponseOverride271)) {
x12response=FakeResponseOverride271;
}
else if(clearinghouseClin.CommBridge==EclaimsCommBridge.ClaimConnect) {
x12response=ClaimConnect.Benefits270(clearinghouseClin,x12message);
}
else if(clearinghouseClin.CommBridge==EclaimsCommBridge.EDS) {
x12response=EDS.Benefits270(clearinghouseClin,x12message,out etransHtml);
}
else if(clearinghouseClin.CommBridge==EclaimsCommBridge.WebMD) {
x12response=WebMD.Benefits270(clearinghouseClin,x12message);
}
else
{
StringBuilder result_x12Message = new StringBuilder();
object[] param = new object[] { clearinghouseClin, x12message, result_x12Message };
if (Plugins.HookMethod(null, "x270Controller.RequestBenefits", param))
x12response = result_x12Message.ToString();
}
}
The following hooks are requested to implement electronic claims, eligibility, reports retrieval (ERAs, 271s, 277s, DentiCal Reports) and some Clearinghouse Setup options in OpenDental using Plug-in/Hooks per our previous discussion. Per Plug-in/Hooks instructions, Hook names were created using class naming conventions.
OpenDental\Forms\FormClearinghouseEdit.cs: OpenDental.FormClearinghouseEdit
1. In FillFields() – Plugins.HookMethod: FormClearinghouseEdit.AllowFeature_ERA
object[] param = new object[] { ClearinghouseCur };
if (ClearinghouseCur.CommBridge.In(EclaimsCommBridge.ClaimConnect, EclaimsCommBridge.EDS, EclaimsCommBridge.Claimstream, EclaimsCommBridge.ITRANS,EclaimsCommBridge.EmdeonMedical, EclaimsCommBridge.EdsMedical) || Plugins.HookMethod(null, "FormClearinghouseEdit.AllowFeature_ERA", param))
{
listBoxEraBehavior.Enabled = true;
checkIsClaimExportAllowed.Enabled = true;
checkIsClaimExportAllowed.Checked = ClearinghouseCur.IsClaimExportAllowed
}
2. In FillFields() – Plugins.HookMethod: FormClearinghouseEdit.AllowFeature_Attachments
(Remove comment since Clearinghouses with Hook can use Attachments)//Uncheck and disable if not ClaimConnect as this checkbox only applies to ClaimConnect.
checkSaveDXC.Checked = PrefC.GetBool(PrefName.SaveDXCAttachments);
if (ClearinghouseCur.CommBridge != EclaimsCommBridge.ClaimConnect && !Plugins.HookMethod(null, "FormClearinghouseEdit.AllowFeature_Attachments", param))
{
checkAllowAttachSend.Enabled = false;
checkAllowAttachSend.Checked = false;
checkSaveDXC.Visible = false;
}
else
{
checkAllowAttachSend.Enabled = true;
checkAllowAttachSend.Checked = ClearinghouseCur.IsAttachmentSendAllowed;
}
OpenDental\Forms\FormInsPlan.cs: OpenDental.FormInsPlan
1. In butGetElectronic_Click() – Plugins.HookMethod: FormInsPlan.Is270Supported
object[] param = new object[] { clearinghouseHq };
if ((clearinghouseHq.CommBridge!=EclaimsCommBridge.ClaimConnect
&& clearinghouseHq.CommBridge!=EclaimsCommBridge.EDS
&& clearinghouseHq.CommBridge!=EclaimsCommBridge.WebMD)
&& clearinghouseHq.Eformat!=ElectronicClaimFormat.Canadian
&& !Plugins.HookMethod(null, "FormInsPlan.Is270Supported", param))
{
(Change Message text since clearinghouse with Hook can use this)MsgBox.Show(this,"So far, eligibility checks only work with ClaimConnect, EDS, WebMD (Emdeon Dental), and CDAnet.");
return;
}
OpenDentBusiness\Data Interface\Clearinghouse.cs: OpenDentBusiness.Clearinghouses
1. In RetrieveReports() – Plugins.HookMethod: Clearinghouses.RetrieveReports
else
{
StringBuilder errorMessage = new StringBuilder();
object[] param = new object[] { clearinghouseClin, errorMessage, progress };
if (!Plugins.HookMethod(null, "Clearinghouses.RetrieveReports", param) && errorMessage.ToString().Length > 0)
{
return OpenDentBusiness.Lans.g("FormClaimReports", "Error retrieving.") + "\r\n" + errorMessage.ToString();
}
}
OpenDentBusiness\Eclaims\Eclaims.cs: OpenDentBusiness.Eclaims.Eclaims
1. In SendBatch() – Plugins.HookMethod: Eclaims.SendBatch
else
{
StringBuilder errorMessage = new StringBuilder();
object[] param = new object[] { clearinghouseClin, messageText, errorMessage };
if (!Plugins.HookMethod(null, "Eclaims.SendBatch", param) && errorMessage.ToString().Length > 0)
{
MessageBox.Show(Lans.g("Eclaims", "Error sending.") + "\r\n" + errorMessage.ToString());
if (clearinghouseClin.IsClaimExportAllowed)
//if a file was written out, delete it on fail
x837Controller.Rollback(clearinghouseClin, batchNum);
return;
}
}
//----------------------------------------------------------------------------------------
//finally, mark the claims sent. (only if not Canadian)
EtransType etype=EtransType.ClaimSent;
if(clearinghouseClin.Eformat==ElectronicClaimFormat.Renaissance){
etype=EtransType.Claim_Ren;
}
OpenDentBusiness\Eclaims\x270Controller.cs: OpenDentBusiness.x270Controller
1. In TryInsVerifyRequest() – Plugins.HookMethod: FormInsPlan.Is270Supported
object[] param = new object[] { clearinghouseHq };
if (!ListTools.In(clearinghouseHq.CommBridge,EclaimsCommBridge.ClaimConnect, EclaimsCommBridge.EDS,EclaimsCommBridge.WebMD) &&
!Plugins.HookMethod(null, "FormInsPlan.Is270Supported", param))
{
(Change message text since clearinghouse with Hook can use this) error="So far, eligibility checks only work with ClaimConnect, EDS, WebMD (Emdeon Dental), and CDAnet.";
return null;
}
2. In RequestBenefits() – Plugins.HookMethod: x270Controller.RequestBenefits
try {
if(!String.IsNullOrWhiteSpace(FakeResponseOverride271)) {
x12response=FakeResponseOverride271;
}
else if(clearinghouseClin.CommBridge==EclaimsCommBridge.ClaimConnect) {
x12response=ClaimConnect.Benefits270(clearinghouseClin,x12message);
}
else if(clearinghouseClin.CommBridge==EclaimsCommBridge.EDS) {
x12response=EDS.Benefits270(clearinghouseClin,x12message,out etransHtml);
}
else if(clearinghouseClin.CommBridge==EclaimsCommBridge.WebMD) {
x12response=WebMD.Benefits270(clearinghouseClin,x12message);
}
else
{
StringBuilder result_x12Message = new StringBuilder();
object[] param = new object[] { clearinghouseClin, x12message, result_x12Message };
if (Plugins.HookMethod(null, "x270Controller.RequestBenefits", param))
x12response = result_x12Message.ToString();
}
}
Shari Walker
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
Sorry for the late reply. After reviewing this hook request, we could not implement it as written. We would like to make the following changes to the requested hooks:
1. In FormClearinghouseEdit, to make the hook as general purpose as possible, We will add a call to HoodAddCode() at the end of the load method instead of adding multiple calls to HookAddMethod() in FillFields(). You can manipulate all of the controls as needed by accessing them through the form that is passed in.
2. I was informed that using EclaimsCommBridge.None may have been causing some issues for you. In Clearinghouses.RetreiveReports(), we would like to move your HookMethod() call to the spot indicated below and that may resolve the issue. You will have to call Lans.g() for the error message within your plugin, or just have the StringBuilder contain an empty string if no error occurs.
3. We would also like to move the HookMethod() call in Eclaims.SendBatch() to the spot indicated below. Showing the message box and calling x837Controller.Rollback can all happen within your plugin code.
4. The HookMethod() call in X270Controller.RequestBenefits() should also become a HookAddCode() call. The x12response will be passed to it so that you can set it in your plugin.
5. A final note. We won't change the message or error text in our code to accommodate plugins. This is because anyone can use these hooks and we have no way of knowing how they will be used.
1. In FormClearinghouseEdit, to make the hook as general purpose as possible, We will add a call to HoodAddCode() at the end of the load method instead of adding multiple calls to HookAddMethod() in FillFields(). You can manipulate all of the controls as needed by accessing them through the form that is passed in.
Code: Select all
private void FormClearinghouseEdit_Load(object sender,System.EventArgs e) {
comboFormat.Items.AddEnums<ElectronicClaimFormat>();
for(int i=0;i<Enum.GetNames(typeof(EclaimsCommBridge)).Length;i++) {
string translatedCommBridgeName=Lan.g("enumEclaimsCommBridge",Enum.GetNames(typeof(EclaimsCommBridge))[i]);
comboCommBridge.Items.Add(translatedCommBridgeName,(EclaimsCommBridge)i);
}
comboClinic.SelectedClinicNum=ClinicNum;
FillFields();
Plugins.HookAddCode(this,"FormClearingHouseEdit.FormClearinghouseEdit_Load_end",ClearinghouseCur);
}
Code: Select all
if(clearinghouseClin.ISA08=="113504607") {//TesiaLink
//But the import will still happen
return "";
}
StringBuilder errorMessage=new StringBuilder();
if(Plugins.HookMethod(null,"Clearinghouses.RetrieveReports",clearinghouseClin,errorMessage,progress)) {
return errorMessage.ToString();
}
if(clearinghouseClin.CommBridge==EclaimsCommBridge.None
|| clearinghouseClin.CommBridge==EclaimsCommBridge.Renaissance
|| clearinghouseClin.CommBridge==EclaimsCommBridge.RECS)
{
return "";
}
Code: Select all
if(Plugins.HookMethod(null,"Eclaims.SendBatch",clearinghouseClin,messageText)) {
return;
}
//----------------------------------------------------------------------------------------
//Launch Client Program for this clearinghouse if applicable
if(clearinghouseClin.CommBridge==EclaimsCommBridge.None){
AttemptLaunch(clearinghouseClin,batchNum);
}
Code: Select all
try {
if(!String.IsNullOrWhiteSpace(FakeResponseOverride271)) {
x12response=FakeResponseOverride271;
}
else if(clearinghouseClin.CommBridge==EclaimsCommBridge.ClaimConnect) {
x12response=ClaimConnect.Benefits270(clearinghouseClin,x12message);
}
else if(clearinghouseClin.CommBridge==EclaimsCommBridge.EDS) {
x12response=EDS.Benefits270(clearinghouseClin,x12message,out etransHtml);
}
else if(clearinghouseClin.CommBridge==EclaimsCommBridge.WebMD) {
x12response=WebMD.Benefits270(clearinghouseClin,x12message);
}
object[] param=new object[] {x12response};
Plugins.HookAddCode(null,"x270Controller.RequestBenefits_setX12response",clearinghouseClin,x12message,param);
x12response=(string)param[0];
}
catch(Exception ex) {
EtransMessageTexts.Delete(etrans.EtransMessageTextNum);
Etranss.Delete(etrans.EtransNum);
throw new ApplicationException(Lans.g("FormInsPlan","Connection Error:")+"\r\n"+ex.GetType().Name+"\r\n"+ex.Message);
}
Last edited by joes on Fri Mar 12, 2021 9:51 am, edited 8 times in total.
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
Please let us know if you would like any modifications to the changes described in my previous post.
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
I made one edit to our suggested changes in my original post. To make the hook as general as possible, a single HookAddCode() call can be placed in FormClearinghouseEdit.FormClearinghouseEdit_Load() to manipulate any controls on the form.
-
- Posts: 26
- Joined: Thu Feb 18, 2021 2:45 pm
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
Thank you for reviewing.
1. FormClearinghouseEdit.cs: I will review the HookAddCode(). It looks like it should accomplish what we need, except that when the drop-down box for CommBridge is selected as "None" it grays out the options we need. Do we need to request another HookAddCode()/HookMethod() to the selectionchange to get around that? comboCommBridge_SelectionChangeCommitted()
object[] param = new object[] { ClearinghouseCur };
hasEclaimsEnabled = Plugins.HookMethod(null, "FormClearinghouseEdit.AllowFeature_EClaims", param);
2. Clearinghouse.RetrieveReports(): That appears to accomplish what we need. However, I found we were not able to get to that point because of the CommBridge.None in FormClaimReports.cs method butRetrieve_Click(). We need to be able to get past the CommBridge.None check so Open Dental calls RetrieveAndImport() in this method and allows the progressbar to continue and finish. Do we need to request another HookMethod/HookAddCode to get around that?
object[] param = new object[] { clearhouseHq };
if ((clearhouseHq.CommBridge==EclaimsCommBridge.None && !Plugins.HookMethod(null, "FormClaimReports.IsRetrieveReportsSupported", param)) || clearhouseHq.CommBridge==EclaimsCommBridge.Renaissance
|| clearhouseHq.CommBridge==EclaimsCommBridge.RECS)
{
progressbar.UpdateProgress(Lan.g(this, "No built-in functionality for retrieving reports from this clearinghouse."));
progressbar.OnProgressDone();
return;
}
3. Eclaims.SendBatch(): That appears to accomplish what we want except that the "return" will bypass marking the claim as sent, which happens after the if statements. We do not need the AttemptLaunch() or Rollback(). That was included in our suggested code in case others would need it. Would it be better to add the "not" symbol (!) to the Hook's "if" statement so a good claim will drop through the "if" statements to get marked as sent? "if (!Plugins.HookMethod(null, "Eclaims.SendBatch", clearinghouseClin, messageText)) return;"
//----------------------------------------------------------------------------------------
//finally, mark the claims sent. (only if not Canadian)
EtransType etype=EtransType.ClaimSent;
4. X270Controller.RequestBenefits(): I will review the HookAddCode(). It looks like it should accomplish what we need.
5. Sounds good.
1. FormClearinghouseEdit.cs: I will review the HookAddCode(). It looks like it should accomplish what we need, except that when the drop-down box for CommBridge is selected as "None" it grays out the options we need. Do we need to request another HookAddCode()/HookMethod() to the selectionchange to get around that? comboCommBridge_SelectionChangeCommitted()
object[] param = new object[] { ClearinghouseCur };
hasEclaimsEnabled = Plugins.HookMethod(null, "FormClearinghouseEdit.AllowFeature_EClaims", param);
2. Clearinghouse.RetrieveReports(): That appears to accomplish what we need. However, I found we were not able to get to that point because of the CommBridge.None in FormClaimReports.cs method butRetrieve_Click(). We need to be able to get past the CommBridge.None check so Open Dental calls RetrieveAndImport() in this method and allows the progressbar to continue and finish. Do we need to request another HookMethod/HookAddCode to get around that?
object[] param = new object[] { clearhouseHq };
if ((clearhouseHq.CommBridge==EclaimsCommBridge.None && !Plugins.HookMethod(null, "FormClaimReports.IsRetrieveReportsSupported", param)) || clearhouseHq.CommBridge==EclaimsCommBridge.Renaissance
|| clearhouseHq.CommBridge==EclaimsCommBridge.RECS)
{
progressbar.UpdateProgress(Lan.g(this, "No built-in functionality for retrieving reports from this clearinghouse."));
progressbar.OnProgressDone();
return;
}
3. Eclaims.SendBatch(): That appears to accomplish what we want except that the "return" will bypass marking the claim as sent, which happens after the if statements. We do not need the AttemptLaunch() or Rollback(). That was included in our suggested code in case others would need it. Would it be better to add the "not" symbol (!) to the Hook's "if" statement so a good claim will drop through the "if" statements to get marked as sent? "if (!Plugins.HookMethod(null, "Eclaims.SendBatch", clearinghouseClin, messageText)) return;"
//----------------------------------------------------------------------------------------
//finally, mark the claims sent. (only if not Canadian)
EtransType etype=EtransType.ClaimSent;
4. X270Controller.RequestBenefits(): I will review the HookAddCode(). It looks like it should accomplish what we need.
5. Sounds good.
Shari Walker
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
-
- Posts: 26
- Joined: Thu Feb 18, 2021 2:45 pm
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
I saw we were posting replies at the same time. The FormClearinghouseEdit.cs Load() HookAddCode you listed will work.
Shari Walker
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
Sorry. I'm now realizing that the single HookAddCode in FormClearinhouseEdit.cs should instead be at the end of FillFields() because that method is called in methods other than the Load() method. We can implement it there as:
I do see the problem with our suggested change to the hook in Eclaims.cs. I'll look further into an alternative solution for that one. I will also get back to you on the additional hook in FormClaimReports.butRetrieve_Click().
Code: Select all
UpdateClientProgramLabel();
Plugins.HookAddCode(this,"FormClearingHouseEdit.FillFields_end",ClearinghouseCur);
-
- Posts: 26
- Joined: Thu Feb 18, 2021 2:45 pm
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
Got it. Thanks
Shari Walker
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
I was able to get approval for all of your hooks. I'll post all of them below so you have one list that reflects how we will implement them. Please let me know if all of these work for you as written, and I will work on getting these changes committed.
1. FormClearinghouseEdit.FillFields
2. FormInsPlan.butGetElectronic_Click
3. Clearinghouses.RetrieveReports
4. Eclaims.SendBatch
5. x270Controller.RequestBenefits
6. x270Controller.TryInsVerifyRequest
7. FormClaimReports.ButRetrieve_Click
1. FormClearinghouseEdit.FillFields
Code: Select all
UpdateClientProgramLabel();
Plugins.HookAddCode(this,"FormClearingHouseEdit.FillFields_end",ClearinghouseCur);
}
Code: Select all
if((clearinghouseHq.CommBridge!=EclaimsCommBridge.ClaimConnect
&& clearinghouseHq.CommBridge!=EclaimsCommBridge.EDS
&& clearinghouseHq.CommBridge!=EclaimsCommBridge.WebMD)
&& clearinghouseHq.Eformat!=ElectronicClaimFormat.Canadian
&& !Plugins.HookMethod(this,"FormInsPlan.butGetElectronic_Click_is270Supported",clearinghouseHq))
{
MsgBox.Show(this,"So far, eligibility checks only work with ClaimConnect, EDS, WebMD (Emdeon Dental), and CDAnet.");
return;
}
Code: Select all
StringBuilder errorMessage=new StringBuilder();
if(Plugins.HookMethod(null,"Clearinghouses.RetrieveReports",clearinghouseClin,errorMessage,progress)) {
return errorMessage.ToString();
}
if(clearinghouseClin.CommBridge==EclaimsCommBridge.None
|| clearinghouseClin.CommBridge==EclaimsCommBridge.Renaissance
|| clearinghouseClin.CommBridge==EclaimsCommBridge.RECS)
{
return "";
}
Code: Select all
StringBuilder errorMessage=new StringBuilder();
if(Plugins.HookMethod(null,"Eclaims.SendBatch",clearinghouseClin,messageText,errorMessage) && errorMessage.ToString().Length > 0) {
return;
}
//----------------------------------------------------------------------------------------
//finally, mark the claims sent. (only if not Canadian)
Code: Select all
else if(clearinghouseClin.CommBridge==EclaimsCommBridge.WebMD) {
x12response=WebMD.Benefits270(clearinghouseClin,x12message);
}
object[] param=new object[] {x12response};
Plugins.HookAddCode(null,"x270Controller.RequestBenefits_benefits270",clearinghouseClin,x12message,param);
x12response=(string)param[0];
}
Code: Select all
if(!ListTools.In(clearinghouseHq.CommBridge,EclaimsCommBridge.ClaimConnect,EclaimsCommBridge.EDS,EclaimsCommBridge.WebMD)
&& !Plugins.HookMethod(null,"x270ControllerTryInsVerifyRequest",clearinghouseHq))
{
error="So far, eligibility checks only work with ClaimConnect, EDS, WebMD (Emdeon Dental), and CDAnet.";
return null;
}
Code: Select all
if((clearhouseHq.CommBridge==EclaimsCommBridge.None
&& !Plugins.HookMethod(this,"FormClaimReports.butRetrieve_Click_isRetrievingReportsSupported",clearhouseHq))
|| clearhouseHq.CommBridge==EclaimsCommBridge.Renaissance
|| clearhouseHq.CommBridge==EclaimsCommBridge.RECS)
{
progressbar.UpdateProgress(Lan.g(this,"No built-in functionality for retrieving reports from this clearinghouse."));
progressbar.OnProgressDone();
return;
}
-
- Posts: 26
- Joined: Thu Feb 18, 2021 2:45 pm
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
Great news! Those all look correct (and in the correct places in the code), but I will not be able to write the HookAddCode pieces in our plug-in until Monday 3/15 to test. I am not familiar with HookAddCode so need to look at the examples of how to change the display in our plug-in and what additional OpenDental classes/dlls we'll need to reference/include. Do you need to wait until I have our code done to proceed?
Shari Walker
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
I will wait just so we can be sure that they will work for you.
-
- Posts: 26
- Joined: Thu Feb 18, 2021 2:45 pm
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
Sorry for the delay. I am having trouble with this one:
object[] param=new object[] {x12response};
Plugins.HookAddCode(null,"x270Controller.RequestBenefits_benefits270",clearinghouseClin,x12message,param);
x12response=(string)param[0];
The string is showing in the object[] when it comes back into Open Dental's base Plug In class's HookAddCode, but when it comes back into the x20Controller's RequestBenefits HoodAddCode, the "param" is empty. It's as if the value is not the correct type, but it shows as a string in the object[]. The way the HookAddCode is designed, does a StringBuilder variable need used to pass into the HoodAddCode, then x12response = param[0].ToString() ?
object[] param=new object[] {x12response};
Plugins.HookAddCode(null,"x270Controller.RequestBenefits_benefits270",clearinghouseClin,x12message,param);
x12response=(string)param[0];
The string is showing in the object[] when it comes back into Open Dental's base Plug In class's HookAddCode, but when it comes back into the x20Controller's RequestBenefits HoodAddCode, the "param" is empty. It's as if the value is not the correct type, but it shows as a string in the object[]. The way the HookAddCode is designed, does a StringBuilder variable need used to pass into the HoodAddCode, then x12response = param[0].ToString() ?
Shari Walker
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
I think I know what the problem is. The way that the arguments are being passed results in an array of objects as the third element in the array of parameters like this [ clearinghouseClin, x12message, [x12response] ]. I would like to change that so that it is easier to use. The code below should work if you assign the response you get to param[0] in the plug-in.
Code: Select all
object[] param=new object[] {x12response,x12message,clearinghouseClin};
Plugins.HookAddCode(null,"x270Controller.RequestBenefits_benefits270",param);
x12response=(string)param[0];
-
- Posts: 26
- Joined: Thu Feb 18, 2021 2:45 pm
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
Does the ClearinghouseClin always have to be the first parameter? I thought I read that in the Plug In instructions. Should they instead be in order: clearinghouse, 270, response ?
object[] param=new object[] {clearinghouseClin,x12message,x12response};
Plugins.HookAddCode(null,"x270Controller.RequestBenefits_benefits270",param);
x12response=(string)param[2];
object[] param=new object[] {clearinghouseClin,x12message,x12response};
Plugins.HookAddCode(null,"x270Controller.RequestBenefits_benefits270",param);
x12response=(string)param[2];
Shari Walker
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
I can switch it so that they are in the order you described.
-
- Posts: 26
- Joined: Thu Feb 18, 2021 2:45 pm
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
I've verified this works (change order of parameters and assign param[2] back to x12response), along with all the other HookMethod and HookAddMethod code from 3/12. I believe we're good to go.
object[] param=new object[] {clearinghouseClin,x12message,x12response};
Plugins.HookAddCode(null,"x270Controller.RequestBenefits_benefits270",param);
x12response=(string)param[2];
object[] param=new object[] {clearinghouseClin,x12message,x12response};
Plugins.HookAddCode(null,"x270Controller.RequestBenefits_benefits270",param);
x12response=(string)param[2];
Shari Walker
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
I will work on these changes and will post the version that these hooks will be in once they are committed.
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
During review of these hooks, one of our Senior Engineers requested a few more changes. Please let me know if these changes cause any problems for your plugin.
1. In FormInsPlan.butGetElectronic_Click, you had originally requested that we modify the error message. Instead, we will implement a second hook that will allow you to modify the error message.
2. In Clearinghouses.RetrieveReports, the hook was moved above the TesiaLink check.
3. In x270Controller.TryInsVerifyRequest, we again added a second hook so that you can modify the error message.
4. In FormClaimReports.butRetrieve_Click, the hook was modified to use a "goto" to avoid returning. This way, the hook is not bound to EclaimsCommBridge.None. This allows more flexibility for other developers who may use these hooks.
1. In FormInsPlan.butGetElectronic_Click, you had originally requested that we modify the error message. Instead, we will implement a second hook that will allow you to modify the error message.
Code: Select all
if(clearinghouseHq.CommBridge!=EclaimsCommBridge.ClaimConnect
&& clearinghouseHq.CommBridge!=EclaimsCommBridge.EDS
&& clearinghouseHq.CommBridge!=EclaimsCommBridge.WebMD
&& clearinghouseHq.Eformat!=ElectronicClaimFormat.Canadian
&& !Plugins.HookMethod(this,"FormInsPlan.butGetElectronic_Click_is270Supported",clearinghouseHq))
{
string error="So far, eligibility checks only work with ClaimConnect, EDS, WebMD (Emdeon Dental), and CDAnet.";
object[] parameters={error};
Plugins.HookAddCode(this,"FormInsPlan.butGetElectronic_Click_270NotSupportedError",parameters);
error=(string)parameters[0];
MsgBox.Show(this,error);
return;
}
Code: Select all
StringBuilder errorMessage=new StringBuilder();
if(Plugins.HookMethod(null,"Clearinghouses.RetrieveReports_afterProgressPauseOrCancel",clearinghouseClin,errorMessage,progress)) {
return errorMessage.ToString();
}
if(clearinghouseClin.ISA08=="113504607") {//TesiaLink
//But the import will still happen
return "";
}
Code: Select all
if(!ListTools.In(clearinghouseHq.CommBridge,EclaimsCommBridge.ClaimConnect,EclaimsCommBridge.EDS,EclaimsCommBridge.WebMD)
&& !Plugins.HookMethod(null,"x270Controller.TryInsVerifyRequest_is270Supported",clearinghouseHq))
{
error="So far, eligibility checks only work with ClaimConnect, EDS, WebMD (Emdeon Dental), and CDAnet.";
object[] parameters={error};
Plugins.HookAddCode(null,"x270Controller.TryInsVerifyRequest_270NotSupportedError",parameters);
error=(string)parameters[0];
return null;
}
Code: Select all
if(Plugins.HookMethod(this,"FormClaimReports.butRetrieve_Click_isRetrievingReportsSupported",clearhouseHq)) {
goto HookSkipRetrievingNotSupported;
}
if(clearhouseHq.CommBridge==EclaimsCommBridge.None
|| clearhouseHq.CommBridge==EclaimsCommBridge.Renaissance
|| clearhouseHq.CommBridge==EclaimsCommBridge.RECS)
{
progressbar.UpdateProgress(Lan.g(this,"No built-in functionality for retrieving reports from this clearinghouse."));
progressbar.OnProgressDone();
return;
}
HookSkipRetrievingNotSupported: { }
-
- Posts: 26
- Joined: Thu Feb 18, 2021 2:45 pm
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
Those all look fine to me. I will be out of the office until 3/29/21 and will pick back up then. Thank you
Shari Walker
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
All of the hooks will be available in version 21.1.11 which should release on Tuesday, next week. Note that some hook method names have changed to fit our naming standards.
-
- Posts: 26
- Joined: Thu Feb 18, 2021 2:45 pm
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
Can you list all the hook names/code so we can test and be ready to go?
Shari Walker
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
Yes, here are the hooks as they were committed.
1. Clearinghouses.RetrieveReports
2. Eclaims.SendBatch
3. X270Controller.RequestBenefits
4. x270Controller.TryInsVerifyRequest
5. FormClaimReports.butRetrieve_Click
6. FormClearinghouseEdit.FillFields
7. FomInsPlan.butGetElectronic_Click
1. Clearinghouses.RetrieveReports
Code: Select all
StringBuilder errorMessage=new StringBuilder();
if(Plugins.HookMethod(null,"Clearinghouses.RetrieveReports_afterProgressPauseOrCancel",clearinghouseClin,errorMessage,progress)) {
return errorMessage.ToString();
}
if(clearinghouseClin.ISA08=="113504607") {//TesiaLink
//But the import will still happen
return "";
}
Code: Select all
StringBuilder errorMessage=new StringBuilder();
if(Plugins.HookMethod(null,"Eclaims.SendBatch_afterClientProgramLaunch",clearinghouseClin,messageText,errorMessage)
&& errorMessage.Length > 0)
{
return;
}
//----------------------------------------------------------------------------------------
//finally, mark the claims sent. (only if not Canadian)
Code: Select all
else if(clearinghouseClin.CommBridge==EclaimsCommBridge.WebMD) {
x12response=WebMD.Benefits270(clearinghouseClin,x12message);
}
object[] parameters={clearinghouseClin,x12message,x12response};
Plugins.HookAddCode(null,"x270Controller.RequestBenefits_benefits270",parameters);
x12response=(string)parameters[2];
}
Code: Select all
if(!ListTools.In(clearinghouseHq.CommBridge,EclaimsCommBridge.ClaimConnect,EclaimsCommBridge.EDS,EclaimsCommBridge.WebMD)
&& !Plugins.HookMethod(null,"x270Controller.TryInsVerifyRequest_is270Supported",clearinghouseHq))
{
error="So far, eligibility checks only work with ClaimConnect, EDS, WebMD (Emdeon Dental), and CDAnet.";
object[] parameters={error};
Plugins.HookAddCode(null,"x270Controller.TryInsVerifyRequest_270NotSupportedError",parameters);
error=(string)parameters[0];
return null;
}
Code: Select all
if(Plugins.HookMethod(this,"FormClaimReports.butRetrieve_Click_isRetrievingReportsSupported",clearhouseHq)) {
goto HookSkipRetrievingNotSupported;
}
if(clearhouseHq.CommBridge==EclaimsCommBridge.None
|| clearhouseHq.CommBridge==EclaimsCommBridge.Renaissance
|| clearhouseHq.CommBridge==EclaimsCommBridge.RECS)
{
progressbar.UpdateProgress(Lan.g(this,"No built-in functionality for retrieving reports from this clearinghouse."));
progressbar.OnProgressDone();
return;
}
HookSkipRetrievingNotSupported: { }
Code: Select all
UpdateClientProgramLabel();
Plugins.HookAddCode(this,"FormClearingHouseEdit.FillFields_end",ClearinghouseCur);
}
Code: Select all
if(clearinghouseHq.CommBridge!=EclaimsCommBridge.ClaimConnect
&& clearinghouseHq.CommBridge!=EclaimsCommBridge.EDS
&& clearinghouseHq.CommBridge!=EclaimsCommBridge.WebMD
&& clearinghouseHq.Eformat!=ElectronicClaimFormat.Canadian
&& !Plugins.HookMethod(this,"FormInsPlan.butGetElectronic_Click_is270Supported",clearinghouseHq))
{
string error="So far, eligibility checks only work with ClaimConnect, EDS, WebMD (Emdeon Dental), and CDAnet.";
object[] parameters={error};
Plugins.HookAddCode(this,"FormInsPlan.butGetElectronic_Click_270NotSupportedError",parameters);
error=(string)parameters[0];
MsgBox.Show(this,error);
return;
}
-
- Posts: 26
- Joined: Thu Feb 18, 2021 2:45 pm
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
Just tidying up the code on our end. I'm wondering if the "IF" for Plugins.HookMethodEclaims.SendBatch_afterClientProgramLaunch should check for "!" (not) in order to return without marking the claims Sent. Currently in order to return so the claims doesn't get marked as Sent, we need to return True plus an ErrorMessage. Our code can always return true, but I'm wondering about future vendors trying to use the HookMethod. They might return False if there's an issue on their end and the claims would all get marked as sent by mistake, even if there is an errorMessage.
2. Eclaims.SendBatch
StringBuilder errorMessage=new StringBuilder();
if(Plugins.HookMethod(null,"Eclaims.SendBatch_afterClientProgramLaunch",clearinghouseClin,messageText,errorMessage)
&& errorMessage.Length > 0)
{
return;
}
//----------------------------------------------------------------------------------------
//finally, mark the claims sent. (only if not Canadian)
2. Eclaims.SendBatch
StringBuilder errorMessage=new StringBuilder();
if(Plugins.HookMethod(null,"Eclaims.SendBatch_afterClientProgramLaunch",clearinghouseClin,messageText,errorMessage)
&& errorMessage.Length > 0)
{
return;
}
//----------------------------------------------------------------------------------------
//finally, mark the claims sent. (only if not Canadian)
Shari Walker
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
-
- Posts: 26
- Joined: Thu Feb 18, 2021 2:45 pm
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
Maybe I mis-spoke in my last question. Does the SendBatch HookMethod need to return true even on error so Open Dental knows the plugin handles that HookMethod?
Shari Walker
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
Yes, that hook method should always return true when it is implemented.
-
- Posts: 26
- Joined: Thu Feb 18, 2021 2:45 pm
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
I am having trouble with the 2 pieces that run by the Open Dental Service. I cannot get the service to run these 2 pieces. I have the 21.1.15.0 Open Dental Service installed and running and did the setup according to the help system. Are there hooks that needs added specifically to the Open Dental Service for it to even call the methods in the Open Dental code?
1. Beta Feature Automatic Batch Insurance Validation: Patient Eligibility does not run when I use the instructions in the help system. However, it works correctly through the patient’s Family, Primary/Secondary Edit Insurance Plan, Request button. After the designated time for the Service to check eligibility, I see the following:
a. When viewing the Insurance Verify List,
i. Status: “ServiceError”
ii. Status Date: Today
iii. Status Note: “So far, eligibility checks only work with ClaimConnect, EDS, WebMD (Emdeon Dental), and CDAnet.”
b. This makes me think the code for the Open Dental Service needs a Hook like FormInsPlan.butGetElectronic_Click_is270Supported and
x270Controller.TryInsVerifyRequest_is270Supported
2. Pickup and Import reports: Reports don't pickup and import when I use the setup option “Receive Reports by Service.” However, when I use the setup option “Computer To Receive Reports Automatically,” it works correctly and picks up and imports reports. Reports also pickup and import if I manually retrieve reports through the Manage, Send Claims, Get Reports option.
1. Beta Feature Automatic Batch Insurance Validation: Patient Eligibility does not run when I use the instructions in the help system. However, it works correctly through the patient’s Family, Primary/Secondary Edit Insurance Plan, Request button. After the designated time for the Service to check eligibility, I see the following:
a. When viewing the Insurance Verify List,
i. Status: “ServiceError”
ii. Status Date: Today
iii. Status Note: “So far, eligibility checks only work with ClaimConnect, EDS, WebMD (Emdeon Dental), and CDAnet.”
b. This makes me think the code for the Open Dental Service needs a Hook like FormInsPlan.butGetElectronic_Click_is270Supported and
x270Controller.TryInsVerifyRequest_is270Supported
2. Pickup and Import reports: Reports don't pickup and import when I use the setup option “Receive Reports by Service.” However, when I use the setup option “Computer To Receive Reports Automatically,” it works correctly and picks up and imports reports. Reports also pickup and import if I manually retrieve reports through the Manage, Send Claims, Get Reports option.
Shari Walker
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
The Open Dental Service does not load the plug-in framework. Effectively, it is unaware of plug-ins and runs methods with hooks as though no plug-ins are implemented. We have no plans to implement plug-ins for the service at this time.
-
- Posts: 26
- Joined: Thu Feb 18, 2021 2:45 pm
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
Thank you for researching
Shari Walker
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
-
- Posts: 26
- Joined: Thu Feb 18, 2021 2:45 pm
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
I see the offices can set up Automatic Reports Retrieval not using the Service, but I am not seeing in the Help system a way for the office to send multiple Patient Eligibility Requests at once (not using the Service). Is there a way to send a batch or multiple requests from the Insurance Verify screen? It looks like the office has to click on each appointment in the Insurance Verify List and press the Request button.
Shari Walker
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
Using the service is currently the only way to do batch insurance verification requests.
-
- Posts: 26
- Joined: Thu Feb 18, 2021 2:45 pm
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
Thank you
Shari Walker
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
-
- Posts: 26
- Joined: Thu Feb 18, 2021 2:45 pm
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
Can you tell me when 21.1.11 or higher will be released as a normal update? Our support staff has offices wanting to use our Plug-In DLL but the offices want to wait until the Plug-Ins are out of Open Dental Beta.
Shari Walker
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
We are expecting to move 21.1 to stable later this month.
-
- Posts: 26
- Joined: Thu Feb 18, 2021 2:45 pm
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
Has 21.1 or higher been moved out of Beta yet? The offices we are working don't want to use the OpenDental beta versions.
Shari Walker
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
Yes, 21.1 is the current stable version.
-
- Posts: 26
- Joined: Thu Feb 18, 2021 2:45 pm
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
We are having an issue with Payer IDs. We'd like to avoid having the office manually update to our Payer IDs and eligibility settings. We'd like to do it automatically for them.
1. Is there an existing utility that allows to update the Insurance Carriers' Payer IDs and "Is trusted for real-time eligibility" options (for all Insurance Carriers)? Maybe a utility somewhere that a hook could be added? I was unable to find anything in the code. (I see there is a Payer List at Setup, Family / Insurance, Payer ID's. Is this just a list for viewing?)
2. We also would like to get the address of the Insurance Carrier for eligibility requests - 270s. There's a couple of options.
a. Add the carrier to the end of the parameters list on the existing HookAddCode in x270Controller. This would solve the issue at hand but might not address future information that's also needed.
object[] parameters={clearinghouseClin,x12message,x12response,carrier};
Plugins.HookAddCode(null,"x270Controller.RequestBenefits_benefits270",parameters);
x12response=(string)parameters[2];
b. Thinking of other changes that might be needed in the future for the 270, would it be better to add a HookAddCode to the end of the X270.GenerateMessageText that would allow plugins to make their own changes to the transaction?
string create270X12 = strb.ToString();
object[] parameters={clearinghouseClin,return270X12,carrier,billProv,clinic,insPlan,subscriber,insSub,patForRequest};
Plugins.HookAddCode(null,"x270.GenerateMessageText_create270",parameters);
return create270X12=(string)parameters[1];
1. Is there an existing utility that allows to update the Insurance Carriers' Payer IDs and "Is trusted for real-time eligibility" options (for all Insurance Carriers)? Maybe a utility somewhere that a hook could be added? I was unable to find anything in the code. (I see there is a Payer List at Setup, Family / Insurance, Payer ID's. Is this just a list for viewing?)
2. We also would like to get the address of the Insurance Carrier for eligibility requests - 270s. There's a couple of options.
a. Add the carrier to the end of the parameters list on the existing HookAddCode in x270Controller. This would solve the issue at hand but might not address future information that's also needed.
object[] parameters={clearinghouseClin,x12message,x12response,carrier};
Plugins.HookAddCode(null,"x270Controller.RequestBenefits_benefits270",parameters);
x12response=(string)parameters[2];
b. Thinking of other changes that might be needed in the future for the 270, would it be better to add a HookAddCode to the end of the X270.GenerateMessageText that would allow plugins to make their own changes to the transaction?
string create270X12 = strb.ToString();
object[] parameters={clearinghouseClin,return270X12,carrier,billProv,clinic,insPlan,subscriber,insSub,patForRequest};
Plugins.HookAddCode(null,"x270.GenerateMessageText_create270",parameters);
return create270X12=(string)parameters[1];
Shari Walker
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
1. We don't have any features that update Payer IDs or "Is trusted for real-time eligibility" for multiple carriers at once. Entries in the Electronic Payer ID's list that you are referring to can be edited by double clicking on a row in the list.
2. We can implement option b. Will it work for you as this:
object[] parameters={clearinghouseClin,strb,carrier,billProv,clinic,insPlan,subscriber,insSub,patForRequest};
Plugins.HookAddCode(null,"X270.GenerateMessateText_end",parameters);
return strb.ToString();
2. We can implement option b. Will it work for you as this:
object[] parameters={clearinghouseClin,strb,carrier,billProv,clinic,insPlan,subscriber,insSub,patForRequest};
Plugins.HookAddCode(null,"X270.GenerateMessateText_end",parameters);
return strb.ToString();
-
- Posts: 26
- Joined: Thu Feb 18, 2021 2:45 pm
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
1. Can a button be added to the Electronic Payer ID's list (Setup, Family / Insurance, Payer ID's) that would call a HookMethod to allow us to update the list with our payers and payer IDs?
private void butUpdateBatchIDs_Click(object sender,EventArgs e)
{
StringBuilder errorMessage = new StringBuilder();
object[] param = new object[] { clearinghouseClin, errorMessage };
if (!Plugins.HookMethod(null, "FormElectIDs.UpdateBatchPayerIDs", param) && errorMessage.ToString().Length > 0)
MessageBox.Show(Lans.g("Electronic Payer ID's", "Error Updating Payer IDs.") + "\r\n" + errorMessage.ToString());
else
FillElectIDs(0);
}
2. Yes that will work. I see other HookAddCode places that pass in a string builder and then just use the string builder without accessing the paramenter.
private void butUpdateBatchIDs_Click(object sender,EventArgs e)
{
StringBuilder errorMessage = new StringBuilder();
object[] param = new object[] { clearinghouseClin, errorMessage };
if (!Plugins.HookMethod(null, "FormElectIDs.UpdateBatchPayerIDs", param) && errorMessage.ToString().Length > 0)
MessageBox.Show(Lans.g("Electronic Payer ID's", "Error Updating Payer IDs.") + "\r\n" + errorMessage.ToString());
else
FillElectIDs(0);
}
2. Yes that will work. I see other HookAddCode places that pass in a string builder and then just use the string builder without accessing the paramenter.
Shari Walker
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
We don't add buttons that are only used for plugins, but I can add a hook to the load method that would allow you to add a button to the form. You will need to call some LayoutManager methods to make the button scale properly when zoom is being used. The following forum thread has some information on how this is done, viewtopic.php?f=3&t=7403&p=32827#p32827.
-
- Posts: 26
- Joined: Thu Feb 18, 2021 2:45 pm
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
Thanks. The ability to add a button in the load will solve #1. However, the link you shared doesn't seem to be to the right topic. It is discussing resizing a button that was added with a plugin.
Please let me know the final code for both HookAddCode additions and I will finish up and test our Plugin using those.
Please let me know the final code for both HookAddCode additions and I will finish up and test our Plugin using those.
Shari Walker
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
I should have been more specific. The link I shared was intended to show the LayoutManager methods you would need to call to have the custom button scale appropriately when the zoom feature is being used. Here is another forum thread with some info on how custom buttons are added: viewtopic.php?f=3&t=5558&p=24197&hilit= ... ton#p24197.
1. FormElectIDs.FormElectIDs_Load()
2. X270.GenerateMessageText()
1. FormElectIDs.FormElectIDs_Load()
Code: Select all
private void FormElectIDs_Load(object sender, System.EventArgs e) {
FillElectIDs(0);
butAdd.Visible=(!IsSelectMode);
Plugins.HookAddCode(this,"FormElectIDs.Load_end");
}
Code: Select all
strb.AppendLine("IEA*1*"//IEA01: number of functional groups
+batchNum.ToString().PadLeft(9,'0')+"~");//IEA02: Interchange control number
object[] parameters={clearinghouseClin,strb,carrier,billProv,clinic,insPlan,subscriber,insSub,patForRequest};
Plugins.HookAddCode(null,"X270.GenerateMessateText_end",parameters);
return strb.ToString();
-
- Posts: 26
- Joined: Thu Feb 18, 2021 2:45 pm
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
Thank you
Shari Walker
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
You're welcome. Let me know if these hooks work for you as written, and I will get them committed to beta.
-
- Posts: 26
- Joined: Thu Feb 18, 2021 2:45 pm
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
Ok. It will probably be the end of the week before I can get to them. I will let you know.
Thank you
Thank you
Shari Walker
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
-
- Posts: 26
- Joined: Thu Feb 18, 2021 2:45 pm
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
These Hooks work correctly, but I'm having an issue with #1.
What DLL is the OpenDental.UI and LayoutManager in? Just using the normal Windows Forms, I'm able to add my button to the form's PanelChild (that was added by the OD LayoutManager). But, since I don't have access to the OD LayoutManager and OD UI.Button I'm not able to make the button look right or scale size.
1. FormElectIDs.FormElectIDs_Load(): Plugins.HookAddCode(this, "FormElectIDs.Load_end");
2. X270.GenerateMessageText(): Plugins.HookAddCode(null,"X270.GenerateMessateText_end",parameters);
public static void PayerIDList_AddButton(System.Windows.Forms.Form sender)
{
Button claimXDirectButton = new Button();
claimXDirectButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
claimXDirectButton.Location = new System.Drawing.Point(200, 635);
claimXDirectButton.Size = new System.Drawing.Size(135, 25);
claimXDirectButton.Text = "ClaimX Direct Payer List";
claimXDirectButton.Name = "ClaimXDirectButton";
claimXDirectButton.TabIndex = 211;
claimXDirectButton.Click += new System.EventHandler(claimXDirectButton_Click);
//NOTE: LayoutManager is not accessible
//int xlocation = 200;
//int ylocation = 635;
//xlocation = sender.LayoutManager.Scale(xlocation);
//ylocation = sender.LayoutManager.Scale(ylocation);
//customButton.Size = sender.LayoutManager.ScaleSize(claimXDirectButton.Size);
Control[] controlList = sender.Controls.Find("PanelClient", true);
if (controlList.Length == 1)
claimXDirectButton.Parent = controlList[0];
}
public static void claimXDirectButton_Click(object sender, System.EventArgs e)
{
//launch my payer list here
}
What DLL is the OpenDental.UI and LayoutManager in? Just using the normal Windows Forms, I'm able to add my button to the form's PanelChild (that was added by the OD LayoutManager). But, since I don't have access to the OD LayoutManager and OD UI.Button I'm not able to make the button look right or scale size.
1. FormElectIDs.FormElectIDs_Load(): Plugins.HookAddCode(this, "FormElectIDs.Load_end");
2. X270.GenerateMessageText(): Plugins.HookAddCode(null,"X270.GenerateMessateText_end",parameters);
public static void PayerIDList_AddButton(System.Windows.Forms.Form sender)
{
Button claimXDirectButton = new Button();
claimXDirectButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
claimXDirectButton.Location = new System.Drawing.Point(200, 635);
claimXDirectButton.Size = new System.Drawing.Size(135, 25);
claimXDirectButton.Text = "ClaimX Direct Payer List";
claimXDirectButton.Name = "ClaimXDirectButton";
claimXDirectButton.TabIndex = 211;
claimXDirectButton.Click += new System.EventHandler(claimXDirectButton_Click);
//NOTE: LayoutManager is not accessible
//int xlocation = 200;
//int ylocation = 635;
//xlocation = sender.LayoutManager.Scale(xlocation);
//ylocation = sender.LayoutManager.Scale(ylocation);
//customButton.Size = sender.LayoutManager.ScaleSize(claimXDirectButton.Size);
Control[] controlList = sender.Controls.Find("PanelClient", true);
if (controlList.Length == 1)
claimXDirectButton.Parent = controlList[0];
}
public static void claimXDirectButton_Click(object sender, System.EventArgs e)
{
//launch my payer list here
}
Shari Walker
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
Our PluginExample solution has a reference to OpenDental.exe. With that reference you can cast the sender to a FormElectID and that should allow you to access LayoutManager.
-
- Posts: 26
- Joined: Thu Feb 18, 2021 2:45 pm
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
Thanks, I included the OpenDental.exe and added the custom button to the form's LayoutManager. It is all working correctly now. Can you proceed with adding the 2 Hooks?
Shari Walker
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com
Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt
I will have them committed to 21.2.25 which should release tomorrow.