476 lines
15 KiB
Plaintext
476 lines
15 KiB
Plaintext
unit fEncntKEEP;
|
|
|
|
//Modifed: 7/26/99
|
|
//By: Robert Bott
|
|
//Location: ISL
|
|
//Description of Mod:
|
|
// Moved asignment of historical visit category from the cboNewVisitChange event
|
|
// to the ckbHistoricalClick event.
|
|
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
|
|
StdCtrls, ORCtrls, ORDtTm, ORFn, ExtCtrls, ComCtrls, ORDtTmRng, fAutoSz, rOptions;
|
|
|
|
type
|
|
TfrmEncounter = class(TForm)
|
|
cboPtProvider: TORComboBox;
|
|
lblProvider: TLabel;
|
|
cmdOK: TButton;
|
|
cmdCancel: TButton;
|
|
lblLocation: TLabel;
|
|
txtLocation: TCaptionEdit;
|
|
pgeVisit: TPageControl;
|
|
tabClinic: TTabSheet;
|
|
lblClinic: TLabel;
|
|
lblDateRange: TLabel;
|
|
lstClinic: TORListBox;
|
|
tabAdmit: TTabSheet;
|
|
lblAdmit: TLabel;
|
|
lstAdmit: TORListBox;
|
|
tabNewVisit: TTabSheet;
|
|
lblVisitDate: TLabel;
|
|
lblNewVisit: TLabel;
|
|
calVisitDate: TORDateBox;
|
|
ckbHistorical: TORCheckBox;
|
|
cboNewVisit: TORComboBox;
|
|
dlgDateRange: TORDateRangeDlg;
|
|
cmdDateRange: TButton;
|
|
lblInstruct: TLabel;
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure pgeVisitChange(Sender: TObject);
|
|
procedure cmdOKClick(Sender: TObject);
|
|
procedure cmdCancelClick(Sender: TObject);
|
|
procedure cboNewVisitNeedData(Sender: TObject; const StartFrom: String;
|
|
Direction, InsertAt: Integer);
|
|
procedure calVisitDateChange(Sender: TObject);
|
|
procedure cboNewVisitChange(Sender: TObject);
|
|
procedure calVisitDateExit(Sender: TObject);
|
|
procedure cboPtProviderNeedData(Sender: TObject;
|
|
const StartFrom: String; Direction, InsertAt: Integer);
|
|
procedure ckbHistoricalClick(Sender: TObject);
|
|
procedure cmdDateRangeClick(Sender: TObject);
|
|
procedure FormDestroy(Sender: TObject);
|
|
procedure FormClose(Sender: TObject; var Action: TCloseAction);
|
|
procedure lstAdmitChange(Sender: TObject);
|
|
procedure lstClinicChange(Sender: TObject);
|
|
private
|
|
CLINIC_TXT : String;
|
|
FFilter: Int64;
|
|
FPCDate: TFMDateTime;
|
|
FProvider: Int64;
|
|
FLocation: Integer;
|
|
FLocationName: string;
|
|
FDateTime: TFMDateTime;
|
|
FVisitCategory: Char;
|
|
FStandAlone: Boolean;
|
|
FFromSelf: Boolean;
|
|
FFromDate: TFMDateTime;
|
|
FThruDate: TFMDateTIme;
|
|
FEncFutureLimit: string;
|
|
FFromCreate: Boolean;
|
|
FOldHintEvent: TShowHintEvent;
|
|
OKPressed: Boolean;
|
|
procedure AppShowHint(var HintStr: string; var CanShow: Boolean;
|
|
var HintInfo: THintInfo);
|
|
procedure SetVisitCat;
|
|
public
|
|
{ Public declarations }
|
|
end;
|
|
|
|
procedure UpdateEncounter(PersonFilter: Int64; ADate: TFMDateTime = 0; TIULocation: integer = 0);
|
|
procedure UpdateVisit(FontSize: Integer); overload;
|
|
procedure UpdateVisit(FontSize: Integer; TIULocation: integer); overload;
|
|
|
|
implementation
|
|
|
|
{$R *.DFM}
|
|
|
|
uses rCore, uCore, uConst, fReview, uPCE, rPCE;
|
|
|
|
const
|
|
TC_MISSING = 'Incomplete Encounter Information';
|
|
TX_NO_DATE = 'A valid date/time has not been entered.';
|
|
TX_NO_TIME = 'A valid time has not been entered.';
|
|
TX_NO_LOC = 'A visit location has not been selected.';
|
|
TC_LOCONLY = 'Location for Current Activities';
|
|
TX_FUTURE_WARNING = 'You have selected a visit with a date in the future. Are you sure?';
|
|
TC_FUTURE_WARNING = 'Visit Is In Future';
|
|
|
|
var
|
|
uTIULocation: integer;
|
|
uTIULocationName: string;
|
|
|
|
procedure UpdateVisit(FontSize: Integer);
|
|
begin
|
|
UpdateEncounter(NPF_SUPPRESS);
|
|
end;
|
|
|
|
procedure UpdateVisit(FontSize: Integer; TIULocation: integer);
|
|
begin
|
|
UpdateEncounter(NPF_SUPPRESS, 0, TIULocation);
|
|
end;
|
|
|
|
procedure UpdateEncounter(PersonFilter: Int64; ADate: TFMDateTime = 0; TIULocation: integer = 0);
|
|
const
|
|
UP_SHIFT = 85;
|
|
var
|
|
frmEncounter: TfrmEncounter;
|
|
CanChange: Boolean;
|
|
TimedOut: Boolean;
|
|
begin
|
|
uTIULocation := TIULocation;
|
|
if uTIULocation <> 0 then uTIULocationName := ExternalName(uTIULocation, FN_HOSPITAL_LOCATION);
|
|
frmEncounter := TfrmEncounter.Create(Application);
|
|
try
|
|
TimedOut := False;
|
|
ResizeAnchoredFormToFont(frmEncounter);
|
|
with frmEncounter do
|
|
begin
|
|
FFilter := PersonFilter;
|
|
FPCDate := ADate;
|
|
if PersonFilter = NPF_SUPPRESS then // not prompting for provider
|
|
begin
|
|
lblProvider.Visible := False;
|
|
cboPtProvider.Visible := False;
|
|
lblInstruct.Visible := True;
|
|
Caption := TC_LOCONLY;
|
|
Height := frmEncounter.Height - UP_SHIFT;
|
|
end
|
|
else // also prompt for provider
|
|
begin
|
|
// InitLongList must be done AFTER FFilter is set
|
|
cboPtProvider.InitLongList(Encounter.ProviderName);
|
|
cboPtProvider.SelectByIEN(FProvider);
|
|
end;
|
|
ShowModal;
|
|
if OKPressed then
|
|
begin
|
|
CanChange := True;
|
|
if (PersonFilter <> NPF_SUPPRESS) and
|
|
(((Encounter.Provider = User.DUZ) and (FProvider <> User.DUZ)) or
|
|
((Encounter.Provider <> User.DUZ) and (FProvider = User.DUZ)))
|
|
then CanChange := ReviewChanges(TimedOut);
|
|
if CanChange then
|
|
begin
|
|
if PersonFilter <> NPF_SUPPRESS then Encounter.Provider := FProvider;
|
|
Encounter.Location := FLocation;
|
|
Encounter.DateTime := FDateTime;
|
|
Encounter.VisitCategory := FVisitCategory;
|
|
Encounter.StandAlone := FStandAlone;
|
|
end;
|
|
end;
|
|
end;
|
|
finally
|
|
frmEncounter.Release;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmEncounter.FormCreate(Sender: TObject);
|
|
var
|
|
ADateFrom, ADateThru: TDateTime;
|
|
BDateFrom, BDateThru: Integer;
|
|
BDisplayFrom, BDisplayThru: String;
|
|
begin
|
|
inherited;
|
|
FProvider := Encounter.Provider;
|
|
FLocation := Encounter.Location;
|
|
FLocationName := Encounter.LocationName;
|
|
FDateTime := Encounter.DateTime;
|
|
FVisitCategory := Encounter.VisitCategory;
|
|
FStandAlone := Encounter.StandAlone;
|
|
rpcGetEncFutureDays(FEncFutureLimit);
|
|
rpcGetRangeForEncs(BDateFrom, BDateThru, False); // Get user's current date range settings.
|
|
if BDateFrom > 0 then
|
|
BDisplayFrom := 'T-' + IntToStr(BDateFrom)
|
|
else
|
|
BDisplayFrom := 'T';
|
|
if BDateThru > 0 then
|
|
BDisplayThru := 'T+' + IntToStr(BDateThru)
|
|
else
|
|
BDisplayThru := 'T';
|
|
lblDateRange.Caption := '(' + BDisplayFrom + ' thru ' + BDisplayThru + ')';
|
|
ADateFrom := (FMDateTimeToDateTime(FMToday) - BDateFrom);
|
|
ADateThru := (FMDateTimeToDateTime(FMToday) + BDateThru);
|
|
FFromDate := DateTimeToFMDateTime(ADateFrom);
|
|
FThruDate := DateTimeToFMDateTime(ADateThru) + 0.2359;
|
|
FFromCreate := True;
|
|
with txtLocation do if Length(FLocationName) > 0 then
|
|
begin
|
|
Text := FLocationName + ' ';
|
|
if (FVisitCategory <> 'H') and (FDateTime <> 0) then
|
|
Text := Text + FormatFMDateTime('mmm dd,yy hh:nn', FDateTime);
|
|
end
|
|
else Text := '< Select a location from the tabs below.... >';
|
|
OKPressed := False;
|
|
pgeVisit.ActivePage := tabClinic;
|
|
pgeVisitChange(Self);
|
|
if lstClinic.Items.Count = 0 then
|
|
begin
|
|
pgeVisit.ActivePage := tabNewVisit;
|
|
pgeVisitChange(Self);
|
|
end;
|
|
ckbHistorical.Hint := 'A historical visit or encounter is a visit that occurred at some time' + CRLF +
|
|
'in the past or at some other location (possibly non-VA). Although these' + CRLF +
|
|
'are not used for workload credit, they can be used for setting up the' + CRLF +
|
|
'PCE reminder maintenance system, or other non-workload-related reasons.';
|
|
FOldHintEvent := Application.OnShowHint;
|
|
Application.OnShowHint := AppShowHint;
|
|
FFromCreate := False;
|
|
//JAWS will read the second caption if 2 are displayed, so Combining Labels
|
|
CLINIC_TXT := lblClinic.Caption+' ';
|
|
lblClinic.Caption := CLINIC_TXT + lblDateRange.Caption;
|
|
lblDateRange.Hide;
|
|
end;
|
|
|
|
procedure TfrmEncounter.cboPtProviderNeedData(Sender: TObject; const StartFrom: string;
|
|
Direction, InsertAt: Integer);
|
|
begin
|
|
inherited;
|
|
case FFilter of
|
|
NPF_PROVIDER: cboPtProvider.ForDataUse(SubSetOfProviders(StartFrom, Direction));
|
|
// NPF_ENCOUNTER: cboPtProvider.ForDataUse(SubSetOfUsersWithClass(StartFrom, Direction, FloatToStr(FPCDate)));
|
|
else cboPtProvider.ForDataUse(SubSetOfPersons(StartFrom, Direction));
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmEncounter.pgeVisitChange(Sender: TObject);
|
|
begin
|
|
inherited;
|
|
cmdDateRange.Visible := pgeVisit.ActivePage = tabClinic;
|
|
if (pgeVisit.ActivePage = tabClinic) and (lstClinic.Items.Count = 0)
|
|
then ListApptAll(lstClinic.Items, Patient.DFN, FFromDate, FThruDate);
|
|
if (pgeVisit.ActivePage = tabAdmit) and (lstAdmit.Items.Count = 0)
|
|
then ListAdmitAll(lstAdmit.Items, Patient.DFN);
|
|
if pgeVisit.ActivePage = tabNewVisit then
|
|
begin
|
|
if cboNewVisit.Items.Count = 0 then
|
|
begin
|
|
if FVisitCategory <> 'H' then
|
|
begin
|
|
if uTIULocation <> 0 then
|
|
begin
|
|
cboNewVisit.InitLongList(uTIULocationName);
|
|
cboNewVisit.SelectByIEN(uTIULocation);
|
|
end
|
|
else
|
|
begin
|
|
cboNewVisit.InitLongList(FLocationName);
|
|
if Encounter.Location <> 0 then cboNewVisit.SelectByIEN(FLocation);
|
|
end;
|
|
FFromSelf := True;
|
|
with calVisitDate do if FDateTime <> 0 then FMDateTime := FDateTime else Text := 'NOW';
|
|
FFromSelf := False;
|
|
end
|
|
else cboNewVisit.InitLongList('');
|
|
ckbHistorical.Checked := FVisitCategory = 'E';
|
|
end; {if cboNewVisit}
|
|
end; {if pgeVisit.ActivePage}
|
|
end;
|
|
|
|
procedure TfrmEncounter.cboNewVisitNeedData(Sender: TObject; const StartFrom: string;
|
|
Direction, InsertAt: Integer);
|
|
begin
|
|
inherited;
|
|
cboNewVisit.ForDataUse(SubSetOfNewLocs(StartFrom, Direction));
|
|
end;
|
|
|
|
procedure TfrmEncounter.cmdDateRangeClick(Sender: TObject);
|
|
begin
|
|
dlgDateRange.FMDateStart := FFromDate;
|
|
dlgDateRange.FMDateStop := FThruDate;
|
|
if dlgDateRange.Execute then
|
|
begin
|
|
FFromDate := dlgDateRange.FMDateStart;
|
|
FThruDate := dlgDateRange.FMDateStop + 0.2359;
|
|
lblDateRange.Caption := '(' + dlgDateRange.RelativeStart + ' thru '
|
|
+ dlgDateRange.RelativeStop + ')';
|
|
//label
|
|
lblClinic.Caption := CLINIC_TXT + lblDateRange.Caption;
|
|
//list
|
|
lstClinic.Caption := lblClinic.Caption + ' ' + lblDateRange.Caption;
|
|
lstClinic.Items.Clear;
|
|
ListApptAll(lstClinic.Items, Patient.DFN, FFromDate, FThruDate);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmEncounter.cboNewVisitChange(Sender: TObject);
|
|
begin
|
|
inherited;
|
|
with cboNewVisit do
|
|
begin
|
|
FLocation := ItemIEN;
|
|
FLocationName := DisplayText[ItemIndex];
|
|
FDateTime := calVisitDate.FMDateTime;
|
|
SetVisitCat;
|
|
with txtLocation do
|
|
begin
|
|
Text := FLocationName + ' ';
|
|
if FDateTime <> 0 then Text := Text + FormatFMDateTime('mmm dd,yy hh:nn', FDateTime);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmEncounter.calVisitDateChange(Sender: TObject);
|
|
begin
|
|
inherited;
|
|
// The FFromSelf was added because without it, a new visit (minus the seconds gets created.
|
|
// Setting the text of calVisit caused the text to be re-evaluated & changed the FMDateTime property.
|
|
if FFromSelf then Exit;
|
|
with cboNewVisit do
|
|
begin
|
|
FLocation := ItemIEN;
|
|
FLocationName := DisplayText[ItemIndex];
|
|
FDateTime := calVisitDate.FMDateTime;
|
|
SetVisitCat;
|
|
txtLocation.Text := FLocationName + ' ' + calVisitDate.Text;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmEncounter.calVisitDateExit(Sender: TObject);
|
|
begin
|
|
inherited;
|
|
with cboNewVisit do if ItemIEN > 0 then
|
|
begin
|
|
FLocation := ItemIEN;
|
|
FLocationName := DisplayText[ItemIndex];
|
|
FDateTime := calVisitDate.FMDateTime;
|
|
SetVisitCat;
|
|
with txtLocation do
|
|
begin
|
|
Text := FLocationName + ' ';
|
|
if FDateTime <> 0 then Text := Text + FormatFMDateTime('mmm dd,yy hh:nn', FDateTime);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmEncounter.cmdOKClick(Sender: TObject);
|
|
var
|
|
msg: string;
|
|
ADate, AMaxDate: TDateTime;
|
|
|
|
begin
|
|
inherited;
|
|
msg := '';
|
|
if FLocation = 0 then msg := TX_NO_LOC;
|
|
if FDateTime <= 0 then msg := msg + CRLF + TX_NO_DATE
|
|
else if(pos('.',FloatToStr(FDateTime)) = 0) then msg := msg + CRLF + TX_NO_TIME;
|
|
if(msg <> '') then
|
|
begin
|
|
InfoBox(msg, TC_MISSING, MB_OK);
|
|
Exit;
|
|
end
|
|
else
|
|
begin
|
|
ADate := FMDateTimeToDateTime(Trunc(FDateTime));
|
|
AMaxDate := FMDateTimeToDateTime(FMToday) + StrToIntDef(FEncFutureLimit, 0);
|
|
if ADate > AMaxDate then
|
|
if InfoBox(TX_FUTURE_WARNING, TC_FUTURE_WARNING, MB_YESNO or MB_ICONQUESTION) = MRNO then exit;
|
|
end;
|
|
if FFilter <> NPF_SUPPRESS then FProvider := cboPtProvider.ItemIEN;
|
|
OKPressed := True;
|
|
Close;
|
|
end;
|
|
|
|
procedure TfrmEncounter.cmdCancelClick(Sender: TObject);
|
|
begin
|
|
inherited;
|
|
Close;
|
|
end;
|
|
|
|
procedure TfrmEncounter.ckbHistoricalClick(Sender: TObject);
|
|
begin
|
|
SetVisitCat;
|
|
end;
|
|
|
|
{
|
|
procedure TfrmEncounter.cboPtProviderChange(Sender: TObject);
|
|
var
|
|
txt: string;
|
|
AIEN: Int64;
|
|
|
|
begin
|
|
if(FFilter <> NPF_ENCOUNTER) then exit;
|
|
AIEN := cboPtProvider.ItemIEN;
|
|
if(AIEN <> 0) then
|
|
begin
|
|
txt := InvalidPCEProviderTxt(AIEN, FPCDate);
|
|
if(txt <> '') then
|
|
begin
|
|
InfoBox(cboPtProvider.text + txt, TX_BAD_PROV, MB_OK);
|
|
cboPtProvider.ItemIndex := -1;
|
|
end;
|
|
end;
|
|
end;
|
|
}
|
|
|
|
procedure TfrmEncounter.AppShowHint(var HintStr: string;
|
|
var CanShow: Boolean; var HintInfo: THintInfo);
|
|
const
|
|
HistHintDelay = 30000; // 30 seconds
|
|
|
|
begin
|
|
if (not Assigned(HintInfo.HintControl)) then exit;
|
|
if(HintInfo.HintControl = ckbHistorical) then
|
|
HintInfo.HideTimeout := HistHintDelay;
|
|
if(assigned(FOldHintEvent)) then
|
|
FOldHintEvent(HintStr, CanShow, HintInfo);
|
|
end;
|
|
|
|
procedure TfrmEncounter.FormDestroy(Sender: TObject);
|
|
begin
|
|
//Application.OnShowHint := FOldHintEvent; v22.11f - RV
|
|
end;
|
|
|
|
procedure TfrmEncounter.SetVisitCat;
|
|
begin
|
|
if ckbHistorical.Checked then
|
|
FVisitCategory := 'E'
|
|
else
|
|
FVisitCategory := GetVisitCat('A', FLocation, Patient.Inpatient);
|
|
FStandAlone := (FVisitCategory = 'A');
|
|
end;
|
|
|
|
procedure TfrmEncounter.FormClose(Sender: TObject;
|
|
var Action: TCloseAction);
|
|
begin
|
|
Application.OnShowHint := FOldHintEvent;
|
|
end;
|
|
|
|
procedure TfrmEncounter.lstAdmitChange(Sender: TObject);
|
|
begin
|
|
inherited;
|
|
with lstAdmit do
|
|
begin
|
|
FLocation := StrToIntDef(Piece(Items[ItemIndex], U, 2), 0);
|
|
FLocationName := Piece(Items[ItemIndex], U, 3);
|
|
FDateTime := MakeFMDateTime(ItemID);
|
|
FVisitCategory := 'H';
|
|
FStandAlone := False;
|
|
txtLocation.Text := FLocationName; // don't show admit date (could confuse user)
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmEncounter.lstClinicChange(Sender: TObject);
|
|
// V|A;DateTime;LocIEN^DateTime^LocName^Status
|
|
begin
|
|
inherited;
|
|
with lstClinic do
|
|
begin
|
|
FLocation := StrToIntDef(Piece(ItemID, ';', 3), 0);
|
|
FLocationName := Piece(Items[ItemIndex], U, 3);
|
|
FDateTime := MakeFMDateTime(Piece(ItemID,';', 2));
|
|
FVisitCategory := 'A';
|
|
FStandAlone := CharAt(ItemID, 1) = 'V';
|
|
with txtLocation do
|
|
begin
|
|
Text := FLocationName + ' ';
|
|
if FDateTime <> 0 then Text := Text + FormatFMDateTime('mmm dd,yy hh:nn', FDateTime);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
end.
|