| [453] | 1 | //kt -- Modified with SourceScanner on 8/8/2007 | 
|---|
|  | 2 | unit rConsults; | 
|---|
|  | 3 |  | 
|---|
|  | 4 | interface | 
|---|
|  | 5 |  | 
|---|
|  | 6 | uses SysUtils, Classes, ORNet, ORFn, rCore, uCore, TRPCB, dialogs, uConsults, rTIU, uTIU; | 
|---|
|  | 7 |  | 
|---|
|  | 8 | type | 
|---|
|  | 9 |  | 
|---|
|  | 10 | TUnresolvedConsults = record | 
|---|
|  | 11 | UnresolvedConsultsExist: boolean; | 
|---|
|  | 12 | ShowNagScreen: boolean; | 
|---|
|  | 13 | end; | 
|---|
|  | 14 |  | 
|---|
|  | 15 | {Consult Titles } | 
|---|
|  | 16 | function  DfltConsultTitle: integer; | 
|---|
|  | 17 | function  DfltConsultTitleName: string; | 
|---|
|  | 18 | function  DfltClinProcTitle: integer; | 
|---|
|  | 19 | function  DfltClinProcTitleName: string; | 
|---|
|  | 20 | function  IdentifyConsultsClass: integer; | 
|---|
|  | 21 | function  IdentifyClinProcClass: integer; | 
|---|
|  | 22 | procedure ListConsultTitlesShort(Dest: TStrings); | 
|---|
|  | 23 | procedure ListClinProcTitlesShort(Dest: TStrings); | 
|---|
|  | 24 | function SubSetOfConsultTitles(const StartFrom: string; Direction: Integer; IDNoteTitlesOnly: boolean): TStrings; | 
|---|
|  | 25 | function SubSetOfClinProcTitles(const StartFrom: string; Direction: Integer; IDNoteTitlesOnly: boolean): TStrings; | 
|---|
|  | 26 | procedure ResetConsultTitles; | 
|---|
|  | 27 | procedure ResetClinProcTitles; | 
|---|
|  | 28 |  | 
|---|
|  | 29 | { Data Retrieval } | 
|---|
|  | 30 | procedure GetConsultsList(Dest: TStrings; Early, Late: double; | 
|---|
|  | 31 | Service, Status: string; SortAscending: Boolean); | 
|---|
|  | 32 | procedure LoadConsultDetail(Dest: TStrings; IEN: integer) ; | 
|---|
|  | 33 | function  GetCurrentContext: TSelectContext; | 
|---|
|  | 34 | procedure SaveCurrentContext(AContext: TSelectContext) ; | 
|---|
|  | 35 | procedure DisplayResults(Dest: TStrings; IEN: integer) ; | 
|---|
|  | 36 | procedure GetConsultRec(IEN: integer) ; | 
|---|
|  | 37 | function  ShowSF513(ConsultIEN: integer): TStrings ; | 
|---|
|  | 38 | procedure PrintSF513ToDevice(AConsult: Integer; const ADevice: string; ChartCopy: string; | 
|---|
|  | 39 | var ErrMsg: string); | 
|---|
|  | 40 | function GetFormattedSF513(AConsult: Integer; ChartCopy: string): TStrings; | 
|---|
|  | 41 | function UnresolvedConsultsExist: boolean; | 
|---|
|  | 42 | procedure GetUnresolvedConsultsInfo; | 
|---|
|  | 43 |  | 
|---|
|  | 44 | {list box fillers} | 
|---|
|  | 45 | function  SubSetOfStatus: TStrings; | 
|---|
|  | 46 | function  SubSetOfUrgencies(ConsultIEN: integer): TStrings; | 
|---|
|  | 47 | function  LoadServiceList(Purpose: integer): TStrings ; | 
|---|
|  | 48 | function  LoadServiceListWithSynonyms(Purpose: integer): TStrings ; overload; | 
|---|
|  | 49 | function  LoadServiceListWithSynonyms(Purpose, ConsultIEN: integer): TStrings ; overload; | 
|---|
|  | 50 | function  SubSetOfServices(const StartFrom: string; Direction: Integer): TStrings; | 
|---|
|  | 51 | function  FindConsult(ConsultIEN: integer): string ; | 
|---|
|  | 52 |  | 
|---|
|  | 53 | {user access level functions} | 
|---|
|  | 54 | function  ConsultServiceUser(ServiceIEN: integer; DUZ: int64): boolean ; | 
|---|
|  | 55 | function GetActionMenuLevel(ConsultIEN: integer): TMenuAccessRec ; | 
|---|
|  | 56 |  | 
|---|
|  | 57 | {consult result functions} | 
|---|
|  | 58 | function  GetAssignableMedResults(ConsultIEN: integer): TStrings; | 
|---|
|  | 59 | function  GetRemovableMedResults(ConsultIEN: integer): TStrings; | 
|---|
|  | 60 | function  GetDetailedMedicineResults(ResultID: string): TStrings; | 
|---|
|  | 61 | procedure AttachMedicineResult(ConsultIEN: integer; ResultID: string; DateTime: TFMDateTime; ResponsiblePerson: int64; AlertTo: string); | 
|---|
|  | 62 | procedure RemoveMedicineResult(ConsultIEN: integer; ResultID: string; DateTime: TFMDateTime; ResponsiblePerson: int64); | 
|---|
|  | 63 |  | 
|---|
|  | 64 | {Consult Request Actions} | 
|---|
|  | 65 | procedure ReceiveConsult(Dest: TStrings; IEN: integer; ReceivedBy: int64; RcptDate: TFMDateTime; Comments: TStrings); | 
|---|
|  | 66 | procedure ScheduleConsult(Dest: TStrings; IEN: integer; ScheduledBy: Int64; SchdDate: TFMDateTime; Alert: integer; | 
|---|
|  | 67 | AlertTo: string; Comments: TStrings); | 
|---|
|  | 68 | procedure DiscontinueConsult(Dest: TStrings; IEN: integer; DiscontinuedBy: int64; | 
|---|
|  | 69 | DiscontinueDate: TFMDateTime; Comments: TStrings); | 
|---|
|  | 70 | procedure DenyConsult(Dest: TStrings; IEN: integer; DeniedBy: int64; | 
|---|
|  | 71 | DenialDate: TFMDateTime; Comments: TStrings); | 
|---|
|  | 72 | procedure ForwardConsult(Dest: TStrings; IEN, ToService: integer; Forwarder, AttentionOf: int64; | 
|---|
|  | 73 | Urgency: integer; ActionDate: TFMDateTime; Comments: TStrings); | 
|---|
|  | 74 | procedure AddComment(Dest: TStrings; IEN: integer; Comments: TStrings; ActionDate: TFMDateTime; Alert: integer; | 
|---|
|  | 75 | AlertTo: string) ; | 
|---|
|  | 76 | procedure SigFindings(Dest: TStrings; IEN: integer; SigFindingsFlag: string; Comments: TStrings;  ActionDate: TFMDateTime;Alert: integer; | 
|---|
|  | 77 | AlertTo: string) ; | 
|---|
|  | 78 | procedure AdminComplete(Dest: TStrings; IEN: integer; SigFindingsFlag: string; Comments: TStrings; | 
|---|
|  | 79 | RespProv: Int64; ActionDate: TFMDateTime; Alert: integer; AlertTo: string) ; | 
|---|
|  | 80 |  | 
|---|
|  | 81 | { Consults Ordering Calls } | 
|---|
|  | 82 | function ODForConsults: TStrings; | 
|---|
|  | 83 | function ODForProcedures: TStrings; | 
|---|
|  | 84 | function ConsultMessage(AnIEN: Integer): string; | 
|---|
|  | 85 | function LoadConsultsQuickList: TStrings ; | 
|---|
|  | 86 | function GetProcedureServices(ProcIEN: integer): TStrings; | 
|---|
|  | 87 | function ConsultCanBeResubmitted(ConsultIEN: integer): string; | 
|---|
|  | 88 | function LoadConsultForEdit(ConsultIEN: integer): TEditResubmitRec; | 
|---|
|  | 89 | function ResubmitConsult(EditResubmitRec: TEditResubmitRec): string; | 
|---|
|  | 90 | function SubSetOfProcedures(const StartFrom: string; Direction: Integer): TStrings; | 
|---|
|  | 91 | function GetDefaultReasonForRequest(Service: string; Resolve: Boolean): TStrings; | 
|---|
|  | 92 | function ReasonForRequestEditable(Service: string): string; | 
|---|
|  | 93 | function GetNewDialog(OrderType: string): string; | 
|---|
|  | 94 | function GetServiceIEN(ORIEN: string): string; | 
|---|
|  | 95 | function GetProcedureIEN(ORIEN: string): string; | 
|---|
|  | 96 | function GetConsultOrderIEN(ConsultIEN: integer): string; | 
|---|
|  | 97 | function GetServicePrerequisites(Service: string): TStrings; | 
|---|
|  | 98 | procedure GetProvDxMode(var ProvDx: TProvisionalDiagnosis; SvcIEN: string); | 
|---|
|  | 99 |  | 
|---|
|  | 100 | { Clinical Procedures Specific} | 
|---|
|  | 101 | function GetSavedCPFields(NoteIEN: integer): TEditNoteRec; | 
|---|
|  | 102 |  | 
|---|
|  | 103 | var | 
|---|
|  | 104 | uConsultsClass: integer; | 
|---|
|  | 105 | uConsultTitles: TConsultTitles; | 
|---|
|  | 106 | uClinProcClass: integer; | 
|---|
|  | 107 | uClinProcTitles: TClinProcTitles; | 
|---|
|  | 108 | uUnresolvedConsults: TUnresolvedConsults; | 
|---|
|  | 109 |  | 
|---|
|  | 110 | implementation | 
|---|
|  | 111 |  | 
|---|
|  | 112 | uses  rODBase; | 
|---|
|  | 113 |  | 
|---|
|  | 114 | var | 
|---|
|  | 115 | uLastOrderedIEN: Integer; | 
|---|
|  | 116 | uLastOrderMsg: string; | 
|---|
|  | 117 |  | 
|---|
|  | 118 | { -------------------------- Consult Titles --------------------------------- } | 
|---|
|  | 119 |  | 
|---|
|  | 120 | function IdentifyConsultsClass: integer; | 
|---|
|  | 121 | begin | 
|---|
|  | 122 | if uConsultsClass = 0 then | 
|---|
|  | 123 | uConsultsClass := StrToIntDef(sCallV('TIU IDENTIFY CONSULTS CLASS',[nil]), 0)  ; | 
|---|
|  | 124 | Result := uConsultsClass; | 
|---|
|  | 125 | end; | 
|---|
|  | 126 |  | 
|---|
|  | 127 | procedure LoadConsultTitles; | 
|---|
|  | 128 | { private - called one time to set up the uConsultTitles object } | 
|---|
|  | 129 | var | 
|---|
|  | 130 | x: string; | 
|---|
|  | 131 | begin | 
|---|
|  | 132 | if uConsultTitles <> nil then Exit; | 
|---|
|  | 133 | CallV('TIU PERSONAL TITLE LIST', [User.DUZ, IdentifyConsultsClass]); | 
|---|
|  | 134 | RPCBrokerV.Results.Insert(0, '~SHORT LIST');  // insert so can call ExtractItems | 
|---|
|  | 135 | uConsultTitles := TConsultTitles.Create; | 
|---|
|  | 136 | ExtractItems(uConsultTitles.ShortList, RPCBrokerV.Results, 'SHORT LIST'); | 
|---|
|  | 137 | x := ExtractDefault(RPCBrokerV.Results, 'SHORT LIST'); | 
|---|
|  | 138 | uConsultTitles.DfltTitle := StrToIntDef(Piece(x, U, 1), 0); | 
|---|
|  | 139 | uConsultTitles.DfltTitleName := Piece(x, U, 2); | 
|---|
|  | 140 | end; | 
|---|
|  | 141 |  | 
|---|
|  | 142 | procedure ResetConsultTitles; | 
|---|
|  | 143 | begin | 
|---|
|  | 144 | if uConsultTitles <> nil then | 
|---|
|  | 145 | begin | 
|---|
|  | 146 | uConsultTitles.Free; | 
|---|
|  | 147 | uConsultTitles := nil; | 
|---|
|  | 148 | LoadConsultTitles; | 
|---|
|  | 149 | end; | 
|---|
|  | 150 | end; | 
|---|
|  | 151 |  | 
|---|
|  | 152 | function DfltConsultTitle: integer; | 
|---|
|  | 153 | { returns the user defined default Consult title (if any) } | 
|---|
|  | 154 | begin | 
|---|
|  | 155 | if uConsultTitles = nil then LoadConsultTitles; | 
|---|
|  | 156 | Result := uConsultTitles.DfltTitle; | 
|---|
|  | 157 | end; | 
|---|
|  | 158 |  | 
|---|
|  | 159 | function DfltConsultTitleName: string; | 
|---|
|  | 160 | { returns the name of the user defined default progress note title (if any) } | 
|---|
|  | 161 | begin | 
|---|
|  | 162 | if uConsultTitles = nil then LoadConsultTitles; | 
|---|
|  | 163 | Result := uConsultTitles.DfltTitleName; | 
|---|
|  | 164 | end; | 
|---|
|  | 165 |  | 
|---|
|  | 166 | procedure ListConsultTitlesShort(Dest: TStrings); | 
|---|
|  | 167 | { returns the user defined list (short list) of Consult titles } | 
|---|
|  | 168 | begin | 
|---|
|  | 169 | if uConsultTitles = nil then LoadConsultTitles; | 
|---|
|  | 170 | Dest.AddStrings(uConsultTitles.ShortList); | 
|---|
|  | 171 | if uConsultTitles.ShortList.Count > 0 then | 
|---|
|  | 172 | begin | 
|---|
|  | 173 | Dest.Add('0^________________________________________________________________________'); | 
|---|
|  | 174 | Dest.Add('0^ '); | 
|---|
|  | 175 | end; | 
|---|
|  | 176 | end; | 
|---|
|  | 177 |  | 
|---|
|  | 178 | function SubSetOfConsultTitles(const StartFrom: string; Direction: Integer; IDNoteTitlesOnly: boolean): TStrings; | 
|---|
|  | 179 | { returns a pointer to a list of consults progress note titles (for use in a long list box) - | 
|---|
|  | 180 | The return value is a pointer to RPCBrokerV.Results, so the data must be used BEFORE | 
|---|
|  | 181 | the next broker call! } | 
|---|
|  | 182 | begin | 
|---|
|  | 183 | (*  if IDNoteTitlesOnly then        //  This RPC not changed for initial ID Notes release | 
|---|
|  | 184 | CallV('TIU LONG LIST CONSULT TITLES', [StartFrom, Direction, IDNoteTitlesOnly]) | 
|---|
|  | 185 | else*) | 
|---|
|  | 186 | CallV('TIU LONG LIST CONSULT TITLES', [StartFrom, Direction]); | 
|---|
|  | 187 | //MixedCaseList(RPCBrokerV.Results); | 
|---|
|  | 188 | Result := RPCBrokerV.Results; | 
|---|
|  | 189 | end; | 
|---|
|  | 190 |  | 
|---|
|  | 191 |  | 
|---|
|  | 192 | { -------------------------- Clinical Procedures Titles --------------------------------- } | 
|---|
|  | 193 | function IdentifyClinProcClass: integer; | 
|---|
|  | 194 | begin | 
|---|
|  | 195 | if uClinProcClass = 0 then | 
|---|
|  | 196 | uClinProcClass := StrToIntDef(sCallV('TIU IDENTIFY CLINPROC CLASS',[nil]), 0)  ; | 
|---|
|  | 197 | Result := uClinProcClass; | 
|---|
|  | 198 | end; | 
|---|
|  | 199 |  | 
|---|
|  | 200 | procedure LoadClinProcTitles; | 
|---|
|  | 201 | { private - called one time to set up the uConsultTitles object } | 
|---|
|  | 202 | var | 
|---|
|  | 203 | x: string; | 
|---|
|  | 204 | begin | 
|---|
|  | 205 | if uClinProcTitles <> nil then Exit; | 
|---|
|  | 206 | CallV('TIU PERSONAL TITLE LIST', [User.DUZ, IdentifyClinProcClass]); | 
|---|
|  | 207 | RPCBrokerV.Results.Insert(0, '~SHORT LIST');  // insert so can call ExtractItems | 
|---|
|  | 208 | uClinProcTitles := TClinProcTitles.Create; | 
|---|
|  | 209 | ExtractItems(uClinProcTitles.ShortList, RPCBrokerV.Results, 'SHORT LIST'); | 
|---|
|  | 210 | x := ExtractDefault(RPCBrokerV.Results, 'SHORT LIST'); | 
|---|
|  | 211 | uClinProcTitles.DfltTitle := StrToIntDef(Piece(x, U, 1), 0); | 
|---|
|  | 212 | uClinProcTitles.DfltTitleName := Piece(x, U, 2); | 
|---|
|  | 213 | end; | 
|---|
|  | 214 |  | 
|---|
|  | 215 | procedure ResetClinProcTitles; | 
|---|
|  | 216 | begin | 
|---|
|  | 217 | if uClinProcTitles <> nil then | 
|---|
|  | 218 | begin | 
|---|
|  | 219 | uClinProcTitles.Free; | 
|---|
|  | 220 | uClinProcTitles := nil; | 
|---|
|  | 221 | LoadClinProcTitles; | 
|---|
|  | 222 | end; | 
|---|
|  | 223 | end; | 
|---|
|  | 224 |  | 
|---|
|  | 225 | function DfltClinProcTitle: integer; | 
|---|
|  | 226 | { returns the user defined default ClinProc title (if any) } | 
|---|
|  | 227 | begin | 
|---|
|  | 228 | if uClinProcTitles = nil then LoadClinProcTitles; | 
|---|
|  | 229 | Result := uClinProcTitles.DfltTitle; | 
|---|
|  | 230 | end; | 
|---|
|  | 231 |  | 
|---|
|  | 232 | function DfltClinProcTitleName: string; | 
|---|
|  | 233 | { returns the name of the user defined default progress note title (if any) } | 
|---|
|  | 234 | begin | 
|---|
|  | 235 | if uClinProcTitles = nil then LoadClinProcTitles; | 
|---|
|  | 236 | Result := uClinProcTitles.DfltTitleName; | 
|---|
|  | 237 | end; | 
|---|
|  | 238 |  | 
|---|
|  | 239 | procedure ListClinProcTitlesShort(Dest: TStrings); | 
|---|
|  | 240 | { returns the user defined list (short list) of ClinProc titles } | 
|---|
|  | 241 | begin | 
|---|
|  | 242 | if uClinProcTitles = nil then LoadClinProcTitles; | 
|---|
|  | 243 | Dest.AddStrings(uClinProcTitles.ShortList); | 
|---|
|  | 244 | if uClinProcTitles.ShortList.Count > 0 then | 
|---|
|  | 245 | begin | 
|---|
|  | 246 | Dest.Add('0^________________________________________________________________________'); | 
|---|
|  | 247 | Dest.Add('0^ '); | 
|---|
|  | 248 | end; | 
|---|
|  | 249 | end; | 
|---|
|  | 250 |  | 
|---|
|  | 251 | function SubSetOfClinProcTitles(const StartFrom: string; Direction: Integer; IDNoteTitlesOnly: boolean): TStrings; | 
|---|
|  | 252 | { returns a pointer to a list of clinical procedures titles (for use in a long list box) - | 
|---|
|  | 253 | The return value is a pointer to RPCBrokerV.Results, so the data must be used BEFORE | 
|---|
|  | 254 | the next broker call! } | 
|---|
|  | 255 | begin | 
|---|
|  | 256 | (*  if IDNoteTitlesOnly then        //  This RPC not changed for initial ID Notes release | 
|---|
|  | 257 | CallV('TIU LONG LIST CLINPROC TITLES', [StartFrom, Direction, IDNoteTitlesOnly]) | 
|---|
|  | 258 | else*) | 
|---|
|  | 259 | CallV('TIU LONG LIST CLINPROC TITLES', [StartFrom, Direction]); | 
|---|
|  | 260 | //MixedCaseList(RPCBrokerV.Results); | 
|---|
|  | 261 | Result := RPCBrokerV.Results; | 
|---|
|  | 262 | end; | 
|---|
|  | 263 |  | 
|---|
|  | 264 | {--------------- data retrieval ------------------------------------------} | 
|---|
|  | 265 |  | 
|---|
|  | 266 | procedure GetConsultsList(Dest: TStrings; Early, Late: double; | 
|---|
|  | 267 | Service, Status: string; SortAscending: Boolean); | 
|---|
|  | 268 | { returns a list of consults for a patient, based on selected dates, service, status, or ALL} | 
|---|
|  | 269 | var | 
|---|
|  | 270 | i: Integer; | 
|---|
|  | 271 | x, date1, date2: string; | 
|---|
|  | 272 | begin | 
|---|
|  | 273 | if Early <= 0 then date1 := '' else date1 := FloatToStr(Early) ; | 
|---|
|  | 274 | if Late  <= 0 then date2 := '' else date2 := FloatToStr(Late)  ; | 
|---|
|  | 275 | CallV('ORQQCN LIST', [Patient.DFN, date1, date2, Service, Status]); | 
|---|
|  | 276 | with RPCBrokerV do | 
|---|
|  | 277 | begin | 
|---|
|  | 278 | if Copy(Results[0],1,1) <> '<' then | 
|---|
|  | 279 | begin | 
|---|
|  | 280 | SortByPiece(TStringList(Results), U, 2); | 
|---|
|  | 281 | if not SortAscending then InvertStringList(TStringList(Results)); | 
|---|
|  | 282 | //SetListFMDateTime('mmm dd,yy', TStringList(Results), U, 2); | 
|---|
|  | 283 | for i := 0 to Results.Count - 1 do | 
|---|
|  | 284 | begin | 
|---|
|  | 285 | x := MakeConsultListItem(Results[i]); | 
|---|
|  | 286 | Results[i] := x; | 
|---|
|  | 287 | end; | 
|---|
|  | 288 | Dest.Assign(Results); | 
|---|
|  | 289 | end | 
|---|
|  | 290 | else | 
|---|
|  | 291 | begin | 
|---|
|  | 292 | Dest.Clear ; | 
|---|
|  | 293 | Dest.Add('-1^No Matches') ; | 
|---|
|  | 294 | end ; | 
|---|
|  | 295 | end; | 
|---|
|  | 296 | end; | 
|---|
|  | 297 |  | 
|---|
|  | 298 | procedure LoadConsultDetail(Dest: TStrings; IEN: integer) ; | 
|---|
|  | 299 | { returns the detail of a consult } | 
|---|
|  | 300 | begin | 
|---|
|  | 301 | CallV('ORQQCN DETAIL', [IEN]); | 
|---|
|  | 302 | Dest.Assign(RPCBrokerV.Results); | 
|---|
|  | 303 | end; | 
|---|
|  | 304 |  | 
|---|
|  | 305 | procedure DisplayResults(Dest: TStrings; IEN: integer) ; | 
|---|
|  | 306 | { returns the results for a consult } | 
|---|
|  | 307 | begin | 
|---|
|  | 308 | CallV('ORQQCN MED RESULTS', [IEN]); | 
|---|
|  | 309 | Dest.Assign(RPCBrokerV.Results); | 
|---|
|  | 310 | end; | 
|---|
|  | 311 |  | 
|---|
|  | 312 | procedure GetConsultRec(IEN: integer); | 
|---|
|  | 313 | {returns zero node from file 123, plus a list of all related TIU documents, if any} | 
|---|
|  | 314 | const | 
|---|
|  | 315 | SHOW_ADDENDA = True; | 
|---|
|  | 316 |  | 
|---|
|  | 317 | var | 
|---|
|  | 318 | alist: TStrings; | 
|---|
|  | 319 | x: string ; | 
|---|
|  | 320 | i: integer; | 
|---|
|  | 321 | {           1    2    3     4     5     6    7    8   9    10   11  12   13     14    15 | 
|---|
|  | 322 | { Pieces: EntDt^Pat^OrIFN^PtLoc^ToSvc^From^ReqDt^Typ^Urg^Place^Attn^Sts^LstAct^SndPrv^Rslt^ | 
|---|
|  | 323 | 16      17     18    19     20     21      22 | 
|---|
|  | 324 | ^EntMode^ReqTyp^InOut^SigFnd^TIUPtr^OrdFac^FrgnCslt} | 
|---|
|  | 325 | begin | 
|---|
|  | 326 | FillChar(ConsultRec, SizeOf(ConsultRec), 0); | 
|---|
|  | 327 | CallV('ORQQCN GET CONSULT', [IEN, SHOW_ADDENDA]); | 
|---|
|  | 328 | ConsultRec.IEN := IEN ; | 
|---|
|  | 329 | alist := TStringList.Create ; | 
|---|
|  | 330 | try | 
|---|
|  | 331 | alist.Assign(RPCBrokerV.Results) ; | 
|---|
|  | 332 | x := alist[0] ; | 
|---|
|  | 333 | if Piece(x,u,1) <> '-1' then | 
|---|
|  | 334 | with ConsultRec do | 
|---|
|  | 335 | begin | 
|---|
|  | 336 | EntryDate             := MakeFMDateTime(Piece(x, U, 1)); | 
|---|
|  | 337 | ORFileNumber          := StrToIntDef(Piece(x, U, 3),0); | 
|---|
|  | 338 | PatientLocation       := StrToIntDef(Piece(x, U, 4),0); | 
|---|
|  | 339 | OrderingFacility      := StrToIntDef(Piece(x, U, 21),0); | 
|---|
|  | 340 | ForeignConsultFileNum := StrToIntDef(Piece(x, U, 22),0); | 
|---|
|  | 341 | ToService             := StrToIntDef(Piece(x, U, 5),0); | 
|---|
|  | 342 | From                  := StrToIntDef(Piece(x, U, 6),0); | 
|---|
|  | 343 | RequestDate           := MakeFMDateTime(Piece(x, U, 7)); | 
|---|
|  | 344 | ConsultProcedure      := Piece(x, U, 8)  ; | 
|---|
|  | 345 | Urgency               := StrToIntDef(Piece(x, U, 9),0); | 
|---|
|  | 346 | PlaceOfConsult        := StrToIntDef(Piece(x, U, 10),0); | 
|---|
|  | 347 | Attention             := StrToInt64Def(Piece(x, U, 11),0); | 
|---|
|  | 348 | ORStatus              := StrToIntDef(Piece(x, U, 12),0); | 
|---|
|  | 349 | LastAction            := StrToIntDef(Piece(x, U, 13),0); | 
|---|
|  | 350 | SendingProvider       := StrToInt64Def(Piece(Piece(x, U, 14),';',1),0); | 
|---|
|  | 351 | SendingProviderName   := Piece(Piece(x, U, 14),';',2)   ; | 
|---|
|  | 352 | Result                := Piece(x, U, 15)  ; | 
|---|
|  | 353 | ModeOfEntry           := Piece(x, U, 16)  ; | 
|---|
|  | 354 | RequestType           := StrToIntDef(Piece(x, U, 17),0); | 
|---|
|  | 355 | InOut                 := Piece(x, U, 18)  ; | 
|---|
|  | 356 | Findings              := Piece(x, U, 19)  ; | 
|---|
|  | 357 | TIUResultNarrative    := StrToIntDef(Piece(x, U, 20),0); | 
|---|
|  | 358 | //ProvDiagnosis         := Piece(x, U, 23);  NO!!!!! Up to 180 Characters!!!! | 
|---|
|  | 359 | alist.delete(0) ; | 
|---|
|  | 360 | TIUDocuments := TStringList.Create ; | 
|---|
|  | 361 | MedResults := TStringList.Create; | 
|---|
|  | 362 | if alist.count > 0 then | 
|---|
|  | 363 | begin | 
|---|
|  | 364 | SortByPiece(TStringList(alist), U, 3); | 
|---|
|  | 365 | for i := 0 to alist.Count - 1 do | 
|---|
|  | 366 | if Copy(Piece(Piece(alist[i], U, 1), ';', 2), 1, 4) = 'MCAR' then | 
|---|
|  | 367 | MedResults.Add(alist[i]) | 
|---|
|  | 368 | else | 
|---|
|  | 369 | TIUDocuments.Add(alist[i]); | 
|---|
|  | 370 | end; | 
|---|
|  | 371 | end  {ConsultRec} | 
|---|
|  | 372 | else | 
|---|
|  | 373 | ConsultRec.EntryDate := -1 ; | 
|---|
|  | 374 | finally | 
|---|
|  | 375 | alist.free ; | 
|---|
|  | 376 | end ; | 
|---|
|  | 377 | end ; | 
|---|
|  | 378 |  | 
|---|
|  | 379 | {---------------- list box fillers -----------------------------------} | 
|---|
|  | 380 |  | 
|---|
|  | 381 | function SubSetOfStatus: TStrings; | 
|---|
|  | 382 | { returns a pointer to a list of stati (for use in a list box) } | 
|---|
|  | 383 | begin | 
|---|
|  | 384 | CallV('ORQQCN STATUS', [nil]); | 
|---|
|  | 385 | MixedCaseList(RPCBrokerV.Results); | 
|---|
|  | 386 | Result := RPCBrokerV.Results; | 
|---|
|  | 387 | end; | 
|---|
|  | 388 |  | 
|---|
|  | 389 | function SubSetOfUrgencies(ConsultIEN: integer): TStrings; | 
|---|
|  | 390 | { returns a pointer to a list of urgencies  } | 
|---|
|  | 391 | begin | 
|---|
|  | 392 | CallV('ORQQCN URGENCIES',[ConsultIEN]) ; | 
|---|
|  | 393 | MixedCaseList(RPCBrokerV.Results); | 
|---|
|  | 394 | Result := RPCBrokerV.Results; | 
|---|
|  | 395 | end; | 
|---|
|  | 396 |  | 
|---|
|  | 397 | function FindConsult(ConsultIEN: integer): string ; | 
|---|
|  | 398 | var | 
|---|
|  | 399 | x: string; | 
|---|
|  | 400 | begin | 
|---|
|  | 401 | x := sCallV('ORQQCN FIND CONSULT',[ConsultIEN]); | 
|---|
|  | 402 | Result := MakeConsultListItem(x); | 
|---|
|  | 403 | end; | 
|---|
|  | 404 |  | 
|---|
|  | 405 | {-----------------consult result functions-----------------------------------} | 
|---|
|  | 406 | function GetAssignableMedResults(ConsultIEN: integer): TStrings; | 
|---|
|  | 407 | begin | 
|---|
|  | 408 | CallV('ORQQCN ASSIGNABLE MED RESULTS', [ConsultIEN]); | 
|---|
|  | 409 | Result := RPCBrokerV.Results; | 
|---|
|  | 410 | end; | 
|---|
|  | 411 |  | 
|---|
|  | 412 | function GetRemovableMedResults(ConsultIEN: integer): TStrings; | 
|---|
|  | 413 | begin | 
|---|
|  | 414 | CallV('ORQQCN REMOVABLE MED RESULTS', [ConsultIEN]); | 
|---|
|  | 415 | Result := RPCBrokerV.Results; | 
|---|
|  | 416 | end; | 
|---|
|  | 417 |  | 
|---|
|  | 418 | function GetDetailedMedicineResults(ResultID: string): TStrings; | 
|---|
|  | 419 | begin | 
|---|
|  | 420 | CallV('ORQQCN GET MED RESULT DETAILS', [ResultID]); | 
|---|
|  | 421 | Result := RPCBrokerV.Results; | 
|---|
|  | 422 | end; | 
|---|
|  | 423 |  | 
|---|
|  | 424 | procedure AttachMedicineResult(ConsultIEN: integer; ResultID: string; DateTime: TFMDateTime; ResponsiblePerson: int64; AlertTo: string); | 
|---|
|  | 425 | begin | 
|---|
|  | 426 | CallV('ORQQCN ATTACH MED RESULTS', [ConsultIEN, ResultID, DateTime, ResponsiblePerson, AlertTo]); | 
|---|
|  | 427 | end; | 
|---|
|  | 428 |  | 
|---|
|  | 429 | procedure RemoveMedicineResult(ConsultIEN: integer; ResultID: string; DateTime: TFMDateTime; ResponsiblePerson: int64); | 
|---|
|  | 430 | begin | 
|---|
|  | 431 | CallV('ORQQCN REMOVE MED RESULTS', [ConsultIEN, ResultID, DateTime, ResponsiblePerson]); | 
|---|
|  | 432 | end; | 
|---|
|  | 433 | {-------------- user access level functions ---------------------------------} | 
|---|
|  | 434 |  | 
|---|
|  | 435 | function ConsultServiceUser(ServiceIEN: integer; DUZ: int64): boolean ; | 
|---|
|  | 436 | var | 
|---|
|  | 437 | i: integer ; | 
|---|
|  | 438 | begin | 
|---|
|  | 439 | Result := False ; | 
|---|
|  | 440 | CallV('ORWU GENERIC', ['',1,'^GMR(123.5,'+IntToStr(ServiceIEN)+',123.3,"B")']) ; | 
|---|
|  | 441 | for i:=0 to RPCBrokerV.Results.Count-1 do | 
|---|
|  | 442 | if StrToInt64(Piece(RPCBrokerV.Results[i],u,2))=DUZ then result := True  ; | 
|---|
|  | 443 | end ; | 
|---|
|  | 444 |  | 
|---|
|  | 445 | function GetActionMenuLevel(ConsultIEN: integer): TMenuAccessRec ; | 
|---|
|  | 446 | var | 
|---|
|  | 447 | x: string; | 
|---|
|  | 448 | begin | 
|---|
|  | 449 | x := sCallV('ORQQCN SET ACT MENUS', [ConsultIEN]) ; | 
|---|
|  | 450 | Result.UserLevel := StrToIntDef(Piece(x, U, 1), 1); | 
|---|
|  | 451 | Result.AllowMedResulting := (Piece(x, U, 4) = '1'); | 
|---|
|  | 452 | Result.AllowMedDissociate := (Piece(x, U, 5) = '1'); | 
|---|
|  | 453 | Result.AllowResubmit := (Piece(x, U, 6) = '1') and (Piece(ConsultCanBeResubmitted(ConsultIEN), U, 1) <> '0'); | 
|---|
|  | 454 | Result.ClinProcFlag := StrToIntDef(Piece(x, U, 7), CP_NOT_CLINPROC); | 
|---|
|  | 455 | Result.IsClinicalProcedure := (Result.ClinProcFlag > CP_NOT_CLINPROC); | 
|---|
|  | 456 | end ; | 
|---|
|  | 457 |  | 
|---|
|  | 458 | {------------------- Consult request actions -------------------------------} | 
|---|
|  | 459 |  | 
|---|
|  | 460 | procedure ReceiveConsult(Dest: TStrings; IEN: integer; ReceivedBy: int64; RcptDate: TFMDateTime; Comments: TStrings); | 
|---|
|  | 461 | begin | 
|---|
|  | 462 | CallV('ORQQCN RECEIVE', [IEN, ReceivedBy, RcptDate, Comments]); | 
|---|
|  | 463 | Dest.Assign(RPCBrokerV.Results);   {1^Error message' or '0'} | 
|---|
|  | 464 | end; | 
|---|
|  | 465 |  | 
|---|
|  | 466 | procedure ScheduleConsult(Dest: TStrings; IEN: integer; ScheduledBy: Int64; SchdDate: TFMDateTime; Alert: integer; | 
|---|
|  | 467 | AlertTo: string; Comments: TStrings); | 
|---|
|  | 468 | begin | 
|---|
|  | 469 | CallV('ORQQCN2 SCHEDULE CONSULT', [IEN, ScheduledBy, SchdDate, Alert, AlertTo, Comments]); | 
|---|
|  | 470 | Dest.Assign(RPCBrokerV.Results);   {1^Error message' or '0'} | 
|---|
|  | 471 | end; | 
|---|
|  | 472 |  | 
|---|
|  | 473 | procedure DenyConsult(Dest: TStrings; IEN: integer; DeniedBy: int64; | 
|---|
|  | 474 | DenialDate: TFMDateTime; Comments: TStrings); | 
|---|
|  | 475 | begin | 
|---|
|  | 476 | CallV('ORQQCN DISCONTINUE', [IEN, DeniedBy, DenialDate,'DY',Comments]); | 
|---|
|  | 477 | Dest.Assign(RPCBrokerV.Results);   {1^Error message' or '0'} | 
|---|
|  | 478 | end; | 
|---|
|  | 479 |  | 
|---|
|  | 480 | procedure DiscontinueConsult(Dest: TStrings; IEN: integer; DiscontinuedBy: int64; | 
|---|
|  | 481 | DiscontinueDate: TFMDateTime; Comments: TStrings); | 
|---|
|  | 482 | begin | 
|---|
|  | 483 | CallV('ORQQCN DISCONTINUE', [IEN, DiscontinuedBy, DiscontinueDate,'DC',Comments]); | 
|---|
|  | 484 | Dest.Assign(RPCBrokerV.Results);   {1^Error message' or '0'} | 
|---|
|  | 485 | end; | 
|---|
|  | 486 |  | 
|---|
|  | 487 | procedure ForwardConsult(Dest: TStrings; IEN, ToService: integer; Forwarder, AttentionOf: int64; Urgency: integer; | 
|---|
|  | 488 | ActionDate: TFMDateTime; Comments: TStrings); | 
|---|
|  | 489 | begin | 
|---|
|  | 490 | CallV('ORQQCN FORWARD', [IEN, ToService, Forwarder, AttentionOf, Urgency, ActionDate, Comments]); | 
|---|
|  | 491 | Dest.Assign(RPCBrokerV.Results);   {1^Error message' or '0'} | 
|---|
|  | 492 | end ; | 
|---|
|  | 493 |  | 
|---|
|  | 494 | procedure AddComment(Dest: TStrings; IEN: integer; Comments: TStrings; ActionDate: TFMDateTime; Alert: integer; | 
|---|
|  | 495 | AlertTo: string) ; | 
|---|
|  | 496 | begin | 
|---|
|  | 497 | CallV('ORQQCN ADDCMT', [IEN, Comments, Alert, AlertTo, ActionDate]); | 
|---|
|  | 498 | Dest.Assign(RPCBrokerV.Results);   {1^Error message' or '0'} | 
|---|
|  | 499 | end ; | 
|---|
|  | 500 |  | 
|---|
|  | 501 | procedure AdminComplete(Dest: TStrings; IEN: integer; SigFindingsFlag: string; Comments: TStrings; | 
|---|
|  | 502 | RespProv: Int64; ActionDate: TFMDateTime; Alert: integer; AlertTo: string) ; | 
|---|
|  | 503 | begin | 
|---|
|  | 504 | CallV('ORQQCN ADMIN COMPLETE', [IEN, SigFindingsFlag, Comments, RespProv, Alert, AlertTo, ActionDate]); | 
|---|
|  | 505 | Dest.Assign(RPCBrokerV.Results);   {1^Error message' or '0'} | 
|---|
|  | 506 | end ; | 
|---|
|  | 507 |  | 
|---|
|  | 508 | procedure SigFindings(Dest: TStrings; IEN: integer; SigFindingsFlag: string; Comments: TStrings; ActionDate: TFMDateTime; Alert: integer; | 
|---|
|  | 509 | AlertTo: string) ; | 
|---|
|  | 510 | begin | 
|---|
|  | 511 | CallV('ORQQCN SIGFIND', [IEN, SigFindingsFlag, Comments, Alert, AlertTo, ActionDate]); | 
|---|
|  | 512 | Dest.Assign(RPCBrokerV.Results);   {1^Error message' or '0'} | 
|---|
|  | 513 | end ; | 
|---|
|  | 514 |  | 
|---|
|  | 515 | //==================  Ordering functions   =================================== | 
|---|
|  | 516 | function ODForConsults: TStrings; | 
|---|
|  | 517 | { Returns init values for consults dialog.  The results must be used immediately. } | 
|---|
|  | 518 | begin | 
|---|
|  | 519 | CallV('ORWDCN32 DEF', ['C']); | 
|---|
|  | 520 | Result := RPCBrokerV.Results; | 
|---|
|  | 521 | end; | 
|---|
|  | 522 |  | 
|---|
|  | 523 | function ODForProcedures: TStrings; | 
|---|
|  | 524 | { Returns init values for procedures dialog.  The results must be used immediately. } | 
|---|
|  | 525 | begin | 
|---|
|  | 526 | CallV('ORWDCN32 DEF', ['P']); | 
|---|
|  | 527 | Result := RPCBrokerV.Results; | 
|---|
|  | 528 | end; | 
|---|
|  | 529 |  | 
|---|
|  | 530 | function SubSetOfProcedures(const StartFrom: string; Direction: Integer): TStrings; | 
|---|
|  | 531 | begin | 
|---|
|  | 532 | begin | 
|---|
|  | 533 | CallV('ORWDCN32 PROCEDURES', [StartFrom, Direction]); | 
|---|
|  | 534 | Result := RPCBrokerV.Results; | 
|---|
|  | 535 | end; | 
|---|
|  | 536 | end; | 
|---|
|  | 537 |  | 
|---|
|  | 538 | function LoadServiceList(Purpose: integer): TStrings ; | 
|---|
|  | 539 | // Purpose:  0=display all services, 1=forward or order from possible services | 
|---|
|  | 540 | begin | 
|---|
|  | 541 | Callv('ORQQCN SVCTREE',[Purpose]) ; | 
|---|
|  | 542 | MixedCaseList(RPCBrokerV.Results) ; | 
|---|
|  | 543 | Result := RPCBrokerV.Results; | 
|---|
|  | 544 | end ; | 
|---|
|  | 545 |  | 
|---|
|  | 546 | function LoadServiceListWithSynonyms(Purpose: integer): TStrings ; | 
|---|
|  | 547 | // Param 1 = Starting service (1=All Services) | 
|---|
|  | 548 | // Param 2 = Purpose:  0=display all services, 1=forward or order from possible services | 
|---|
|  | 549 | // Param 3 = Show synonyms | 
|---|
|  | 550 | begin | 
|---|
|  | 551 | Callv('ORQQCN SVC W/SYNONYMS',[1, Purpose, True]) ; | 
|---|
|  | 552 | MixedCaseList(RPCBrokerV.Results) ; | 
|---|
|  | 553 | Result := RPCBrokerV.Results; | 
|---|
|  | 554 | end ; | 
|---|
|  | 555 |  | 
|---|
|  | 556 | function LoadServiceListWithSynonyms(Purpose, ConsultIEN: integer): TStrings ; | 
|---|
|  | 557 | // Param 1 = Starting service (1=All Services) | 
|---|
|  | 558 | // Param 2 = Purpose:  0=display all services, 1=forward or order from possible services | 
|---|
|  | 559 | // Param 3 = Show synonyms | 
|---|
|  | 560 | // Param 4 = Consult IEN | 
|---|
|  | 561 | begin | 
|---|
|  | 562 | Callv('ORQQCN SVC W/SYNONYMS',[1, Purpose, True, ConsultIEN]) ; | 
|---|
|  | 563 | MixedCaseList(RPCBrokerV.Results) ; | 
|---|
|  | 564 | Result := RPCBrokerV.Results; | 
|---|
|  | 565 | end ; | 
|---|
|  | 566 |  | 
|---|
|  | 567 | function SubSetOfServices(const StartFrom: string; Direction: Integer): TStrings; | 
|---|
|  | 568 | //  used only on consults order dialog for service long combo box, which needs to include quick orders | 
|---|
|  | 569 | begin | 
|---|
|  | 570 | CallV('ORQQCN SVCLIST', [StartFrom, Direction]); | 
|---|
|  | 571 | Result := RPCBrokerV.Results; | 
|---|
|  | 572 | end; | 
|---|
|  | 573 |  | 
|---|
|  | 574 | function LoadConsultsQuickList: TStrings ; | 
|---|
|  | 575 | begin | 
|---|
|  | 576 | Callv('ORWDXQ GETQLST',['CSLT', 'Q']) ; | 
|---|
|  | 577 | Result := RPCBrokerV.Results; | 
|---|
|  | 578 | end ; | 
|---|
|  | 579 |  | 
|---|
|  | 580 | function ShowSF513(ConsultIEN: integer): TStrings ; | 
|---|
|  | 581 | var | 
|---|
|  | 582 | x: string; | 
|---|
|  | 583 | i: integer; | 
|---|
|  | 584 | begin | 
|---|
|  | 585 | CallV('ORQQCN SHOW SF513',[ConsultIEN]) ; | 
|---|
|  | 586 | if RPCBrokerV.Results.Count > 0 then | 
|---|
|  | 587 | begin | 
|---|
|  | 588 | x := RPCBrokerV.Results[0]; | 
|---|
|  | 589 | i := Pos('-', x); | 
|---|
|  | 590 | x := Copy(x, i, 999); | 
|---|
|  | 591 | RPCBrokerV.Results[0] := x; | 
|---|
|  | 592 | end; | 
|---|
|  | 593 | Result := RPCBrokerV.Results; | 
|---|
|  | 594 | end ; | 
|---|
|  | 595 |  | 
|---|
|  | 596 | procedure PrintSF513ToDevice(AConsult: Integer; const ADevice: string; ChartCopy: string; | 
|---|
|  | 597 | var ErrMsg: string); | 
|---|
|  | 598 | { prints a SF 513 on the selected device } | 
|---|
|  | 599 | begin | 
|---|
|  | 600 | ErrMsg := sCallV('ORQQCN PRINT SF513', [AConsult, ChartCopy, ADevice]); | 
|---|
|  | 601 | //  if Piece(ErrMsg, U, 1) = '0' then ErrMsg := '' else ErrMsg := Piece(ErrMsg, U, 2); | 
|---|
|  | 602 | end; | 
|---|
|  | 603 |  | 
|---|
|  | 604 | function GetFormattedSF513(AConsult: Integer; ChartCopy: string): TStrings; | 
|---|
|  | 605 | begin | 
|---|
|  | 606 | CallV('ORQQCN SF513 WINDOWS PRINT',[AConsult, ChartCopy]); | 
|---|
|  | 607 | Result := RPCBrokerV.Results; | 
|---|
|  | 608 | end; | 
|---|
|  | 609 |  | 
|---|
|  | 610 | function UnresolvedConsultsExist: boolean; | 
|---|
|  | 611 | begin | 
|---|
|  | 612 | Result := (sCallV('ORQQCN UNRESOLVED', [Patient.DFN]) = '1'); | 
|---|
|  | 613 | end; | 
|---|
|  | 614 |  | 
|---|
|  | 615 | procedure GetUnresolvedConsultsInfo; | 
|---|
|  | 616 | var | 
|---|
|  | 617 | x: string; | 
|---|
|  | 618 | begin | 
|---|
|  | 619 | x := sCallV('ORQQCN UNRESOLVED', [Patient.DFN]); | 
|---|
|  | 620 | with uUnresolvedConsults do | 
|---|
|  | 621 | begin | 
|---|
|  | 622 | UnresolvedConsultsExist := (Piece(x, U, 1) = '1'); | 
|---|
|  | 623 | ShowNagScreen := (Piece(x, U, 2) = '1'); | 
|---|
|  | 624 | end; | 
|---|
|  | 625 | end; | 
|---|
|  | 626 |  | 
|---|
|  | 627 | function ConsultMessage(AnIEN: Integer): string; | 
|---|
|  | 628 | begin | 
|---|
|  | 629 | if AnIEN = uLastOrderedIEN then Result := uLastOrderMsg else | 
|---|
|  | 630 | begin | 
|---|
|  | 631 | Result := sCallV('ORWDCN32 ORDRMSG', [AnIEN]); | 
|---|
|  | 632 | uLastOrderedIEN := AnIEN; | 
|---|
|  | 633 | uLastOrderMsg := Result; | 
|---|
|  | 634 | end; | 
|---|
|  | 635 | end; | 
|---|
|  | 636 |  | 
|---|
|  | 637 | function GetProcedureIEN(ORIEN: string): string; | 
|---|
|  | 638 | begin | 
|---|
|  | 639 | Result := sCallV('ORQQCN GET PROC IEN', [ORIEN]); | 
|---|
|  | 640 | end; | 
|---|
|  | 641 |  | 
|---|
|  | 642 | function GetProcedureServices(ProcIEN: integer): TStrings; | 
|---|
|  | 643 | begin | 
|---|
|  | 644 | CallV('ORQQCN GET PROC SVCS',[ProcIEN]) ; | 
|---|
|  | 645 | Result := RPCBrokerV.Results; | 
|---|
|  | 646 | end; | 
|---|
|  | 647 |  | 
|---|
|  | 648 | function ConsultCanBeResubmitted(ConsultIEN: integer): string; | 
|---|
|  | 649 | begin | 
|---|
|  | 650 | Result := sCallV('ORQQCN CANEDIT', [ConsultIEN]); | 
|---|
|  | 651 | end; | 
|---|
|  | 652 |  | 
|---|
|  | 653 | function LoadConsultForEdit(ConsultIEN: integer): TEditResubmitRec; | 
|---|
|  | 654 | var | 
|---|
|  | 655 | Dest: TStringList; | 
|---|
|  | 656 | EditRec: TEditResubmitRec; | 
|---|
|  | 657 | begin | 
|---|
|  | 658 | Dest := TStringList.Create; | 
|---|
|  | 659 | try | 
|---|
|  | 660 | tCallV(Dest, 'ORQQCN LOAD FOR EDIT',[ConsultIEN]) ; | 
|---|
|  | 661 | with EditRec do | 
|---|
|  | 662 | begin | 
|---|
|  | 663 | Changed         := False; | 
|---|
|  | 664 | IEN             := ConsultIEN; | 
|---|
|  | 665 | ToService       := StrToIntDef(Piece(ExtractDefault(Dest, 'SERVICE'), U, 2), 0); | 
|---|
|  | 666 | RequestType     := Piece(ExtractDefault(Dest, 'TYPE'), U, 3); | 
|---|
|  | 667 | OrderableItem   := StrToIntDef(Piece(ExtractDefault(Dest, 'PROCEDURE'), U, 1), 0); | 
|---|
|  | 668 | ConsultProc     := Piece(ExtractDefault(Dest, 'PROCEDURE'), U, 3); | 
|---|
|  | 669 | ConsultProcName := Piece(ExtractDefault(Dest, 'PROCEDURE'), U, 2); | 
|---|
|  | 670 | Urgency         := StrToIntDef(Piece(ExtractDefault(Dest, 'URGENCY'), U, 3), 0); | 
|---|
|  | 671 | UrgencyName     := Piece(ExtractDefault(Dest, 'URGENCY'), U, 2); | 
|---|
|  | 672 | Place           := Piece(ExtractDefault(Dest, 'PLACE'), U, 1); | 
|---|
|  | 673 | PlaceName       := Piece(ExtractDefault(Dest, 'PLACE'), U, 2); | 
|---|
|  | 674 | Attention       := StrToInt64Def(Piece(ExtractDefault(Dest, 'ATTENTION'), U, 1), 0); | 
|---|
|  | 675 | AttnName        := Piece(ExtractDefault(Dest, 'ATTENTION'), U, 2); | 
|---|
|  | 676 | InpOutp         := Piece(ExtractDefault(Dest, 'CATEGORY'), U, 1); | 
|---|
|  | 677 | ProvDiagnosis      := Piece(ExtractDefault(Dest, 'DIAGNOSIS'), U, 1); | 
|---|
|  | 678 | ProvDxCode         := Piece(ExtractDefault(Dest, 'DIAGNOSIS'), U, 2); | 
|---|
|  | 679 | ProvDxCodeInactive := (Piece(ExtractDefault(Dest, 'DIAGNOSIS'), U, 3) = '1'); | 
|---|
|  | 680 | RequestReason   := TStringList.Create; | 
|---|
|  | 681 | ExtractText(RequestReason, Dest, 'REASON'); | 
|---|
|  | 682 | LimitStringLength(RequestReason, 74); | 
|---|
|  | 683 | DenyComments    := TStringList.Create; | 
|---|
|  | 684 | ExtractText(DenyComments, Dest, 'DENY COMMENT'); | 
|---|
|  | 685 | OtherComments   := TStringList.Create; | 
|---|
|  | 686 | ExtractText(OtherComments, Dest, 'ADDED COMMENT'); | 
|---|
|  | 687 | NewComments     := TStringList.Create; | 
|---|
|  | 688 | end; | 
|---|
|  | 689 | Result := EditRec; | 
|---|
|  | 690 | finally | 
|---|
|  | 691 | Dest.Free; | 
|---|
|  | 692 | end; | 
|---|
|  | 693 | end; | 
|---|
|  | 694 |  | 
|---|
|  | 695 | function ResubmitConsult(EditResubmitRec: TEditResubmitRec): string; | 
|---|
|  | 696 | var | 
|---|
|  | 697 | i: integer; | 
|---|
|  | 698 | begin | 
|---|
|  | 699 | with RPCBrokerV, EditResubmitRec do | 
|---|
|  | 700 | begin | 
|---|
|  | 701 | ClearParameters := True; | 
|---|
|  | 702 | RemoteProcedure := 'ORQQCN RESUBMIT'; | 
|---|
|  | 703 | Param[0].PType := literal; | 
|---|
|  | 704 | Param[0].Value := IntToStr(IEN); | 
|---|
|  | 705 | Param[1].PType := list; | 
|---|
|  | 706 | with Param[1] do | 
|---|
|  | 707 | begin | 
|---|
|  | 708 | if ToService > 0 then | 
|---|
|  | 709 | Mult['1']  := 'GMRCSS^'   + IntToStr(ToService); | 
|---|
|  | 710 | if ConsultProc <> '' then | 
|---|
|  | 711 | Mult['2']  := 'GMRCPROC^' + ConsultProc ; | 
|---|
|  | 712 | if Urgency > 0 then | 
|---|
|  | 713 | Mult['3']  := 'GMRCURG^'  + IntToStr(Urgency); | 
|---|
|  | 714 | if Length(Place) > 0 then | 
|---|
|  | 715 | Mult['4']  := 'GMRCPL^'   + Place; | 
|---|
|  | 716 | if Attention > 0 then | 
|---|
|  | 717 | Mult['5']  := 'GMRCATN^'  + IntToStr(Attention) | 
|---|
|  | 718 | else if Attention = -1 then | 
|---|
|  | 719 | Mult['5']  := 'GMRCATN^'  + '@'; | 
|---|
|  | 720 | if RequestType <> '' then | 
|---|
|  | 721 | Mult['6']  := 'GMRCRQT^'  + RequestType; | 
|---|
|  | 722 | if Length(InpOutP) > 0 then | 
|---|
|  | 723 | Mult['7']  := 'GMRCION^'  + InpOutp; | 
|---|
|  | 724 | if Length(ProvDiagnosis) > 0 then | 
|---|
|  | 725 | Mult['8']  := 'GMRCDIAG^' + ProvDiagnosis + U + ProvDxCode; | 
|---|
|  | 726 | if RequestReason.Count > 0 then | 
|---|
|  | 727 | begin | 
|---|
|  | 728 | Mult['9']  := 'GMRCRFQ^20'; | 
|---|
|  | 729 | for i := 0 to RequestReason.Count - 1 do | 
|---|
|  | 730 | Mult['9,' + IntToStr(i+1)]  := RequestReason.Strings[i]; | 
|---|
|  | 731 | end; | 
|---|
|  | 732 | if NewComments.Count > 0 then | 
|---|
|  | 733 | begin | 
|---|
|  | 734 | Mult['10'] := 'COMMENT^'; | 
|---|
|  | 735 | for i := 0 to NewComments.Count - 1 do | 
|---|
|  | 736 | Mult['10,' + IntToStr(i+1)] := NewComments.Strings[i]; | 
|---|
|  | 737 | end; | 
|---|
|  | 738 | end; | 
|---|
|  | 739 | CallBroker; | 
|---|
|  | 740 | Result := '0'; | 
|---|
|  | 741 | //Result := Results[0]; | 
|---|
|  | 742 | end; | 
|---|
|  | 743 | end; | 
|---|
|  | 744 |  | 
|---|
|  | 745 | function  GetCurrentContext: TSelectContext; | 
|---|
|  | 746 | var | 
|---|
|  | 747 | x: string; | 
|---|
|  | 748 | AContext: TSelectContext; | 
|---|
|  | 749 | begin | 
|---|
|  | 750 | x := sCallV('ORQQCN2 GET CONTEXT', [User.DUZ]) ; | 
|---|
|  | 751 | with AContext do | 
|---|
|  | 752 | begin | 
|---|
|  | 753 | Changed       := True; | 
|---|
|  | 754 | BeginDate     := Piece(x, ';', 1); | 
|---|
|  | 755 | EndDate       := Piece(x, ';', 2); | 
|---|
|  | 756 | Status        := Piece(x, ';', 3); | 
|---|
|  | 757 | Service       := Piece(x, ';', 4); | 
|---|
|  | 758 | GroupBy       := Piece(x, ';', 5); | 
|---|
|  | 759 | Ascending     := (Piece(x, ';', 6) = '1'); | 
|---|
|  | 760 | end; | 
|---|
|  | 761 | Result := AContext; | 
|---|
|  | 762 | end; | 
|---|
|  | 763 |  | 
|---|
|  | 764 | procedure SaveCurrentContext(AContext: TSelectContext) ; | 
|---|
|  | 765 | var | 
|---|
|  | 766 | x: string; | 
|---|
|  | 767 | begin | 
|---|
|  | 768 | with AContext do | 
|---|
|  | 769 | begin | 
|---|
|  | 770 | SetPiece(x, ';', 1, BeginDate); | 
|---|
|  | 771 | SetPiece(x, ';', 2, EndDate); | 
|---|
|  | 772 | SetPiece(x, ';', 3, Status); | 
|---|
|  | 773 | SetPiece(x, ';', 4, Service); | 
|---|
|  | 774 | SetPiece(x, ';', 5, GroupBy); | 
|---|
|  | 775 | SetPiece(x, ';', 6, BOOLCHAR[Ascending]); | 
|---|
|  | 776 | end; | 
|---|
|  | 777 | CallV('ORQQCN2 SAVE CONTEXT', [x]); | 
|---|
|  | 778 | end; | 
|---|
|  | 779 |  | 
|---|
|  | 780 | function GetDefaultReasonForRequest(Service: string; Resolve: Boolean): TStrings; | 
|---|
|  | 781 | begin | 
|---|
|  | 782 | CallV('ORQQCN DEFAULT REQUEST REASON',[Service, Patient.DFN, Resolve]) ; | 
|---|
|  | 783 | Result := RPCBrokerV.Results; | 
|---|
|  | 784 | end; | 
|---|
|  | 785 |  | 
|---|
|  | 786 | function ReasonForRequestEditable(Service: string): string; | 
|---|
|  | 787 | begin | 
|---|
|  | 788 | Result := sCallV('ORQQCN EDIT DEFAULT REASON', [Service]); | 
|---|
|  | 789 | end; | 
|---|
|  | 790 |  | 
|---|
|  | 791 | function GetServicePrerequisites(Service: string): TStrings; | 
|---|
|  | 792 | begin | 
|---|
|  | 793 | CallV('ORQQCN2 GET PREREQUISITE',[Service, Patient.DFN]) ; | 
|---|
|  | 794 | Result := RPCBrokerV.Results; | 
|---|
|  | 795 | end; | 
|---|
|  | 796 |  | 
|---|
|  | 797 | function GetNewDialog(OrderType: string): string; | 
|---|
|  | 798 | { get dialog for new consults} | 
|---|
|  | 799 | begin | 
|---|
|  | 800 | Result := sCallV('ORWDCN32 NEWDLG', [OrderType, Encounter.Location]); | 
|---|
|  | 801 | end; | 
|---|
|  | 802 |  | 
|---|
|  | 803 | function GetServiceIEN(ORIEN: string): string; | 
|---|
|  | 804 | begin | 
|---|
|  | 805 | Result := sCallV('ORQQCN GET SERVICE IEN', [ORIEN]); | 
|---|
|  | 806 | end; | 
|---|
|  | 807 |  | 
|---|
|  | 808 | procedure GetProvDxMode(var ProvDx: TProvisionalDiagnosis; SvcIEN: string); | 
|---|
|  | 809 | var | 
|---|
|  | 810 | x: string; | 
|---|
|  | 811 | begin | 
|---|
|  | 812 | x := sCallV('ORQQCN PROVDX', [SvcIEN]); | 
|---|
|  | 813 | ProvDx.Reqd := Piece(x, U, 1); | 
|---|
|  | 814 | ProvDx.PromptMode := Piece(x, U, 2); | 
|---|
|  | 815 | end; | 
|---|
|  | 816 |  | 
|---|
|  | 817 | function GetConsultOrderIEN(ConsultIEN: integer): string; | 
|---|
|  | 818 | begin | 
|---|
|  | 819 | Result := sCallV('ORQQCN GET ORDER NUMBER', [ConsultIEN]); | 
|---|
|  | 820 | end; | 
|---|
|  | 821 |  | 
|---|
|  | 822 | function GetSavedCPFields(NoteIEN: integer): TEditNoteRec; | 
|---|
|  | 823 | var | 
|---|
|  | 824 | x: string; | 
|---|
|  | 825 | AnEditRec: TEditNoteRec; | 
|---|
|  | 826 | begin | 
|---|
|  | 827 | x := sCallV('ORWTIU GET SAVED CP FIELDS', [NoteIEN]); | 
|---|
|  | 828 | with AnEditRec do | 
|---|
|  | 829 | begin | 
|---|
|  | 830 | Author := StrToInt64Def(Piece(x, U, 1), 0); | 
|---|
|  | 831 | Cosigner := StrToInt64Def(Piece(x, U, 2), 0); | 
|---|
|  | 832 | ClinProcSummCode := StrToIntDef(Piece(x, U, 3), 0); | 
|---|
|  | 833 | ClinProcDateTime := StrToFMDateTime(Piece(x, U, 4)); | 
|---|
|  | 834 | Title := StrToIntDef(Piece(x, U, 5), 0); | 
|---|
|  | 835 | end; | 
|---|
|  | 836 | Result := AnEditRec; | 
|---|
|  | 837 | end; | 
|---|
|  | 838 |  | 
|---|
|  | 839 | initialization | 
|---|
|  | 840 | uLastOrderedIEN := 0; | 
|---|
|  | 841 | uLastOrderMsg := ''; | 
|---|
|  | 842 | uConsultsClass := 0; | 
|---|
|  | 843 | uClinProcClass := 0; | 
|---|
|  | 844 |  | 
|---|
|  | 845 | finalization | 
|---|
|  | 846 | if uConsultTitles <> nil then uConsultTitles.Free; | 
|---|
|  | 847 | if uClinProcTitles <> nil then uClinProcTitles.Free; | 
|---|
|  | 848 |  | 
|---|
|  | 849 | end. | 
|---|