arnabnaha wrote on Monday, November 24, 2014:
A clinic has two physicians…you need to give fee sheet support to one of them and the other needs no fee sheet…how to work it out then?
arnabnaha wrote on Monday, November 24, 2014:
A clinic has two physicians…you need to give fee sheet support to one of them and the other needs no fee sheet…how to work it out then?
yehster wrote on Monday, November 24, 2014:
Create two ACL groups, one with “acct,billing” (A) permission and the other without (B).
One that gets it goes to group A, the one without goes to group B.
arnabnaha wrote on Monday, November 24, 2014:
Thanks Kevin…checked it out in my testing environment. Made a new ACL group called Billing Physician and added the accounting->Billing in them apart from the other physician work. The Fees Menu still is invisible but now the fee sheet can be accessed from the encounter.
This is great…and should be pushed to official codebase and I would request to add by default the “billing physician” group to the ACL so that it gets easy for all…
One more request…
If the “billing Physician” is active, then the fees menu in the left nav should be visible. It will be helpful for the provider
blankev wrote on Monday, November 24, 2014:
I don’t understand this solution. Is it not default that the Physician can handle the Fee-sheet.
The new part is the non-billing physician? Same for doctor?
If this is included in Github it will eventually incorporated in the Latest version.
arnabnaha wrote on Monday, November 24, 2014:
BUG:
I was testing out and found that if you have a user with accounting ACL, then also the FEES menu is hidden. This code is hiding the FEE MENU from any ACL which have the Accounting->Billing Component in it.
This is wrong and needs to be fixed. It should hide the FEE Menu for all except the ACCOUNTING ACL and THE ADMINISTRATOR ACL
I have cross checked with a second demo which donot have the stephen’s code, and it works absolutely fine with ACCOUNTING ACL (Shows the FEE MENU)
cmswest wrote on Tuesday, November 25, 2014:
hi Pieter, no, the default is for the admin to handle billing, although the default(first) user is an admin-physician, so billing is enbabled, which is almost esoteric.
the new part would be a billing physician, see the separate user categories under admin->acl where the default physician does not have billing enabled.
yes, or maybe, as it would be included in the development version, 4.1.3
cmswest wrote on Tuesday, November 25, 2014:
hi Arnab, maybe the billing physician should be the default?
also, when I add the accounting->billing(write optional) to the default physicain the fees are revealed
can you confirm that:
~ if((!isset($GLOBALS[‘enable_fees_in_left_menu’]) || $GLOBALS[‘enable_fees_in_left_menu’] == 1) && acl_check(‘acct’,‘bill’)){ ?>
on or around line 1335 is in your codebase?
bradymiller wrote on Tuesday, November 25, 2014:
grep grep,
Your issue with grep command could be several(also make sure you spelled encounter correctly); it’s an awesome command to learn so very worth it to point out. If you were in the openemr directory when you typed that command then it would of kind of worked, except that it would of told you it was a directory and failed out; when grepping a path and all files in it etc. need recursive switch(-R). To avoid path issue, sometimes best to use full path, which will start with a slash. For example:
grep -R "acl_check" /var/www/openemr/interface/patient_file/encounter
gives:
/var/www/openemr/interface/patient_file/encounter/forms.php:$auth_notes_a = acl_check('encounters', 'notes_a');
/var/www/openemr/interface/patient_file/encounter/forms.php:$auth_notes = acl_check('encounters', 'notes');
/var/www/openemr/interface/patient_file/encounter/forms.php:$auth_relaxed = acl_check('encounters', 'relaxed');
/var/www/openemr/interface/patient_file/encounter/forms.php: if ($result['squad'] && ! acl_check('squads', $result['squad'])) {
/var/www/openemr/interface/patient_file/encounter/forms.php: if ($result['sensitivity'] && !acl_check('sensitivities', $result['sensitivity'])) {
/var/www/openemr/interface/patient_file/encounter/forms.php:<?php if (acl_check('admin', 'super')) { ?>
/var/www/openemr/interface/patient_file/encounter/forms.php: if (acl_check('admin', 'super') ) {
/var/www/openemr/interface/patient_file/encounter/diagnosis.php: $thisauth = acl_check('encounters', 'coding_a');
/var/www/openemr/interface/patient_file/encounter/diagnosis.php: $thisauth = acl_check('encounters', 'coding');
/var/www/openemr/interface/patient_file/encounter/diagnosis.php: if ($tmp['squad'] && ! acl_check('squads', $tmp['squad']))
And if you need some context, then can ask grep to provide the preceding (-B switch) and proceeding(-A switch) lines of code, so could do:
grep -B 3 -A 4 -R "acl_check" /var/www/openemr/interface/patient_file/encounter
which gives:
/var/www/openemr/interface/patient_file/encounter/forms.php-<div>
/var/www/openemr/interface/patient_file/encounter/forms.php-<span class="title"><?php echo oeFormatShortDate($encounter_date) . " " . xl("Encounter"); ?> </span>
/var/www/openemr/interface/patient_file/encounter/forms.php-<?php
/var/www/openemr/interface/patient_file/encounter/forms.php:$auth_notes_a = acl_check('encounters', 'notes_a');
/var/www/openemr/interface/patient_file/encounter/forms.php:$auth_notes = acl_check('encounters', 'notes');
/var/www/openemr/interface/patient_file/encounter/forms.php:$auth_relaxed = acl_check('encounters', 'relaxed');
/var/www/openemr/interface/patient_file/encounter/forms.php-
/var/www/openemr/interface/patient_file/encounter/forms.php-if (is_numeric($pid)) {
/var/www/openemr/interface/patient_file/encounter/forms.php- // Check for no access to the patient's squad.
/var/www/openemr/interface/patient_file/encounter/forms.php- $result = getPatientData($pid, "fname,lname,squad");
/var/www/openemr/interface/patient_file/encounter/forms.php- echo htmlspecialchars( xl('for','',' ',' ') . $result['fname'] . " " . $result['lname'] );
/var/www/openemr/interface/patient_file/encounter/forms.php: if ($result['squad'] && ! acl_check('squads', $result['squad'])) {
/var/www/openemr/interface/patient_file/encounter/forms.php- $auth_notes_a = $auth_notes = $auth_relaxed = 0;
/var/www/openemr/interface/patient_file/encounter/forms.php- }
/var/www/openemr/interface/patient_file/encounter/forms.php- // Check for no access to the encounter's sensitivity level.
/var/www/openemr/interface/patient_file/encounter/forms.php- $result = sqlQuery("SELECT sensitivity FROM form_encounter WHERE " .
/var/www/openemr/interface/patient_file/encounter/forms.php- "pid = '$pid' AND encounter = '$encounter' LIMIT 1");
/var/www/openemr/interface/patient_file/encounter/forms.php: if ($result['sensitivity'] && !acl_check('sensitivities', $result['sensitivity'])) {
/var/www/openemr/interface/patient_file/encounter/forms.php- $auth_notes_a = $auth_notes = $auth_relaxed = 0;
/var/www/openemr/interface/patient_file/encounter/forms.php- }
/var/www/openemr/interface/patient_file/encounter/forms.php-}
/var/www/openemr/interface/patient_file/encounter/forms.php-?>
--
/var/www/openemr/interface/patient_file/encounter/forms.php- echo $esign->buttonHtml();
/var/www/openemr/interface/patient_file/encounter/forms.php-}
/var/www/openemr/interface/patient_file/encounter/forms.php-?>
/var/www/openemr/interface/patient_file/encounter/forms.php:<?php if (acl_check('admin', 'super')) { ?>
/var/www/openemr/interface/patient_file/encounter/forms.php- <a href='toggledivs(this.id,this.id);' class='css_button' onclick='return deleteme()'><span><?php echo xl('Delete') ?></span></a>
/var/www/openemr/interface/patient_file/encounter/forms.php-<?php } ?>
/var/www/openemr/interface/patient_file/encounter/forms.php- <a href="#" onClick='expandcollapse("expand");' style="font-size:80%;"><?php xl('Expand All','e'); ?></a>
/var/www/openemr/interface/patient_file/encounter/forms.php- <a style="font-size:80%;" href="#" onClick='expandcollapse("collapse");'><?php xl('Collapse All','e'); ?></a>
--
/var/www/openemr/interface/patient_file/encounter/forms.php- echo $esign->buttonHtml();
/var/www/openemr/interface/patient_file/encounter/forms.php- }
/var/www/openemr/interface/patient_file/encounter/forms.php-
/var/www/openemr/interface/patient_file/encounter/forms.php: if (acl_check('admin', 'super') ) {
/var/www/openemr/interface/patient_file/encounter/forms.php- if ( $formdir != 'newpatient') {
/var/www/openemr/interface/patient_file/encounter/forms.php- // a link to delete the form from the encounter
/var/www/openemr/interface/patient_file/encounter/forms.php- echo "<a target='".
/var/www/openemr/interface/patient_file/encounter/forms.php- ($GLOBALS['concurrent_layout'] ? "_parent" : "Main") .
--
/var/www/openemr/interface/patient_file/encounter/diagnosis.php-<body class="body_bottom">
/var/www/openemr/interface/patient_file/encounter/diagnosis.php-
/var/www/openemr/interface/patient_file/encounter/diagnosis.php-<?php
/var/www/openemr/interface/patient_file/encounter/diagnosis.php: $thisauth = acl_check('encounters', 'coding_a');
/var/www/openemr/interface/patient_file/encounter/diagnosis.php- if (!$thisauth) {
/var/www/openemr/interface/patient_file/encounter/diagnosis.php- $erow = sqlQuery("SELECT user FROM forms WHERE " .
/var/www/openemr/interface/patient_file/encounter/diagnosis.php- "encounter = '$encounter' AND formdir = 'newpatient' LIMIT 1");
/var/www/openemr/interface/patient_file/encounter/diagnosis.php- if ($erow['user'] == $_SESSION['authUser'])
/var/www/openemr/interface/patient_file/encounter/diagnosis.php: $thisauth = acl_check('encounters', 'coding');
/var/www/openemr/interface/patient_file/encounter/diagnosis.php- }
/var/www/openemr/interface/patient_file/encounter/diagnosis.php- if ($thisauth) {
/var/www/openemr/interface/patient_file/encounter/diagnosis.php- $tmp = getPatientData($pid, "squad");
/var/www/openemr/interface/patient_file/encounter/diagnosis.php: if ($tmp['squad'] && ! acl_check('squads', $tmp['squad']))
/var/www/openemr/interface/patient_file/encounter/diagnosis.php- $thisauth = 0;
/var/www/openemr/interface/patient_file/encounter/diagnosis.php- }
/var/www/openemr/interface/patient_file/encounter/diagnosis.php- if (!$thisauth) {
/var/www/openemr/interface/patient_file/encounter/diagnosis.php- echo "<p>(".xl('Coding not authorized').")</p>\n";
You can also have it print out the code line in the script via the -n switch. Check out ‘man grep’ for a bunch of other switches/options.
grep grep,
-brady
bradymiller wrote on Tuesday, November 25, 2014:
Hi,
Probably would avoid creating a whole new ACL role/group. Do most practices make the physician enter in the billing codes for encounter (ie. fee sheet)? Or No? If not, then can use the acct,billing ACO to control both Fees menu item and the Fee Sheet link in Encounter. But if want a physican to be able to enter in the fee sheet, but not do the other billing stuff, then it makes more sense to have a separate ACO for the Fees menu items and the fee sheet link in encounter; then may want to create a new ACO acct,fee_sheet to allow the granularity and stick it in the Physician role/group.
-brady
OpenEMR
kodusote wrote on Tuesday, November 25, 2014:
Dear All,
I have found using the Groups and Access Controls option difficult to use and I hope this can be explained so that one can optimally use this option. As stated by Stephen, there is the option of Physicians (write) but when creating a user, the only option one sees is Physicians. The categorisation Physicians(view), Physicians (addonly), Physicians (write) and Physicians (wsome) that are in the Groups Access Controls are not displayed and cannot be selected. Is there any way such granular access control groups can be selected from the add user form?
Thanks.
fsgl wrote on Tuesday, November 25, 2014:
In the majority of practices the physician delegates billing to staff. Should the physician want to bill, he can login as Administrator. In a solo practice the physician generally has both functions. This could eliminate the need for another ARO, billing physicians.
As Arnab pointed out, with Stephen’s fix, physicians & clinicians can still view the Fee Sheet from the Encounter form; therefore only half of the OP’s problem has been solved.
We need more extensive work both on the Wiki & the module itself. It is not always obvious what each ACO does & what specific tasks are hidden in each ACO grouping. It would be helpful if the ACL menu worked as advertised & if granular control can be had in ACL Administration without requiring the user to change codes each time.
fsgl wrote on Tuesday, November 25, 2014:
Despite the typo above, the spelling was correct but the syntax was wrong. Had part of the path before grep per Kayode’s old thread.
Even with the printout, still would have been clueless how to proceed.
fsgl wrote on Tuesday, November 25, 2014:
Stephen,
What else does brainknight need to do to hide the Fee Sheet viewed from the Encounter form, without impinging on the ability to write the clinical note?
cmswest wrote on Tuesday, November 25, 2014:
I believe my code is a valid solution for both cases. The change to fee_sheet/new.php prevents access unless you have acct,bill
The change to left_nav.php hides the fee sheet for those lacking above aco.
cmswest wrote on Tuesday, November 25, 2014:
can you confirm that:
~ if((!isset($GLOBALS[‘enable_fees_in_left_menu’]) || $GLOBALS[‘enable_fees_in_left_menu’] == 1) && acl_check(‘acct’,‘bill’)){ ?>
is located on line 1335 is in your 4.1.3 codebase?
fsgl wrote on Tuesday, November 25, 2014:
Yes, acct, bill has been put to bed, what about encounters, coding?
I think the latter is an ACO which grants viewing of Fee Sheet from the New Encounter form. Please correct if wrong.
cmswest wrote on Tuesday, November 25, 2014:
Hi fsgl, are you referring to Brady’s snippet?
“But if want a physican to be able to enter in the fee sheet, but not do the other billing stuff, then it makes more sense to have a separate ACO for the Fees menu items and the fee sheet link in encounter; then may want to create a new ACO acct,fee_sheet to allow the granularity and stick it in the Physician role/group.”
fsgl wrote on Tuesday, November 25, 2014:
No, I was referring to Arnab’s observation as it relates to the ACO depicted.
.
yehster wrote on Tuesday, November 25, 2014:
A better option might be to change the acl_check to (Encounter,Coding) rather than acct,billing.
This would keep the default behavior the same for physicians.
cmswest wrote on Tuesday, November 25, 2014:
thanks Kevin and fsgl, so change my 2 references to (‘acct’,‘bill’) to (‘encounters’,‘coding’) or (‘encounters’,‘coding_a’) if you want the physician to have access to any encounter’s coding