PSBMLLKU ;BIRMINGHAM/TEJ - BCMA RPC LOOKUP UTLILITIES ;03/06/16 3:06pm
 ;;3.0;BAR CODE MED ADMIN;**3,9,11,20,13,38,32,56,42,70,72,83,99**;Mar 2004;Build 9
 ;Per VHA Directive 2004-038, this routine should not be modified.
 ;
 ; Reference/IA
 ; EN^PSJBCMA1/2829
 ; $$DOB^DPTLK1/3266
 ; $$SSN^DPTLK1/3267
 ; ^DPT/10035
 ; ^XUSEC/10076
 ; File 52.6/436
 ; File 52.7/437
 ; File 50/221
 ; File 211.4/1409
 ; $$UP^XLFSTR/10104
 ;
 ;*70 - create a lookup for Clinics that returns all patients per 
 ;      clinic selected for Client to then pass one at a time for
 ;      coversheet reports and enable the NEXT button for user
 ;      selection to process the next DFN for a coversheet report.
 ;*83 - return Injection/Dermal site encoded in piece 10.   |I or |D
 ;      also set 16th piece if MRRs given on order.
 ;      return HR & MRR flags pieces 7 & 8 on DD string.
 ;
RPC(RESULTS,PSBREC) ; Remote Procedure Call Entry Point.
 ;
 ;*70 piece out mode if exists & reset 0 node for bkwds compatability
 N PSBCLINORD
 S PSBCLINORD=$P(PSBREC(0),U,2),PSBREC(0)=$P(PSBREC(0),U)
 ;
 S RESULTS="" D @(PSBREC(0)_"(.RESULTS,.PSBREC)") Q
 Q
 ;
ADMLKUP(RESULTS,PSBREC) ;
 ;  Lookup ADMinistrations per DFN and search DATE
 ;   input - PSBREC(1)  DFN
 ;           PSBREC(2)  Search DATE
 ;
 ;   outpt - RESULTS (array)
 ;          (Administrations returned will be dated  = to Search Date
 ;
 ;
 K RESULTS
 S DFN=PSBREC(1),PSBSRCH=$G(PSBREC(2)) I $G(PSBSRCH)']"" D NOW^%DTC S PSBSRCH=$P(%,".")
 S PSBDT=PSBSRCH,PSBCNT=0 S:PSBSRCH'["." PSBSRCH=PSBSRCH+.9
 S RESULTS(0)=1,RESULTS(1)="-1^No Meds Found!"
 F  S PSBSRCH=$O(^PSB(53.79,"AADT",DFN,PSBSRCH),-1) Q:'PSBSRCH!(PSBSRCH<PSBDT)  D
 .S PSBIEN=""
 .F  S PSBIEN=$O(^PSB(53.79,"AADT",DFN,PSBSRCH,PSBIEN),-1) Q:'PSBIEN  D:'$D(^PSB(53.79,PSBIEN)) KILLAADT  Q:'$D(^PSB(53.79,PSBIEN))  D:$$CHKKEY(PSBIEN)
 ..L +^PSB(53.79,PSBIEN):1
 ..I  L -^PSB(53.79,PSBIEN)
 ..E  Q
 ..S PSBXORDN=$$GET1^DIQ(53.79,PSBIEN_",",.11) Q:'$D(^PSB(53.79,"AORDX",DFN,PSBXORDN,PSBSRCH))
 ..Q:($$GET1^DIQ(53.79,PSBIEN_",",.06,"I")>PSBSRCH)
 ..Q:($$GET1^DIQ(53.79,PSBIEN_",",.09,"I")="N")
 ..S PSBCNT=PSBCNT+1,RESULTS(PSBCNT)=PSBIEN
 ..S $P(RESULTS(PSBCNT),U,2)=PSBSRCH
 ..S $P(RESULTS(PSBCNT),U,3)=$$GET1^DIQ(53.79,PSBIEN_",",.08)
 ..S:$$GET1^DIQ(53.79,PSBIEN_",",.26) $P(RESULTS(PSBCNT),U,4)=$$GET1^DIQ(53.79,PSBIEN_",",.26)
 ..S $P(RESULTS(PSBCNT),U,5)=$S($$GET1^DIQ(53.79,PSBIEN_",",.09,"I")']"":"U",1:$$GET1^DIQ(53.79,PSBIEN_",",.09,"I"))
 ..D  ; Get order information
 ...K ^TMP("PSJ1",$J) D EN^PSJBCMA1(DFN,PSBXORDN,1)
 ...S $P(RESULTS(PSBCNT),U,3)=$P(^TMP("PSJ1",$J,2),U,2)  ;OItem_" "_Dosage Form
 ...S $P(RESULTS(PSBCNT),U,6)=$P(^TMP("PSJ1",$J,4),U)    ;Sched Type
 ...K ^TMP("PSJ1",$J)
 ..S $P(RESULTS(PSBCNT),U,7)=$$GET1^DIQ(53.79,PSBIEN_",",.06,"I")
 ..S $P(RESULTS(PSBCNT),U,8)=$$GETINIT^PSBCSUTX(PSBIEN,"I") ;Get initials of who took action, PSB*3*72
 ..S:$D(^PSB(53.79,PSBIEN,.2)) $P(RESULTS(PSBCNT),U,9)=$P(^PSB(53.79,PSBIEN,.2),U),$P(RESULTS(PSBCNT),U,10)=$P(^PSB(53.79,PSBIEN,.2),U,2)
 S:+$G(RESULTS(1))>0 $P(RESULTS(0),U)=PSBCNT
 Q
 ;
CHKKEY(PSBIENX) ;
 I '(($D(^XUSEC("PSB MANAGER",DUZ)))!($$GET1^DIQ(53.79,+PSBIENX,.07,"I")=DUZ)) Q 0
 Q 1
 ;
PTLKUP(RESULTS,PSBREC) ; Patient lookup handled separately for security
 ;   input - PSBREC (array)  User entered patient lookup data
 ;
 ;   outpt - RESULTS (array)
 ;          (Person(s) in PATIENT File (#2) meeting search criteria)
 ;
 ;
 N PSBNRSWD,PSBINDX,PSBRPT
 K RESULTS,PSBDATA
 K PSBPT S PSBPT(0)=0
 S PSBINDX="" K ^TMP("DILIST",$J)
 I PSBCLINORD'="C" D
 .S PSBDATA=$E(PSBREC(1),1,60)
 .I PSBDATA?12N!(PSBDATA?1.6N)&(DUZ("AG")="I") D  Q  ; HRN/ASUFAC code
 ..N X
 ..S X=$$HRCNF^APSPFUNC($S($L(PSBDATA)=12:PSBDATA,1:$$PAD($$GET1^DIQ(9999999.06,+DUZ(2),.12))_$$PAD(PSBDATA)))
 ..I X<0 D  Q
 ...S RESULTS(0)=1,RESULTS(1)="-1^No patients matching '"_PSBDATA_"'."
 ..S RESULTS(0)=1
 ..S RESULTS(1)=$$PTREC(X)
 .S PSBDATA1=PSBDATA
 .I $E(PSBDATA,$L(PSBDATA)-10,60)=" [MAS WARD]" S PSBINDX="CN" S PSBDATA=$P(PSBDATA," [MAS WARD]")
 .I $E(PSBDATA,$L(PSBDATA)-11,60)=" [NURS UNIT]" S PSBINDX="CN" S PSBDATA=$P(PSBDATA," [NURS UNIT]") D
 ..K PSBPT S PSBPT(0)=0
 ..S PSBZ=0 F  S PSBZ=$O(^NURSF(211.4,PSBZ)) Q:PSBZ'?.N  S PSBNRSWD=$$GET1^DIQ(211.4,PSBZ_",",.01) I $$UP^XLFSTR(PSBNRSWD)=PSBDATA S PSBY=PSBZ Q  ;Update API, PSB*3*72
 ..K PSBDATA S PSBDATA=""
 ..S PSBX=0 F  S PSBX=$O(^NURSF(211.4,PSBY,3,PSBX)) Q:PSBX=""  S PSBDATA(PSBX)=$$GET1^DIQ(42,$P(^NURSF(211.4,PSBY,3,PSBX,0),U)_",",.01)
 ;
 I PSBCLINORD="C" D
 .;Clinic mode report - get and return array of all DFN's that belong
 .;  to clinics passed in by user.
 .F QQ=0:0 S QQ=$O(PSBREC(QQ)) Q:'QQ  D
 ..S PSBRPT(2,QQ,0)=PSBREC(QQ)
 ..S PSBRPT(2,"B",PSBREC(QQ),QQ)=""
 .S PSBDATA=1 D CLIN^PSBO(.PSBRPT,.PSBDATA)
 .I $D(PSBDATA)=11 D
 ..N DFNXX S PSBCNT=0
 ..F DFNXX=0:0 S DFNXX=$O(PSBDATA(DFNXX)) Q:'DFNXX  D
 ...S PSBCNT=PSBCNT+1,RESULTS(PSBCNT)=$$PTREC(DFNXX)
 .; check if any data found
 .I '$D(RESULTS) D
 ..S RESULTS(0)=1
 ..S RESULTS(1)="-1^No patients matching Clinic Search List"
 .E  D
 ..S RESULTS(0)=+$O(RESULTS(""),-1)
 ..S PSBINDX="CN"
 I PSBCLINORD="C",+RESULTS(1)=-1 Q
 ;
 I PSBINDX="" S PSBINDX=$S(PSBDATA?9N.1P:"SSN",PSBDATA?4N.1P:"BS5^BS",1:"B^BS5^SSN^CN^RM")
 I ($O(PSBDATA(""))'>0) D FIND^DIC(2,"","@;.01;.02;.03;.09","MP",PSBDATA,200,PSBINDX)
 I ($O(PSBDATA(""))>0) D
 .S PSBX="",PSBY=1 F  S PSBX=$O(PSBDATA(PSBX)) Q:PSBX=""  D  K ^TMP("DILIST",$J) Q:$P(PSBPT(0),U,3)=1
 ..D FIND^DIC(2,"","@;.01;.02;.03;.09","MPO",PSBDATA(PSBX),200,PSBINDX)
 ..S PSBZ=0 F  S PSBZ=$O(^TMP("DILIST",$J,PSBZ)) Q:PSBZ=""  S PSBPT(PSBY,0)=^TMP("DILIST",$J,PSBZ,0),PSBPT(0)=PSBY,PSBY=PSBY+1 I PSBY>200 S $P(PSBPT(0),U,3)=1
 K:+$G(PSBPT(0))=0 PSBPT
 I $D(PSBPT) M ^TMP("DILIST",$J)=PSBPT
 I $P($G(^TMP("DILIST",$J,0)),U,3) D  Q
 .S RESULTS(0)=1,RESULTS(1)="-1^Too many patients found matching '"_PSBDATA1_"'. Please be more specific."
 I $D(^TMP("DILIST",$J,0)) D
 .F PSBXX=0:0 S PSBXX=$O(^TMP("DILIST",$J,PSBXX)) Q:'PSBXX  D
 ..S RESULTS(PSBXX)=$$PTREC(+^TMP("DILIST",$J,PSBXX,0))
 I '$D(RESULTS) S RESULTS(0)=1,RESULTS(1)="-1^No patients matching '"_PSBDATA1_"'"
 E  S RESULTS(0)=+$O(RESULTS(""),-1)
 Q
 ;
PTREC(DFN) ;
 ; Extrinsic to return a Pt Rec  in standard list format
 N PSBXX
 S PSBXX=$G(^DPT(DFN,0))
 S PSBXX=DFN_U_$P(PSBXX,U,1)_U_$P(PSBXX,U,2)_U_$P(PSBXX,U,3)_U_$S(DUZ("AG")="I":$$HRCNF^BDGF2(DFN,DUZ(2)),1:$P(PSBXX,U,9))
 S $P(PSBXX,U,6)=$$GET1^DIQ(2,DFN_",",.1)
 S $P(PSBXX,U,7)=$$GET1^DIQ(2,DFN_",",.101)
 S $P(PSBXX,U,10)=$$DOB^DPTLK1(DFN)
 S $P(PSBXX,U,11)=$S(DUZ("AG")="I":$$HRN^AUPNPAT(DFN,DUZ(2)),1:$$SSN^DPTLK1(DFN))
 Q PSBXX
 ;
SELECTAD(RESULTS,PSBREC) ; Select Administration
 ;
 ;  Process the SELECTed ADministration
 ;   input - PSBREC(1) = PSB Med Log File (#53.79) IEN
 ;
 ;
 ;   outpt - RESULTS (array)
 ;          (Administration data that can be subsequently updated via GUI MED LOG EDIT)
 ;
 ;
 K RESULTS,PSBXIV,PSBPTCHX
 N ISIT,DSIT,PSBMRRX                                              ;*83
 N PSBIEN,PSBCNT,PSBX S PSBIEN=PSBREC(1),PSBCNT=2
 ; Construct form data    Patient^SSN^Med^BagID^AdminStat^AdminD/T^InjctSt^PRNReas^PRNEff^DisDrg^UntsGiven^Unt^
 S RESULTS(0)=0
 D:$$CHKKEY(PSBIEN)
 .L +^PSB(53.79,PSBIEN):1
 .E  I $P(^PSB(53.79,PSBIEN,0),U,9)]"" S PSBCNT=1,RESULTS(1)="-1^ This administration is being modified by another process at this moment." L -^PSB(53.79,PSBIEN) Q
 .S $P(RESULTS(1),U)=PSBIEN
 .S $P(RESULTS(1),U,2)=$$GET1^DIQ(53.79,PSBIEN_",",.01,"I")
 .S $P(RESULTS(1),U,3)=$$GET1^DIQ(53.79,PSBIEN_",",.01)
 .S $P(RESULTS(1),U,4)=$$GET1^DIQ(2,$P(RESULTS(1),U,2)_",",.09)
 .S $P(RESULTS(1),U,5)=$$GET1^DIQ(53.79,PSBIEN_",",.08,"I")_"~"_$$GET1^DIQ(53.79,PSBIEN_",",.08)
 .S $P(RESULTS(1),U,6)=$$GET1^DIQ(53.79,PSBIEN_",",.26)
 .S $P(RESULTS(1),U,7)=$S($$GET1^DIQ(53.79,PSBIEN_",",.09,"I")']"":"U",1:$$GET1^DIQ(53.79,PSBIEN_",",.09,"I"))
 .;
 .D:($P(RESULTS(1),U,7)'="N")&($P(RESULTS(1),U,7)]"") SELSTTUS(.RESULTS)  ; Amend RESULTS(1) data...
 .S Y=$E($$GET1^DIQ(53.79,PSBIEN_",",.06,"I"),1,12) D DD^%DT
 .S $P(RESULTS(1),U,8)=Y
 .S $P(RESULTS(1),U,9)=$$GET1^DIQ(53.79,PSBIEN_",",.06,"I")
 .;Inj vs Derm site                                                *83
 .S ISIT=$$GET1^DIQ(53.79,PSBIEN_",",.16)
 .S DSIT=$$GET1^DIQ(53.79,PSBIEN_",",.18)
 .S $P(RESULTS(1),U,10)=$S(ISIT]"":ISIT_"|I",DSIT]"":DSIT_"|D",1:"")
 .;
 .S $P(RESULTS(1),U,16)=0
 .S $P(RESULTS(2),U)=$$GET1^DIQ(53.79,PSBIEN_",",.21),$P(RESULTS(2),U,2)=$$GET1^DIQ(53.79,PSBIEN_",",.22)
 .;
 .;Determine if there are any active MRRs/IVs/Patches per order
 .;  MRRs - check MRRs first                                       *83
 .D:$G(PSBMRRX)
 ..S PSBX="",PSBX="^PSB(53.79,""AMRR"","_$P(RESULTS(1),U,2)_")"
 ..F  S PSBX=$Q(@PSBX) Q:PSBX=""  Q:$QS(PSBX,3)'=$P(RESULTS(1),U,2)  D  Q:$P(RESULTS(1),U,16)
 ...S PSBXX=$QS(PSBX,5),PSBXXX=$S(($P(^PSB(53.79,PSBXX,0),U,9)="G")&(PSBXX'=PSBIEN):1,1:0)
 ...I PSBXXX&($P(^PSB(53.79,PSBXX,.1),U)=$P(RESULTS(1),U,15)) S $P(RESULTS(1),U,16)=1
 .;
 .;  Patches - check if flag not already set   
 .D:$G(PSBPTCHX)&('($P(RESULTS(1),U,16)))                         ;*83
 ..S PSBX="",PSBX="^PSB(53.79,""APATCH"","_$P(RESULTS(1),U,2)_")"
 ..F  S PSBX=$Q(@PSBX) Q:PSBX=""  Q:$QS(PSBX,3)'=$P(RESULTS(1),U,2)  D  Q:$P(RESULTS(1),U,16)
 ...S PSBXX=$QS(PSBX,5),PSBXXX=$S(($P(^PSB(53.79,PSBXX,0),U,9)="G")&(PSBXX'=PSBIEN):1,1:0)
 ...I PSBXXX&($P(^PSB(53.79,PSBXX,.1),U)=$P(RESULTS(1),U,15)) S $P(RESULTS(1),U,16)=1
 .;
 .;  IV's - check if flag not already set
 .D:$G(PSBXIV)&('($P(RESULTS(1),U,16)))                           ;*83
 ..S PSBX="",PSBX="^PSB(53.79,""AUID"","_$P(RESULTS(1),U,2)_")"
 ..F  S PSBX=$Q(@PSBX) Q:PSBX=""  Q:$QS(PSBX,3)'=$P(RESULTS(1),U,2)  Q:$QS(PSBX,4)>$P(RESULTS(1),U,15)  D  Q:$P(RESULTS(1),U,16)
 ...Q:$QS(PSBX,4)'=$P(RESULTS(1),U,15)
 ...S PSBXX=$QS(PSBX,6) S:(PSBXX'=PSBIEN) $P(RESULTS(1),U,16)=$S($P(^PSB(53.79,PSBXX,0),U,9)="I":1,$P(^PSB(53.79,PSBXX,0),U,9)="S":1,1:0)
 .;
 .; LOOP - Place DD in RESULTS
 .S PSBX=0 F  S PSBX=$O(^PSB(53.79,PSBIEN,.5,PSBX)) Q:'(+PSBX)  D
 ..S PSBCNT=PSBCNT+1
 ..S RESULTS(PSBCNT)="DD^"_$P(^PSB(53.79,PSBIEN,.5,PSBX,0),U)_"^"_$$GET1^DIQ(50,$P(^PSB(53.79,PSBIEN,.5,PSBX,0),U)_",",.01)
 ..S $P(RESULTS(PSBCNT),U,4)=$P(^PSB(53.79,PSBIEN,.5,PSBX,0),U,2)_"^"_$P(^PSB(53.79,PSBIEN,.5,PSBX,0),U,3)_"^"_$P(^PSB(53.79,PSBIEN,.5,PSBX,0),U,4)
 ..S:$P(RESULTS(PSBCNT),U,4)?1"."1.N $P(RESULTS(PSBCNT),U,4)=0_+$P(RESULTS(PSBCNT),U,4)
 ..S:$P(RESULTS(PSBCNT),U,5)?1"."1.N $P(RESULTS(PSBCNT),U,5)=0_+$P(RESULTS(PSBCNT),U,5)
 ..;  send HR & MRR flags in DD pce 7 & 8 to insure returned
 ..;  for Edit Transaction calls
 ..S $P(RESULTS(PSBCNT),U,7)=$P(^PSB(53.79,PSBIEN,.5,PSBX,0),U,5) ;*83
 ..S $P(RESULTS(PSBCNT),U,8)=$P(^PSB(53.79,PSBIEN,.5,PSBX,0),U,6) ;*83
 .; LOOP - Place ADD in RESULTS
 .S PSBX=0 F  S PSBX=$O(^PSB(53.79,PSBIEN,.6,PSBX)) Q:'(+PSBX)  D
 ..S PSBCNT=PSBCNT+1
 ..S RESULTS(PSBCNT)="ADD^"_$P(^PSB(53.79,PSBIEN,.6,PSBX,0),U)_"^"_$$GET1^DIQ(52.6,$P(^PSB(53.79,PSBIEN,.6,PSBX,0),U)_",",.01)
 ..S $P(RESULTS(PSBCNT),U,4)=$P(^PSB(53.79,PSBIEN,.6,PSBX,0),U,2)_"^"_$P(^PSB(53.79,PSBIEN,.6,PSBX,0),U,3)_"^"_$P(^PSB(53.79,PSBIEN,.6,PSBX,0),U,4)
 .; LOOP - Place SOL in RESULTS
 .S PSBX=0 F  S PSBX=$O(^PSB(53.79,PSBIEN,.7,PSBX)) Q:'(+PSBX)  D
 ..S PSBCNT=PSBCNT+1
 ..S RESULTS(PSBCNT)="SOL^"_$P(^PSB(53.79,PSBIEN,.7,PSBX,0),U)_"^"_$$GET1^DIQ(52.7,$P(^PSB(53.79,PSBIEN,.7,PSBX,0),U)_",",.01)
 ..S $P(RESULTS(PSBCNT),U,4)=$P(^PSB(53.79,PSBIEN,.7,PSBX,0),U,2)_"^"_$P(^PSB(53.79,PSBIEN,.7,PSBX,0),U,3)_"^"_$P(^PSB(53.79,PSBIEN,.7,PSBX,0),U,4)
 .L -^PSB(53.79,PSBIEN)
 S:PSBCNT>0 RESULTS(0)=PSBCNT
 Q
 ;
SELSTTUS(RESULTS) ;
 ; Provide the SELectable STaTUS
 ;
 ; Get TAB, ScheduleType, Current Status, provide Selectable Staus(s) in ^8
 N PSBORTYP,PSBIVTYP,PSBINTSY,PSBCHMTY,PSBIVPSH,PSBXTAB,CNT
 K ^TMP("PSJ1",$J) D EN^PSJBCMA1($$GET1^DIQ(53.79,PSBIEN_",",.01,"I"),$$GET1^DIQ(53.79,PSBIEN_",",.11),1)
 I ^TMP("PSJ1",$J,0)>0 D
 .S PSBORTYP=$TR($P(^TMP("PSJ1",$J,0),U,3),"1234567890"),PSBIVTYP=$P(^TMP("PSJ1",$J,0),U,6)
 .S PSBINTSY=$P(^TMP("PSJ1",$J,0),U,7),PSBCHMTY=$P(^TMP("PSJ1",$J,0),U,8),PSBIVPSH=+$P($G(^TMP("PSJ1",$J,1,0)),U,2)
 .S:$$IVPTAB^PSBVDLU3(PSBORTYP,PSBIVTYP,PSBINTSY,PSBCHMTY,PSBIVPSH) PSBXTAB="PB"
 .D:'$D(PSBXTAB)
 ..I PSBORTYP="U" S PSBXTAB="UD"
 ..I PSBORTYP="V" S PSBXTAB="IV"
 ; Set Results(1) and other flags...
 I ^TMP("PSJ1",$J,0)>0 D
 .S $P(RESULTS(1),U,13)=$P(^TMP("PSJ1",$J,4),U)
 .S $P(RESULTS(1),U,14)=$P(^TMP("PSJ1",$J,1),U,10)
 .S $P(RESULTS(1),U,15)=$P(^TMP("PSJ1",$J,0),U,3)
 .I (PSBXTAB="UD"),($P(^TMP("PSJ1",$J,2),U,6)="PATCH") S PSBPTCHX=1
 .F CNT=0:0 S CNT=$O(^TMP("PSJ1",$J,700,CNT)) Q:'CNT  D
 ..S PSBMRRX=$P(^TMP("PSJ1",$J,700,CNT,0),U,7)                    ;*83
 .I PSBXTAB="IV" S PSBXIV=1
 .S:$G(PSBXTAB)]"" $P(RESULTS(1),U,11)=$G(PSBXTAB)
 K ^TMP("PSJ1",$J)
 Q
 ;
KILLAADT ;
 ;   Here because there is an errant index entry via version 1.0/2.0
 ;   Cleansing!
 ;
 K ^PSB(53.79,"AADT",DFN,PSBSRCH,PSBIEN)
 Q
 ;
PAD(VAL) ; Return VAL with leading zeroes padded to 6 characters
 Q $E("000000",1,6-$L(VAL))_VAL
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPSBMLLKU   13230     printed  Sep 23, 2025@19:16:12                                                                                                                                                                                                   Page 2
PSBMLLKU  ;BIRMINGHAM/TEJ - BCMA RPC LOOKUP UTLILITIES ;03/06/16 3:06pm
 +1       ;;3.0;BAR CODE MED ADMIN;**3,9,11,20,13,38,32,56,42,70,72,83,99**;Mar 2004;Build 9
 +2       ;Per VHA Directive 2004-038, this routine should not be modified.
 +3       ;
 +4       ; Reference/IA
 +5       ; EN^PSJBCMA1/2829
 +6       ; $$DOB^DPTLK1/3266
 +7       ; $$SSN^DPTLK1/3267
 +8       ; ^DPT/10035
 +9       ; ^XUSEC/10076
 +10      ; File 52.6/436
 +11      ; File 52.7/437
 +12      ; File 50/221
 +13      ; File 211.4/1409
 +14      ; $$UP^XLFSTR/10104
 +15      ;
 +16      ;*70 - create a lookup for Clinics that returns all patients per 
 +17      ;      clinic selected for Client to then pass one at a time for
 +18      ;      coversheet reports and enable the NEXT button for user
 +19      ;      selection to process the next DFN for a coversheet report.
 +20      ;*83 - return Injection/Dermal site encoded in piece 10.   |I or |D
 +21      ;      also set 16th piece if MRRs given on order.
 +22      ;      return HR & MRR flags pieces 7 & 8 on DD string.
 +23      ;
RPC(RESULTS,PSBREC) ; Remote Procedure Call Entry Point.
 +1       ;
 +2       ;*70 piece out mode if exists & reset 0 node for bkwds compatability
 +3        NEW PSBCLINORD
 +4        SET PSBCLINORD=$PIECE(PSBREC(0),U,2)
           SET PSBREC(0)=$PIECE(PSBREC(0),U)
 +5       ;
 +6        SET RESULTS=""
           DO @(PSBREC(0)_"(.RESULTS,.PSBREC)")
           QUIT 
 +7        QUIT 
 +8       ;
ADMLKUP(RESULTS,PSBREC) ;
 +1       ;  Lookup ADMinistrations per DFN and search DATE
 +2       ;   input - PSBREC(1)  DFN
 +3       ;           PSBREC(2)  Search DATE
 +4       ;
 +5       ;   outpt - RESULTS (array)
 +6       ;          (Administrations returned will be dated  = to Search Date
 +7       ;
 +8       ;
 +9        KILL RESULTS
 +10       SET DFN=PSBREC(1)
           SET PSBSRCH=$GET(PSBREC(2))
           IF $GET(PSBSRCH)']""
               DO NOW^%DTC
               SET PSBSRCH=$PIECE(%,".")
 +11       SET PSBDT=PSBSRCH
           SET PSBCNT=0
           if PSBSRCH'["."
               SET PSBSRCH=PSBSRCH+.9
 +12       SET RESULTS(0)=1
           SET RESULTS(1)="-1^No Meds Found!"
 +13       FOR 
               SET PSBSRCH=$ORDER(^PSB(53.79,"AADT",DFN,PSBSRCH),-1)
               if 'PSBSRCH!(PSBSRCH<PSBDT)
                   QUIT 
               Begin DoDot:1
 +14               SET PSBIEN=""
 +15               FOR 
                       SET PSBIEN=$ORDER(^PSB(53.79,"AADT",DFN,PSBSRCH,PSBIEN),-1)
                       if 'PSBIEN
                           QUIT 
                       if '$DATA(^PSB(53.79,PSBIEN))
                           DO KILLAADT
                       if '$DATA(^PSB(53.79,PSBIEN))
                           QUIT 
                       if $$CHKKEY(PSBIEN)
                           Begin DoDot:2
 +16                           LOCK +^PSB(53.79,PSBIEN):1
 +17                          IF $TEST
                                   LOCK -^PSB(53.79,PSBIEN)
 +18                          IF '$TEST
                                   QUIT 
 +19                           SET PSBXORDN=$$GET1^DIQ(53.79,PSBIEN_",",.11)
                               if '$DATA(^PSB(53.79,"AORDX",DFN,PSBXORDN,PSBSRCH))
                                   QUIT 
 +20                           if ($$GET1^DIQ(53.79,PSBIEN_",",.06,"I")>PSBSRCH)
                                   QUIT 
 +21                           if ($$GET1^DIQ(53.79,PSBIEN_",",.09,"I")="N")
                                   QUIT 
 +22                           SET PSBCNT=PSBCNT+1
                               SET RESULTS(PSBCNT)=PSBIEN
 +23                           SET $PIECE(RESULTS(PSBCNT),U,2)=PSBSRCH
 +24                           SET $PIECE(RESULTS(PSBCNT),U,3)=$$GET1^DIQ(53.79,PSBIEN_",",.08)
 +25                           if $$GET1^DIQ(53.79,PSBIEN_",",.26)
                                   SET $PIECE(RESULTS(PSBCNT),U,4)=$$GET1^DIQ(53.79,PSBIEN_",",.26)
 +26                           SET $PIECE(RESULTS(PSBCNT),U,5)=$SELECT($$GET1^DIQ(53.79,PSBIEN_",",.09,"I")']"":"U",1:$$GET1^DIQ(53.79,PSBIEN_",",.09,"I"))
 +27      ; Get order information
                               Begin DoDot:3
 +28                               KILL ^TMP("PSJ1",$JOB)
                                   DO EN^PSJBCMA1(DFN,PSBXORDN,1)
 +29      ;OItem_" "_Dosage Form
                                   SET $PIECE(RESULTS(PSBCNT),U,3)=$PIECE(^TMP("PSJ1",$JOB,2),U,2)
 +30      ;Sched Type
                                   SET $PIECE(RESULTS(PSBCNT),U,6)=$PIECE(^TMP("PSJ1",$JOB,4),U)
 +31                               KILL ^TMP("PSJ1",$JOB)
                               End DoDot:3
 +32                           SET $PIECE(RESULTS(PSBCNT),U,7)=$$GET1^DIQ(53.79,PSBIEN_",",.06,"I")
 +33      ;Get initials of who took action, PSB*3*72
                               SET $PIECE(RESULTS(PSBCNT),U,8)=$$GETINIT^PSBCSUTX(PSBIEN,"I")
 +34                           if $DATA(^PSB(53.79,PSBIEN,.2))
                                   SET $PIECE(RESULTS(PSBCNT),U,9)=$PIECE(^PSB(53.79,PSBIEN,.2),U)
                                   SET $PIECE(RESULTS(PSBCNT),U,10)=$PIECE(^PSB(53.79,PSBIEN,.2),U,2)
                           End DoDot:2
               End DoDot:1
 +35       if +$GET(RESULTS(1))>0
               SET $PIECE(RESULTS(0),U)=PSBCNT
 +36       QUIT 
 +37      ;
CHKKEY(PSBIENX) ;
 +1        IF '(($DATA(^XUSEC("PSB MANAGER",DUZ)))!($$GET1^DIQ(53.79,+PSBIENX,.07,"I")=DUZ))
               QUIT 0
 +2        QUIT 1
 +3       ;
PTLKUP(RESULTS,PSBREC) ; Patient lookup handled separately for security
 +1       ;   input - PSBREC (array)  User entered patient lookup data
 +2       ;
 +3       ;   outpt - RESULTS (array)
 +4       ;          (Person(s) in PATIENT File (#2) meeting search criteria)
 +5       ;
 +6       ;
 +7        NEW PSBNRSWD,PSBINDX,PSBRPT
 +8        KILL RESULTS,PSBDATA
 +9        KILL PSBPT
           SET PSBPT(0)=0
 +10       SET PSBINDX=""
           KILL ^TMP("DILIST",$JOB)
 +11       IF PSBCLINORD'="C"
               Begin DoDot:1
 +12               SET PSBDATA=$EXTRACT(PSBREC(1),1,60)
 +13      ; HRN/ASUFAC code
                   IF PSBDATA?12N!(PSBDATA?1.6N)&(DUZ("AG")="I")
                       Begin DoDot:2
 +14                       NEW X
 +15                       SET X=$$HRCNF^APSPFUNC($SELECT($LENGTH(PSBDATA)=12:PSBDATA,1:$$PAD($$GET1^DIQ(9999999.06,+DUZ(2),.12))_$$PAD(PSBDATA)))
 +16                       IF X<0
                               Begin DoDot:3
 +17                               SET RESULTS(0)=1
                                   SET RESULTS(1)="-1^No patients matching '"_PSBDATA_"'."
                               End DoDot:3
                               QUIT 
 +18                       SET RESULTS(0)=1
 +19                       SET RESULTS(1)=$$PTREC(X)
                       End DoDot:2
                       QUIT 
 +20               SET PSBDATA1=PSBDATA
 +21               IF $EXTRACT(PSBDATA,$LENGTH(PSBDATA)-10,60)=" [MAS WARD]"
                       SET PSBINDX="CN"
                       SET PSBDATA=$PIECE(PSBDATA," [MAS WARD]")
 +22               IF $EXTRACT(PSBDATA,$LENGTH(PSBDATA)-11,60)=" [NURS UNIT]"
                       SET PSBINDX="CN"
                       SET PSBDATA=$PIECE(PSBDATA," [NURS UNIT]")
                       Begin DoDot:2
 +23                       KILL PSBPT
                           SET PSBPT(0)=0
 +24      ;Update API, PSB*3*72
                           SET PSBZ=0
                           FOR 
                               SET PSBZ=$ORDER(^NURSF(211.4,PSBZ))
                               if PSBZ'?.N
                                   QUIT 
                               SET PSBNRSWD=$$GET1^DIQ(211.4,PSBZ_",",.01)
                               IF $$UP^XLFSTR(PSBNRSWD)=PSBDATA
                                   SET PSBY=PSBZ
                                   QUIT 
 +25                       KILL PSBDATA
                           SET PSBDATA=""
 +26                       SET PSBX=0
                           FOR 
                               SET PSBX=$ORDER(^NURSF(211.4,PSBY,3,PSBX))
                               if PSBX=""
                                   QUIT 
                               SET PSBDATA(PSBX)=$$GET1^DIQ(42,$PIECE(^NURSF(211.4,PSBY,3,PSBX,0),U)_",",.01)
                       End DoDot:2
               End DoDot:1
 +27      ;
 +28       IF PSBCLINORD="C"
               Begin DoDot:1
 +29      ;Clinic mode report - get and return array of all DFN's that belong
 +30      ;  to clinics passed in by user.
 +31               FOR QQ=0:0
                       SET QQ=$ORDER(PSBREC(QQ))
                       if 'QQ
                           QUIT 
                       Begin DoDot:2
 +32                       SET PSBRPT(2,QQ,0)=PSBREC(QQ)
 +33                       SET PSBRPT(2,"B",PSBREC(QQ),QQ)=""
                       End DoDot:2
 +34               SET PSBDATA=1
                   DO CLIN^PSBO(.PSBRPT,.PSBDATA)
 +35               IF $DATA(PSBDATA)=11
                       Begin DoDot:2
 +36                       NEW DFNXX
                           SET PSBCNT=0
 +37                       FOR DFNXX=0:0
                               SET DFNXX=$ORDER(PSBDATA(DFNXX))
                               if 'DFNXX
                                   QUIT 
                               Begin DoDot:3
 +38                               SET PSBCNT=PSBCNT+1
                                   SET RESULTS(PSBCNT)=$$PTREC(DFNXX)
                               End DoDot:3
                       End DoDot:2
 +39      ; check if any data found
 +40               IF '$DATA(RESULTS)
                       Begin DoDot:2
 +41                       SET RESULTS(0)=1
 +42                       SET RESULTS(1)="-1^No patients matching Clinic Search List"
                       End DoDot:2
 +43              IF '$TEST
                       Begin DoDot:2
 +44                       SET RESULTS(0)=+$ORDER(RESULTS(""),-1)
 +45                       SET PSBINDX="CN"
                       End DoDot:2
               End DoDot:1
 +46       IF PSBCLINORD="C"
               IF +RESULTS(1)=-1
                   QUIT 
 +47      ;
 +48       IF PSBINDX=""
               SET PSBINDX=$SELECT(PSBDATA?9N.1P:"SSN",PSBDATA?4N.1P:"BS5^BS",1:"B^BS5^SSN^CN^RM")
 +49       IF ($ORDER(PSBDATA(""))'>0)
               DO FIND^DIC(2,"","@;.01;.02;.03;.09","MP",PSBDATA,200,PSBINDX)
 +50       IF ($ORDER(PSBDATA(""))>0)
               Begin DoDot:1
 +51               SET PSBX=""
                   SET PSBY=1
                   FOR 
                       SET PSBX=$ORDER(PSBDATA(PSBX))
                       if PSBX=""
                           QUIT 
                       Begin DoDot:2
 +52                       DO FIND^DIC(2,"","@;.01;.02;.03;.09","MPO",PSBDATA(PSBX),200,PSBINDX)
 +53                       SET PSBZ=0
                           FOR 
                               SET PSBZ=$ORDER(^TMP("DILIST",$JOB,PSBZ))
                               if PSBZ=""
                                   QUIT 
                               SET PSBPT(PSBY,0)=^TMP("DILIST",$JOB,PSBZ,0)
                               SET PSBPT(0)=PSBY
                               SET PSBY=PSBY+1
                               IF PSBY>200
                                   SET $PIECE(PSBPT(0),U,3)=1
                       End DoDot:2
                       KILL ^TMP("DILIST",$JOB)
                       if $PIECE(PSBPT(0),U,3)=1
                           QUIT 
               End DoDot:1
 +54       if +$GET(PSBPT(0))=0
               KILL PSBPT
 +55       IF $DATA(PSBPT)
               MERGE ^TMP("DILIST",$JOB)=PSBPT
 +56       IF $PIECE($GET(^TMP("DILIST",$JOB,0)),U,3)
               Begin DoDot:1
 +57               SET RESULTS(0)=1
                   SET RESULTS(1)="-1^Too many patients found matching '"_PSBDATA1_"'. Please be more specific."
               End DoDot:1
               QUIT 
 +58       IF $DATA(^TMP("DILIST",$JOB,0))
               Begin DoDot:1
 +59               FOR PSBXX=0:0
                       SET PSBXX=$ORDER(^TMP("DILIST",$JOB,PSBXX))
                       if 'PSBXX
                           QUIT 
                       Begin DoDot:2
 +60                       SET RESULTS(PSBXX)=$$PTREC(+^TMP("DILIST",$JOB,PSBXX,0))
                       End DoDot:2
               End DoDot:1
 +61       IF '$DATA(RESULTS)
               SET RESULTS(0)=1
               SET RESULTS(1)="-1^No patients matching '"_PSBDATA1_"'"
 +62      IF '$TEST
               SET RESULTS(0)=+$ORDER(RESULTS(""),-1)
 +63       QUIT 
 +64      ;
PTREC(DFN) ;
 +1       ; Extrinsic to return a Pt Rec  in standard list format
 +2        NEW PSBXX
 +3        SET PSBXX=$GET(^DPT(DFN,0))
 +4        SET PSBXX=DFN_U_$PIECE(PSBXX,U,1)_U_$PIECE(PSBXX,U,2)_U_$PIECE(PSBXX,U,3)_U_$SELECT(DUZ("AG")="I":$$HRCNF^BDGF2(DFN,DUZ(2)),1:$PIECE(PSBXX,U,9))
 +5        SET $PIECE(PSBXX,U,6)=$$GET1^DIQ(2,DFN_",",.1)
 +6        SET $PIECE(PSBXX,U,7)=$$GET1^DIQ(2,DFN_",",.101)
 +7        SET $PIECE(PSBXX,U,10)=$$DOB^DPTLK1(DFN)
 +8        SET $PIECE(PSBXX,U,11)=$SELECT(DUZ("AG")="I":$$HRN^AUPNPAT(DFN,DUZ(2)),1:$$SSN^DPTLK1(DFN))
 +9        QUIT PSBXX
 +10      ;
SELECTAD(RESULTS,PSBREC) ; Select Administration
 +1       ;
 +2       ;  Process the SELECTed ADministration
 +3       ;   input - PSBREC(1) = PSB Med Log File (#53.79) IEN
 +4       ;
 +5       ;
 +6       ;   outpt - RESULTS (array)
 +7       ;          (Administration data that can be subsequently updated via GUI MED LOG EDIT)
 +8       ;
 +9       ;
 +10       KILL RESULTS,PSBXIV,PSBPTCHX
 +11      ;*83
           NEW ISIT,DSIT,PSBMRRX
 +12       NEW PSBIEN,PSBCNT,PSBX
           SET PSBIEN=PSBREC(1)
           SET PSBCNT=2
 +13      ; Construct form data    Patient^SSN^Med^BagID^AdminStat^AdminD/T^InjctSt^PRNReas^PRNEff^DisDrg^UntsGiven^Unt^
 +14       SET RESULTS(0)=0
 +15       if $$CHKKEY(PSBIEN)
               Begin DoDot:1
 +16               LOCK +^PSB(53.79,PSBIEN):1
 +17              IF '$TEST
                       IF $PIECE(^PSB(53.79,PSBIEN,0),U,9)]""
                           SET PSBCNT=1
                           SET RESULTS(1)="-1^ This administration is being modified by another process at this moment."
                           LOCK -^PSB(53.79,PSBIEN)
                           QUIT 
 +18               SET $PIECE(RESULTS(1),U)=PSBIEN
 +19               SET $PIECE(RESULTS(1),U,2)=$$GET1^DIQ(53.79,PSBIEN_",",.01,"I")
 +20               SET $PIECE(RESULTS(1),U,3)=$$GET1^DIQ(53.79,PSBIEN_",",.01)
 +21               SET $PIECE(RESULTS(1),U,4)=$$GET1^DIQ(2,$PIECE(RESULTS(1),U,2)_",",.09)
 +22               SET $PIECE(RESULTS(1),U,5)=$$GET1^DIQ(53.79,PSBIEN_",",.08,"I")_"~"_$$GET1^DIQ(53.79,PSBIEN_",",.08)
 +23               SET $PIECE(RESULTS(1),U,6)=$$GET1^DIQ(53.79,PSBIEN_",",.26)
 +24               SET $PIECE(RESULTS(1),U,7)=$SELECT($$GET1^DIQ(53.79,PSBIEN_",",.09,"I")']"":"U",1:$$GET1^DIQ(53.79,PSBIEN_",",.09,"I"))
 +25      ;
 +26      ; Amend RESULTS(1) data...
                   if ($PIECE(RESULTS(1),U,7)'="N")&($PIECE(RESULTS(1),U,7)]"")
                       DO SELSTTUS(.RESULTS)
 +27               SET Y=$EXTRACT($$GET1^DIQ(53.79,PSBIEN_",",.06,"I"),1,12)
                   DO DD^%DT
 +28               SET $PIECE(RESULTS(1),U,8)=Y
 +29               SET $PIECE(RESULTS(1),U,9)=$$GET1^DIQ(53.79,PSBIEN_",",.06,"I")
 +30      ;Inj vs Derm site                                                *83
 +31               SET ISIT=$$GET1^DIQ(53.79,PSBIEN_",",.16)
 +32               SET DSIT=$$GET1^DIQ(53.79,PSBIEN_",",.18)
 +33               SET $PIECE(RESULTS(1),U,10)=$SELECT(ISIT]"":ISIT_"|I",DSIT]"":DSIT_"|D",1:"")
 +34      ;
 +35               SET $PIECE(RESULTS(1),U,16)=0
 +36               SET $PIECE(RESULTS(2),U)=$$GET1^DIQ(53.79,PSBIEN_",",.21)
                   SET $PIECE(RESULTS(2),U,2)=$$GET1^DIQ(53.79,PSBIEN_",",.22)
 +37      ;
 +38      ;Determine if there are any active MRRs/IVs/Patches per order
 +39      ;  MRRs - check MRRs first                                       *83
 +40               if $GET(PSBMRRX)
                       Begin DoDot:2
 +41                       SET PSBX=""
                           SET PSBX="^PSB(53.79,""AMRR"","_$PIECE(RESULTS(1),U,2)_")"
 +42                       FOR 
                               SET PSBX=$QUERY(@PSBX)
                               if PSBX=""
                                   QUIT 
                               if $QSUBSCRIPT(PSBX,3)'=$PIECE(RESULTS(1),U,2)
                                   QUIT 
                               Begin DoDot:3
 +43                               SET PSBXX=$QSUBSCRIPT(PSBX,5)
                                   SET PSBXXX=$SELECT(($PIECE(^PSB(53.79,PSBXX,0),U,9)="G")&(PSBXX'=PSBIEN):1,1:0)
 +44                               IF PSBXXX&($PIECE(^PSB(53.79,PSBXX,.1),U)=$PIECE(RESULTS(1),U,15))
                                       SET $PIECE(RESULTS(1),U,16)=1
                               End DoDot:3
                               if $PIECE(RESULTS(1),U,16)
                                   QUIT 
                       End DoDot:2
 +45      ;
 +46      ;  Patches - check if flag not already set   
 +47      ;*83
                   if $GET(PSBPTCHX)&('($PIECE(RESULTS(1),U,16)))
                       Begin DoDot:2
 +48                       SET PSBX=""
                           SET PSBX="^PSB(53.79,""APATCH"","_$PIECE(RESULTS(1),U,2)_")"
 +49                       FOR 
                               SET PSBX=$QUERY(@PSBX)
                               if PSBX=""
                                   QUIT 
                               if $QSUBSCRIPT(PSBX,3)'=$PIECE(RESULTS(1),U,2)
                                   QUIT 
                               Begin DoDot:3
 +50                               SET PSBXX=$QSUBSCRIPT(PSBX,5)
                                   SET PSBXXX=$SELECT(($PIECE(^PSB(53.79,PSBXX,0),U,9)="G")&(PSBXX'=PSBIEN):1,1:0)
 +51                               IF PSBXXX&($PIECE(^PSB(53.79,PSBXX,.1),U)=$PIECE(RESULTS(1),U,15))
                                       SET $PIECE(RESULTS(1),U,16)=1
                               End DoDot:3
                               if $PIECE(RESULTS(1),U,16)
                                   QUIT 
                       End DoDot:2
 +52      ;
 +53      ;  IV's - check if flag not already set
 +54      ;*83
                   if $GET(PSBXIV)&('($PIECE(RESULTS(1),U,16)))
                       Begin DoDot:2
 +55                       SET PSBX=""
                           SET PSBX="^PSB(53.79,""AUID"","_$PIECE(RESULTS(1),U,2)_")"
 +56                       FOR 
                               SET PSBX=$QUERY(@PSBX)
                               if PSBX=""
                                   QUIT 
                               if $QSUBSCRIPT(PSBX,3)'=$PIECE(RESULTS(1),U,2)
                                   QUIT 
                               if $QSUBSCRIPT(PSBX,4)>$PIECE(RESULTS(1),U,15)
                                   QUIT 
                               Begin DoDot:3
 +57                               if $QSUBSCRIPT(PSBX,4)'=$PIECE(RESULTS(1),U,15)
                                       QUIT 
 +58                               SET PSBXX=$QSUBSCRIPT(PSBX,6)
                                   if (PSBXX'=PSBIEN)
                                       SET $PIECE(RESULTS(1),U,16)=$SELECT($PIECE(^PSB(53.79,PSBXX,0),U,9)="I":1,$PIECE(^PSB(53.79,PSBXX,0),U,9)="S":1,1:0)
                               End DoDot:3
                               if $PIECE(RESULTS(1),U,16)
                                   QUIT 
                       End DoDot:2
 +59      ;
 +60      ; LOOP - Place DD in RESULTS
 +61               SET PSBX=0
                   FOR 
                       SET PSBX=$ORDER(^PSB(53.79,PSBIEN,.5,PSBX))
                       if '(+PSBX)
                           QUIT 
                       Begin DoDot:2
 +62                       SET PSBCNT=PSBCNT+1
 +63                       SET RESULTS(PSBCNT)="DD^"_$PIECE(^PSB(53.79,PSBIEN,.5,PSBX,0),U)_"^"_$$GET1^DIQ(50,$PIECE(^PSB(53.79,PSBIEN,.5,PSBX,0),U)_",",.01)
 +64                       SET $PIECE(RESULTS(PSBCNT),U,4)=$PIECE(^PSB(53.79,PSBIEN,.5,PSBX,0),U,2)_"^"_$PIECE(^PSB(53.79,PSBIEN,.5,PSBX,0),U,3)_"^"_$PIECE(^PSB(53.79,PSBIEN,.5,PSBX,0),U,4)
 +65                       if $PIECE(RESULTS(PSBCNT),U,4)?1"."1.N
                               SET $PIECE(RESULTS(PSBCNT),U,4)=0_+$PIECE(RESULTS(PSBCNT),U,4)
 +66                       if $PIECE(RESULTS(PSBCNT),U,5)?1"."1.N
                               SET $PIECE(RESULTS(PSBCNT),U,5)=0_+$PIECE(RESULTS(PSBCNT),U,5)
 +67      ;  send HR & MRR flags in DD pce 7 & 8 to insure returned
 +68      ;  for Edit Transaction calls
 +69      ;*83
                           SET $PIECE(RESULTS(PSBCNT),U,7)=$PIECE(^PSB(53.79,PSBIEN,.5,PSBX,0),U,5)
 +70      ;*83
                           SET $PIECE(RESULTS(PSBCNT),U,8)=$PIECE(^PSB(53.79,PSBIEN,.5,PSBX,0),U,6)
                       End DoDot:2
 +71      ; LOOP - Place ADD in RESULTS
 +72               SET PSBX=0
                   FOR 
                       SET PSBX=$ORDER(^PSB(53.79,PSBIEN,.6,PSBX))
                       if '(+PSBX)
                           QUIT 
                       Begin DoDot:2
 +73                       SET PSBCNT=PSBCNT+1
 +74                       SET RESULTS(PSBCNT)="ADD^"_$PIECE(^PSB(53.79,PSBIEN,.6,PSBX,0),U)_"^"_$$GET1^DIQ(52.6,$PIECE(^PSB(53.79,PSBIEN,.6,PSBX,0),U)_",",.01)
 +75                       SET $PIECE(RESULTS(PSBCNT),U,4)=$PIECE(^PSB(53.79,PSBIEN,.6,PSBX,0),U,2)_"^"_$PIECE(^PSB(53.79,PSBIEN,.6,PSBX,0),U,3)_"^"_$PIECE(^PSB(53.79,PSBIEN,.6,PSBX,0),U,4)
                       End DoDot:2
 +76      ; LOOP - Place SOL in RESULTS
 +77               SET PSBX=0
                   FOR 
                       SET PSBX=$ORDER(^PSB(53.79,PSBIEN,.7,PSBX))
                       if '(+PSBX)
                           QUIT 
                       Begin DoDot:2
 +78                       SET PSBCNT=PSBCNT+1
 +79                       SET RESULTS(PSBCNT)="SOL^"_$PIECE(^PSB(53.79,PSBIEN,.7,PSBX,0),U)_"^"_$$GET1^DIQ(52.7,$PIECE(^PSB(53.79,PSBIEN,.7,PSBX,0),U)_",",.01)
 +80                       SET $PIECE(RESULTS(PSBCNT),U,4)=$PIECE(^PSB(53.79,PSBIEN,.7,PSBX,0),U,2)_"^"_$PIECE(^PSB(53.79,PSBIEN,.7,PSBX,0),U,3)_"^"_$PIECE(^PSB(53.79,PSBIEN,.7,PSBX,0),U,4)
                       End DoDot:2
 +81               LOCK -^PSB(53.79,PSBIEN)
               End DoDot:1
 +82       if PSBCNT>0
               SET RESULTS(0)=PSBCNT
 +83       QUIT 
 +84      ;
SELSTTUS(RESULTS) ;
 +1       ; Provide the SELectable STaTUS
 +2       ;
 +3       ; Get TAB, ScheduleType, Current Status, provide Selectable Staus(s) in ^8
 +4        NEW PSBORTYP,PSBIVTYP,PSBINTSY,PSBCHMTY,PSBIVPSH,PSBXTAB,CNT
 +5        KILL ^TMP("PSJ1",$JOB)
           DO EN^PSJBCMA1($$GET1^DIQ(53.79,PSBIEN_",",.01,"I"),$$GET1^DIQ(53.79,PSBIEN_",",.11),1)
 +6        IF ^TMP("PSJ1",$JOB,0)>0
               Begin DoDot:1
 +7                SET PSBORTYP=$TRANSLATE($PIECE(^TMP("PSJ1",$JOB,0),U,3),"1234567890")
                   SET PSBIVTYP=$PIECE(^TMP("PSJ1",$JOB,0),U,6)
 +8                SET PSBINTSY=$PIECE(^TMP("PSJ1",$JOB,0),U,7)
                   SET PSBCHMTY=$PIECE(^TMP("PSJ1",$JOB,0),U,8)
                   SET PSBIVPSH=+$PIECE($GET(^TMP("PSJ1",$JOB,1,0)),U,2)
 +9                if $$IVPTAB^PSBVDLU3(PSBORTYP,PSBIVTYP,PSBINTSY,PSBCHMTY,PSBIVPSH)
                       SET PSBXTAB="PB"
 +10               if '$DATA(PSBXTAB)
                       Begin DoDot:2
 +11                       IF PSBORTYP="U"
                               SET PSBXTAB="UD"
 +12                       IF PSBORTYP="V"
                               SET PSBXTAB="IV"
                       End DoDot:2
               End DoDot:1
 +13      ; Set Results(1) and other flags...
 +14       IF ^TMP("PSJ1",$JOB,0)>0
               Begin DoDot:1
 +15               SET $PIECE(RESULTS(1),U,13)=$PIECE(^TMP("PSJ1",$JOB,4),U)
 +16               SET $PIECE(RESULTS(1),U,14)=$PIECE(^TMP("PSJ1",$JOB,1),U,10)
 +17               SET $PIECE(RESULTS(1),U,15)=$PIECE(^TMP("PSJ1",$JOB,0),U,3)
 +18               IF (PSBXTAB="UD")
                       IF ($PIECE(^TMP("PSJ1",$JOB,2),U,6)="PATCH")
                           SET PSBPTCHX=1
 +19               FOR CNT=0:0
                       SET CNT=$ORDER(^TMP("PSJ1",$JOB,700,CNT))
                       if 'CNT
                           QUIT 
                       Begin DoDot:2
 +20      ;*83
                           SET PSBMRRX=$PIECE(^TMP("PSJ1",$JOB,700,CNT,0),U,7)
                       End DoDot:2
 +21               IF PSBXTAB="IV"
                       SET PSBXIV=1
 +22               if $GET(PSBXTAB)]""
                       SET $PIECE(RESULTS(1),U,11)=$GET(PSBXTAB)
               End DoDot:1
 +23       KILL ^TMP("PSJ1",$JOB)
 +24       QUIT 
 +25      ;
KILLAADT  ;
 +1       ;   Here because there is an errant index entry via version 1.0/2.0
 +2       ;   Cleansing!
 +3       ;
 +4        KILL ^PSB(53.79,"AADT",DFN,PSBSRCH,PSBIEN)
 +5        QUIT 
 +6       ;
PAD(VAL)  ; Return VAL with leading zeroes padded to 6 characters
 +1        QUIT $EXTRACT("000000",1,6-$LENGTH(VAL))_VAL