Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Options

For users or potential users.
Post Reply
Walker@ExtraDent
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

Post by Walker@ExtraDent » Mon Feb 22, 2021 11:15 am

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();
}

}
Shari Walker
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com

joes
Posts: 239
Joined: Tue Aug 13, 2019 12:41 pm

Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt

Post by joes » Thu Mar 11, 2021 3:59 pm

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.

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);
}
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.

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 "";
}
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.

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);
}
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.

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);
}
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.
Last edited by joes on Fri Mar 12, 2021 9:51 am, edited 8 times in total.
Joe Sullivan
Open Dental Software
http://www.opendental.com

joes
Posts: 239
Joined: Tue Aug 13, 2019 12:41 pm

Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt

Post by joes » Fri Mar 12, 2021 8:14 am

Please let us know if you would like any modifications to the changes described in my previous post.
Joe Sullivan
Open Dental Software
http://www.opendental.com

joes
Posts: 239
Joined: Tue Aug 13, 2019 12:41 pm

Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt

Post by joes » Fri Mar 12, 2021 9:12 am

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.
Joe Sullivan
Open Dental Software
http://www.opendental.com

Walker@ExtraDent
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

Post by Walker@ExtraDent » Fri Mar 12, 2021 9:31 am

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.
Shari Walker
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com

Walker@ExtraDent
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

Post by Walker@ExtraDent » Fri Mar 12, 2021 9:38 am

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

joes
Posts: 239
Joined: Tue Aug 13, 2019 12:41 pm

Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt

Post by joes » Fri Mar 12, 2021 10:59 am

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:

Code: Select all

UpdateClientProgramLabel();
Plugins.HookAddCode(this,"FormClearingHouseEdit.FillFields_end",ClearinghouseCur);
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().
Joe Sullivan
Open Dental Software
http://www.opendental.com

Walker@ExtraDent
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

Post by Walker@ExtraDent » Fri Mar 12, 2021 11:15 am

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

joes
Posts: 239
Joined: Tue Aug 13, 2019 12:41 pm

Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt

Post by joes » Fri Mar 12, 2021 2:05 pm

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

Code: Select all

  UpdateClientProgramLabel();
  Plugins.HookAddCode(this,"FormClearingHouseEdit.FillFields_end",ClearinghouseCur);
}
2. FormInsPlan.butGetElectronic_Click

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;
}
3. Clearinghouses.RetrieveReports

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 "";
}
4. Eclaims.SendBatch

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)
5. x270Controller.RequestBenefits

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];
}
6. x270Controller.TryInsVerifyRequest

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;
}
7. FormClaimReports.ButRetrieve_Click

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;
}
Joe Sullivan
Open Dental Software
http://www.opendental.com

Walker@ExtraDent
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

Post by Walker@ExtraDent » Fri Mar 12, 2021 2:56 pm

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

joes
Posts: 239
Joined: Tue Aug 13, 2019 12:41 pm

Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt

Post by joes » Fri Mar 12, 2021 3:52 pm

I will wait just so we can be sure that they will work for you.
Joe Sullivan
Open Dental Software
http://www.opendental.com

Walker@ExtraDent
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

Post by Walker@ExtraDent » Tue Mar 16, 2021 1:07 pm

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() ?
Shari Walker
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com

joes
Posts: 239
Joined: Tue Aug 13, 2019 12:41 pm

Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt

Post by joes » Tue Mar 16, 2021 2:53 pm

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];
Joe Sullivan
Open Dental Software
http://www.opendental.com

Walker@ExtraDent
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

Post by Walker@ExtraDent » Tue Mar 16, 2021 3:37 pm

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];
Shari Walker
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com

joes
Posts: 239
Joined: Tue Aug 13, 2019 12:41 pm

Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt

Post by joes » Tue Mar 16, 2021 3:49 pm

I can switch it so that they are in the order you described.
Joe Sullivan
Open Dental Software
http://www.opendental.com

Walker@ExtraDent
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

Post by Walker@ExtraDent » Tue Mar 16, 2021 8:26 pm

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];
Shari Walker
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com

joes
Posts: 239
Joined: Tue Aug 13, 2019 12:41 pm

Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt

Post by joes » Wed Mar 17, 2021 8:25 am

I will work on these changes and will post the version that these hooks will be in once they are committed.
Joe Sullivan
Open Dental Software
http://www.opendental.com

joes
Posts: 239
Joined: Tue Aug 13, 2019 12:41 pm

Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt

Post by joes » Thu Mar 18, 2021 8:57 am

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.

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;
}
2. In Clearinghouses.RetrieveReports, the hook was moved above the TesiaLink check.

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 "";
}
3. In x270Controller.TryInsVerifyRequest, we again added a second hook so that you can modify the error message.

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;
}
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.

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: { }
Joe Sullivan
Open Dental Software
http://www.opendental.com

Walker@ExtraDent
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

Post by Walker@ExtraDent » Thu Mar 18, 2021 2:35 pm

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

joes
Posts: 239
Joined: Tue Aug 13, 2019 12:41 pm

Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt

Post by joes » Fri Mar 19, 2021 10:45 am

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.
Joe Sullivan
Open Dental Software
http://www.opendental.com

Walker@ExtraDent
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

Post by Walker@ExtraDent » Sun Mar 21, 2021 6:27 am

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

joes
Posts: 239
Joined: Tue Aug 13, 2019 12:41 pm

Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt

Post by joes » Mon Mar 22, 2021 1:44 pm

Yes, here are the hooks as they were committed.

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 "";
}
2. Eclaims.SendBatch

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)
3. X270Controller.RequestBenefits

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];
}
4. x270Controller.TryInsVerifyRequest

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;
}
5. FormClaimReports.butRetrieve_Click

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: { }
6. FormClearinghouseEdit.FillFields

Code: Select all

	UpdateClientProgramLabel();
	Plugins.HookAddCode(this,"FormClearingHouseEdit.FillFields_end",ClearinghouseCur);
}
7. FomInsPlan.butGetElectronic_Click

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;
}
Joe Sullivan
Open Dental Software
http://www.opendental.com

Walker@ExtraDent
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

Post by Walker@ExtraDent » Wed Apr 07, 2021 8:20 am

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)
Shari Walker
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com

Walker@ExtraDent
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

Post by Walker@ExtraDent » Wed Apr 07, 2021 9:16 am

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

joes
Posts: 239
Joined: Tue Aug 13, 2019 12:41 pm

Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt

Post by joes » Wed Apr 07, 2021 2:32 pm

Yes, that hook method should always return true when it is implemented.
Joe Sullivan
Open Dental Software
http://www.opendental.com

Walker@ExtraDent
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

Post by Walker@ExtraDent » Mon Apr 12, 2021 10:56 am

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.
Shari Walker
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com

joes
Posts: 239
Joined: Tue Aug 13, 2019 12:41 pm

Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt

Post by joes » Wed Apr 14, 2021 11:22 am

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.
Joe Sullivan
Open Dental Software
http://www.opendental.com

Walker@ExtraDent
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

Post by Walker@ExtraDent » Thu Apr 15, 2021 5:16 am

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

Walker@ExtraDent
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

Post by Walker@ExtraDent » Thu Apr 15, 2021 5:54 am

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

joes
Posts: 239
Joined: Tue Aug 13, 2019 12:41 pm

Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt

Post by joes » Thu Apr 15, 2021 8:55 am

Using the service is currently the only way to do batch insurance verification requests.
Joe Sullivan
Open Dental Software
http://www.opendental.com

Walker@ExtraDent
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

Post by Walker@ExtraDent » Thu Apr 15, 2021 9:04 am

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

Walker@ExtraDent
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

Post by Walker@ExtraDent » Wed May 12, 2021 5:32 am

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

joes
Posts: 239
Joined: Tue Aug 13, 2019 12:41 pm

Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt

Post by joes » Wed May 12, 2021 8:56 am

We are expecting to move 21.1 to stable later this month.
Joe Sullivan
Open Dental Software
http://www.opendental.com

Walker@ExtraDent
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

Post by Walker@ExtraDent » Fri Jun 04, 2021 5:11 am

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

joes
Posts: 239
Joined: Tue Aug 13, 2019 12:41 pm

Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt

Post by joes » Fri Jun 04, 2021 8:20 am

Yes, 21.1 is the current stable version.
Joe Sullivan
Open Dental Software
http://www.opendental.com

Walker@ExtraDent
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

Post by Walker@ExtraDent » Wed Jun 16, 2021 8:25 am

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];
Shari Walker
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com

joes
Posts: 239
Joined: Tue Aug 13, 2019 12:41 pm

Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt

Post by joes » Thu Jun 17, 2021 2:34 pm

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();
Joe Sullivan
Open Dental Software
http://www.opendental.com

Walker@ExtraDent
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

Post by Walker@ExtraDent » Fri Jun 18, 2021 6:31 am

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.
Shari Walker
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com

joes
Posts: 239
Joined: Tue Aug 13, 2019 12:41 pm

Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt

Post by joes » Fri Jun 18, 2021 10:43 am

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.
Joe Sullivan
Open Dental Software
http://www.opendental.com

Walker@ExtraDent
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

Post by Walker@ExtraDent » Mon Jun 21, 2021 6:40 am

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.
Shari Walker
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com

joes
Posts: 239
Joined: Tue Aug 13, 2019 12:41 pm

Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt

Post by joes » Mon Jun 21, 2021 10:53 am

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()

Code: Select all

		private void FormElectIDs_Load(object sender, System.EventArgs e) {
			FillElectIDs(0);
			butAdd.Visible=(!IsSelectMode);
			Plugins.HookAddCode(this,"FormElectIDs.Load_end");
		}
2. X270.GenerateMessageText()

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();
Joe Sullivan
Open Dental Software
http://www.opendental.com

Walker@ExtraDent
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

Post by Walker@ExtraDent » Mon Jun 21, 2021 11:32 am

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

joes
Posts: 239
Joined: Tue Aug 13, 2019 12:41 pm

Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt

Post by joes » Mon Jun 21, 2021 1:34 pm

You're welcome. Let me know if these hooks work for you as written, and I will get them committed to beta.
Joe Sullivan
Open Dental Software
http://www.opendental.com

Walker@ExtraDent
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

Post by Walker@ExtraDent » Tue Jun 22, 2021 5:08 am

Ok. It will probably be the end of the week before I can get to them. I will let you know.
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

Walker@ExtraDent
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

Post by Walker@ExtraDent » Wed Aug 04, 2021 4:56 am

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
}
Shari Walker
V.P. of Development
ExtraDent - Development
ShariWalker@ExtraDent.com
Phone: (866) 886.5113 ext. 301
Mobile: (317) 432.9326
www.extradent.com

joes
Posts: 239
Joined: Tue Aug 13, 2019 12:41 pm

Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt

Post by joes » Wed Aug 04, 2021 9:12 am

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.
Joe Sullivan
Open Dental Software
http://www.opendental.com

Walker@ExtraDent
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

Post by Walker@ExtraDent » Wed Aug 04, 2021 11:18 am

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

joes
Posts: 239
Joined: Tue Aug 13, 2019 12:41 pm

Re: Plug-In/Hooks for E-Claims, Eligibility, Reports(ERAs, 271s, 277s, DentiCal Reports) and for Clearinghouse Setup Opt

Post by joes » Wed Aug 04, 2021 3:44 pm

I will have them committed to 21.2.25 which should release tomorrow.
Joe Sullivan
Open Dental Software
http://www.opendental.com

Post Reply