Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: MBAARPC1

MBAARPC1.m

Go to the documentation of this file.
  1. MBAARPC1 ;OIT-PD/PB - Scheduling RPCs ;02/10/2016
  1. ;;1.0;Scheduling Calendar View;**1**;FEB 10, 2016;Build 85
  1. ;
  1. ;This routine has multiple RPCs created to support the mobile Scheduling apps
  1. ;Associated ICRs:
  1. ; ICR#
  1. ; 6053 DPT
  1. ; 6044 SC(
  1. ; 4433 SDAMA301
  1. ; 6417 DATP^SDWLEVAL
  1. ; 6418 $$CHKENC^SDWLQSC1
  1. ;
  1. GETPEND(RV,DFN,DT) ; Get pending appointments for a patient MBAA RPC: MBAA PATIENT PENDING APPT
  1. ; input is patient dfn and the date to start the search and go forward
  1. K RETURN
  1. I $G(DFN)="" S RV(0)="1^DFN must be defined" Q
  1. I $G(DT)="" S RV(0)="1^Start date must be defined" Q
  1. N CNT,SCAP,APP,CLN,%
  1. S CNT=""
  1. D GETPND(.APP,DFN,DT)
  1. F S CNT=$O(APP(CNT)) Q:CNT="" D
  1. . S RETURN(CNT,"COLLATERAL VISIT")=$G(APP(CNT,13))
  1. . S RETURN(CNT,"APPOINTMENT TYPE")=$$APTYNAME^MBAAMDA2($G(APP(CNT,9.5)))
  1. . S RETURN(CNT,"LAB")=$G(APP(CNT,2))
  1. . S RETURN(CNT,"XRAY")=$G(APP(CNT,3))
  1. . S RETURN(CNT,"EKG")=$G(APP(CNT,4))
  1. . S %=$$GETCLN^MBAAMAP1(.CLN,$G(APP(CNT,.01)))
  1. . S RETURN(CNT,"CLINIC")=$P($G(CLN("NAME")),U,2)
  1. . N SCAP S %=$$GETSCAP(.SCAP,$G(APP(CNT,.01)),DFN,CNT)
  1. . S RETURN(CNT,"LENGTH OF APP'T")=$G(SCAP("LENGTH"))
  1. . S RETURN(CNT,"CONSULT LINK")=$G(SCAP("CONSULT"))
  1. . S RETURN(CNT,"OTHER")=$G(SCAP("OTHER"))
  1. .; Adding new fields
  1. . S RETURN(CNT,"CLINIC ID")=$G(APP(CNT,.01))
  1. . S RETURN(CNT,"CURRENT STATUS")=$G(APP(CNT,100))
  1. . S RETURN(CNT,"DESIRED APPT DATE")=$G(APP(CNT,127))
  1. S RETURN=($D(RETURN)>0)
  1. D MERGE^MBAAMRPC(.RV,.RETURN)
  1. Q 1
  1. ;
  1. GETPND(LST,PAT,SD1) ; Get pending appointments MBAA RPC: MBAA PATIENT PENDING APPT
  1. N SDT1
  1. S SDT1=$$FMADD^XLFDT(SD1,0,0,-1,0)
  1. F S SDT1=$O(^DPT(PAT,"S",SDT1)) Q:SDT1=""!(SDT1'>0) D ;ICR#: 6053 DPT
  1. . Q:$G(SDT1)=""
  1. . N ERR,ARRAY,IENS S IENS=SDT1_","_$G(PAT)_"," D GETS^DIQ(2.98,IENS,".01;13;9.5;5;6;7;3;27","I","ARRAY","ERR")
  1. . Q:$G(ARRAY(2.98,IENS,.01,"I"))=""
  1. . Q:$G(ERR)
  1. . S LST(SDT1,.01)=$G(ARRAY(2.98,IENS,.01,"I"))
  1. . S LST(SDT1,13)=$G(ARRAY(2.98,IENS,13,"I"))
  1. . S LST(SDT1,9.5)=$G(ARRAY(2.98,IENS,9.5,"I"))
  1. . S LST(SDT1,2)=$G(ARRAY(2.98,IENS,5,"I"))
  1. . S LST(SDT1,3)=$G(ARRAY(2.98,IENS,6,"I"))
  1. . S LST(SDT1,4)=$G(ARRAY(2.98,IENS,7,"I"))
  1. . S LST(SDT1,5)=$G(ARRAY(2.98,IENS,6,"I"))
  1. . S LST(SDT1,10)=$G(ARRAY(2.98,IENS,3,"I"))
  1. . S LST(SDT1,127)=$G(ARRAY(2.98,IENS,27,"I"))
  1. . N R1 D STATUS(.R1,PAT,SDT1,$G(ARRAY(2.98,IENS,.01,"I"))) I $G(R1)'="" S LST(SDT1,100)=$P(R1,";",3)
  1. . K ARRAY,ERR,IENS
  1. ;. ;S RETURN(Y,100)=$P($$STATUS^SDAM1(PAT,Y,+AP,AP),";",3) ;ICR#: 2851 MBAA ACCESS TO SDAM1 API get appointment status
  1. ;. ;I $P($G(^DPT(PAT,"S",Y,1)),"^")'="" S RETURN(Y,127)=$P($G(^DPT(PAT,"S",Y,1)),"^")
  1. Q
  1. GETSCAP(RETURN,SC,DFN,SD) ; Get clinic appointment MBAA RPC: MBAA PATIENT PENDING APPT
  1. N NOD0,CO,TXT
  1. I '$D(DFN)!(+$G(DFN)'>0) S RETURN=0,TXT(1)="DFN" D ERRX^MBAAAPIE(.RETURN,"INVPARAM",.TXT)
  1. I '$D(SC)!(+$G(SC)'>0) S RETURN=0,TXT(1)="SC" D ERRX^MBAAAPIE(.RETURN,"INVPARAM",.TXT)
  1. I '$D(SD)!(+$G(SD)'>0) S RETURN=0,TXT(1)="SD" D ERRX^MBAAAPIE(.RETURN,"INVPARAM",.TXT)
  1. D GETSCAP^MBAAMDA1(.RETURN,+SC,+DFN,+SD)
  1. I $D(RETURN) D
  1. . S NOD0=RETURN(0),CO=$G(RETURN("C"))
  1. . S RETURN("IFN")=RETURN
  1. . S RETURN("USER")=$P(NOD0,U,6)
  1. . S RETURN("DATE")=$P(NOD0,U,7)
  1. . S RETURN("CHECKOUT")=$P(CO,U,3)
  1. . S RETURN("CHECKIN")=$P(CO,U,1)
  1. . S RETURN("LENGTH")=$P(NOD0,U,2)
  1. . S RETURN("CONSULT")=$P($G(RETURN("CONS")),U)
  1. . S RETURN("OTHER")=$P($G(NOD0),"^",4)
  1. Q 1
  1. ;
  1. PROVCLIN(RESULTS,PROVIDER) ; Get list of clinics for a provider MBAA RPC: MBAA PROVIDER TO CLINIC
  1. ; input is provider id (IEN for VA(200))
  1. K RESULTS
  1. I $G(PROVIDER)="" S RESULTS(0)="1^Provider IEN is required." Q
  1. S (CNT,CLIN)=0 F S CLIN=$O(^SC(CLIN)) Q:CLIN'>0 S PROV=0 F S PROV=$O(^SC(CLIN,"PR","B",PROV)) Q:PROV'>0 S REC=0 F S REC=$O(^SC(CLIN,"PR","B",PROV,REC)) Q:REC'>0 D ;ICR#: 6044 SC(
  1. .;T13 Change to use FM
  1. .N ARRAY D GETS^DIQ(44,CLIN_",",".01;2","I","ARRAY")
  1. .S CLINNAME=$G(ARRAY(44,CLIN_",",.01,"I"))
  1. .S TYPE=$G(ARRAY(44,CLIN_",",2,"I"))
  1. .Q:$G(TYPE)'="C"
  1. .;Q:$P(^SC(CLIN,0),"^",3)'="C" ;ICR#: 6044 SC(
  1. .;N IENS S IENS=$G(REC)_","_$G(CLIN)_"," S PROVIDER=$$GET1^DIQ(44.1,IENS,".01","I")
  1. .;Q:$P(^SC(CLIN,0),"^",3)'="C" ;ICR#: 6044 SC(
  1. .Q:$G(PROV)'=$G(PROVIDER)
  1. .;S CLINNAME=$P(^SC(CLIN,0),"^") ;ICR#: 6044 SC(
  1. .S RESULTS(CNT)=CLIN_"^"_CLINNAME,CNT=CNT+1
  1. .K CLINNAME,TYPE
  1. K CLIN,PROV,PROVIDER,CNT,REC,TYPE
  1. S:$G(RESULTS(0))="" RESULTS(0)="1^Provider is not assigned to any clinics."
  1. Q
  1. ;Line tags REMREC, UPDTEWL, PARSE, UPDATE have been commented out due to being descoped from the first release
  1. ;REMREC(RESULTS,DFN,CLINIC,PROVIDER,RECALLDT,PTRECDT) ; Remove a patient from the Recall list MBAA RPC: MBAA REMOVE FROM RECALL LIST
  1. ; Input Parameters:
  1. ; DFN = Patient ID
  1. ; Clinic = Clinic ID - IEN from the Hospital Location file (#44)
  1. ; PROVIDER = Provider IEN (optional)
  1. ; RECALLDT = The recall date requested by the provider
  1. ; PTRECDT = The recall date requested by the patient
  1. ; Either the RECALLDT or the PTRECDT is required.
  1. ;
  1. ; Checks for multiple entries on the recall list that are for the same patient, provider, clinic and recall dates and deletes all
  1. ; Output:
  1. ; If successful:
  1. ; RESULTS="1^DELETED" the patient was removed from the recall list for the clinic
  1. ; If not successful:
  1. ; RESULTS="0^DFN MISSING"
  1. ; RESULTS="0^CLINIC ID MISSING"
  1. ; RESULTS="0^User doesn't have the provider key."
  1. ;
  1. ;S RESULTS(0)=""
  1. ;I $G(DFN)="" S RESULTS(0)="0^DFN MISSING" Q
  1. ;I $G(CLINIC)="" S RESULTS(0)="0^CLINIC ID MISSING" Q
  1. ;T13 Changes to use FM
  1. ;N JX S JX=$$GET1^DIQ(2,$G(DFN),.01) I $G(JX)="" S RESULTS(0)="0^NOT A PATIENT" Q ;ICR#: 6053 DPT
  1. ;N JX S JX=$$GET1^DIQ(44,$G(CLINIC),.01) I $G(JX)="" S RESULTS(0)="0^NOT A CLINIC" Q ;ICR#: 6044 SC(
  1. ;I '$D(^DPT(DFN,0)) S RESULTS(0)="0^NOT A PATIENT" Q ;ICR#: 6053 DPT
  1. ;I '$D(^SC(CLINIC,0)) S RESULTS(0)="0^NOT A CLINIC" Q ;ICR#: 6044 SC(
  1. ;T13 Change to use FM
  1. ;S (SDPRV,KEY,SDFLAG)="" S SDPRV=$P($G(^SD(403.5,CLINIC,0)),U,5) I SDPRV'="" S KEY=$P($G(^SD(403.54,SDPRV,0)),U,7) D ;ICR#: 6045 SD(403.5
  1. ;N CLIN S CLIN=$O(^SD(403.5,"E",CLINIC,0))
  1. ;I $G(CLIN)>0 S (SDPRV,KEY,SDFLAG)="" S SDPRV=$$GET1^DIQ(403.5,CLIN_",",4,"I") I SDPRV'="" S KEY=$$GET1^DIQ(403.54,SDPRV_",",6,"I") D ;ICR#: 6158 SD(403.54
  1. ;.Q:KEY=""
  1. ;.N VALUE
  1. ;.S VALUE=$$LKUP^XPDKEY(KEY) K KY D OWNSKEY^XUSRB(.KY,VALUE,DUZ) ;ICR#: 3277 XUSRB
  1. ;.I $G(KY(0))=0 S RESULTS(0)="0^User doesn't have the security key."
  1. ;Q:$G(RESULTS(0))'=""
  1. ;S IEN=0 F S IEN=$O(^SD(403.5,"E",CLINIC,IEN)) Q:IEN'>0 D ;ICR#: 6045 SD(403.5
  1. ;.K NODE,PROV,PROVDT,PTDT,RESULTS(0),XDFN,OK
  1. ;.S OK=0
  1. ;.;T13 Change to use FM
  1. ;.;S NODE=$G(^SD(403.5,IEN,0)) ;ICR#: 6045 SD(403.5
  1. ;.;S XDFN=$P(NODE,"^")
  1. ;.N ARRAY,ERR D GETS^DIQ(403.5,IEN_",",".01;4;5;5.5","I","ARRAY","ERR")
  1. ;.S XDFN=$G(ARRAY(403.5,IEN_",",.01,"I")),PROV=$G(ARRAY(403.5,IEN_",",4,"I")),PROVDT=$G(ARRAY(403.5,IEN_",",5,"I")),PTDT=$G(ARRAY(403.5,IEN_",",5.5,"I"))
  1. ;.I $G(XDFN)'=DFN S RESULTS(0)="0^PATIENT NOT ON RECALL LIST" Q
  1. ;.;S PROV=$P(NODE,"^",5),PROVDT=$P(NODE,"^",6),PTDT=$P(NODE,"^",12),DFN1=$P(NODE,"^",1)
  1. ;.;I $G(PROV)'=$G(PROVIDER) Q ;S RESULTS(0)="0^PROVIDER DOESN'T MATCH" Q
  1. ;.;I $G(PROVDT)'=$G(RECALLDT) Q ;S RESULTS(0)="0^PROVIDER RECALL DATE DOESN'T MATCH" Q
  1. ;.;I $G(PTRECDT)'="" I $G(PTDT)'=$G(PTRECDT) S RESULTS(0)="0^PATIENT RECALL DATE DOESN'T MATCH" Q
  1. ;.;I $G(DFN1)'=$G(DFN) S RESULTS(0)="0^PATIENT MISMATCH" Q
  1. ;.S DIK="^SD(403.5,",DA=IEN D ^DIK ;ICR#: 6045 SD(403.5
  1. ;.S OK=1
  1. ;I OK=1 S RESULTS(0)="1^DELETED"
  1. ;I OK=0 S RESULTS(0)="0^NOT ON RECALL LIST"
  1. ;K SDPRV,KEY,SDFLAG,VALUE,IEN,DIK,DA,OK
  1. ;Q
  1. UPDTEWL(RESULTS,DFN,SDWLIEN,SDWLDISP,SDWLDATA) ; Update or remove a patient on the EWL MBAA RPC: MBAA REMOVE FROM EWL
  1. ;Input paramters:
  1. ; DFN - Patient DFN
  1. ; EWLIEN - for EWL Record to be updated
  1. ; DISP - The disposition code of the EWL entry:
  1. ; D:DEATH;NC:REMOVED/NON-VA CARE;SA:REMOVED/SCHEDULED-ASSIGNED;CC:REMOVED/VA CONTRACT CARE;NN:REMOVED/NO LONGER NECESSARY;ER:ENTERED IN ERROR;CL:CLINIC CHANGE
  1. ; SDWLDATA array:
  1. ; $P(1) = SDWLAPPT(1)=SCHEDULED DATE OF APPT
  1. ; $P(2) = SDWLAPPT(2)=PTR TO APPT CLINIC (CLINIC WHERE APPT MADE)
  1. ; $P(4) = SDWLAPPT(15)=APPOINTMENT INSTITUTION (PTR to Institution File)
  1. ; $P(5) = SDWLAPPT(13)=APPT STOP CODE (PTR to file 40.7)
  1. ; $P(6) = SDWLAPPT(14)=APPT CREDIT STOP CODE (PTR to file 40.7)
  1. ; $P(7) = SDWLAPPT(16)=APPT STATION NUMBER (Free Text) MUST BE AN IEN FROM DIC(4 but is not a ptr field)
  1. ; $P(3) = SDWLAPPT(3)=APPT STATUS (Set of codes: 'R' FOR Scheduled/Kept;
  1. ; 'I' FOR Inpatient;
  1. ; 'NS' FOR No-Show;
  1. ; 'NSR' FOR No_Show, Rescheduled;
  1. ; 'CP' FOR Canceled by Patient;
  1. ; 'CPR' FOR Canceled by Patient, Rescheduled;
  1. ; 'CC' FOR Canceled by Clinic;
  1. ; 'CCR' FOR Canceled by Clinic, Rescheduled;
  1. ; 'NT' FOR No Action Taken; )
  1. ;Output:
  1. ; RESULTS(0)=1 - Successful
  1. ; RESULTS(0)="0^DFN is required" - DFN parameter missing
  1. ; RESULTS(0)="0^SDWLIEN is required" - SDWLIEN parameter is missing
  1. ; RESULTS(0)="0^Patient not on EWL" - Patient is not on the EWL
  1. ; RESULTS(0)="0^Disposition is missing."
  1. ; RESULTS(0)="0^Disposition is SA but missing Appointment data."
  1. ;
  1. S RESULTS(0)=1
  1. I $G(DFN)="" S RESULTS(0)="0^DFN is required" Q
  1. I $G(SDWLIEN)="" S RESULTS(0)="0^SDWLIEN is required" Q
  1. I '$D(^SDWL(409.3,"B",DFN)) S RESULTS(0)="0^Patient not on EWL" Q ;ICR#: 6046 SDWL(409.3
  1. I $G(SDWLDISP)="" S RESULTS(0)="0^Disposition is missing." Q
  1. I ($G(SDWLDISP)="SA"&($G(SDWLDATA)="")) S RESULTS(0)="0^Disposition is SA but missing Appointment data." Q
  1. ;T13 Change to use FM
  1. N TYPE S TYPE=$$GET1^DIQ(409.3,SDWLIEN_",",23,"I") I $G(TYPE)="C" S RESULTS(0)="0^Patient not on EWL" Q ;ICR#: 6046 SDWL(409.3
  1. I $P(^SDWL(409.3,SDWLIEN,0),"^",17)="C" S RESULTS(0)="0^Patient not on EWL" Q ;ICR#: 6046 SDWL(409.3
  1. D PARSE
  1. I '$$LOCK^MBAAWLAP(.SDWLERR,SDWLIEN) ; W !,"Another User is Editing this Entry. Try Later." Q
  1. S %=$$DETAIL^MBAAWLAP(.SDWLDATA,SDWLIEN)
  1. G ENQ:SDWLDISP=""
  1. D UPDATE(DFN,SDWLIEN,SDWLDISP,.SDWLDATA)
  1. ENQ ; MBAA RPC: MBAA REMOVE FROM EWL
  1. S %=$$UNLOCK^MBAAWLAP(SDWLIEN)
  1. Q
  1. UPDATE(SDWLDFN,SDWLIEN,SDWLDISP,SDWLDATA) ;UPDATE EWL ENTRY MBAA RPC: MBAA REMOVE FROM EWL
  1. N SDWLERR,SDWLAPPT,SDWLTY
  1. S SDWLTY=$P(SDWLDATA("WLTYPE"),U)
  1. I SDWLDISP="SA","3,4"[SDWLTY S SDWLERR='$$SELAPPT(SDWLIEN,.SDWLDATA,.SDWLAPPT) Q:SDWLERR ; QUIT OR NOT?
  1. I SDWLDISP="CL" Q
  1. S %=$$DISP^MBAAWLAP(.SDWLERR,SDWLDFN,SDWLIEN,SDWLDISP,.SDWLAPPT)
  1. S RETURN(0)=1
  1. Q
  1. PARSE ; MBAA RPC: MBAA REMOVE FROM EWL
  1. Q:$G(SDWLDATA)=""
  1. S SDWLAPPT(1)=$P(SDWLDATA,"^",1),SDWLAPPT(2)=$P(SDWLDATA,"^",2),SDWLAPPT(3)=$P(SDWLDATA,"^",3),SDWLAPPT(15)=$P(SDWLDATA,"^",4)
  1. S SDWLAPPT(13)=$P(SDWLDATA,"^",5),SDWLAPPT(14)=$P(SDWLDATA,"^",6),SDWLAPPT(16)=$P(SDWLDATA,"^",7)
  1. Q
  1. ;T13 Change add the code below to replace the STATUS^SDAM1 API with the SDAMA301 API ICR #
  1. STATUS(RESULTS,DFN,SD,SC) ;get the status of an appointment ;ICR 4433
  1. K SDARRAY,SDCOUNT
  1. S RESULTS=""
  1. S SDARRAY(1)=SD,SDARRAY(2)=SC,SDARRAY(4)=DFN,SDARRAY("FLDS")="22"
  1. S SDCOUNT=$$SDAPI^SDAMA301(.SDARRAY) ; ICR
  1. I SDCOUNT>0 S RESULTS=$P($G(^TMP($J,"SDAMA301",DFN,SC,SD)),"^",22)
  1. ;S RESULTS=$G(^TMP($J,"SDAMA301",DFN,SC,SD))
  1. Q
  1. SELAPPT(SDWLIEN,SDWLDATA,SDWLAPPT) ;SELECT APPOINTMENT TO CLOSE WITH
  1. N SDWLTY,SDCL,SDSP,SDORG,SDDS,SDAP,SDA,DIR,X
  1. S SDWLTY=$P(SDWLDATA("WLTYPE"),U)
  1. S (SDCL,SDSP)=""
  1. S:SDWLTY=4 SDCL=$P(SDWLDATA("WAITFORP"),U)
  1. S:SDWLTY=3 SDSP=$P(SDWLDATA("WAITFORP"),U)
  1. S SDORG=$P(SDWLDATA("ORIGDT"),U)
  1. S SDDS=$$CHKENC^SDWLQSC1(SDWLIEN,SDORG,SDCL,SDSP,1) ;ICR 6418
  1. S SDAP=$O(^TMP($J,"APPT",""))
  1. Q:SDAP="" 1
  1. I $O(^TMP($J,"APPT",""))'=$O(^TMP($J,"APPT",""),-1) D
  1. . W !
  1. . S SDA=$O(^TMP($J,"APPT",""),-1)
  1. . I SDA=1 S DIR("B")=1
  1. . S DIR(0)="N^1:"_SDA S DIR("A")="Select appt for Removal Reason or '^' to Quit>",DIR("?")="Select Appointment to close with the open EWL."
  1. . D ^DIR
  1. . S SDAP=X
  1. Q:SDAP="^" 0
  1. Q:'SDAP 1
  1. D DATP^SDWLEVAL(SDAP,.SDWLAPPT) ; ICR 6417
  1. Q 1