Changeset 623 for WorldVistAEHR/trunk/r/BAR_CODE_MED_ADMIN-ALPB-PSB
- Timestamp:
- Dec 4, 2009, 12:11:15 AM (15 years ago)
- Location:
- WorldVistAEHR/trunk/r/BAR_CODE_MED_ADMIN-ALPB-PSB
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
WorldVistAEHR/trunk/r/BAR_CODE_MED_ADMIN-ALPB-PSB/ALPBGEN1.m
r613 r623 1 ALPBGEN1 ;SFVAMC/JC - Parse and File HL7 PMU messages ;05/10/07 2 ;;3.0;BAR CODE MED ADMIN;**8,37**;Mar 2004;Build 10 3 ;;Per VHA Directive 2004-038, this routine should not be modified. 4 Q 5 ; 6 PARSIT ;PARSE MESSAGE ON RECEIVING SIDE 7 N FS,EC,CS,RS,ESC,SS,EEC,EFS,ECS,ERS,ESS,ALPBID,ALPBKY,ALPBMENU,ALPBMT,ALPBVC,DATE,DIK,DLAYGO,STF 8 S FS=$G(HL("FS")) I FS="" W !,"NO SEPARATOR" Q:FS="" ;Field separator 9 S EC=$G(HL("ECH")) Q:EC="" ;Encoding Charaters 10 S CS=$E(EC) ;Component separator 11 S RS=$E(EC,2) ;Repitition separator 12 S ESC=$E(EC,3) ;Escape character 13 S SS=$E(EC,4) ;Subcomponent separator 14 S EEC=ESC_"E"_ESC ;escaped escape character 15 S EFS=ESC_"F"_ESC ;escaped field sep 16 S ECS=ESC_"S"_ESC ;escaped component sep 17 S ERS=ESC_"R"_ESC ; escaped repitition sep 18 S ESS=ESC_"T"_ESC ;escaped subcomponent separator 19 N ALPBI,ALBPJ,ALPBX,ALPBAC,ACLPVC,ALPBSSN,ALPBERR,ALPBNAM,ALPBTRM 20 F X HLNEXT Q:$G(HLQUIT)'>0 D 21 . I $E(HLNODE,1,3)="EVN" S ALPBMT=$P(HLNODE,2) 22 . I $E(HLNODE,1,3)="STF" S STF=$E(HLNODE,5,9999) D PSTF 23 Q 24 PSTF ;Process STF segment 25 S ALPBKY=$P(STF,FS,1) Q:ALPBKY'[200_CS_"VISTA" 26 S ALPBID=$P(STF,FS,2) S ALPBSSN=$E(ALPBID,1,9),ALPBAC=$P(ALPBID,RS,2),ALPBVC=$P(ALPBID,RS,3) D 27 . S ALPBSSN=$TR(ALPBSSN,"-","") 28 . I ALPBAC']"" S ALERR("ACCESS")="MISSING ACCESS CODE" 29 . I ALPBVC']"" S ALERR("VERIFY")="MISSING VERIFY CODE" 30 . ;Unescape Access Code 31 . S ALPBAC=$$UNESC(ALPBAC) 32 . ;Unescape Verify Code 33 . S ALPBVC=$$UNESC(ALPBVC) 34 S ALPBNAM=$P(STF,FS,3),ALPBNAM=$P(ALPBNAM,CS,1)_","_$P(ALPBNAM,CS,2)_" "_$P(ALPBNAM,CS,3)_" "_$P(ALPBNAM,CS,4) I ALPBNAM[" " S ALPBNAM=$TR(ALPBNAM," ","") I ALPBNAM']"" S ALERR("NAME")="MISSING NAME" 35 I $D(ALERR) G PERR 36 S ALPBDIS=$S($P(STF,FS,7)="I":1,1:0) 37 I $P(STF,FS,13)]"" S ALPBTRM=$$HL7TFM^XLFDT($P(STF,FS,13),"L") 38 FILE ;Store File 200 data on backup system 39 N Y,DIC,DIE,DA,DR 40 Q:'$D(ALPBNAM) 41 Q:$L(ALPBSSN)'=9 42 ;Try exact SSn lookup first 43 K Y S DIC="^VA(200,",DIC(0)="X",X=ALPBSSN,D="SSN" D IX^DIC 44 ;S DLAYGO=200,DIC="^VA(200,",DIC(0)="LM",X=ALPBNAM D ^DIC K DIC,DA,DR 45 ;If SSN lookup fails, try name lookup and add 46 I +Y<1 S DLAYGO=200,DIC="^VA(200,",DIC(0)="LM",X=ALPBNAM D ^DIC K DIC,DA,DR 47 I +Y>0 S (ALPBDA,DA,DUZ)=+Y S ALPBMENU=$O(^DIC(19,"B","PSB BCBU WRKSTN MAIN",0)) D 48 . S DIE="^VA(200,",DR="2////^S X=ALPBAC" 49 . ;Update name too 50 . S DR=DR_";.01////^S X=ALPBNAM" 51 . I ALPBDIS]"" S DR=DR_";7////^S X=ALPBDIS" 52 . I ALPBSSN]"",$L(ALPBSSN)=9 S DR=DR_";9////^S X=ALPBSSN" 53 . I ALPBVC]"" S DR=DR_";11////^S X=ALPBVC" 54 . I +ALPBMENU S DR=DR_";201////^S X=ALPBMENU" 55 . I $G(ALPBTRM)]"" S DR=DR_";9.2////^S X=ALPBTRM" 56 . I $G(DR)]"" D ^DIE K DIC,DA,DR S DIK=DIE,DA=ALPBDA D IX1^DIK 57 K ALPBDA,HL,ALPBDIS,ALPBI,ALBPJ,ALPBX,ALPBAC,ACLPVC,ALPBSSN,ALERR,ALPBNAM,ALPBTRM 58 Q 59 UNESC(ST,PR) ;Unescape string from message 60 ;ST=String to translate 61 ;PR=Event Protocol to set up HL array variables (optional) 62 ;First, do the escape character 63 I $G(ST)="" Q "" 64 S PR=$G(PR) I PR]"" D INIT^HLFNC2(PR,.HL) 65 I '$D(HL) D 66 . S HL("FS")="^" 67 . S HL("ECH")="~|\&" 68 S FS=$G(HL("FS")) I FS="" Q "" ;Field separator 69 S EC=$G(HL("ECH")) I EC="" Q "" ;Encoding Charaters 70 S CS=$E(EC) ;Component separator 71 S RS=$E(EC,2) ;Repitition separator 72 S ESC=$E(EC,3) ;Escape character 73 S SS=$E(EC,4) ;Subcomponent separator 74 S EEC=ESC_"E"_ESC ;escaped escape character 75 S EFS=ESC_"F"_ESC ;escaped field sep 76 S ECS=ESC_"S"_ESC ;escaped component sep 77 S ERS=ESC_"R"_ESC ; escaped repitition sep 78 S ESS=ESC_"T"_ESC ;escaped subcomponent separator 79 K I,J,K,L,X F S X=$F(ST,EEC) S:X I=$G(I)+1,K(I)=$E(ST,1,X-1),ST=$E(ST,X,999) S:'X K($G(I)+1)=ST Q:'X 80 S I=0 F S I=$O(K(I)) Q:I<1 S:K(I)[EEC K(I)=$P(K(I),EEC)_ESC S L=$G(L)_K(I) 81 I $G(L)]"" S ST=L 82 ; 83 K I,J,K,L,X F S X=$F(ST,EFS) S:X I=$G(I)+1,K(I)=$E(ST,1,X-1),ST=$E(ST,X,999) S:'X K($G(I)+1)=ST Q:'X 84 S I=0 F S I=$O(K(I)) Q:I<1 S:K(I)[EFS K(I)=$P(K(I),EFS)_FS S L=$G(L)_K(I) 85 I $G(L)]"" S ST=L 86 ; 87 K I,J,K,L,X S I=0 F S X=$F(ST,ECS) S:X I=$G(I)+1,K(I)=$E(ST,1,X-1),ST=$E(ST,X,999) S:'X K(I+1)=ST Q:'X 88 S I=0 F S I=$O(K(I)) Q:I<1 S:K(I)[ECS K(I)=$P(K(I),ECS)_CS S L=$G(L)_K(I) 89 I $G(L)]"" S ST=L 90 ; 91 K I,J,K,L,X S I=0 F S X=$F(ST,ERS) S:X I=$G(I)+1,K(I)=$E(ST,1,X-1),ST=$E(ST,X,999) S:'X K(I+1)=ST Q:'X 92 S I=0 F S I=$O(K(I)) Q:I<1 S:K(I)[ERS K(I)=$P(K(I),ERS)_RS S L=$G(L)_K(I) 93 I $G(L)]"" S ST=L 94 ; 95 K I,J,K,L,X S I=0 F S X=$F(ST,ESS) S:X I=$G(I)+1,K(I)=$E(ST,1,X-1),ST=$E(ST,X,999) S:'X K(I+1)=ST Q:'X 96 S I=0 F S I=$O(K(I)) Q:I<1 S:K(I)[ESS K(I)=$P(K(I),ESS)_SS S L=$G(L)_K(I) 97 I $G(L)]"" S ST=L 98 K I,J,K,L,X 99 Q ST 100 PERR ;PROCESSING ERRORS 101 H 1 S DATE=$$NOW^XLFDT M ^TMP("BCBU",$J,$S($G(ALPBSSN)'="":ALPBSSN,1:0),DATE)=ALERR 102 K ALERR 103 Q 1 ALPBGEN1 ;SFVAMC/JC - Parse and File HL7 PMU messages ;04/30/2003 07:59 2 ;;3.0;BAR CODE MED ADMIN;**8**;Mar 2004 3 Q 4 ; 5 PARSIT ;PARSE MESSAGE ON RECEIVING SIDE 6 N FS,EC,CS,RS,ESC,SS,EEC,EFS,ECS,ERS,ESS,ALPBID,ALPBKY,ALPBMENU,ALPBMT,ALPBVC,DATE,DIK,DLAYGO,STF 7 S FS=$G(HL("FS")) I FS="" W !,"NO SEPARATOR" Q:FS="" ;Field separator 8 S EC=$G(HL("ECH")) Q:EC="" ;Encoding Charaters 9 S CS=$E(EC) ;Component separator 10 S RS=$E(EC,2) ;Repitition separator 11 S ESC=$E(EC,3) ;Escape character 12 S SS=$E(EC,4) ;Subcomponent separator 13 S EEC=ESC_"E"_ESC ;escaped escape character 14 S EFS=ESC_"F"_ESC ;escaped field sep 15 S ECS=ESC_"S"_ESC ;escaped component sep 16 S ERS=ESC_"R"_ESC ; escaped repitition sep 17 S ESS=ESC_"T"_ESC ;escaped subcomponent separator 18 N ALPBI,ALBPJ,ALPBX,ALPBAC,ACLPVC,ALPBSSN,ALPBERR,ALPBNAM,ALPBTRM 19 F X HLNEXT Q:$G(HLQUIT)'>0 D 20 . I $E(HLNODE,1,3)="EVN" S ALPBMT=$P(HLNODE,2) 21 . I $E(HLNODE,1,3)="STF" S STF=$E(HLNODE,5,9999) D PSTF 22 Q 23 PSTF ;Process STF segment 24 S ALPBKY=$P(STF,FS,1) Q:ALPBKY'[200_CS_"VISTA" 25 S ALPBID=$P(STF,FS,2) S ALPBSSN=$E(ALPBID,1,9),ALPBAC=$P(ALPBID,RS,2),ALPBVC=$P(ALPBID,RS,3) D 26 . S ALPBSSN=$TR(ALPBSSN,"-","") 27 . I ALPBAC']"" S ALERR("ACCESS")="MISSING ACCESS CODE" 28 . I ALPBVC']"" S ALERR("VERIFY")="MISSING VERIFY CODE" 29 . ;Unescape Access Code 30 . S ALPBAC=$$UNESC(ALPBAC) 31 . ;Unescape Verify Code 32 . S ALPBVC=$$UNESC(ALPBVC) 33 S ALPBNAM=$P(STF,FS,3),ALPBNAM=$P(ALPBNAM,CS,1)_","_$P(ALPBNAM,CS,2)_" "_$P(ALPBNAM,CS,3)_" "_$P(ALPBNAM,CS,4) I ALPBNAM[" " S ALPBNAM=$TR(ALPBNAM," ","") I ALPBNAM']"" S ALERR("NAME")="MISSING NAME" 34 I $D(ALERR) G PERR 35 S ALPBDIS=$S($P(STF,FS,7)="I":1,1:0) 36 I $P(STF,FS,13)]"" S ALPBTRM=$$HL7TFM^XLFDT($P(STF,FS,13),"L") 37 FILE ;Store File 200 data on backup system 38 N Y,DIC,DIE,DA,DR 39 Q:'$D(ALPBNAM) 40 Q:$L(ALPBSSN)'=9 41 ;Try exact SSn lookup first 42 K Y S DIC="^VA(200,",DIC(0)="X",X=ALPBSSN,D="SSN" D IX^DIC 43 ;S DLAYGO=200,DIC="^VA(200,",DIC(0)="LM",X=ALPBNAM D ^DIC K DIC,DA,DR 44 ;If SSN lookup fails, try name lookup and add 45 I +Y<1 S DLAYGO=200,DIC="^VA(200,",DIC(0)="LM",X=ALPBNAM D ^DIC K DIC,DA,DR 46 I +Y>0 S (ALPBDA,DA)=+Y S ALPBMENU=$O(^DIC(19,"B","PSB BCBU WRKSTN MAIN",0)) D 47 . S DIE="^VA(200,",DR="2////^S X=ALPBAC" 48 . ;Update name too 49 . S DR=DR_";.01////^S X=ALPBNAM" 50 . I ALPBDIS]"" S DR=DR_";7////^S X=ALPBDIS" 51 . I ALPBSSN]"",$L(ALPBSSN)=9 S DR=DR_";9////^S X=ALPBSSN" 52 . I ALPBVC]"" S DR=DR_";11////^S X=ALPBVC" 53 . I +ALPBMENU S DR=DR_";201////^S X=ALPBMENU" 54 . I $G(ALPBTRM)]"" S DR=DR_";9.2////^S X=ALPBTRM" 55 . I $G(DR)]"" D ^DIE K DIC,DA,DR S DIK=DIE,DA=ALPBDA D IX1^DIK 56 K ALPBDA,HL,ALPBDIS,ALPBI,ALBPJ,ALPBX,ALPBAC,ACLPVC,ALPBSSN,ALERR,ALPBNAM,ALPBTRM 57 Q 58 UNESC(ST,PR) ;Unescape string from message 59 ;ST=String to translate 60 ;PR=Event Protocol to set up HL array variables (optional) 61 ;First, do the escape character 62 I $G(ST)="" Q "" 63 S PR=$G(PR) I PR]"" D INIT^HLFNC2(PR,.HL) 64 I '$D(HL) D 65 . S HL("FS")="^" 66 . S HL("ECH")="~|\&" 67 S FS=$G(HL("FS")) I FS="" Q "" ;Field separator 68 S EC=$G(HL("ECH")) I EC="" Q "" ;Encoding Charaters 69 S CS=$E(EC) ;Component separator 70 S RS=$E(EC,2) ;Repitition separator 71 S ESC=$E(EC,3) ;Escape character 72 S SS=$E(EC,4) ;Subcomponent separator 73 S EEC=ESC_"E"_ESC ;escaped escape character 74 S EFS=ESC_"F"_ESC ;escaped field sep 75 S ECS=ESC_"S"_ESC ;escaped component sep 76 S ERS=ESC_"R"_ESC ; escaped repitition sep 77 S ESS=ESC_"T"_ESC ;escaped subcomponent separator 78 K I,J,K,L,X F S X=$F(ST,EEC) S:X I=$G(I)+1,K(I)=$E(ST,1,X-1),ST=$E(ST,X,999) S:'X K($G(I)+1)=ST Q:'X 79 S I=0 F S I=$O(K(I)) Q:I<1 S:K(I)[EEC K(I)=$P(K(I),EEC)_ESC S L=$G(L)_K(I) 80 I $G(L)]"" S ST=L 81 ; 82 K I,J,K,L,X F S X=$F(ST,EFS) S:X I=$G(I)+1,K(I)=$E(ST,1,X-1),ST=$E(ST,X,999) S:'X K($G(I)+1)=ST Q:'X 83 S I=0 F S I=$O(K(I)) Q:I<1 S:K(I)[EFS K(I)=$P(K(I),EFS)_FS S L=$G(L)_K(I) 84 I $G(L)]"" S ST=L 85 ; 86 K I,J,K,L,X S I=0 F S X=$F(ST,ECS) S:X I=$G(I)+1,K(I)=$E(ST,1,X-1),ST=$E(ST,X,999) S:'X K(I+1)=ST Q:'X 87 S I=0 F S I=$O(K(I)) Q:I<1 S:K(I)[ECS K(I)=$P(K(I),ECS)_CS S L=$G(L)_K(I) 88 I $G(L)]"" S ST=L 89 ; 90 K I,J,K,L,X S I=0 F S X=$F(ST,ERS) S:X I=$G(I)+1,K(I)=$E(ST,1,X-1),ST=$E(ST,X,999) S:'X K(I+1)=ST Q:'X 91 S I=0 F S I=$O(K(I)) Q:I<1 S:K(I)[ERS K(I)=$P(K(I),ERS)_RS S L=$G(L)_K(I) 92 I $G(L)]"" S ST=L 93 ; 94 K I,J,K,L,X S I=0 F S X=$F(ST,ESS) S:X I=$G(I)+1,K(I)=$E(ST,1,X-1),ST=$E(ST,X,999) S:'X K(I+1)=ST Q:'X 95 S I=0 F S I=$O(K(I)) Q:I<1 S:K(I)[ESS K(I)=$P(K(I),ESS)_SS S L=$G(L)_K(I) 96 I $G(L)]"" S ST=L 97 K I,J,K,L,X 98 Q ST 99 PERR ;PROCESSING ERRORS 100 H 1 S DATE=$$NOW^XLFDT M ^TMP("BCBU",$J,$S($G(ALPBSSN)'="":ALPBSSN,1:0),DATE)=ALERR 101 K ALERR 102 Q -
WorldVistAEHR/trunk/r/BAR_CODE_MED_ADMIN-ALPB-PSB/ALPBINP.m
r613 r623 1 ALPBINP ;OIFO-DALLAS/SED/KC/MW BCMA - BCBU INPT TO HL7 ;5/2/2002 2 ;;3.0;BAR CODE MED ADMIN;**8,37**;May 2007;Build 10 3 ;;Per VHA Directive 2004-038, this routine should not be modified. 4 ;This routine will intercept the HL7 message that it sent from Pharmacy 5 ;to CPRS to update order information. The message is then parsed and 6 ;repackage so it can be sent to the BCBU workstation. 7 ; 8 ; Reference/IA 9 ; EN^PSJBCBU/3876 10 ; $$EN^VAFHLPID/263 11 ; $$EN^VAFHAPV1/4512 12 ; EN1^GMRADPT/10099 13 ; EN^PSJBCMA1/2829 14 ; 15 IPH(MSG) ;CAPTURE MESSAGE ARRAY FROM PHARMACY 16 N VAIN,ALPMSG 17 S ALPMSG=$S($L($G(MSG)):MSG,1:"MSG") 18 I '$O(@ALPMSG@(0)) Q "0^MSG^Missing Message Array" 19 S MSH=0 20 F S MSH=$O(@ALPMSG@(MSH)) Q:MSH'>0 Q:$E(@ALPMSG@(MSH),1,3)="MSH" 21 I +MSH'>0 Q "0^MSG^Missing MSH Segment Bad Message" 22 S MSFS=$E(@ALPMSG@(MSH),4,4) 23 S MSCS=$E(@ALPMSG@(MSH),5,5) 24 S MSCH=$E(@ALPMSG@(MSH),6,6) 25 S MSCTR=$E(@ALPMSG@(MSH),4,8) 26 ;The message is confirmed to be a Pharmacy message 27 I $P(@ALPMSG@(MSH),MSFS,3)'="PHARMACY" Q "1^^Not a Pharmacy Message" 28 ;A PID and PV1 segment is required for this message 29 S PID=0 30 F S PID=$O(@ALPMSG@(PID)) Q:PID'>0 Q:$E(@ALPMSG@(PID),1,3)="PID" 31 I +PID'>0 Q "0^MSG^Missing PID Segment Bad Message" 32 ;Also the patient must have an inpatient status 33 S PV1=0 34 F S PV1=$O(@ALPMSG@(PV1)) Q:PV1'>0 Q:$E(@ALPMSG@(PV1),1,3)="PV1" 35 I +PV1'>0 Q "0^MSG^Missing PV1 Segment Bad Message" 36 I $P(@ALPMSG@(PV1),MSFS,3)'="I" Q "1^^Not an Inpatient Pharmacy Message" 37 S ORC=0 38 F S ORC=$O(@ALPMSG@(ORC)) Q:ORC'>0 Q:$E(@ALPMSG@(ORC),1,3)="ORC" 39 I +ORC'>0 Q "0^MSG^Missing ORC Segment Bad Message" 40 ;RE-BUILDING THE MESSAGE FOR BCBU 41 S ALPDFN=$P(@ALPMSG@(PID),MSFS,4) 42 I +ALPDFN'>0 Q "0^MSG^Invalid or Missing Patient - PID" 43 S ALPORD=$P($P(@ALPMSG@(ORC),MSFS,4),MSCS,1) 44 I ALPORD="" Q "0^MSG^Invalid or Missing Order Number - ORC" 45 K ALPB 46 D EN^PSJBCBU(ALPDFN,ALPORD,.ALPB) 47 SEED ;Entry point for ^ALPBIND 48 N VAIN 49 D INIT 50 S SUB=0 F S SUB=$O(ALPB(SUB)) Q:'SUB D 51 . ;convert and move the message to the HLA array for transport 52 . S HLA("HLS",SUB)=$$CNV^ALPBUTL1(MSCTR,HLCTR,ALPB(SUB)) 53 . ;Now check for continuations 54 . S SUB1=0 55 . F S SUB1=$O(ALPB(SUB,SUB1)) Q:'SUB1 D 56 . . S HLA("HLS",SUB,SUB1)=$$CNV^ALPBUTL1(MSCTR,HLCTR,ALPB(SUB,SUB1)) 57 . I $E(HLA("HLS",SUB),1,3)="RXE" S RXE=SUB 58 . I $E(HLA("HLS",SUB),1,3)="PID" S PID=SUB 59 . I $E(HLA("HLS",SUB),1,3)="PV1" S PV1=SUB 60 K HLA("HLS",MSH) 61 I '$D(HLA("HLS",PID)) Q "0^MSG^Missing PID Segment Bad Message" 62 S ALPDFN=$P($P(HLA("HLS",PID),HLFS,4),HLCS,1) 63 I +ALPDFN'>0 Q "0^MSG^Invalid or Missing Patient - PID" 64 S HLA("HLS",PID)=$$EN^VAFHLPID(ALPDFN,"2,7,8,19") 65 ;Fix RXE segement for Administration Type 66 D RXE 67 ;Get the Division that the patient is associated with 68 D PDIV 69 I ALPDIV="DOM",+$$GET^XPAR("PKG.BAR CODE MED ADMIN","PSB BKUP DOM FILTER",1,"Q")>0 Q "0^^Screen of DOMICILIARY" 70 I '$D(HLL("LINKS")) Q "0^HL7^Missing HLL Links Array Division # "_ALPDIV 71 ;SET NEW PV1 72 D NOW^%DTC 73 S STRING=$$EN^VAFHAPV1(ALPDFN,%,"2,3,7,18") 74 S HLA("HLS",PV1)=STRING 75 I +ORC>0 D 76 . S ALPST=$$STAT^ALPBUTL1($P(HLA("HLS",ORC),HLFS,6)) 77 . Q:ALPST="" 78 . S $P(HLA("HLS",ORC),HLFS,6)=$P(HLA("HLS",ORC),HLFS,6)_HLCS_ALPST 79 D AL1 80 ;Capture message to review for testing before sending 81 D SEND 82 EXIT ;EXIT and kill 83 K HLA,SUB,SUB1,STRING,ALPLOC,HLCS,HLCTR,HLFS,MSCH,MSCS,MSCTR 84 K MSH,ORC,PID,PV1,RXE,RXR,ALPB,ALPBY,ALPBYN,ALPC,ALPDATA,ALPDFN 85 K ALPDT,ALPI,ALPII,ALPIV,ALPOPTS,ALPOR,ALPORD,ALPST 86 K ALPSTN,ALPSYM,EVENT,GMRA,GMRAL 87 Q ALPRSLT 88 INI() ;INTIAL SET UP ENTRY 89 G SEED 90 INIT ;CALL HL7 TO INITIALIZE MESSAGE VARIABLES 91 ;SET UP ENVIRONMENT FOR MESSAGE 92 K HL,HLA,HLECH,HLQ,ALPRSLT,ALPOPTS 93 S EVENT="PSB BCBU ORM SEND" 94 D INIT^HLFNC2(EVENT,.HL,1) 95 S HLCS=$E(HL("ECH")),HLCTR=HLFS_HL("ECH") 96 Q 97 SEND ;CALL HL7 TO TRANSMIT SINGLE MESSAGE 98 K ALPRSLT,ALPOPTS 99 D GENERATE^HLMA(EVENT,"LM",1,.ALPRSLT,"",.ALPOPTS) 100 Q 101 AL1 ;ALLERGY SEGMENT BUILD 102 ;The will build the ALP segment with the curent allergies 103 ;for the patient to be added to the message 104 N DFN 105 Q:+ALPDFN'>0 106 K GMRAL 107 S DFN=ALPDFN 108 S GMRA="0^0^111" ;DEFINES WHAT ALLERGIES TO RETURN 109 D EN1^GMRADPT 110 Q:'$D(GMRAL) 111 S ALPI=0,ALPC=1,ALPSYM="" 112 F S ALPI=$O(GMRAL(ALPI)) Q:+ALPI'>0 D 113 . S ALPADR="" 114 . I $P($P(GMRAL(ALPI),U,8),";",2)="P" S ALPADR="**ADR** " 115 . S ALPDATA="AL1"_HLFS_ALPC_HLFS_$P(GMRAL(ALPI),U,7) 116 . S ALPDATA=ALPDATA_HLFS_ALPI_HLCS_ALPADR_$E($P(GMRAL(ALPI),U,2),1,25)_HLCS_"VA120.8" 117 . ;S ALPII=0 F S ALPII=$O(GMRAL(ALPI,"S",ALPII)) Q:+ALPII'>0 D 118 . ;. S ALPSYM=ALPSYM_$P(GMRAL(ALPI,"S",ALPII),";",1)_HLCS 119 . ;S $P(ALPDATA,HLFS,6)=ALPSYM 120 . S HLA("HLS",$O(HLA("HLS",9999999),-1)+1)=ALPDATA 121 . S ALPC=ALPC+1 122 K GMRAL 123 Q 124 RXE ; 125 Q:+$G(RXE)'>0 126 K ^TMP("PSJ1",$J) 127 Q:'$D(HLA("HLS",RXE)) 128 S DATA=HLA("HLS",RXE) 129 D EN^PSJBCMA1(ALPDFN,ALPORD,1) 130 S TYP=$P($G(^TMP("PSJ1",$J,4)),U,2) 131 Q:TYP="CONTINUOUS" 132 Q:TYP="FILL ON REQUEST" 133 S ALP1=$P(DATA,HLFS,2),ALP2=$P(ALP1,HLCS,2) 134 I ALP1[TYP Q 135 I ALP2[TYP Q 136 S $P(ALP2,"&",1)=$P(ALP2,"&",1)_" "_TYP 137 S $P(ALP1,HLCS,2)=ALP2,$P(DATA,HLFS,2)=ALP1 138 S HLA("HLS",RXE)=DATA 139 K TYP,ALP1,ALP2,^TMP("PSJ1",$J) 140 Q 141 PDIV ;PATIENT DIVISION 142 ;Check ALPBMDT Variable 143 S:+$G(ALPBMDT)'>0 ALPBMDT=0 144 S ALPDIV=$$DIV^ALPBUTL1(ALPDFN,ALPBMDT) 145 ;Screen Dom 146 I ALPDIV="DOM",+$$GET^XPAR("PKG.BAR CODE MED ADMIN","PSB BKUP DOM FILTER",1,"Q")>0 Q 147 ;Now do I send the Message or not Based of Division 148 I $D(ALPHLL("LINKS")) M HLL("LINKS")=ALPHLL("LINKS") 149 I '$D(HLL("LINKS")) D GET^ALPBPARM(.HLL,ALPDIV) 150 Q 151 MEDL(ALPML) ;Use this entry to send MedLog messages 152 N VAIN 153 ;ALPML is the IEN of the MedLog for file #53.79 154 I '$D(ALPML) Q "0^ALPML^No Med-Log Number" 155 I '$D(^PSB(53.79,ALPML,0)) Q "0^"_ALPML_"^Med - Log Number Invalid" 156 ;First get the required HL7 Variables 157 D INIT 158 ;Need to build the PID, PV1 and ORC segments 159 S ALPDFN=+$P($G(^PSB(53.79,ALPML,0)),U,1) 160 I +ALPDFN'>0 Q "0^"_ALPML_"^Invalid or Missing Patient - Med-Log" 161 ;Get the Division that the patient is associated with 162 D PDIV 163 I ALPDIV="DOM",+$$GET^XPAR("PKG.BAR CODE MED ADMIN","PSB BKUP DOM FILTER",1,"Q")>0 Q "0^^Screen of DOMICILIARY" 164 I '$D(HLL("LINKS")) Q "0^"_ALPML_"^Missing HLL Links Array Med-Log" 165 S ALPST=$P($G(^PSB(53.79,ALPML,0)),U,9) 166 S ALPBY=$P($G(^PSB(53.79,ALPML,0)),U,7) 167 S ALPDT=$P($G(^PSB(53.79,ALPML,0)),U,6) 168 S ALPOR=$P($G(^PSB(53.79,ALPML,.1)),U,1) 169 S ALPBYN=$P($G(^VA(200,ALPBY,0)),U,1) 170 S ALPSTN=$S($D(ALPST):$$EXTERNAL^DILFD(53.79,".09",,ALPST),1:"Non") 171 I '$D(ALPOR) Q "0^"_ALPML_"^Invalid or Missing Pharmacy Order Number Med-Log" 172 S PID=$$EN^VAFHLPID(ALPDFN,"2,7,8,19") 173 I '$D(PID) Q "0^"_ALPML_"^Invalid or Missing Patient - PID Med-Log" 174 S PV1=$$EN^VAFHAPV1(ALPDFN,DT,"2,3,7,18") 175 I '$D(PV1) Q "0^"_ALPML_"^Invalid or Missing Patient Location - PV1 Med-Log" 176 S HLA("HLS",1)=PID 177 S HLA("HLS",2)=PV1 178 ;BUILD ORC SEGMENT 179 S ORC="ORC"_HLFS_"ML"_HLFS_ALPML_HLCS_"ML"_HLFS_ALPOR_HLCS_"PS"_HLFS 180 S ORC=ORC_HLFS_ALPST_HLCS_ALPSTN_HLFS_HLFS_HLFS_HLFS 181 S ORC=ORC_$$HLDATE^HLFNC(ALPDT,"TS")_HLFS_ALPBY_HLCS_ALPBYN 182 S HLA("HLS",3)=ORC 183 ;The Message is ready to send 184 D SEND 185 Q ALPRSLT 186 ; 187 ADMQ ;Need to que a single patient init for admissions 188 S ALDFN=ALPDFN 189 S ZTDTH=$$NOW^XLFDT 190 S ZTRTN="PAT^ALPBIND" 191 S ZTDESC="PSB - Initialize Single Patient on Admission Contingency Workstation" 192 S ZTIO="",ZTSAVE("ALDFN")="" 193 D ^%ZTLOAD 194 K ZTIO,ZTDESC,ZTRTN,ZTSK 195 Q 196 PMOV(ALPDFN,ALPTYP,ALPTT,ALPBMDT) ;Entry Point to send patient movement 197 N VAIN 198 I +$G(ALPDFN)'>0 Q "0^^Missing Patient ID" 199 D INIT 200 ;Check Movement type. If not a discharge then don't pass date and time 201 S:$G(ALPTT)'="DISCHARGE" ALPBMDT=0 202 ;Get the Division that the patient is associated with 203 D PDIV 204 I ALPDIV="DOM",+$$GET^XPAR("PKG.BAR CODE MED ADMIN","PSB BKUP DOM FILTER",1,"Q")>0 Q "0^^Screen of DOMICILIARY" 205 I '$D(HLL("LINKS")) Q "0^"_ALPDFN_"^Missing HLL Links Array Pat-Move" 206 S HLA("HLS",1)=$$EN^VAFHLPID(ALPDFN,"2,7,8,19") 207 S HLA("HLS",2)=$$EN^VAFHAPV1(ALPDFN,DT,"2,3,7,18") 208 S:$G(ALPTT)="DISCHARGE" $P(HLA("HLS",2),HLFS,37)=$G(ALPTYP) 209 D SEND 210 I ALPTYP=14!(ALPTYP=41) S ALPTT="ADMISSION" ;FOR RETURN FROM ASIH 211 I $G(ALPTT)="ADMISSION" D ADMQ 212 ;SEND A DISCHARGE TO DIV SENDING ASIH 213 I $G(ALPTYP)[13!($G(ALPTYP)[40) D 214 .D INIT 215 .S ALPWRD=$P($G(DGPMVI(5)),U,1) ;LAST WARD 216 .I +ALPWRD'>0 S ALPRSLT="0^^Screen - No Ward" Q ;NO WARD 217 .S ALPBDIV=$P($G(^DIC(42,ALPWRD,0)),U,11) 218 .D GET^ALPBPARM(.HLL,ALPBDIV) 219 .S HLA("HLS",1)=$$EN^VAFHLPID(ALPDFN,"2,7,8,19") 220 .S HLA("HLS",2)=$$EN^VAFHAPV1(ALPDFN,DT,"2,3,7,18") 221 .S $P(HLA("HLS",2),HLFS,37)="ASIH" 222 .D SEND 223 Q ALPRSLT 1 ALPBINP ;OIFO-DALLAS/SED/KC/MW BCMA - BCBU INPT TO HL7 ;5/2/2002 2 ;;3.0;BAR CODE MED ADMIN;**8**;Mar 2004 3 ;This routine will intercept the HL7 message that it sent from Pharmacy 4 ;to CPRS to update order information. The message is then parsed and 5 ;repackage so it can be sent to the BCBU workstation. 6 ; 7 ; Reference/IA 8 ; EN^PSJBCBU/3876 9 ; $$EN^VAFHLPID/263 10 ; $$EN^VAFHAPV1/4512 11 ; EN1^GMRADPT/10099 12 ; EN^PSJBCMA1/2829 13 ; 14 IPH(MSG) ;CAPTURE MESSAGE ARRAY FROM PHARMACY 15 N VAIN,ALPMSG 16 S ALPMSG=$S($L($G(MSG)):MSG,1:"MSG") 17 I '$O(@ALPMSG@(0)) Q "0^MSG^Missing Message Array" 18 S MSH=0 19 F S MSH=$O(@ALPMSG@(MSH)) Q:MSH'>0 Q:$E(@ALPMSG@(MSH),1,3)="MSH" 20 I +MSH'>0 Q "0^MSG^Missing MSH Segment Bad Message" 21 S MSFS=$E(@ALPMSG@(MSH),4,4) 22 S MSCS=$E(@ALPMSG@(MSH),5,5) 23 S MSCH=$E(@ALPMSG@(MSH),6,6) 24 S MSCTR=$E(@ALPMSG@(MSH),4,8) 25 ;The message is confirmed to be a Pharmacy message 26 I $P(@ALPMSG@(MSH),MSFS,3)'="PHARMACY" Q "1^^Not a Pharmacy Message" 27 ;A PID and PV1 segment is required for this message 28 S PID=0 29 F S PID=$O(@ALPMSG@(PID)) Q:PID'>0 Q:$E(@ALPMSG@(PID),1,3)="PID" 30 I +PID'>0 Q "0^MSG^Missing PID Segment Bad Message" 31 ;Also the patient must have an inpatient status 32 S PV1=0 33 F S PV1=$O(@ALPMSG@(PV1)) Q:PV1'>0 Q:$E(@ALPMSG@(PV1),1,3)="PV1" 34 I +PV1'>0 Q "0^MSG^Missing PV1 Segment Bad Message" 35 I $P(@ALPMSG@(PV1),MSFS,3)'="I" Q "1^^Not an Inpatient Pharmacy Message" 36 S ORC=0 37 F S ORC=$O(@ALPMSG@(ORC)) Q:ORC'>0 Q:$E(@ALPMSG@(ORC),1,3)="ORC" 38 I +ORC'>0 Q "0^MSG^Missing ORC Segment Bad Message" 39 ;RE-BUILDING THE MESSAGE FOR BCBU 40 S ALPDFN=$P(@ALPMSG@(PID),MSFS,4) 41 I +ALPDFN'>0 Q "0^MSG^Invalid or Missing Patient - PID" 42 S ALPORD=$P($P(@ALPMSG@(ORC),MSFS,4),MSCS,1) 43 I ALPORD="" Q "0^MSG^Invalid or Missing Order Number - ORC" 44 K ALPB 45 D EN^PSJBCBU(ALPDFN,ALPORD,.ALPB) 46 SEED ;Entry point for ^ALPBIND 47 D INIT 48 S SUB=0 F S SUB=$O(ALPB(SUB)) Q:'SUB D 49 . ;convert and move the message to the HLA array for transport 50 . S HLA("HLS",SUB)=$$CNV^ALPBUTL1(MSCTR,HLCTR,ALPB(SUB)) 51 . ;Now check for continuations 52 . S SUB1=0 53 . F S SUB1=$O(ALPB(SUB,SUB1)) Q:'SUB1 D 54 . . S HLA("HLS",SUB,SUB1)=$$CNV^ALPBUTL1(MSCTR,HLCTR,ALPB(SUB,SUB1)) 55 . I $E(HLA("HLS",SUB),1,3)="RXE" S RXE=SUB 56 . I $E(HLA("HLS",SUB),1,3)="PID" S PID=SUB 57 . I $E(HLA("HLS",SUB),1,3)="PV1" S PV1=SUB 58 K HLA("HLS",MSH) 59 I '$D(HLA("HLS",PID)) Q "0^MSG^Missing PID Segment Bad Message" 60 S ALPDFN=$P($P(HLA("HLS",PID),HLFS,4),HLCS,1) 61 I +ALPDFN'>0 Q "0^MSG^Invalid or Missing Patient - PID" 62 S HLA("HLS",PID)=$$EN^VAFHLPID(ALPDFN,"2,7,8,19") 63 ;Fix RXE segement for Administration Type 64 D RXE 65 ;Get the Division that the patient is associated with 66 D PDIV 67 I ALPDIV="DOM" Q "0^^Screen of DOMICILIARY" 68 I '$D(HLL("LINKS")) Q "0^HL7^Missing HLL Links Array Division # "_ALPDIV 69 ;SET NEW PV1 70 D NOW^%DTC 71 S STRING=$$EN^VAFHAPV1(ALPDFN,%,"2,3,7,18") 72 S HLA("HLS",PV1)=STRING 73 I +ORC>0 D 74 . S ALPST=$$STAT^ALPBUTL1($P(HLA("HLS",ORC),HLFS,6)) 75 . Q:ALPST="" 76 . S $P(HLA("HLS",ORC),HLFS,6)=$P(HLA("HLS",ORC),HLFS,6)_HLCS_ALPST 77 D AL1 78 ;Capture message to review for testing before sending 79 D SEND 80 EXIT ;EXIT and kill 81 K HLA,SUB,SUB1,STRING,ALPLOC,HLCS,HLCTR,HLFS,MSCH,MSCS,MSCTR 82 K MSH,ORC,PID,PV1,RXE,RXR,ALPB,ALPBY,ALPBYN,ALPC,ALPDATA,ALPDFN 83 K ALPDT,ALPI,ALPII,ALPIV,ALPOPTS,ALPOR,ALPORD,ALPST 84 K ALPSTN,ALPSYM,EVENT,GMRA,GMRAL 85 Q ALPRSLT 86 INI() ;INTIAL SET UP ENTRY 87 G SEED 88 INIT ;CALL HL7 TO INITIALIZE MESSAGE VARIABLES 89 ;SET UP ENVIRONMENT FOR MESSAGE 90 K HL,HLA,HLECH,HLQ,ALPRSLT,ALPOPTS 91 S EVENT="PSB BCBU ORM SEND" 92 D INIT^HLFNC2(EVENT,.HL,1) 93 S HLCS=$E(HL("ECH")),HLCTR=HLFS_HL("ECH") 94 Q 95 SEND ;CALL HL7 TO TRANSMIT SINGLE MESSAGE 96 K ALPRSLT,ALPOPTS 97 D GENERATE^HLMA(EVENT,"LM",1,.ALPRSLT,"",.ALPOPTS) 98 Q 99 AL1 ;ALLERGY SEGMENT BUILD 100 ;The will build the ALP segment with the curent allergies 101 ;for the patient to be added to the message 102 N DFN 103 Q:+ALPDFN'>0 104 K GMRAL 105 S DFN=ALPDFN 106 S GMRA="0^0^111" ;DEFINES WHAT ALLERGIES TO RETURN 107 D EN1^GMRADPT 108 Q:'$D(GMRAL) 109 S ALPI=0,ALPC=1,ALPSYM="" 110 F S ALPI=$O(GMRAL(ALPI)) Q:+ALPI'>0 D 111 . S ALPADR="" 112 . I $P($P(GMRAL(ALPI),U,8),";",2)="P" S ALPADR="**ADR** " 113 . S ALPDATA="AL1"_HLFS_ALPC_HLFS_$P(GMRAL(ALPI),U,7) 114 . S ALPDATA=ALPDATA_HLFS_ALPI_HLCS_ALPADR_$E($P(GMRAL(ALPI),U,2),1,25)_HLCS_"VA120.8" 115 . ;S ALPII=0 F S ALPII=$O(GMRAL(ALPI,"S",ALPII)) Q:+ALPII'>0 D 116 . ;. S ALPSYM=ALPSYM_$P(GMRAL(ALPI,"S",ALPII),";",1)_HLCS 117 . ;S $P(ALPDATA,HLFS,6)=ALPSYM 118 . S HLA("HLS",$O(HLA("HLS",9999999),-1)+1)=ALPDATA 119 . S ALPC=ALPC+1 120 K GMRAL 121 Q 122 RXE ; 123 Q:+$G(RXE)'>0 124 K ^TMP("PSJ1",$J) 125 Q:'$D(HLA("HLS",RXE)) 126 S DATA=HLA("HLS",RXE) 127 D EN^PSJBCMA1(ALPDFN,ALPORD,1) 128 S TYP=$P($G(^TMP("PSJ1",$J,4)),U,2) 129 Q:TYP="CONTINUOUS" 130 Q:TYP="FILL ON REQUEST" 131 S ALP1=$P(DATA,HLFS,2),ALP2=$P(ALP1,HLCS,2) 132 I ALP1[TYP Q 133 I ALP2[TYP Q 134 S $P(ALP2,"&",1)=$P(ALP2,"&",1)_" "_TYP 135 S $P(ALP1,HLCS,2)=ALP2,$P(DATA,HLFS,2)=ALP1 136 S HLA("HLS",RXE)=DATA 137 K TYP,ALP1,ALP2,^TMP("PSJ1",$J) 138 Q 139 PDIV ;PATIENT DIVISION 140 ;Check ALPBMDT Variable 141 S:+$G(ALPBMDT)'>0 ALPBMDT=0 142 S ALPDIV=$$DIV^ALPBUTL1(ALPDFN,ALPBMDT) 143 ;Screen Dom 144 Q:ALPDIV="DOM" 145 ;Now do I send the Message or not Based of Division 146 I $D(ALPHLL("LINKS")) M HLL("LINKS")=ALPHLL("LINKS") 147 I '$D(HLL("LINKS")) D GET^ALPBPARM(.HLL,ALPDIV) 148 Q 149 MEDL(ALPML) ;Use this entry to send MedLog messages 150 N VAIN 151 ;ALPML is the IEN of the MedLog for file #53.79 152 I '$D(ALPML) Q "0^ALPML^No Med-Log Number" 153 I '$D(^PSB(53.79,ALPML,0)) Q "0^"_ALPML_"^Med - Log Number Invalid" 154 ;First get the required HL7 Variables 155 D INIT 156 ;Need to build the PID, PV1 and ORC segments 157 S ALPDFN=+$P($G(^PSB(53.79,ALPML,0)),U,1) 158 I +ALPDFN'>0 Q "0^"_ALPML_"^Invalid or Missing Patient - Med-Log" 159 ;Get the Division that the patient is associated with 160 D PDIV 161 I ALPDIV="DOM" Q "0^^Screen of DOMICILIARY" 162 I '$D(HLL("LINKS")) Q "0^"_ALPML_"^Missing HLL Links Array Med-Log" 163 S ALPST=$P($G(^PSB(53.79,ALPML,0)),U,9) 164 S ALPBY=$P($G(^PSB(53.79,ALPML,0)),U,7) 165 S ALPDT=$P($G(^PSB(53.79,ALPML,0)),U,6) 166 S ALPOR=$P($G(^PSB(53.79,ALPML,.1)),U,1) 167 S ALPBYN=$P($G(^VA(200,ALPBY,0)),U,1) 168 S ALPSTN=$S($D(ALPST):$$EXTERNAL^DILFD(53.79,".09",,ALPST),1:"Non") 169 I '$D(ALPOR) Q "0^"_ALPML_"^Invalid or Missing Pharmacy Order Number Med-Log" 170 S PID=$$EN^VAFHLPID(ALPDFN,"2,7,8,19") 171 I '$D(PID) Q "0^"_ALPML_"^Invalid or Missing Patient - PID Med-Log" 172 S PV1=$$EN^VAFHAPV1(ALPDFN,DT,"2,3,7,18") 173 I '$D(PV1) Q "0^"_ALPML_"^Invalid or Missing Patient Location - PV1 Med-Log" 174 S HLA("HLS",1)=PID 175 S HLA("HLS",2)=PV1 176 ;BUILD ORC SEGMENT 177 S ORC="ORC"_HLFS_"ML"_HLFS_ALPML_HLCS_"ML"_HLFS_ALPOR_HLCS_"PS"_HLFS 178 S ORC=ORC_HLFS_ALPST_HLCS_ALPSTN_HLFS_HLFS_HLFS_HLFS 179 S ORC=ORC_$$HLDATE^HLFNC(ALPDT,"TS")_HLFS_ALPBY_HLCS_ALPBYN 180 S HLA("HLS",3)=ORC 181 ;The Message is ready to send 182 D SEND 183 Q ALPRSLT 184 ; 185 ADMQ ;Need to que a single patient init for admissions 186 S ALDFN=ALPDFN 187 S ZTDTH=$$NOW^XLFDT 188 S ZTRTN="PAT^ALPBIND" 189 S ZTDESC="PSB - Initialize Single Patient on Admission Contingency Workstation" 190 S ZTIO="",ZTSAVE("ALDFN")="" 191 D ^%ZTLOAD 192 K ZTIO,ZTDESC,ZTRTN,ZTSK 193 Q 194 PMOV(ALPDFN,ALPTYP,ALPTT,ALPBMDT) ;Entry Point to send patient movement 195 N VAIN 196 I +$G(ALPDFN)'>0 Q "0^^Missing Patient ID" 197 D INIT 198 ;Check Movement type. If not a discharge then don't pass date and time 199 S:$G(ALPTT)'="DISCHARGE" ALPBMDT=0 200 ;Get the Division that the patient is associated with 201 D PDIV 202 I ALPDIV="DOM" Q "0^^Screen of DOMICILIARY" 203 I '$D(HLL("LINKS")) Q "0^"_ALPDFN_"^Missing HLL Links Array Pat-Move" 204 S HLA("HLS",1)=$$EN^VAFHLPID(ALPDFN,"2,7,8,19") 205 S HLA("HLS",2)=$$EN^VAFHAPV1(ALPDFN,DT,"2,3,7,18") 206 S:$G(ALPTT)="DISCHARGE" $P(HLA("HLS",2),HLFS,37)=$G(ALPTYP) 207 D SEND 208 I ALPTYP=14!(ALPTYP=41) S ALPTT="ADMISSION" ;FOR RETURN FROM ASIH 209 I $G(ALPTT)="ADMISSION" D ADMQ 210 ;SEND A DISCHARGE TO DIV SENDING ASIH 211 I $G(ALPTYP)[13!($G(ALPTYP)[40) D 212 .D INIT 213 .S ALPWRD=$P($G(DGPMVI(5)),U,1) ;LAST WARD 214 .I +ALPWRD'>0 S ALPRSLT="0^^Screen - No Ward" Q ;NO WARD 215 .S ALPBDIV=$P($G(^DIC(42,ALPWRD,0)),U,11) 216 .D GET^ALPBPARM(.HLL,ALPBDIV) 217 .S HLA("HLS",1)=$$EN^VAFHLPID(ALPDFN,"2,7,8,19") 218 .S HLA("HLS",2)=$$EN^VAFHAPV1(ALPDFN,DT,"2,3,7,18") 219 .S $P(HLA("HLS",2),HLFS,37)="ASIH" 220 .D SEND 221 Q ALPRSLT -
WorldVistAEHR/trunk/r/BAR_CODE_MED_ADMIN-ALPB-PSB/ALPBPWRD.m
r613 r623 1 ALPBPWRD ;OIFO-DALLAS MW,SED,KC-PRINT 3-DAY MAR BCMA BCBU REPORT FOR A SELECTED WARD ;01/01/03 2 ;;3.0;BAR CODE MED ADMIN;**8,37**;Mar 2004;Build 10 3 ;;Per VHA Directive 2004-038, this routine should not be modified. 4 ; 5 ; NOTE: this routine is designed for hard-copy output. 6 ; Output is formatted for 132-column printing. 7 ; 8 F D Q:$D(DIRUT) 9 .W !,"Inpatient Pharmacy Orders for a selected ward" 10 .S DIR(0)="FAO^2:10" 11 .S DIR("A")="Select WARD: " 12 .S DIR("?")="^D WARDLIST^ALPBUTL(""C"")" 13 .D ^DIR K DIR 14 .I $D(DIRUT) Q 15 .D WARDSEL^ALPBUTL(Y,.ALPBSEL) 16 .I +$G(ALPBSEL(0))=0 D Q 17 ..W $C(7) 18 ..W " ??" 19 ..D WARDLIST^ALPBUTL("C") 20 ..K ALPBSEL 21 .I +$G(ALPBSEL(0))=1 D 22 ..S ALPBWARD=ALPBSEL(1) 23 ..W " ",ALPBWARD 24 ..K ALPBSEL 25 .I +$G(ALPBSEL(0))>1 D I $D(DIRUT) K DIRUT,DTOUT,X,Y Q 26 ..S ALPBX=0 27 ..F S ALPBX=$O(ALPBSEL(ALPBX)) Q:'ALPBX W !?2,$J(ALPBX,2)," ",ALPBSEL(ALPBX) 28 ..K ALPBX 29 ..S DIR(0)="NA^1:"_ALPBSEL(0) 30 ..S DIR("A")="Select Ward from the list (1-"_ALPBSEL(0)_"): " 31 ..W ! D ^DIR K DIR 32 ..I $D(DIRUT) K ALPBSEL Q 33 ..S ALPBWARD=ALPBSEL(+Y) 34 ..K ALPBSEL 35 .; 36 .; get all or just current orders?... 37 .S DIR(0)="SA^A:ALL;C:CURRENT" 38 .S DIR("A")="Report [A]LL or [C]URRENT orders? " 39 .S DIR("B")="CURRENT" 40 .S DIR("?")="[A]LL=all orders in the file, [C]URRENT=orders not yet expired." 41 .W ! D ^DIR K DIR 42 .I $D(DIRUT) K ALPBWARD,DIRUT,DTOUT,X,Y Q 43 .S ALPBOTYP=Y 44 .; 45 .;SORT BY NAME OR ROOM/BED added 6/23/05 46 .S DIR(0)="SA^N:Name;R:Room/Bed" 47 .S DIR("A")="Sort Patients by [N]ame or [R]oom/Bed? " 48 .S DIR("B")="Room/bed" 49 .S DIR("?")="Sort by [N]ame or [R]oom Bed" 50 .W ! D ^DIR K DIR 51 .I $D(DIRUT) K ALPBWARD,DIRUT,DTOUT,X,Y Q 52 .S ALPBSORT=Y 53 .; 54 .; print how many days MAR?... 55 .S DIR(0)="NA^1:7" 56 .S DIR("A")="Print how many days MAR? " 57 .S DIR("B")=$$DEFDAYS^ALPBUTL() 58 .S DIR("?")="The default is shown; you may enter 3 or 7." 59 .W ! D ^DIR K DIR 60 .I $D(DIRUT) K ALPBOTYP,DIRUT,DTOUT,X,Y Q 61 .S ALPBDAYS=+Y 62 .; 63 .; BCMA Med Log info for how many ?... 64 .S DIR(0)="NA^1:99" 65 .S DIR("B")=$$DEFML^ALPBUTL3() 66 .S DIR("A")="Select how many BCMA Medication Log history: " 67 .S DIR("A",1)=" " 68 .S DIR("?",1)="Select a number of BCMA Medication log entries" 69 .S DIR("?",2)="for each of the patient's orders" 70 .S DIR("?")="They are listed by the most current entry first" 71 .D ^DIR K DIR 72 .I $D(DIRUT) K ALPBOTYP,ALPBWARD,DIRUT,DTOUT,X,Y Q 73 .S ALPBMLOG=Y 74 .; 75 .S %ZIS="Q" 76 .S %ZIS("B")=$$DEFPRT^ALPBUTL() 77 .I %ZIS("B")="" K %ZIS("B") 78 .W ! D ^%ZIS K %ZIS 79 .I POP D Q 80 ..W $C(7) 81 ..K ALPBMLOG,ALPBOTYP,ALPBWARD,POP 82 .; 83 .; output not queued... 84 .I '$D(IO("Q")) D 85 ..U IO 86 ..D DQ 87 ..I IO'=IO(0) D ^%ZISC 88 .; 89 .; set up the Task... 90 .I $D(IO("Q")) D 91 ..S ZTRTN="DQ^ALPBPWRD" 92 ..S ZTDESC="PSB INPT PHARM ORDERS FOR WARD "_ALPBWARD 93 ..S ZTSAVE("ALPBDAYS")="" 94 ..S ZTSAVE("ALPBWARD")="" 95 ..S ZTSAVE("ALPBMLOG")="" 96 ..S ZTSAVE("ALPBOTYP")="" 97 ..S ZTSAVE("ALPBSORT")="" 98 ..S ZTIO=ION 99 ..D ^%ZTLOAD 100 ..D HOME^%ZIS 101 ..W !,$S($G(ZTSK):"Task number "_ZTSK_" queued.",1:"ERROR -- NOT QUEUED!") 102 ..K IO("Q"),ZTSK 103 .K ALPBDAYS,ALPBMLOG,ALPBOTYP,ALPBWARD 104 K DIRUT,DTOUT,X,Y 105 Q 106 ; 107 DQ ; output entry point... 108 K ^TMP($J) 109 ; 110 ; set report date... SED 11/4/03 111 S ALPBRDAT=$S(ALPBOTYP="C":$$NOW^XLFDT(),1:"") 112 ; 113 ; loop through ward cross reference in 53.7... 114 S ALPBPTN="" 115 F S ALPBPTN=$O(^ALPB(53.7,"AW",ALPBWARD,ALPBPTN)) Q:ALPBPTN="" D 116 .S ALPBIEN=0 117 .F S ALPBIEN=$O(^ALPB(53.7,"AW",ALPBWARD,ALPBPTN,ALPBIEN)) Q:'ALPBIEN D 118 ..D ORDS^ALPBUTL(ALPBIEN,ALPBRDAT,.ALPBORDS) 119 ..I +ALPBORDS(0)'>0 K ALPBORDS Q 120 ..I $G(ALPBPDAT(0))="" S ALPBPDAT(0)=$G(^ALPB(53.7,ALPBIEN,0)) 121 ..S ALPBOIEN=0 122 ..F S ALPBOIEN=$O(ALPBORDS(ALPBOIEN)) Q:'ALPBOIEN D 123 ...S ALPBDATA=$G(^ALPB(53.7,ALPBIEN,2,ALPBOIEN,1)) 124 ...S ALPBOCT=$P($G(^ALPB(53.7,ALPBIEN,2,ALPBOIEN,3)),U,1) 125 ...S:$P($G(^ALPB(53.7,ALPBIEN,2,ALPBOIEN,4)),U,3)["PRN" ALPBOCT=ALPBOCT_"P" 126 ...; if report is for "C"urrent, check stop date and quit if 127 ...; stop date is less than report date... 128 ...I ALPBOTYP="C"&($P(ALPBDATA,U,2)<ALPBRDAT) K ALPBDATA Q 129 ...S ALPBORDN=ALPBORDS(ALPBOIEN) 130 ...S ALPBOST=$$STAT2^ALPBUTL1(ALPBORDS(ALPBOIEN,2)) 131 ...I '$D(^TMP($J,ALPBPTN)) S ^TMP($J,ALPBPTN)=ALPBIEN 132 ...S ^TMP($J,ALPBPTN,ALPBOCT,ALPBOST,ALPBORDN)=ALPBOIEN 133 ...K ALPBDATA,ALPBORDN,ALPBOST 134 ..K ALPBOIEN,ALPBORDS,ALPBPDAT 135 .K ALPBIEN 136 K ALPBPTN 137 ; 138 ; Sort by Patient Name or room/bed capability added 6/23/05 KFOX 139 S ALPBPG=0 140 S ALPBPTN="" 141 I ALPBSORT="N" D 142 .F S ALPBPTN=$O(^TMP($J,ALPBPTN)) Q:ALPBPTN="" S ALPBIEN=^TMP($J,ALPBPTN) D PRT 143 ;SORT BY ROOM/BED 144 I ALPBSORT="R" D 145 .S ALPBD="",ALPRM="" 146 .F S ALPBPTN=$O(^TMP($J,ALPBPTN)) Q:ALPBPTN="" D Q:ALPBPTN="" 147 ..I ALPBPTN="BCBU" S ALPBPTN=$O(^TMP($J,ALPBPTN)) ;SKIP "BCBU" SUBSCRIBE 148 ..I ALPBPTN="" Q ;PSB*3*37 Stop null subscript when "BCBU" is the last entry in ^TMP 149 ..S ALPBIEN=^TMP($J,ALPBPTN) S ALPRM=$P($G(^ALPB(53.7,ALPBIEN,0)),"^",6),ALPBD=$P($G(^ALPB(53.7,ALPBIEN,0)),"^",7) 150 ..I ALPBD="" S ALPB="NONE" I ALPRM="" S ALPB="NONE" ;INCASE NO ROOM AND BED YET 151 ..S ^TMP($J,"BCBU",ALPRM,ALPRM,ALPBD,ALPBPTN)=ALPBIEN 152 .S ALPRM1="" F S ALPRM1=$O(^TMP($J,"BCBU",ALPRM1)) Q:ALPRM1="" D 153 ..S ALPRM="" F S ALPRM=$O(^TMP($J,"BCBU",ALPRM1,ALPRM)) Q:ALPRM="" D 154 ...S ALPBD="" F S ALPBD=$O(^TMP($J,"BCBU",ALPRM1,ALPRM,ALPBD)) Q:ALPBD="" D 155 ....S ALPBPTN="" F S ALPBPTN=$O(^TMP($J,"BCBU",ALPRM1,ALPRM,ALPBD,ALPBPTN)) Q:ALPBPTN="" D 156 .....S ALPBIEN=$G(^TMP($J,"BCBU",ALPRM1,ALPRM,ALPBD,ALPBPTN)) D PRT 157 D DONE 158 Q 159 PRT S ALPBPDAT(0)=$G(^ALPB(53.7,ALPBIEN,0)) 160 M ALPBPDAT(1)=^ALPB(53.7,ALPBIEN,1) 161 I ALPBPG=0 D PAGE 162 S ALPBOCT="" 163 F S ALPBOCT=$O(^TMP($J,ALPBPTN,ALPBOCT)) Q:ALPBOCT="" D 164 .S ALPBOST="" 165 .F S ALPBOST=$O(^TMP($J,ALPBPTN,ALPBOCT,ALPBOST)) Q:ALPBOST="" D 166 ..S ALPBORDN="" 167 ..F S ALPBORDN=$O(^TMP($J,ALPBPTN,ALPBOCT,ALPBOST,ALPBORDN)) Q:ALPBORDN="" D 168 ...S ALPBOIEN=^TMP($J,ALPBPTN,ALPBOCT,ALPBOST,ALPBORDN) 169 ...; get and print this order's data... 170 ...M ALPBDATA=^ALPB(53.7,ALPBIEN,2,ALPBOIEN) 171 ...D F132^ALPBFRM1(.ALPBDATA,ALPBDAYS,ALPBMLOG,.ALPBFORM,ALPBIEN) 172 ...;D F132^ALPBFRM1(.ALPBDATA,ALPBDAYS,.ALPBFORM) 173 ...I $Y+ALPBFORM(0)=IOSL!($Y+ALPBFORM(0)>IOSL) D PAGE 174 ...F ALPBX=1:1:ALPBFORM(0) W !,ALPBFORM(ALPBX) 175 ...K ALPBDATA,ALPBFORM,ALPBOIEN,ALPBX 176 ..K ALPBORDN 177 .K ALPBOST 178 K ALPBOCT 179 ; print footer at end of this patient's record... 180 I $Y+10>IOSL D PAGE 181 W !! 182 D FOOT^ALPBFRMU 183 ;Print a blank page between patient 184 W @IOF 185 S ALPBPG=0 186 K ALPBPDAT 187 Q 188 ;K ALPBIEN,ALPBPDAT KILLING ALPBIEN WILL BREAK SORT BY ROOM/BED 189 ; 190 DONE ; 191 K ALPBDAYS,ALPBMLOG,ALPBOTYP,ALPBPG,ALPBPTN,ALPBRDAT,ALPBWARD,^TMP($J),ALPRM,ALPRM1,ALPBD,ALPBIEN,ALPBSORT 192 I $D(ZTQUEUED) S ZTREQ="@" 193 Q 194 ; 195 PAGE ; print page header for patient... 196 W @IOF 197 S ALPBPG=ALPBPG+1 198 D HDR^ALPBFRMU(.ALPBPDAT,ALPBPG,.ALPBHDR) 199 F ALPBX=1:1:ALPBHDR(0) W !,ALPBHDR(ALPBX) 200 K ALPBHDR,ALPBX 201 Q 1 ALPBPWRD ;OIFO-DALLAS MW,SED,KC-PRINT 3-DAY MAR BCMA BCBU REPORT FOR A SELECTED WARD ;01/01/03 2 ;;3.0;BAR CODE MED ADMIN;**8**;Mar 2004 3 ; 4 ; NOTE: this routine is designed for hard-copy output. 5 ; Output is formatted for 132-column printing. 6 ; 7 F D Q:$D(DIRUT) 8 .W !,"Inpatient Pharmacy Orders for a selected ward" 9 .S DIR(0)="FAO^2:10" 10 .S DIR("A")="Select WARD: " 11 .S DIR("?")="^D WARDLIST^ALPBUTL(""C"")" 12 .D ^DIR K DIR 13 .I $D(DIRUT) Q 14 .D WARDSEL^ALPBUTL(Y,.ALPBSEL) 15 .I +$G(ALPBSEL(0))=0 D Q 16 ..W $C(7) 17 ..W " ??" 18 ..D WARDLIST^ALPBUTL("C") 19 ..K ALPBSEL 20 .I +$G(ALPBSEL(0))=1 D 21 ..S ALPBWARD=ALPBSEL(1) 22 ..W " ",ALPBWARD 23 ..K ALPBSEL 24 .I +$G(ALPBSEL(0))>1 D I $D(DIRUT) K DIRUT,DTOUT,X,Y Q 25 ..S ALPBX=0 26 ..F S ALPBX=$O(ALPBSEL(ALPBX)) Q:'ALPBX W !?2,$J(ALPBX,2)," ",ALPBSEL(ALPBX) 27 ..K ALPBX 28 ..S DIR(0)="NA^1:"_ALPBSEL(0) 29 ..S DIR("A")="Select Ward from the list (1-"_ALPBSEL(0)_"): " 30 ..W ! D ^DIR K DIR 31 ..I $D(DIRUT) K ALPBSEL Q 32 ..S ALPBWARD=ALPBSEL(+Y) 33 ..K ALPBSEL 34 .; 35 .; get all or just current orders?... 36 .S DIR(0)="SA^A:ALL;C:CURRENT" 37 .S DIR("A")="Report [A]LL or [C]URRENT orders? " 38 .S DIR("B")="CURRENT" 39 .S DIR("?")="[A]LL=all orders in the file, [C]URRENT=orders not yet expired." 40 .W ! D ^DIR K DIR 41 .I $D(DIRUT) K ALPBWARD,DIRUT,DTOUT,X,Y Q 42 .S ALPBOTYP=Y 43 .; 44 .;SORT BY NAME OR ROOM/BED added 6/23/05 45 .S DIR(0)="SA^N:Name;R:Room/Bed" 46 .S DIR("A")="Sort Patients by [N]ame or [R]oom/Bed? " 47 .S DIR("B")="Room/bed" 48 .S DIR("?")="Sort by [N]ame or [R]oom Bed" 49 .W ! D ^DIR K DIR 50 .I $D(DIRUT) K ALPBWARD,DIRUT,DTOUT,X,Y Q 51 .S ALPBSORT=Y 52 .; 53 .; print how many days MAR?... 54 .S DIR(0)="NA^1:7" 55 .S DIR("A")="Print how many days MAR? " 56 .S DIR("B")=$$DEFDAYS^ALPBUTL() 57 .S DIR("?")="The default is shown; you may enter 3 or 7." 58 .W ! D ^DIR K DIR 59 .I $D(DIRUT) K ALPBOTYP,DIRUT,DTOUT,X,Y Q 60 .S ALPBDAYS=+Y 61 .; 62 .; BCMA Med Log info for how many ?... 63 .S DIR(0)="NA^1:99" 64 .S DIR("B")=$$DEFML^ALPBUTL3() 65 .S DIR("A")="Select how many BCMA Medication Log history: " 66 .S DIR("A",1)=" " 67 .S DIR("?",1)="Select a number of BCMA Medication log entries" 68 .S DIR("?",2)="for each of the patient's orders" 69 .S DIR("?")="They are listed by the most current entry first" 70 .D ^DIR K DIR 71 .I $D(DIRUT) K ALPBOTYP,ALPBWARD,DIRUT,DTOUT,X,Y Q 72 .S ALPBMLOG=Y 73 .; 74 .S %ZIS="Q" 75 .S %ZIS("B")=$$DEFPRT^ALPBUTL() 76 .I %ZIS("B")="" K %ZIS("B") 77 .W ! D ^%ZIS K %ZIS 78 .I POP D Q 79 ..W $C(7) 80 ..K ALPBMLOG,ALPBOTYP,ALPBWARD,POP 81 .; 82 .; output not queued... 83 .I '$D(IO("Q")) D 84 ..U IO 85 ..D DQ 86 ..I IO'=IO(0) D ^%ZISC 87 .; 88 .; set up the Task... 89 .I $D(IO("Q")) D 90 ..S ZTRTN="DQ^ALPBPWRD" 91 ..S ZTDESC="PSB INPT PHARM ORDERS FOR WARD "_ALPBWARD 92 ..S ZTSAVE("ALPBDAYS")="" 93 ..S ZTSAVE("ALPBWARD")="" 94 ..S ZTSAVE("ALPBMLOG")="" 95 ..S ZTSAVE("ALPBOTYP")="" 96 ..S ZTSAVE("ALPBSORT")="" 97 ..S ZTIO=ION 98 ..D ^%ZTLOAD 99 ..D HOME^%ZIS 100 ..W !,$S($G(ZTSK):"Task number "_ZTSK_" queued.",1:"ERROR -- NOT QUEUED!") 101 ..K IO("Q"),ZTSK 102 .K ALPBDAYS,ALPBMLOG,ALPBOTYP,ALPBWARD 103 K DIRUT,DTOUT,X,Y 104 Q 105 ; 106 DQ ; output entry point... 107 K ^TMP($J) 108 ; 109 ; set report date... SED 11/4/03 110 S ALPBRDAT=$S(ALPBOTYP="C":$$NOW^XLFDT(),1:"") 111 ; 112 ; loop through ward cross reference in 53.7... 113 S ALPBPTN="" 114 F S ALPBPTN=$O(^ALPB(53.7,"AW",ALPBWARD,ALPBPTN)) Q:ALPBPTN="" D 115 .S ALPBIEN=0 116 .F S ALPBIEN=$O(^ALPB(53.7,"AW",ALPBWARD,ALPBPTN,ALPBIEN)) Q:'ALPBIEN D 117 ..D ORDS^ALPBUTL(ALPBIEN,ALPBRDAT,.ALPBORDS) 118 ..I +ALPBORDS(0)'>0 K ALPBORDS Q 119 ..I $G(ALPBPDAT(0))="" S ALPBPDAT(0)=$G(^ALPB(53.7,ALPBIEN,0)) 120 ..S ALPBOIEN=0 121 ..F S ALPBOIEN=$O(ALPBORDS(ALPBOIEN)) Q:'ALPBOIEN D 122 ...S ALPBDATA=$G(^ALPB(53.7,ALPBIEN,2,ALPBOIEN,1)) 123 ...S ALPBOCT=$P($G(^ALPB(53.7,ALPBIEN,2,ALPBOIEN,3)),U,1) 124 ...S:$P($G(^ALPB(53.7,ALPBIEN,2,ALPBOIEN,4)),U,3)["PRN" ALPBOCT=ALPBOCT_"P" 125 ...; if report is for "C"urrent, check stop date and quit if 126 ...; stop date is less than report date... 127 ...I ALPBOTYP="C"&($P(ALPBDATA,U,2)<ALPBRDAT) K ALPBDATA Q 128 ...S ALPBORDN=ALPBORDS(ALPBOIEN) 129 ...S ALPBOST=$$STAT2^ALPBUTL1(ALPBORDS(ALPBOIEN,2)) 130 ...I '$D(^TMP($J,ALPBPTN)) S ^TMP($J,ALPBPTN)=ALPBIEN 131 ...S ^TMP($J,ALPBPTN,ALPBOCT,ALPBOST,ALPBORDN)=ALPBOIEN 132 ...K ALPBDATA,ALPBORDN,ALPBOST 133 ..K ALPBOIEN,ALPBORDS,ALPBPDAT 134 .K ALPBIEN 135 K ALPBPTN 136 ; 137 ; Sort by Patient Name or room/bed capability added 6/23/05 KFOX 138 S ALPBPG=0 139 S ALPBPTN="" 140 I ALPBSORT="N" D 141 .F S ALPBPTN=$O(^TMP($J,ALPBPTN)) Q:ALPBPTN="" S ALPBIEN=^TMP($J,ALPBPTN) D PRT 142 ;SORT BY ROOM/BED 143 I ALPBSORT="R" D 144 .S ALPBD="",ALPRM="" 145 .F S ALPBPTN=$O(^TMP($J,ALPBPTN)) Q:ALPBPTN="" D 146 ..I ALPBPTN="BCBU" S ALPBPTN=$O(^TMP($J,ALPBPTN)) ;SKIP "BCBU" SUBSCRIBE 147 ..S ALPBIEN=^TMP($J,ALPBPTN) S ALPRM=$P($G(^ALPB(53.7,ALPBIEN,0)),"^",6),ALPBD=$P($G(^ALPB(53.7,ALPBIEN,0)),"^",7) 148 ..I ALPBD="" S ALPB="NONE" I ALPRM="" S ALPB="NONE" ;INCASE NO ROOM AND BED YET 149 ..S ^TMP($J,"BCBU",ALPRM,ALPRM,ALPBD,ALPBPTN)=ALPBIEN 150 .S ALPRM1="" F S ALPRM1=$O(^TMP($J,"BCBU",ALPRM1)) Q:ALPRM1="" D 151 ..S ALPRM="" F S ALPRM=$O(^TMP($J,"BCBU",ALPRM1,ALPRM)) Q:ALPRM="" D 152 ...S ALPBD="" F S ALPBD=$O(^TMP($J,"BCBU",ALPRM1,ALPRM,ALPBD)) Q:ALPBD="" D 153 ....S ALPBPTN="" F S ALPBPTN=$O(^TMP($J,"BCBU",ALPRM1,ALPRM,ALPBD,ALPBPTN)) Q:ALPBPTN="" D 154 .....S ALPBIEN=$G(^TMP($J,"BCBU",ALPRM1,ALPRM,ALPBD,ALPBPTN)) D PRT 155 D DONE 156 Q 157 PRT S ALPBPDAT(0)=$G(^ALPB(53.7,ALPBIEN,0)) 158 M ALPBPDAT(1)=^ALPB(53.7,ALPBIEN,1) 159 I ALPBPG=0 D PAGE 160 S ALPBOCT="" 161 F S ALPBOCT=$O(^TMP($J,ALPBPTN,ALPBOCT)) Q:ALPBOCT="" D 162 .S ALPBOST="" 163 .F S ALPBOST=$O(^TMP($J,ALPBPTN,ALPBOCT,ALPBOST)) Q:ALPBOST="" D 164 ..S ALPBORDN="" 165 ..F S ALPBORDN=$O(^TMP($J,ALPBPTN,ALPBOCT,ALPBOST,ALPBORDN)) Q:ALPBORDN="" D 166 ...S ALPBOIEN=^TMP($J,ALPBPTN,ALPBOCT,ALPBOST,ALPBORDN) 167 ...; get and print this order's data... 168 ...M ALPBDATA=^ALPB(53.7,ALPBIEN,2,ALPBOIEN) 169 ...D F132^ALPBFRM1(.ALPBDATA,ALPBDAYS,ALPBMLOG,.ALPBFORM,ALPBIEN) 170 ...;D F132^ALPBFRM1(.ALPBDATA,ALPBDAYS,.ALPBFORM) 171 ...I $Y+ALPBFORM(0)=IOSL!($Y+ALPBFORM(0)>IOSL) D PAGE 172 ...F ALPBX=1:1:ALPBFORM(0) W !,ALPBFORM(ALPBX) 173 ...K ALPBDATA,ALPBFORM,ALPBOIEN,ALPBX 174 ..K ALPBORDN 175 .K ALPBOST 176 K ALPBOCT 177 ; print footer at end of this patient's record... 178 I $Y+10>IOSL D PAGE 179 W !! 180 D FOOT^ALPBFRMU 181 ;Print a blank page between patient 182 W @IOF 183 S ALPBPG=0 184 K ALPBPDAT 185 Q 186 ;K ALPBIEN,ALPBPDAT KILLING ALPBIEN WILL BREAK SORT BY ROOM/BED 187 ; 188 DONE ; 189 K ALPBDAYS,ALPBMLOG,ALPBOTYP,ALPBPG,ALPBPTN,ALPBRDAT,ALPBWARD,^TMP($J),ALPRM,ALPRM1,ALPBD,ALPBIEN,ALPBSORT 190 I $D(ZTQUEUED) S ZTREQ="@" 191 Q 192 ; 193 PAGE ; print page header for patient... 194 W @IOF 195 S ALPBPG=ALPBPG+1 196 D HDR^ALPBFRMU(.ALPBPDAT,ALPBPG,.ALPBHDR) 197 F ALPBX=1:1:ALPBHDR(0) W !,ALPBHDR(ALPBX) 198 K ALPBHDR,ALPBX 199 Q -
WorldVistAEHR/trunk/r/BAR_CODE_MED_ADMIN-ALPB-PSB/ALPBUTL1.m
r613 r623 1 ALPBUTL1 ;OIFO-DALLAS MW,SED,KC-BCBU BACKUP REPORT FUNCTIONS AND UTILITIES ;01/01/03 2 ;;3.0;BAR CODE MED ADMIN;**8,37**;Mar 2004;Build 10 3 ;;Per VHA Directive 2004-038, this routine should not be modified. 4 ; 5 ; Reference/IA 6 ; INP^VADPT/10061 7 ; DIC(42/10039 8 ; DIC(42/2440 9 ; 10 ERRBLD(SEG,MSG,ERR) ; build an error array for non-FileMan-related errors... 11 ; SEG = HL7 segment name 12 ; MSG = a message that will be used in the error text portion of the array (optional -- if not passed, the 13 ; default will be used) 14 ; ERR = array passed by reference in which error will be returned 15 ; note: code 999 is a code indicating a non-FileMan error for filing the error message in file 53.71 16 S ERR("DIERR")=1 17 S ERR("DIERR",1)=999 18 S ERR("DIERR",1,"TEXT",1)=$S($G(MSG)'="":MSG,1:"Invalid parameter passed to "_SEG_" module in routine ALPBHL1U") 19 Q 20 ; 21 ERRLOG(IEN,OIEN,MSGREC,SEGNAME,SEGDATA,ERRTEXT) ; log filing errors... 22 ; this module logs error data in the BCMA BACKUP PARAMETERS file (53.71). These 23 ; errors usually occur as the result of missing or bad data passed to one of the 24 ; File Manager DBS calls used by this package. 25 ; 26 ; IEN = the patient's record number in file 53.7 27 ; OIEN = the order number's sub-file record number in file 53.7 28 ; MSGREC = the HL7 message's record number in file 772 29 ; SEGNAME = the HL7 segment associated with the error (optional) 30 ; SEGDATA = the HL7 segment's data (optional) 31 ; ERRTEXT = an array passed by reference which contains the error 32 ; code (numeric) and the error text to be filed. It is 33 ; expected that this is usually the error array returned 34 ; from a FileMan DBS call, so the format is specific: 35 ; 36 ; ERRTEXT("DIERR",n)=error code (numeric) 37 ; ERRTEXT("DIERR",n,"TEXT",1)=first line of error text 38 ; ERRTEXT("DIERR",n,"TEXT",2)=second line of error text 39 ; ERRTEXT("DIERR",n,"TEXT",n)=last line of error text 40 ; 41 ; However, any error message can be passed to this module 42 ; as long as the above format is used. 43 N ALPBCODE,ALPBFERR,ALPBFILE,ALPBLOGD,ALPBN1,ALPBN2,ALPBPIEN,ALPBTEXT,ALPBX 44 S ALPBLOGD=$$NOW^XLFDT() 45 S ALPBPIEN=+$O(^ALPB(53.71,0)) 46 I ALPBPIEN=0 D 47 .S X="ONE" 48 .S DIC="^ALPB(53.71," 49 .S DIC(0)="LZ" 50 .S DIC("DR")="1///^S X=3" 51 .S DINUM=1 52 .S DLAYGO=53.71 53 .D FILE^DICN K DIC 54 .S ALPBPIEN=+Y 55 I ALPBPIEN'>0 Q 56 S ALPBN1=+$O(^ALPB(53.71,ALPBPIEN,1," "),-1)+1 57 S ALPBFILE(53.713,"+"_ALPBN1_","_ALPBPIEN_",",.01)=ALPBLOGD 58 S ALPBFILE(53.713,"+"_ALPBN1_","_ALPBPIEN_",",1)=+$G(IEN) 59 S ALPBFILE(53.713,"+"_ALPBN1_","_ALPBPIEN_",",2)=+$G(OIEN) 60 S ALPBFILE(53.713,"+"_ALPBN1_","_ALPBPIEN_",",3)=+$G(MSGREC) 61 S ALPBFILE(53.713,"+"_ALPBN1_","_ALPBPIEN_",",3.1)=$G(SEGNAME) 62 S ALPBFILE(53.713,"+"_ALPBN1_","_ALPBPIEN_",",3.2)=$G(SEGDATA) 63 D UPDATE^DIE("","ALPBFILE","ALPBN1","ALPBFERR") 64 K ALPBFERR,ALPBFILE 65 S ALPBX=0 66 F S ALPBX=$O(ERRTEXT("DIERR",ALPBX)) Q:'ALPBX D 67 .S ALPBCODE=ERRTEXT("DIERR",ALPBX) 68 .; file the error code... 69 .S ALPBN2=+$O(^ALPB(53.71,ALPBPIEN,1,ALPBN1,2," "),-1)+1 70 .S ALPBFILE(53.7135,"+"_ALPBN2_","_ALPBN1_","_ALPBPIEN_",",.01)=ALPBCODE 71 .D UPDATE^DIE("","ALPBFILE","ALPBN2","ALPBFERR") 72 .K ALPBFERR,ALPBFILE 73 .; file the error text... 74 .M ALPBTEXT=ERRTEXT("DIERR",ALPBX,"TEXT") 75 .D WP^DIE(53.7135,ALPBN2_","_ALPBN1_","_ALPBPIEN_",",1,"","ALPBTEXT","ALPBFERR") 76 .;S ALPBFILE(53.7135,"+"_ALPBN2_","_ALPBN1_","_ALPBPIEN_",",1)=ALPBTEXT 77 .;D UPDATE^DIE("","ALPBFILE","ALPBN2","ALPBFERR") 78 .K ALPBCODE,ALPBFERR,ALPBFILE,ALPBN2,ALPBTEXT 79 Q 80 ; 81 CLEAN(IEN) ; check error log records to see if the patients' whose records 82 ; are noted still exist in file 53.7. if not, delete the error log 83 ; record(s) in file 53.71... 84 ; IEN = patient record number in file 53.7 85 ; Note: this function is also called from DELPT^ALPBUTL when a patient's 86 ; record is deleted (as a result of a discharge action) from 53.7. 87 ; 88 N ALPBX,ALPBY,DA,DIK,X,Y 89 ; patient still has record in 53.7? if so, quit... 90 I $G(^ALPB(53.7,IEN,0))'="" Q 91 S ALPBX=0 92 F S ALPBX=$O(^ALPB(53.71,"C",IEN,ALPBX)) Q:'ALPBX D 93 .S ALPBY=0 94 .F S ALPBY=$O(^ALPB(53.71,"C",IEN,ALPBX,ALPBY)) Q:'ALPBY D 95 ..S DA=ALPBY 96 ..S DA(1)=ALPBX 97 ..S DIK="^ALPB(53.71,"_DA(1)_",1," 98 ..D ^DIK 99 ..K DA,DIK 100 .K ALPBY 101 K ALPBX 102 Q 103 ; 104 DELERR(ERRIEN) ; delete an error log entry from file 53.71... 105 ; ERRIEN = error log entry's internal record number 106 N ALPBPARM,DA,DIK,X,Y 107 S ALPBPARM=+$O(^ALPB(53.71,0)) 108 I ALPBPARM'>0 Q 109 S DA=ERRIEN 110 S DA(1)=ALPBPARM 111 S DIK="^ALPB(53.71,"_DA(1)_",1," 112 D ^DIK 113 Q 114 ; 115 PTLIST(LTYPE,RESULTS) ; get list of patients in file 53.7... 116 ; LTYPE = passed = "ALL" to list all patients or 117 ; = <wardname> to list patients on a selected ward 118 ; RESULTS = an array passed by reference in which data will be returned 119 N ALPBDATA,ALPBIEN,ALPBPTN,ALPBX 120 I $G(LTYPE)="" S LTYPE="ALL" 121 S ALPBX=0 122 I LTYPE="ALL" D 123 .S ALPBPTN="" 124 .F S ALPBPTN=$O(^ALPB(53.7,"B",ALPBPTN)) Q:ALPBPTN="" D 125 ..S ALPBIEN=0 126 ..F S ALPBIEN=$O(^ALPB(53.7,"B",ALPBPTN,ALPBIEN)) Q:'ALPBIEN D 127 ...S ALPBDATA=$G(^ALPB(53.7,ALPBIEN,0)) 128 ...I ALPBDATA="" K ALPBDATA Q 129 ...S ALPBX=ALPBX+1 130 ...S RESULTS(ALPBX)=ALPBPTN_"^"_$P(ALPBDATA,"^",2)_"^"_$P(ALPBDATA,"^",5)_"^"_$P(ALPBDATA,"^",6)_"^"_$P(ALPBDATA,"^",7) 131 ...K ALPBDATA 132 ..K ALPBIEN 133 .K ALPBPTN 134 I LTYPE'="ALL" D 135 .S ALPBPTN="" 136 .F S ALPBPTN=$O(^ALPB(53.7,"AW",LTYPE,ALPBPTN)) Q:ALPBPTN="" D 137 ..S ALPBIEN=0 138 ..F S ALPBIEN=$O(^ALPB(53.7,"AW",LTYPE,ALPBPTN,ALPBIEN)) Q:'ALPBIEN D 139 ...S ALPBDATA=$G(^ALPB(53.7,ALPBIEN,0)) 140 ...I ALPBDATA="" K ALPBDATA Q 141 ...S ALPBX=ALPBX+1 142 ...S RESULTS(ALPBX)=ALPBPTN_"^"_$P(ALPBDATA,"^",2)_"^"_$P(ALPBDATA,"^",5)_"^"_$P(ALPBDATA,"^",6)_"^"_$P(ALPBDATA,"^",7) 143 ...K ALPBDATA 144 ..K ALPBIEN 145 .K ALPBPTN 146 Q 147 ; 148 STAT(ST) ;This will return the value of a status code for pharmacy 149 I $G(ST)="" Q "" 150 I $L($T(@ST)) G @ST 151 Q "" 152 IP Q "pending" 153 CM Q "finished/verified by pharmacist(active)" 154 DC Q "discontinued" 155 RP Q "replaced" 156 HD Q "on hold" 157 ZE Q "expired" 158 ZS Q "suspended(active)" 159 ZU Q "un-suspended(active)" 160 ZX Q "unreleased" 161 ZZ Q "renewed" 162 ; 163 STAT2(CODE) ; convert order status code for output... 164 ; this function is used primarily by the workstation software 165 ; CODE = an order status code 166 ; returns printable status code 167 I $G(CODE)="" Q "Unknown" 168 I CODE="IP"!(CODE="ZX") Q "Pending" 169 I CODE="CM"!(CODE="ZU")!(CODE="ZZ") Q "Active" 170 I CODE="HD"!(CODE="ZS") Q "Hold" 171 I CODE="DC"!(CODE="RP")!(CODE="ZE") Q "Expired" 172 Q "Unknown" 173 ; 174 DIV(DFN,ALPBMDT) ;get the Division for a patient 175 I +$G(DFN)'>0 Q "" 176 N ALPBDIV,ALPWRD,VAIN,VAINDT 177 S:+$G(ALPBMDT)>0 VAINDT=$P(ALPBMDT,".",1) 178 K ALPBMDT 179 D INP^VADPT 180 S ALPWRD=$P($G(VAIN(4)),U,1) 181 Q:+ALPWRD'>0 "" 182 ;Check to see if ward is a DOMICILIARY 183 I $P($G(^DIC(42,ALPWRD,0)),U,3)="D",+$$GET^XPAR("PKG.BAR CODE MED ADMIN","PSB BKUP DOM FILTER",1,"Q")>0 Q "DOM" 184 S ALPBDIV=$P($G(^DIC(42,ALPWRD,0)),U,11) 185 Q:+ALPBDIV'>0 "" 186 Q ALPBDIV 187 ; 188 CNV(A,B,X) ;CONVERT A STRING 189 ;This API will take a HL7 segment and convert characters 190 ;defined in the input 191 ;Example: 192 ;Single encoding characters can be converted such as ^ to ~ 193 ;or multiple encoding characters can be converted such as 194 ; |~^@/ to ^~|/@ 195 ;A is the string of HL7 encoding characters to be converted 196 ;B is the string of HL7 encoding characters to be converted to 197 ;X is te message string to be converted 198 I A=""!B=""!X="" Q "" 199 F I=1:1:$L(A) S A(I)=$E(A,I,I),A(I,1)="" 200 F I=1:1:$L(B) S B(I)=$E(B,I,I) 201 S J=0 202 F S J=$O(A(J)) Q:+J'>0 D 203 . F I=1:1:$L(X) S:$E(X,I,I)=A(J) A(J,1)=A(J,1)_I_U 204 S J=0 205 F S J=$O(A(J)) Q:+J'>0 D 206 . Q:'$D(A(J,1))!'$D(B(J)) 207 . F I=1:1:$L(A(J,1),U) S C=$P(A(J,1),U,I) S:+C>0 $E(X,C,C)=B(J) 208 Q X 1 ALPBUTL1 ;OIFO-DALLAS MW,SED,KC-BCBU BACKUP REPORT FUNCTIONS AND UTILITIES ;01/01/03 2 ;;3.0;BAR CODE MED ADMIN;**8**;Mar 2004 3 ; 4 ; Reference/IA 5 ; INP^VADPT/10061 6 ; DIC(42/10039 7 ; DIC(42/2440 8 ; 9 ERRBLD(SEG,MSG,ERR) ; build an error array for non-FileMan-related errors... 10 ; SEG = HL7 segment name 11 ; MSG = a message that will be used in the error text portion of the array (optional -- if not passed, the 12 ; default will be used) 13 ; ERR = array passed by reference in which error will be returned 14 ; note: code 999 is a code indicating a non-FileMan error for filing the error message in file 53.71 15 S ERR("DIERR")=1 16 S ERR("DIERR",1)=999 17 S ERR("DIERR",1,"TEXT",1)=$S($G(MSG)'="":MSG,1:"Invalid parameter passed to "_SEG_" module in routine ALPBHL1U") 18 Q 19 ; 20 ERRLOG(IEN,OIEN,MSGREC,SEGNAME,SEGDATA,ERRTEXT) ; log filing errors... 21 ; this module logs error data in the BCMA BACKUP PARAMETERS file (53.71). These 22 ; errors usually occur as the result of missing or bad data passed to one of the 23 ; File Manager DBS calls used by this package. 24 ; 25 ; IEN = the patient's record number in file 53.7 26 ; OIEN = the order number's sub-file record number in file 53.7 27 ; MSGREC = the HL7 message's record number in file 772 28 ; SEGNAME = the HL7 segment associated with the error (optional) 29 ; SEGDATA = the HL7 segment's data (optional) 30 ; ERRTEXT = an array passed by reference which contains the error 31 ; code (numeric) and the error text to be filed. It is 32 ; expected that this is usually the error array returned 33 ; from a FileMan DBS call, so the format is specific: 34 ; 35 ; ERRTEXT("DIERR",n)=error code (numeric) 36 ; ERRTEXT("DIERR",n,"TEXT",1)=first line of error text 37 ; ERRTEXT("DIERR",n,"TEXT",2)=second line of error text 38 ; ERRTEXT("DIERR",n,"TEXT",n)=last line of error text 39 ; 40 ; However, any error message can be passed to this module 41 ; as long as the above format is used. 42 N ALPBCODE,ALPBFERR,ALPBFILE,ALPBLOGD,ALPBN1,ALPBN2,ALPBPIEN,ALPBTEXT,ALPBX 43 S ALPBLOGD=$$NOW^XLFDT() 44 S ALPBPIEN=+$O(^ALPB(53.71,0)) 45 I ALPBPIEN=0 D 46 .S X="ONE" 47 .S DIC="^ALPB(53.71," 48 .S DIC(0)="LZ" 49 .S DIC("DR")="1///^S X=3" 50 .S DINUM=1 51 .S DLAYGO=53.71 52 .D FILE^DICN K DIC 53 .S ALPBPIEN=+Y 54 I ALPBPIEN'>0 Q 55 S ALPBN1=+$O(^ALPB(53.71,ALPBPIEN,1," "),-1)+1 56 S ALPBFILE(53.713,"+"_ALPBN1_","_ALPBPIEN_",",.01)=ALPBLOGD 57 S ALPBFILE(53.713,"+"_ALPBN1_","_ALPBPIEN_",",1)=+$G(IEN) 58 S ALPBFILE(53.713,"+"_ALPBN1_","_ALPBPIEN_",",2)=+$G(OIEN) 59 S ALPBFILE(53.713,"+"_ALPBN1_","_ALPBPIEN_",",3)=+$G(MSGREC) 60 S ALPBFILE(53.713,"+"_ALPBN1_","_ALPBPIEN_",",3.1)=$G(SEGNAME) 61 S ALPBFILE(53.713,"+"_ALPBN1_","_ALPBPIEN_",",3.2)=$G(SEGDATA) 62 D UPDATE^DIE("","ALPBFILE","ALPBN1","ALPBFERR") 63 K ALPBFERR,ALPBFILE 64 S ALPBX=0 65 F S ALPBX=$O(ERRTEXT("DIERR",ALPBX)) Q:'ALPBX D 66 .S ALPBCODE=ERRTEXT("DIERR",ALPBX) 67 .; file the error code... 68 .S ALPBN2=+$O(^ALPB(53.71,ALPBPIEN,1,ALPBN1,2," "),-1)+1 69 .S ALPBFILE(53.7135,"+"_ALPBN2_","_ALPBN1_","_ALPBPIEN_",",.01)=ALPBCODE 70 .D UPDATE^DIE("","ALPBFILE","ALPBN2","ALPBFERR") 71 .K ALPBFERR,ALPBFILE 72 .; file the error text... 73 .M ALPBTEXT=ERRTEXT("DIERR",ALPBX,"TEXT") 74 .D WP^DIE(53.7135,ALPBN2_","_ALPBN1_","_ALPBPIEN_",",1,"","ALPBTEXT","ALPBFERR") 75 .;S ALPBFILE(53.7135,"+"_ALPBN2_","_ALPBN1_","_ALPBPIEN_",",1)=ALPBTEXT 76 .;D UPDATE^DIE("","ALPBFILE","ALPBN2","ALPBFERR") 77 .K ALPBCODE,ALPBFERR,ALPBFILE,ALPBN2,ALPBTEXT 78 Q 79 ; 80 CLEAN(IEN) ; check error log records to see if the patients' whose records 81 ; are noted still exist in file 53.7. if not, delete the error log 82 ; record(s) in file 53.71... 83 ; IEN = patient record number in file 53.7 84 ; Note: this function is also called from DELPT^ALPBUTL when a patient's 85 ; record is deleted (as a result of a discharge action) from 53.7. 86 ; 87 N ALPBX,ALPBY,DA,DIK,X,Y 88 ; patient still has record in 53.7? if so, quit... 89 I $G(^ALPB(53.7,IEN,0))'="" Q 90 S ALPBX=0 91 F S ALPBX=$O(^ALPB(53.71,"C",IEN,ALPBX)) Q:'ALPBX D 92 .S ALPBY=0 93 .F S ALPBY=$O(^ALPB(53.71,"C",IEN,ALPBX,ALPBY)) Q:'ALPBY D 94 ..S DA=ALPBY 95 ..S DA(1)=ALPBX 96 ..S DIK="^ALPB(53.71,"_DA(1)_",1," 97 ..D ^DIK 98 ..K DA,DIK 99 .K ALPBY 100 K ALPBX 101 Q 102 ; 103 DELERR(ERRIEN) ; delete an error log entry from file 53.71... 104 ; ERRIEN = error log entry's internal record number 105 N ALPBPARM,DA,DIK,X,Y 106 S ALPBPARM=+$O(^ALPB(53.71,0)) 107 I ALPBPARM'>0 Q 108 S DA=ERRIEN 109 S DA(1)=ALPBPARM 110 S DIK="^ALPB(53.71,"_DA(1)_",1," 111 D ^DIK 112 Q 113 ; 114 PTLIST(LTYPE,RESULTS) ; get list of patients in file 53.7... 115 ; LTYPE = passed = "ALL" to list all patients or 116 ; = <wardname> to list patients on a selected ward 117 ; RESULTS = an array passed by reference in which data will be returned 118 N ALPBDATA,ALPBIEN,ALPBPTN,ALPBX 119 I $G(LTYPE)="" S LTYPE="ALL" 120 S ALPBX=0 121 I LTYPE="ALL" D 122 .S ALPBPTN="" 123 .F S ALPBPTN=$O(^ALPB(53.7,"B",ALPBPTN)) Q:ALPBPTN="" D 124 ..S ALPBIEN=0 125 ..F S ALPBIEN=$O(^ALPB(53.7,"B",ALPBPTN,ALPBIEN)) Q:'ALPBIEN D 126 ...S ALPBDATA=$G(^ALPB(53.7,ALPBIEN,0)) 127 ...I ALPBDATA="" K ALPBDATA Q 128 ...S ALPBX=ALPBX+1 129 ...S RESULTS(ALPBX)=ALPBPTN_"^"_$P(ALPBDATA,"^",2)_"^"_$P(ALPBDATA,"^",5)_"^"_$P(ALPBDATA,"^",6)_"^"_$P(ALPBDATA,"^",7) 130 ...K ALPBDATA 131 ..K ALPBIEN 132 .K ALPBPTN 133 I LTYPE'="ALL" D 134 .S ALPBPTN="" 135 .F S ALPBPTN=$O(^ALPB(53.7,"AW",LTYPE,ALPBPTN)) Q:ALPBPTN="" D 136 ..S ALPBIEN=0 137 ..F S ALPBIEN=$O(^ALPB(53.7,"AW",LTYPE,ALPBPTN,ALPBIEN)) Q:'ALPBIEN D 138 ...S ALPBDATA=$G(^ALPB(53.7,ALPBIEN,0)) 139 ...I ALPBDATA="" K ALPBDATA Q 140 ...S ALPBX=ALPBX+1 141 ...S RESULTS(ALPBX)=ALPBPTN_"^"_$P(ALPBDATA,"^",2)_"^"_$P(ALPBDATA,"^",5)_"^"_$P(ALPBDATA,"^",6)_"^"_$P(ALPBDATA,"^",7) 142 ...K ALPBDATA 143 ..K ALPBIEN 144 .K ALPBPTN 145 Q 146 ; 147 STAT(ST) ;This will return the value of a status code for pharmacy 148 I $G(ST)="" Q "" 149 I $L($T(@ST)) G @ST 150 Q "" 151 IP Q "pending" 152 CM Q "finished/verified by pharmacist(active)" 153 DC Q "discontinued" 154 RP Q "replaced" 155 HD Q "on hold" 156 ZE Q "expired" 157 ZS Q "suspended(active)" 158 ZU Q "un-suspended(active)" 159 ZX Q "unreleased" 160 ZZ Q "renewed" 161 ; 162 STAT2(CODE) ; convert order status code for output... 163 ; this function is used primarily by the workstation software 164 ; CODE = an order status code 165 ; returns printable status code 166 I $G(CODE)="" Q "Unknown" 167 I CODE="IP"!(CODE="ZX") Q "Pending" 168 I CODE="CM"!(CODE="ZU")!(CODE="ZZ") Q "Active" 169 I CODE="HD"!(CODE="ZS") Q "Hold" 170 I CODE="DC"!(CODE="RP")!(CODE="ZE") Q "Expired" 171 Q "Unknown" 172 ; 173 DIV(DFN,ALPBMDT) ;get the Division for a patient 174 I +$G(DFN)'>0 Q "" 175 N ALPBDIV,ALPWRD,VAIN,VAINDT 176 S:+$G(ALPBMDT)>0 VAINDT=$P(ALPBMDT,".",1) 177 K ALPBMDT 178 D INP^VADPT 179 S ALPWRD=$P($G(VAIN(4)),U,1) 180 Q:+ALPWRD'>0 "" 181 ;Check to see if ward is a DOMICILIARY 182 I $P($G(^DIC(42,ALPWRD,0)),U,3)="D" Q "DOM" 183 S ALPBDIV=$P($G(^DIC(42,ALPWRD,0)),U,11) 184 Q:+ALPBDIV'>0 "" 185 Q ALPBDIV 186 ; 187 CNV(A,B,X) ;CONVERT A STRING 188 ;This API will take a HL7 segment and convert characters 189 ;defined in the input 190 ;Example: 191 ;Single encoding characters can be converted such as ^ to ~ 192 ;or multiple encoding characters can be converted such as 193 ; |~^@/ to ^~|/@ 194 ;A is the string of HL7 encoding characters to be converted 195 ;B is the string of HL7 encoding characters to be converted to 196 ;X is te message string to be converted 197 I A=""!B=""!X="" Q "" 198 F I=1:1:$L(A) S A(I)=$E(A,I,I),A(I,1)="" 199 F I=1:1:$L(B) S B(I)=$E(B,I,I) 200 S J=0 201 F S J=$O(A(J)) Q:+J'>0 D 202 . F I=1:1:$L(X) S:$E(X,I,I)=A(J) A(J,1)=A(J,1)_I_U 203 S J=0 204 F S J=$O(A(J)) Q:+J'>0 D 205 . Q:'$D(A(J,1))!'$D(B(J)) 206 . F I=1:1:$L(A(J,1),U) S C=$P(A(J,1),U,I) S:+C>0 $E(X,C,C)=B(J) 207 Q X -
WorldVistAEHR/trunk/r/BAR_CODE_MED_ADMIN-ALPB-PSB/PSBO.m
r613 r623 1 PSBO 2 ;;3.0;BAR CODE MED ADMIN;**13,32,2**;Mar 2004;Build 223 4 5 6 7 8 9 10 RPC(RESULTS,PSBTYPE,PSBDFN,PSBSTRT,PSBSTOP,PSBINCL,PSBDEV,PSBSORT,PSBOI,PSBWLOC,PSBWSORT,PSBFUTR,PSBORDNM,PSBRCRI,PSBLIST) 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 XQ(PSBTYPE) 65 66 67 68 69 70 71 72 73 .I (PSBTYPE="BL")!(PSBTYPE="BZ")S PSBANS="" D CHECK I PSBANS=0!($D(DIRUT)) W !,"Cancelling Request..." S DIK="^PSB(53.69," D ^DIK W "Cancelled!" Q74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 DQ(PSBRPT) 93 94 95 96 97 98 99 100 101 IOM() 102 103 104 105 106 107 108 109 VAL(PSBFLDS) 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 SETUP() 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 WRAP(X,Y,Z) 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 CHECK 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 1 PSBO ;BIRMINGHAM/EFC-BCMA OUTPUTS ;Mar 2004 2 ;;3.0;BAR CODE MED ADMIN;**13,32**;Mar 2004;Build 32 3 ;Per VHA Directive 2004-038 (or future revisions regarding same), this routine should not be modified. 4 ; Reference/IA 5 ; ^DPT(/10035 6 ; WARD^NURSUT5/3052 7 ; EN^PSJBCMA/2828 8 ; ^ORD(101.24/3429 9 ; ^PSDRUG(/221 10 RPC(RESULTS,PSBTYPE,PSBDFN,PSBSTRT,PSBSTOP,PSBINCL,PSBDEV,PSBSORT,PSBOI,PSBWLOC,PSBWSORT,PSBFUTR,PSBORDNM,PSBRCRI,PSBLIST) ; 11 ; 12 ; RPC: PSB REPORT 13 ; 14 ; Description: 15 ; Used by the client to create individual patient extracts of 16 ; CHUI report options to display on the client. 17 ; 18 S RESULTS=$NAME(^TMP("PSBO",$J)) 19 N PSBIENS,PSBRPT,PSBFDA,DIC,PSBANS 20 K ^TMP("PSBO",$J) S ^TMP("PSBO",$J,1)="-1^" 21 S DFN=PSBDFN 22 D NEW^PSBO1(.PSBRPT,PSBTYPE) 23 I +PSBRPT(0)<1 S ^TMP("PSBO",$J,1)="-1^Error: "_$P(PSBRPT(0),U,2) Q 24 S PSBIENS=+PSBRPT(0)_"," 25 S PSBSTRT(0)=$E($P(PSBSTRT,".",2)_"0000",1,4),PSBSTRT=PSBSTRT\1 26 S PSBSTOP(0)=$E($P(PSBSTOP,".",2)_"0000",1,4),PSBSTOP=PSBSTOP\1 27 D:$G(PSBDEV)]"" 28 .D NOW^%DTC 29 .I $P(PSBDEV,U,2)="" D VAL^DIE(53.69,PSBIENS,.06,"F",PSBDEV,"PSBRET","PSBFDA") 30 .I $P(PSBDEV,U,2)'="" D VAL^DIE(53.69,PSBIENS,.06,"F","`"_$P(PSBDEV,U,2),"PSBRET","PSBFDA") 31 .D VAL^DIE(53.69,PSBIENS,.07,"F",$S($P(PSBRCRI,U)="QD":$P(PSBRCRI,U,2),1:%),"PSBRET","PSBFDA") 32 D:$G(PSBOI)]"" VAL^DIE(53.69,PSBIENS,.09,"F",PSBOI,"PSBRET","PSBFDA") 33 S:($G(PSBSORT)']"")&(PSBTYPE'="XA") PSBSORT="P" D VAL^DIE(53.69,PSBIENS,.11,"F",PSBSORT,"PSBRET","PSBFDA") 34 D VAL^DIE(53.69,PSBIENS,.12,"F","`"_PSBDFN,"PSBRET","PSBFDA") 35 I $G(PSBWLOC)]"" S PSBFDA(53.69,PSBIENS,.13)=PSBWLOC 36 D:$G(PSBWSORT)]"" VAL^DIE(53.69,PSBIENS,.15,"F",PSBWSORT,"PSBRET","PSBFDA") 37 D VAL^DIE(53.69,PSBIENS,.16,"F",PSBSTRT,"PSBRET","PSBFDA") 38 D VAL^DIE(53.69,PSBIENS,.17,"F",PSBSTRT(0),"PSBRET","PSBFDA") 39 D VAL^DIE(53.69,PSBIENS,.18,"F",PSBSTOP,"PSBRET","PSBFDA") 40 D VAL^DIE(53.69,PSBIENS,.19,"F",PSBSTOP(0),"PSBRET","PSBFDA") 41 D:$G(PSBINCL)]"" 42 .D VAL^DIE(53.69,PSBIENS,.21,"F",+$P(PSBINCL,"^",1),"PSBRET","PSBFDA") 43 .D VAL^DIE(53.69,PSBIENS,.22,"F",+$P(PSBINCL,"^",2),"PSBRET","PSBFDA") 44 .D VAL^DIE(53.69,PSBIENS,.23,"F",+$P(PSBINCL,"^",3),"PSBRET","PSBFDA") 45 .D VAL^DIE(53.69,PSBIENS,.24,"F",+$P(PSBINCL,"^",4),"PSBRET","PSBFDA") 46 .D VAL^DIE(53.69,PSBIENS,.28,"F",+$P(PSBINCL,"^",5),"PSBRET","PSBFDA") 47 .D VAL^DIE(53.69,PSBIENS,.29,"F",+$P(PSBINCL,"^",6),"PSBRET","PSBFDA") 48 D:$G(PSBFUTR)]"" 49 .D VAL^DIE(53.69,PSBIENS,.25,"F",+$P(PSBFUTR,"^",1),"PSBRET","PSBFDA") 50 .D VAL^DIE(53.69,PSBIENS,.26,"F",+$P(PSBFUTR,"^",2),"PSBRET","PSBFDA") 51 .D VAL^DIE(53.69,PSBIENS,.27,"F",+$P(PSBFUTR,"^",3),"PSBRET","PSBFDA") 52 .D VAL^DIE(53.69,PSBIENS,.41,"F",+$P(PSBFUTR,"^",4),"PSBRET","PSBFDA") 53 .D VAL^DIE(53.69,PSBIENS,.61,"F",$TR(PSBFUTR,"^ ","~"),"PSBRET","PSBFDA") 54 D FILE^DIE("","PSBFDA") 55 I $G(PSBLIST(0),"")]"" D LIST^PSBO1(.PSBLIST) 56 I $G(PSBDEV)]"" D PRINT^PSBO1 S RESULTS=$NAME(^TMP("PSBO",$J)) Q 57 D HFSOPEN^PSBUTL("RPC") I POP S ^TMP("PSBO",$J,1)="ERROR: UNABLE TO ACCESS HFS DIRECTORY "_$$GET^XPAR("DIV","PSB HFS SCRATCH"),^TMP("PSBO",$J,2)="PLEASE CHECK DIRECTORY WRITE PRIVILEDGES." Q 58 U IO D DQ(+PSBIENS) 59 D HFSCLOSE^PSBUTL("RPC") 60 S RESULTS=$NAME(^TMP("PSBO",$J)) 61 D:$G(PSBDEV)]"" PRINT^PSBO1 62 Q 63 ; 64 XQ(PSBTYPE) ; Called via Kernel Menus 65 N PSBANS,PSBANS1,PSBRPT,PSBSAVE,DA,DIK,DR,DDSFILE 66 D NEW^PSBO1(.PSBRPT,PSBTYPE) 67 I +PSBRPT(0)<1 W !,"Error: ",$P(PSBRPT(0),U,2) S DIR(0)="E" D ^DIR Q 68 S DA=+PSBRPT(0),DR="[PSBO "_PSBTYPE_"]",DDSFILE=53.69 D ^DDS 69 W @IOF 70 I 'PSBSAVE W !,"Cancelling Request..." S DIK="^PSB(53.69," D ^DIK W "Cancelled!" 71 D:PSBSAVE 72 .;Check Drug to Patient Relationship. 73 .I PSBTYPE="BL" S PSBANS="" D CHECK I PSBANS=0!($D(DIRUT)) W !,"Cancelling Request..." S DIK="^PSB(53.69," D ^DIK W "Cancelled!" Q 74 .; 75 .;Allow "'BROWSER" Device 76 .S IOP=$$GET1^DIQ(53.69,DA_",",.06,"I"),PSBSIO=0 I IOP]"" D 77 ..S IOP="`"_IOP,%ZIS="N" 78 ..D ^%ZIS 79 ..I IO=IO(0) S PSBSIO=1 80 ..D HOME^%ZIS K IOP 81 .I $$GET1^DIQ(53.69,DA_",",.06)["BROWSER"!(PSBSIO=1) S IOP=$$GET1^DIQ(53.69,DA_",",.06)_";132" D ^%ZIS U IO D DQ(DA) D ^%ZISC K IOP Q 82 .W @IOF,"Submitting Your Report Request to Taskman..." 83 .S ZTIO=$$GET1^DIQ(53.69,DA_",",.06) 84 .S ZTDTH=$P(^PSB(53.69,DA,0),U,7) 85 .S ZTDESC="BCMA - "_$$GET1^DIQ(53.69,DA_",",.05) 86 .S ZTRTN="DQ^PSBO("_DA_")" 87 .D ^%ZTLOAD 88 .W "Submitted!",!,"Your Task Number Is: ",$G(ZTSK),! 89 K ^TMP("PSBO",$J) 90 Q 91 ; 92 DQ(PSBRPT) ; Dequeue report from Taskman 93 N PSBWRD,PSBDFN 94 Q:'$D(^PSB(53.69,PSBRPT,0)) ; No Such Report 95 S $P(^PSB(53.69,PSBRPT,0),U,8)=$G(ZTSK,"RPC") 96 D:$$SETUP @("EN^PSBO"_$P(PSBRPT(0),U,5)) 97 K ^TMP("PSBO",$J) 98 S ZTREQ="@" 99 Q 100 ; 101 IOM() ; Returns good margin or not 102 Q:IOM'<132 1 103 W !,"**************************************************************" 104 W !,"* SORRY, Your selected DEVICE does not print 132 columns. *" 105 W !,"**************************************************************" 106 W ! 107 Q 0 108 ; 109 VAL(PSBFLDS) ; Validate that fields in PSBFLDS are filled in 110 N PSB,PSBFLD,PSBMSG,PSBSTOP,PSBST,PSBDAYS S PSBSTRT="" 111 F PSB=1:1 Q:$P(PSBFLDS,";",PSB)="" S PSBFLD=$P(PSBFLDS,";",PSB),PSBFLD(PSBFLD)=$$GET^DDSVAL(53.69,DA,PSBFLD) 112 I $D(PSBFLD(.11)) K:$E(PSBFLD(.11))="P" PSBFLD(.13),PSBFLD(.15) K:$E(PSBFLD(.11))="W" PSBFLD(.12) 113 S PSB="" F S PSB=$O(PSBFLD(PSB)) Q:PSB="" D:PSBFLD(PSB)="" 114 .I '$D(PSBMSG) S PSBMSG(0)="UNABLE TO FILE REQUEST",PSBMSG(1)=" ",PSBMSG(2)="ERROR: MISSING DATA - ALL FIELDS ARE REQUIRED",PSBMSG(3)=" " 115 .D FIELD^DID(53.69,PSB,"","TITLE;LABEL","PSB") 116 .S Z=" Missing Field: "_$S(PSB("TITLE")]"":PSB("TITLE"),1:PSB("LABEL")) 117 .S PSBMSG($O(PSBMSG(""),-1)+1)=Z 118 ; Check Times 119 D:$G(PSBFLD(.16)) 120 .S PSBSTRT=PSBFLD(.16)+$G(PSBFLD(.17)) 121 .D:$P($$GET1^DIQ(53.69,DA_",",.01),U)["MH" 122 ..S PSBDAYS=$$GET1^DIQ(101.24,$$FIND1^DIC(101.24,"","X","ORRP BCMA MAH","B")_",",.42) ;check maxdays 123 ..S:PSBDAYS="" PSBDAYS=7 124 ..S X=PSBSTRT\1 D H^%DTC S PSBST=%H+PSBDAYS ;Determine stop date 125 .S PSBSTOP=$S($G(PSBFLD(.18)):PSBFLD(.18),1:PSBFLD(.16))+$G(PSBFLD(.19)) 126 .I PSBSTOP<PSBSTRT S Y=$O(PSBMSG(""),-1)+1,PSBMSG(Y)=" Date: Stop Date/Time is before Start Date/Time" 127 .I $P($$GET1^DIQ(53.69,DA_",",.01),U)["MH" S X=PSBSTOP\1 D H^%DTC I %H>PSBST S Y=$O(PSBMSG(""),-1)+1,PSBMSG(Y)=" The date range cannot exceed "_PSBDAYS_" day(s) as defined in the CPRS 'MAXIMUM DAYS BACK' parameter" 128 Q:'$D(PSBMSG) ; All is well 129 D MSG^DDSUTL(.PSBMSG) 130 S DDSERROR=1 131 Q 132 ; 133 SETUP() ; Setup parameters for the report in PSBRPT 134 N PSBWRDL,PSBINDX,PSBWRDA 135 K ^TMP("PSBO",$J) 136 F X=0,.1,.2,.3,.4,1 S PSBRPT(X)=$G(^PSB(53.69,PSBRPT,X)) 137 I $D(^PSB(53.69,PSBRPT,2)) M PSBRPT(2)=^PSB(53.69,PSBRPT,2) 138 I $P(PSBRPT(.1),U,1)="P" S PSBDFN=+$P(PSBRPT(.1),U,2) Q:'PSBDFN S ^TMP("PSBO",$J,PSBDFN,0)=$P(^DPT(PSBDFN,0),U)_U_$P(^DPT(PSBDFN,0),U,9),^TMP("PSBO",$J,"B",$P(^DPT(PSBDFN,0),U),PSBDFN)="" 139 D:$P(PSBRPT(.1),U,1)="W" 140 .S PSBWRD=$P(PSBRPT(.1),U,3) Q:'PSBWRD D WARD^NURSUT5("L^"_PSBWRD,.PSBWRDA) 141 .S X="" F S X=$O(PSBWRDA(PSBWRD,2,X)) Q:X="" S PSBWRDL=$P(PSBWRDA(PSBWRD,2,X,.01),U,2) D 142 ..F PSBDFN=0:0 S PSBDFN=$O(^DPT("CN",PSBWRDL,PSBDFN)) Q:'PSBDFN D 143 ...S ^TMP("PSBO",$J,PSBDFN,0)=$P(^DPT(PSBDFN,0),U)_U_$P(^DPT(PSBDFN,0),U,9) 144 ...; Determine Sort or default to Pt Name... 145 ...S:$P(PSBRPT(.1),U,5)="P" PSBINDX=$P(^DPT(PSBDFN,0),U) 146 ...I $P(PSBRPT(.1),U,5)="B" S PSBINDX=$P($G(^DPT(PSBDFN,.101)),U) S:PSBINDX="" PSBINDX="** NO ROOM BED **" 147 ...S:$P(PSBRPT(.1),U,5)="" PSBINDX=$P(^DPT(PSBDFN,0),U) 148 ...S:$G(PSBINDX)="" PSBINDX=$P(^DPT(PSBDFN,0),U) 149 ...S ^TMP("PSBO",$J,"B",PSBINDX,PSBDFN)="" 150 Q 1 151 ; 152 WRAP(X,Y,Z) ; Quick text wrap 153 ; 154 ; Input Parameters Description: 155 ; X: Left Column of display [Optional] 156 ; Y: Cols to wrap in [Optional] 157 ; Z: Text to wrap [Optional] 158 ; 159 N PSB 160 F Q:'$L(Z) D 161 .W:$X>X ! 162 .W:$X<X ?X 163 .I $L(Z)<Y W Z S Z="" Q 164 .F PSB=Y:-1:0 Q:$E(Z,PSB)=" " 165 .S:PSB<1 PSB=Y 166 .W $E(Z,1,PSB) 167 .S Z=$E(Z,PSB+1,250) 168 Q "" 169 ; 170 CHECK ;Beginning of PSB*1*10 171 K ^TMP("PSJ",$J) 172 N PSBDFN,PSBBAR,PSBDRUG,PSBFLAG,PSBPNM,PSBNDX,PSBX 173 S PSBFLAG="",PSBBAR=$P($P($G(^PSB(53.69,DA,.3)),U,1),"~",2) 174 S PSBDRUG=$$GET1^DIQ(53.69,DA_",",.31) 175 S PSBDFN=$$GET1^DIQ(53.69,DA_",",.12,"I") S:$G(PSBDFN) PSBFLAG=1 176 D EN^PSJBCMA(PSBDFN) 177 F PSBX=0:0 S PSBX=$O(^TMP("PSJ",$J,PSBX)) Q:'PSBX D 178 .K Y,PSBORD,PSBPNM,PSBNDX 179 .M PSBORD=^TMP("PSJ",$J,PSBX) 180 .F PSBNDX=700,850,950 D 181 ..F Y=0:0 S Y=$O(PSBORD(PSBNDX,Y)) Q:'Y D 182 ...I $P($G(PSBORD(1)),U,7)'="A" Q 183 ...S PSBPNM=$P(PSBORD(PSBNDX,Y,0),U,1) 184 ...I PSBNDX=700,PSBPNM=PSBBAR S PSBFLAG=0 Q 185 ...I PSBNDX=850,$D(^PSDRUG("A526",PSBBAR,PSBPNM)) S PSBFLAG=0 Q 186 ...I PSBNDX=950,$D(^PSDRUG("A527",PSBBAR,PSBPNM)) S PSBFLAG=0 187 I PSBFLAG=1 D 188 .W !,"Patient is not currently on medication: ",PSBDRUG 189 .K DIRUT,DIR 190 .S DIR("A")="Do you want to continue" 191 .S DIR(0)="Y" 192 .D ^DIR 193 .S PSBANS=+Y W ! 194 ; -
WorldVistAEHR/trunk/r/BAR_CODE_MED_ADMIN-ALPB-PSB/PSBO1.m
r613 r623 1 PSBO1 2 ;;3.0;BAR CODE MED ADMIN;**4,13,32,2,43**;Mar 2004;Build23 4 5 6 7 NEW(RESULTS,PSBRTYP) 8 9 10 11 I '$F("DL^MD^MH^ML^MM^MV^MT^PE^PM^WA^BL^PI^AL^DO^VT^PF^XA^IV^CM^CP^CE^CI^BZ^",PSBRTYP) S RESULTS(0)="-1^Invalid Report Type" Q12 13 14 15 L +(^PSB(53.69,0)):$S($G(DILOCKTM)>30:DILOCKTM,1:30) 16 17 18 19 20 21 22 23 24 25 26 27 28 PRINT 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 LIST(XLIST) 50 51 52 53 54 55 56 57 1 PSBO1 ;BIRMINGHAM/EFC-BCMA OUTPUTS ;Mar 2004 2 ;;3.0;BAR CODE MED ADMIN;**4,13,32**;Mar 2004;Build 32 3 ;Per VHA Directive 2004-038 (or future revisions regarding same), this routine should not be modified. 4 ; Reference/IA 5 ; FILE^DICN/10009 6 ; 7 NEW(RESULTS,PSBRTYP) ; Create a new report request 8 ; Called interactively and via RPCBroker 9 K RESULTS 10 ; Check Type 11 I '$F("DL^MD^MH^ML^MM^MV^MT^PE^PM^WA^BL^PI^AL^DO^VT^PF^XA^IV^CM^CP^CE^CI^",PSBRTYP) S RESULTS(0)="-1^Invalid Report Type" Q 12 I '+$G(DUZ) S RESULTS(0)="-1^Undefined User" Q 13 I '$G(DUZ(2)) S RESULTS(0)="-1^Undefined Division" Q 14 ; Lock Log 15 L +(^PSB(53.69,0)):0 16 E S RESULTS(0)="-1^Request Log Locked" Q 17 ; Generate Unique Entry and Create 18 F D NOW^%DTC S X=$E(%_"000000",1,14) S X=(1700+$E(X,1,3))_$E(X,4,14),X=PSBRTYP_"-"_$TR(X,".","-") Q:'$D(^PSB(53.69,"B",X)) 19 S DIC="^PSB(53.69,",DIC(0)="L" 20 S DIC("DR")=".02///N;.03////^S X=DUZ;.04////^S X=DUZ(2);.05///^S X=PSBRTYP" 21 K DD,DO D FILE^DICN 22 L -(^PSB(53.69,0)) 23 ; Okay, setup return and Boogie 24 I +Y<1 S RESULTS(0)="-1^Error Creating Request" 25 E S RESULTS(0)=Y 26 Q 27 ; 28 PRINT ; 29 N ZTDTH,ZTRTN,ZTSK,ZTDESC,ZTSAVE,DA 30 S DA=+PSBRPT(0) 31 S IOP=$$GET1^DIQ(53.69,DA_",",.06,"I"),PSBSIO=0 I IOP]"" D 32 .S IOP="`"_IOP,%ZIS="N" 33 .D ^%ZIS 34 .I IO=IO(0) S PSBSIO=1 35 .D HOME^%ZIS K IOP 36 I $$GET1^DIQ(53.69,DA_",",.06)["BROWSER"!(PSBSIO=1) S IOP=$$GET1^DIQ(53.69,DA_",",.06)_";132" D ^%ZIS U IO D DQ^PSBO(DA) D ^%ZISC K IOP Q 37 W @IOF,"Submitting Your Report Request to Taskman..." 38 S ZTIO=$$GET1^DIQ(53.69,DA_",",.06)_";132" 39 S ZTDTH=$S($$GET1^DIQ(53.69,DA_",",.07,"I")]"":$$GET1^DIQ(53.69,DA_",",.07,"I"),1:$H) 40 S ZTDESC="BCMA - "_$$GET1^DIQ(53.69,DA_",",.05) 41 S ZTRTN="DQ^PSBO("_DA_")" 42 F I="PSBDFN","PSBTYPE" S ZTSAVE(I)="" 43 I $G(PSBORDNM)]"" S ZTSAVE("PSBORDNM")="" 44 D ^%ZTLOAD 45 I $D(ZTSK) S ^TMP("PSBO",$J,1)="0^Report queued. (Task #"_ZTSK_")" 46 E S ^TMP("PSBO",$J,1)="-1^Task Rejected." 47 Q 48 ; 49 LIST(XLIST) ; Place List Criteria into subfile #53.692 (multiple) 50 F XL1=$O(XLIST("")):1:$O(XLIST("B"),-1) Q:+XL1="" D 51 .I $P(XLIST(XL1),U)=PSBTYPE D 52 ..K PSBFDA,PSBRET,PSBIENX D CLEAN^DILF 53 ..S PSBIENX="+"_(XL1+1)_","_PSBIENS 54 ..D VAL^DIE(53.692,"+"_(XL1+1)_","_PSBIENS,.01,"F",$TR(XLIST(XL1),"^","~"),"PSBRET","PSBFDA") 55 ..D UPDATE^DIE("","PSBFDA","PSBIENX","PSBRET") 56 Q 57 ; -
WorldVistAEHR/trunk/r/BAR_CODE_MED_ADMIN-ALPB-PSB/PSBOMH1.m
r613 r623 1 PSBOMH1 2 ;;3.0;BAR CODE MED ADMIN;**6,3,9,11,26,38,VWEHR1**;WorldVistA 30-Jan-08;Build 4 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 EN 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 DDAUD 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 PSBOUT(PSBTET,PSBOT1) 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 1 PSBOMH1 ;BIRMINGHAM/EFC-MAH ;7:40 PM 30 Jan 2008 2 ;;3.0;BAR CODE MED ADMIN;**6,3,9,11,26,38,VWEHR1**;WorldVistA 30-Jan-08 3 ;Per VHA Directive 2004-038, this routine should not be modified. 4 ; 5 ;Modified from FOIA VISTA, 6 ;Copyright 2008 WorldVistA. Licensed under the terms of the GNU 7 ;General Public License See attached copy of the License. 8 ; 9 ;This program is free software; you can redistribute it and/or modify 10 ;it under the terms of the GNU General Public License as published by 11 ;the Free Software Foundation; either version 2 of the License, or 12 ;(at your option) any later version. 13 ; 14 ;This program is distributed in the hope that it will be useful, 15 ;but WITHOUT ANY WARRANTY; without even the implied warranty of 16 ;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 ;GNU General Public License for more details. 18 ; 19 ;You should have received a copy of the GNU General Public License along 20 ;with this program; if not, write to the Free Software Foundation, Inc., 21 ;51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 22 ; 23 ; Reference/IA 24 ; ^DILF/2054 25 ; File 200/10060 26 ; 27 EN ; 28 ; Load administrations 29 S (PSBORD,PSBIEN,PSBR1,PSBADIEN,PSBABR)="",PSBDT=PSBSTRT 30 K PSBTSA 31 F S PSBDT=$O(^PSB(53.79,"AADT",DFN,PSBDT)) Q:'PSBDT!(PSBDT>PSBSTOP) D 32 .F S PSBIEN=$O(^PSB(53.79,"AADT",DFN,PSBDT,PSBIEN)) Q:'PSBIEN Q:'$D(^PSB(53.79,PSBIEN)) L +^PSB(53.79,PSBIEN):3 I $P(^PSB(53.79,PSBIEN,0),U,9)]"" D L -^PSB(53.79,PSBIEN) 33 ..Q:'$P($G(^PSB(53.79,PSBIEN,0)),U,6) ; Bad IEN -no evnt dt 34 ..Q:$P(^PSB(53.79,PSBIEN,0),U,9)="N" ;NGiven 35 ..S PSBORD=$P($G(^PSB(53.79,PSBIEN,.1)),U,1) 36 ..; Continuous 37 ..D:$P($G(^PSB(53.79,PSBIEN,.1)),U,2)="C" 38 ...S X=PSBDT D H^%DTC S PSBWEEK=PSBAR(%H) D CLEAN^PSBVT,PSJ1^PSBVT($P(^PSB(53.79,PSBIEN,0),U,1),$P(^PSB(53.79,PSBIEN,.1),U,1)) 39 ...I $P(^PSB(53.79,PSBIEN,0),U,6)'=PSBDT,'$$IVPTAB^PSBVDLU3(PSBOTYP,PSBIVT,PSBISYR,PSBCHEMT,PSBIVPSH) D D CLEAN^PSBVT Q ;chck IV audit 40 ....S PSBSIEN=PSBIEN 41 ....I $P(^PSB(53.79,PSBIEN,0),"^",10)]"" D BAGDTL^PSBRPC2(.PSBAUD,$P(^PSB(53.79,PSBIEN,0),U,10),$P(^PSB(53.79,PSBIEN,.1),U,1)) 42 ....S PSBIEN=PSBSIEN K PSBSIEN 43 ....S X=0 F S X=$O(PSBAUD(X)) Q:X="" I $P(PSBAUD(X),U,3)="" K PSBAUD(X) 44 ....S X=0 F S X=$O(PSBAUD(X)) Q:X="" Q:$P(PSBAUD(X),U,1)=PSBDT 45 ....I X="" K PSBAUD Q 46 ....I '$D(PSBAUD(X)) K PSBAUD Q 47 ....S PSBS=$P(PSBAUD(X),U,3) 48 ....I PSBS="GIVEN",$P($G(PSBAUD(X-1)),U,3)="NOT GIVEN" Q 49 ....I PSBS="NOT GIVEN" Q 50 ....S PSBS=$S(PSBS="INFUSING":"I",PSBS="GIVEN":"G",PSBS="COMPLETED":"C",PSBS="HELD":"H",PSBS="REFUSED":"R",PSBS="REMOVED":"RM",PSBS="STOPPED":"S",PSBS["MISSING":"M",1:"NOACTION") 51 ....D PSBSTIV^PSBOMH2 52 ....S X=PSBDT_U_$P(PSBAUD(X),U,2)_U_PSBS_U_PSBIEN 53 ....S Y=$O(^TMP("PSB",$J,PSBWEEK,PSBORD,PSBDT\1,""),-1)+1 54 ....S ^TMP("PSB",$J,PSBWEEK,PSBORD,PSBDT\1,Y)=X 55 ....S ^TMP("PSB",$J,PSBWEEK,PSBORD,PSBDT\1,0)=Y 56 ....D PSBOUT($P((X),"^",1),$P((X),"^",2)) 57 ....K PSBAUD 58 ...S PSBINIT=$$GET1^DIQ(53.79,PSBIEN_",","ACTION BY:INITIAL") 59 ...S PSBNAME=$$GET1^DIQ(53.79,PSBIEN_",","ACTION BY:NAME") 60 ...I PSBINIT="" S PSBINIT=99 61 ...;get instrc info - audt log 62 ...I $D(^PSB(53.79,PSBIEN,.9,$P(PSBDT,"."))) D 63 ....D INSTR^PSBOMH 64 ....S ^TMP("PSB",$J,"LEGEND",PSBINIT,PSBNAME)="" 65 ...I PSBINIT[99 S PSBINIT="" 66 ...I $P(^PSB(53.79,PSBIEN,0),U,9)="G",PSBDT=$P(^PSB(53.79,PSBIEN,0),U,6) D PSBCK1^PSBOMH2("A") 67 ...I $P(^PSB(53.79,PSBIEN,0),U,9)'="G",PSBDT=$P(^PSB(53.79,PSBIEN,0),U,6) D PSBCK1^PSBOMH2("B") 68 ...I PSBDT'=$P(^PSB(53.79,PSBIEN,0),U,6),$P(^PSB(53.79,PSBIEN,0),U,9)="RM" D 69 ....D DDAUD 70 ....S I="" F S I=$O(PSBTAR(I),-1) Q:I="" I $P(PSBTAR(I),U,1)=PSBDT D 71 .....S PSBS=$P(PSBTAR(I),U,3) 72 .....I PSBS="GIVEN",$P($G(PSBTAR(I-1)),U,3)="NOT GIVEN" Q ; canceled - not given 73 .....I PSBS="NOT GIVEN" Q 74 .....S PSBS=$S(PSBS="INFUSING":"I",PSBS="GIVEN":"G",PSBS="COMPLETED":"C",PSBS="HELD":"H",PSBS="REFUSED":"R",PSBS="REMOVED":"RM",PSBS="STOPPED":"S",PSBS["MISSING":"M",1:"NO ACTION") 75 .....D PSBCTAR^PSBOMH2 76 .....S X=$P(PSBTAR(I),U,1,2)_U_PSBS_U_PSBIEN 77 ...S Y=$O(^TMP("PSB",$J,PSBWEEK,PSBORD,PSBDT\1,""),-1)+1 78 ...S ^TMP("PSB",$J,PSBWEEK,PSBORD,PSBDT\1,Y)=X 79 ...S ^TMP("PSB",$J,PSBWEEK,PSBORD,PSBDT\1,0)=Y 80 ...D PSBOUT($P((X),"^",1),$P((X),"^",2)) 81 ...Q 82 ..; 1-Time On Call or PRN 83 ..D:$P($G(^PSB(53.79,PSBIEN,.1)),U,2)'="C" 84 ...I PSBDT'=$$GET1^DIQ(53.79,PSBIEN_",",.06,"I") Q 85 ...S PSBINIT=$$GET1^DIQ(53.79,PSBIEN_",","ACTION BY:INITIAL") 86 ...S PSBNAME=$$GET1^DIQ(53.79,PSBIEN_",","ACTION BY:NAME") 87 ...I PSBINIT="" S PSBINIT=99 88 ...S (PSBXA,PSBM)=1,(PSBZ,PSBT,PSBFLG)="" 89 ...I $$GET1^DIQ(53.79,PSBIEN_",",.09)="REMOVED" D 90 ....F I=1:1 S PSBXA=$O(^PSB(53.79,PSBIEN,.9,PSBXA)) Q:PSBXA="" I PSBXA?1.3N S PSBZ=PSBZ+1,PSBT(PSBZ)=^PSB(53.79,PSBIEN,.9,PSBXA,0) 91 ....F S=1:1 Q:PSBM<1 S PSBM=PSBZ-S I (PSBM>0) I (PSBT(PSBM)["GIVEN") S PSBFLG="1" S PRELINE1=$P(PSBT(PSBM),"'",2)_" "_$$GET1^DIQ(53.79,PSBIEN_",",.04)_" "_$E($P(PSBT(PSBM),"'",4),1,3) Q 92 ...I $D(^PSB(53.79,PSBIEN,.9,$P(PSBDT,"."))) D 93 ....D INSTR^PSBOMH 94 ....S ^TMP("PSB",$J,"LEGEND",PSBINIT,PSBNAME)="" 95 ...I '$D(^PSB(53.79,PSBIEN,.9,$P(PSBDT,"."))) D PSBOUT(PSBDT,PSBINIT) 96 ...S PSBLINE1=$$GET1^DIQ(53.79,PSBIEN_",",.09)_" "_$$GET1^DIQ(53.79,PSBIEN_",",.06)_" "_PSBINIT_" "_$$GET1^DIQ(53.79,PSBIEN_",",.21),PSBLINE2="" 97 ...I PSBINIT[99 S PSBINIT="" 98 ...D:$P($G(^PSB(53.79,PSBIEN,.1)),U,2)="P" 99 ....I $P($G(^PSB(53.79,PSBIEN,.2)),U,2)="" S PSBLINE2=" Results: <No PRN Results On File>" 100 ....E D 101 .....S PSBINIT=$$GET1^DIQ(53.79,PSBIEN_",","PRN EFFECTIVENESS ENTERED BY:INITIAL") 102 .....S PSBNAME=$$GET1^DIQ(53.79,PSBIEN_",","PRN EFFECTIVENESS ENTERED BY:NAME") 103 .....I PSBINIT="" S PSBINIT=99 104 .....I $D(^PSB(53.79,PSBIEN,.9,$P(PSBDT,"."))) D 105 ......S PSBINIT=PSBINIT_"*",PSBNAME=PSBNAME_"/"_$P(^PSB(53.79,PSBIEN,.9,$P(PSBDT,"."),0),U,3)_" "_$$GET1^DIQ(53.79,PSBIEN_",",.24) 106 ......S ^TMP("PSB",$J,"LEGEND",PSBINIT,PSBNAME)="" 107 .....I '$D(^PSB(53.79,PSBIEN,.9,$P(PSBDT,"."))) D 108 ......D:$D(^PSB(53.79,PSBIEN,.9,0)) 109 .......S (PSBXA2,PSBFG)=0,PSBEFFDT=$P(^PSB(53.79,PSBIEN,.2),U,4) F S PSBXA2=$O(^PSB(53.79,PSBIEN,.9,PSBXA2)) Q:+PSBXA2'>0 D Q:PSBFG=1 110 ........D:($P(^PSB(53.79,PSBIEN,.9,PSBXA2,0),U)=PSBEFFDT)&($P(^PSB(53.79,PSBIEN,.9,PSBXA2,0),U,3)["Instruct")&($P(^PSB(53.79,PSBIEN,.2),U,3)=$P(^PSB(53.79,PSBIEN,.9,PSBXA2,0),U,2)) 111 .........S PSBINIT=PSBINIT_"*",PSBNAME=PSBNAME_"/"_$P(^PSB(53.79,PSBIEN,.9,PSBXA2,0),U,3)_" "_$$GET1^DIQ(53.79,PSBIEN_",",.24) 112 .........S ^TMP("PSB",$J,"LEGEND",PSBINIT,PSBNAME)="",PSBFG=1 113 .....S PSBLINE2=" Results: "_$$GET1^DIQ(53.79,PSBIEN_",",.22) 114 .....S PSBRTXTW=" Entered By "_PSBINIT_" on "_$$GET1^DIQ(53.79,PSBIEN_",",.24) 115 .....I PSBINIT[99 S PSBINIT="" 116 ...S X=PSBDT D H^%DTC F PSBWEEK=PSBAR(%H):-7 Q:$D(^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",0))!('$D(PSBAR(PSBWEEK))) 117 ...S X=$O(^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",""),-1)+1 118 ...I PSBFLG="1" S ^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",X)=PRELINE1 119 ...S ^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",X+1)=PSBLINE1 120 ...I $G(PSBLINE2)]"" D 121 ....I $L(PSBLINE2)<90 S ^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",X+2)=PSBLINE2 S:$$GET1^DIQ(53.79,PSBIEN_",",.24)'="" ^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",X+3)=" "_PSBRTXTW 122 ....I $L(PSBLINE2)>90 D 123 .....S ^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",X+2)=$E(PSBLINE2,1,90) 124 .....S ^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",X+3)=" "_$E(PSBLINE2,91,161) 125 .....I $L(PSBLINE2)'>161 S ^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",X+4)=" "_PSBRTXTW 126 .....I $L(PSBLINE2)>161 S ^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",X+4)=" "_$E(PSBLINE2,162,200),^TMP("PSB",$J,PSBWEEK,PSBORD,"AT",X+5)=" "_PSBRTXTW 127 Q 128 ; 129 DDAUD ; audits for dispen drugs 130 ; 131 M PSBMLA=^PSB(53.79,PSBIEN) 132 S PSBGA="" I $D(PSBMLA(.9,0)) D 133 .F PSBX=1:1 Q:'$D(PSBMLA(.9,PSBX)) I ((PSBMLA(.9,PSBX,0)["ACTION STATUS")!(PSBMLA(.9,PSBX,0)["ADMINISTRATION STATUS")) D Q 134 ..I $D(PSBMLA(.9,PSBX-2,0)) D DT^DILF("ENPST",$P(PSBMLA(.9,PSBX-2,0),"'",2),.PSBDATE) 135 ..I '$D(PSBMLA(.9,PSBX-2,0)) S PSBDATE=$P(^PSB(53.79,PSBIEN,0),U,6) 136 ..S PSBTMP(10000000-PSBDATE,"B")=PSBDATE_U_$$INITIAL^PSBRPC2($P(PSBMLA(0),U,5))_U_$P(PSBMLA(.9,PSBX,0),"'",2) 137 ..S PSBGA=1 138 .F PSBX=1:1 Q:'$D(PSBMLA(.9,PSBX)) I ((PSBMLA(.9,PSBX,0)["ACTION STATUS")!(PSBMLA(.9,PSBX,0)["ADMINISTRATION STATUS")) D 139 ..S PSBTMP(10000000-$P(PSBMLA(.9,PSBX,0),U,1),"B")=$P(PSBMLA(.9,PSBX,0),U,1)_U_$$INITIAL^PSBRPC2($P(PSBMLA(.9,PSBX,0),U,2))_U_$P($P(PSBMLA(.9,PSBX,0),U,3),"'",2) 140 ..S PSBGA=1 141 I PSBGA'=1 S PSBTMP(10000000-$P(PSBMLA(0),U,6),"A")=$P(PSBMLA(0),U,6)_U_$$INITIAL^PSBRPC2($P(PSBMLA(0),U,7)) 142 S PSBQRY="PSBTMP",PSBCNT=1 F S PSBQRY=$Q(@PSBQRY) Q:PSBQRY="" D ; does comment go with action 143 .; 144 .;WV/EHR REVERSE $Q REPLACEMENT; SO 01/12/08 ;VWEHR1 145 .; 146 .;S PSBPQRY=$Q(@PSBQRY,-1) 147 .S PSBPQRY=$$Q^VWUTIL($NA(@PSBQRY),-1) 148 .; 149 .;END CHANGE 150 .; 151 .I PSBPQRY="" S PSBTAR(PSBCNT)=@PSBQRY,PSBCNT=PSBCNT+1 Q ; no prev action 152 .I $QS(PSBPQRY,2)="C" S PSBTAR(PSBCNT)=@PSBQRY,PSBCNT=PSBCNT+1 Q ; prev line = comment 153 .I $QS(PSBQRY,2)="C",$E($P(@$Q(@PSBQRY,-1),U,1),1,12)=$E($P(@PSBQRY,U,1),1,12),$P(@$Q(@PSBQRY,-1),U,2)=$P(@PSBQRY,U,2) D Q 154 ..S X=$P(@PSBQRY,U,4) S:X[":" X=$P(X,":",2) S $P(PSBTAR(PSBCNT-1),U,4)=X Q 155 .S PSBTAR(PSBCNT)=@PSBQRY,PSBCNT=PSBCNT+1 156 Q 157 ; 158 PSBOUT(PSBTET,PSBOT1) ; 159 I '$D(^PSB(53.79,PSBIEN,.9,0)) D PSBENT^PSBOMH2(PSBOT1) 160 S PSBIDA="" I $P(^PSB(53.79,PSBIEN,0),U,6)=PSBTET S PSBIDA=$P(^PSB(53.79,PSBIEN,0),U,7),PSBOT1=$P(^VA(200,PSBIDA,0),"^",2),PSBNAME=$P(^VA(200,PSBIDA,0),"^",1) 161 S PSBXA1=0 162 F S PSBXA1=$O(^PSB(53.79,PSBIEN,.9,PSBXA1)) Q:+PSBXA1'>0 I PSBXA1'=0 D Q:$G(PSBOT1)["*" 163 .I $L(PSBXA1)<4 D 164 ..I $P(^PSB(53.79,PSBIEN,.9,PSBXA1,0),"^",1)=PSBTET D 165 ...S:$G(PSBIDA)="" PSBIDA=$P(^PSB(53.79,PSBIEN,.9,PSBXA1,0),"^",2),PSBOT1=$P(^VA(200,PSBIDA,0),"^",2),PSBNAME=$P(^VA(200,PSBIDA,0),"^",1) 166 ...I (PSBIDA=$P(^PSB(53.79,PSBIEN,.9,PSBXA1,0),"^",2)),$P(^PSB(53.79,PSBIEN,.9,PSBXA1,0),"^",3)["Instruct" D 167 ....S INSDD=$P(^PSB(53.79,PSBIEN,.9,PSBXA1,0),"^",1),Y=INSDD D DD^%DT S INSDD=Y 168 ....S PSBOT1=PSBOT1_"*",PSBNAME=PSBNAME_"/"_$P(^PSB(53.79,PSBIEN,.9,PSBXA1,0),U,3)_" "_INSDD 169 I $G(PSBIDA)="",$P(^PSB(53.79,PSBIEN,0),U,4)=PSBTET D 170 .S PSBIDA=$P(^PSB(53.79,PSBIEN,0),U,5),PSBOT1=$P(^VA(200,PSBIDA,0),"^",2),PSBNAME=$P(^VA(200,PSBIDA,0),"^",1) 171 I $G(PSBNAME)="" D 172 . S PSBIDA=$P(^PSB(53.79,PSBIEN,0),U,5),PSBOT1=$P(^VA(200,PSBIDA,0),"^",2),PSBNAME=$P(^VA(200,PSBIDA,0),"^",1) 173 S ^TMP("PSB",$J,"LEGEND",$S($G(PSBOT1)="":99,1:PSBOT1),PSBNAME)="" 174 Q 175 ; -
WorldVistAEHR/trunk/r/BAR_CODE_MED_ADMIN-ALPB-PSB/PSBPOIV.m
r613 r623 1 PSBPOIV 2 ;;3.0;BAR CODE MED ADMIN;**2**;Mar 2004;Build 22 3 ;;Per VHA Directive 2004-038 (or future revisions regarding same), this routine should not be modified. 4 ; 5 ; Reference/IA 6 7 ; EN^PSJBCMA2/2830 8 ; VADPT/10061 9 ; 10 11 EN(PSBDFN,PSBORD) 12 13 14 15 16 17 18 D INP^VADPT S PSBWARD=$P(VAIN(4),"^"),PSBWDIV=PSBWARD D KVAR^VADPT 19 20 21 22 23 24 ..S PSBWDIV=$$GET1^DIQ(42,PSBWDIV_",",.015,"I")25 26 ..E S PSBWDIV=$P($$SITE^VASITE(DT,PSBWDIV),U,1),PSBWDIV="DIV.`"_PSBWDIV27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 SAVEPAR 75 76 77 78 79 80 81 82 83 84 85 86 87 CHKORD 88 89 90 91 92 93 94 95 96 97 98 99 100 CHKADD 101 102 103 104 105 106 107 108 109 110 111 CHKSOL 112 113 114 115 116 117 118 119 120 121 122 BWAR 123 124 125 126 127 128 129 130 131 132 133 134 MSG(PSBMVAR,PSBDATE) 135 136 137 138 139 140 141 142 143 144 145 1 PSBPOIV ;BIRMINGHAM/EFC-IV PARAMETER VALIDATION ;Mar 2004 2 ;;3.0;BAR CODE MED ADMIN;;Mar 2004 3 ; 4 ; Reference/IA 5 ; ^DIC(42/1377 6 ; ^DIC(42/2440 7 ; EN^PSJCBMA1/2829 8 ; EN^PSJBCMA2/2830 9 ; DIQ(2/10035 10 ; 11 EN(PSBDFN,PSBORD) ; 12 ; 13 S DFN=PSBDFN,(PSBMI,PSBMW,PSBMWC,PSBMAUD)=0,(PSBMIDT,PSBMIM)="",PSBONXS=PSBORD_"^" 14 K ^TMP("PSBAR",$J) S ^TMP("PSBAR",$J,"W",0)=0 15 D CLEAN^PSBVT,PSJ1^PSBVT(DFN,PSBORD) 16 ; get IV parameters for the current ward 17 S PSBCSTR="^ADDITIVE^STRENGTH^BOTTLE^SOLUTION^VOLUME^INFUSION RATE^MED ROUTE^SCHEDULE^ADMIN TIME^REMARKS^OTHER PRINT INFO^PROVIDER^START DATE/TIME^STOP DATE/TIME^PROVIDER COMMENTS" 18 S PSBWARD=$$GET1^DIQ(2,PSBDFN_",",.1),PSBWARD=$$FIND1^DIC(42,"","X",PSBWARD),PSBWDIV=PSBWARD 19 I $G(PSBWARD)'="",$D(^PSB(53.66,"B",PSBWARD)) D ; if IV paramaters defined for ward use them 20 .S PSBWARD=$O(^PSB(53.66,"B",PSBWARD,"")) 21 .S:$D(^PSB(53.66,PSBWARD,1,"B",PSBIVT)) PSBIVPAR=^PSB(53.66,PSBWARD,1,$O(^PSB(53.66,PSBWARD,1,"B",PSBIVT,""),-1),0) 22 I '$D(PSBIVPAR) S PSBIVPAR=PSBIVT D ; if IV parameters not defined for ward get defaults for division 23 .D:$D(PSBWDIV) ; Get the appropriate DIV for ward and DIVISIONAL IV PARAMETERS 24 ..S PSBWDIV=$$GET1^DIQ(42,PSBWDIV_",",.015,"I"),PSBWDIV=$P($$SITE^VASITE(DT,PSBWDIV),U,1) 25 ..I $G(PSBWDIV)']"" S PSBWDIV="DIV" 26 ..E S PSBWDIV="DIV.`"_PSBWDIV 27 ..F X=2:1 Q:$P(PSBCSTR,U,X)="" S PSBIVPAR=PSBIVPAR_U_$P($P($$GET^XPAR(PSBWDIV,"PSBIV "_$P(PSBCSTR,U,X),PSBIVT,"B"),U,2),"-",1) 28 ..K PSBWDIV ; Kill temp variable. 29 F PSBC1=1:1 Q:$P(PSBONXS,U,PSBC1)="" D ; process all orders 30 .D CLEAN^PSBVT,PSJ1^PSBVT(DFN,$P(PSBONXS,U,PSBC1)) 31 .K PSBPONX2 I $G(PSBPONX)]"",$G(PSBPONX)["P" S PSBPONX2=PSBPONX D ; Must compare "active" orders for changes made - look beyond "pendings" 32 ..F D CLEAN^PSBVT,PSJ1^PSBVT(DFN,PSBPONX2) S PSBPONX2=PSBPONX Q:(PSBPONX2="")!(PSBPONX2'["P") ; 33 ..D CLEAN^PSBVT,PSJ1^PSBVT(DFN,$P(PSBONXS,U,PSBC1)) ; Refresh data 34 ..S:$D(PSBPONX2) PSBPONX=PSBPONX2 K PSBPONX2 35 .Q:($L(U_PSBONXS,U_PSBPONX_U)-1)>0 36 .I $G(PSBPONX)]"" S PSBONXS=PSBONXS_PSBPONX_U 37 .K ^TMP("PSJ2",$J) S PSBMAUD=0 D EN^PSJBCMA2(PSBDFN,PSBONX,1) ; check IV parameters against activity log for this order when no "I"nvalid message 38 .I PSBMI=0 F X=1:1 Q:'$D(^TMP("PSJ2",$J,X)) S PSBCHKV=U_$P(^TMP("PSJ2",$J,X,1),U,3)_U I PSBCSTR[PSBCHKV D MSG(PSBCHKV,$P(^TMP("PSJ2",$J,X,1),U,1)) S PSBMAUD=1 39 .K ^TMP("PSJ2",$J) 40 .I PSBMI=0,$G(PSBPONX)]"" D SAVEPAR,CHKORD ; check IV parameters against previous order when no "I"nvalid message 41 .D CLEAN^PSBVT,PSJ1^PSBVT(DFN,$P(PSBONXS,U,PSBC1)) ; restore variable for this order 42 .; okay - we have invalids and warnings through this order so process bags for this order 43 .I '$D(PSBUIDA) Q ; got errors and warning but no bags printed for this order - go to the next 44 .S PSBUID="" F S PSBUID=$O(PSBUIDA(PSBUID),-1) Q:PSBUID="" D 45 ..F PSBC2=1:1 S PSBMONX=$P(PSBONXS,U,PSBC2) Q:PSBMONX="" D ; check if bag is in 53.79 46 ...I $D(^PSB(53.79,"AUID",PSBDFN,PSBMONX,PSBUID)) D 47 ....S PSBIEN=$O(^PSB(53.79,"AUID",PSBDFN,PSBMONX,PSBUID,"")) 48 ....S PSBPDT=$P(PSBLBLA(PSBUID),U,1),PSBLSTS=$P(PSBLBLA(PSBUID),3) 49 ....S $P(X,U,2)=$P(^PSB(53.79,PSBIEN,0),U,9) ; add action status 50 ....S $P(X,U,3)=$P(^PSB(53.79,PSBIEN,0),U,6) ; add action date/time 51 ....S $P(X,U,4)=$P(^PSB(53.79,PSBIEN,.1),U,1) ; add order ID was administered for 52 ..S $P(X,U,5)=PSBONX ; add order ID was printed for 53 ..S $P(X,U,6)=PSBOSTS ; add order status 54 ..S $P(X,U,7)=$P(PSBLBLA(PSBUID),U,1) ; add date/time ID was printed 55 ..S $P(X,U,8)=$P(PSBLBLA(PSBUID),U,3) ; add lable status from pharmacy 56 ..S $P(X,U,9)="" ; 9 open for later development 57 ..S $P(X,U,10)=PSBUIDA(PSBUID) ; add return from PSJ1 58 ..D BWAR 59 ..I PSBMW=1 S PSBMWS="W;" F I=1:1:^TMP("PSBAR",$J,"W",0) D S $P(X,U,1)=$P(PSBMWS,";",1,$L(PSBMWS,";")-1) 60 ...I $P(PSBLBLA(PSBUID),U,1)'>$P(^TMP("PSBAR",$J,"W",I),U,2) D 61 ....S:(PSBONX=$P(PSBONXS,U,1))&(PSBMAUD=1) PSBMWS=PSBMWS_I_";" 62 ....S:PSBONX'=$P(PSBONXS,U,1) PSBMWS=PSBMWS_I_";" 63 ..I PSBMIDT'="",$P(PSBLBLA(PSBUID),U,1)<PSBMIDT D 64 ...S:(PSBONX=$P(PSBONXS,U,1))&(PSBMAUD=1) $P(X,U,1)="I" 65 ...S:(PSBONX'=$P(PSBONXS,U,1)) $P(X,U,1)="I" 66 ..S ^TMP("PSBAR",$J,PSBUID)=X K X 67 D CLEAN^PSBVT 68 K PSBC1,PSBC2,PSBSCHV,PSBCSTR,PSBIVPAR,PSBMI,PSBMIDT,PSBMIM,PSBMONX,PSBMW,PSBSPAR,PSBUID,PSBWARD 69 K PSBADA,PSBSOLA,PSBOTMP 70 I ^TMP("PSBAR",$J,"W",0)=0 K ^TMP("PSBAR",$J,"W",0) 71 D PSJ1^PSBVT(DFN,PSBORD) ; restore variables for calling order 72 Q 73 ; 74 SAVEPAR ; save parameters from current order 75 K PSBOTMP 76 I $D(PSBADA) M PSBOTMP("ADD")=PSBADA E S PSBOTMP("ADD")="" ; additive, strength, bottle 77 I $D(PSBSOLA) M PSBOTMP("SOL")=PSBSOLA E S PSBOTMP("SOL")="" ; solution, volume, 78 K PSBADA,PSBSOLA 79 S PSBOTMP("INFUSION RATE")=$G(PSBIFR),PSBOTMP("MED ROUTE")=$G(PSBMR) 80 S PSBOTMP("SCHEDULE")=$G(PSBSCH),PSBOTMP("ADMIN TIME")=$G(PSBADST) 81 S PSBOTMP("REMARKS")=$G(PSBRMRK),PSBOTMP("OTHER PRINT INFO")=$G(PSBOTXT) 82 S PSBOTMP("PROVIDER")=PSBMD,PSBOTMP("START DATE/TIME")=PSBOST 83 S PSBOTMP("STOP DATE/TIME")=PSBOSP 84 D CLEAN^PSBVT,PSJ1^PSBVT(DFN,$P(PSBONXS,U,PSBC1+1)) ; setup previous order variables 85 Q 86 ; 87 CHKORD ; check previous order against current order 88 I $D(PSBADA)!($D(PSBOTMP("ADD"))) D CHKADD Q:PSBMI=1 89 I $D(PSBSOLA)!($D(PSBOTMP("SOL"))) D CHKSOL Q:PSBMI=1 90 I PSBIFR'=PSBOTMP("INFUSION RATE") D MSG("INFUSION RATE",PSBOSP) Q:PSBMI=1 91 I PSBMR'=PSBOTMP("MED ROUTE") D MSG("MED ROUTE",PSBOSP) Q:PSBMI=1 92 I PSBSCH'=PSBOTMP("SCHEDULE") D MSG("SCHEDULE",PSBOSP) Q:PSBMI=1 93 I PSBADST'=PSBOTMP("ADMIN TIME") D MSG("ADMIN TIME",PSBOSP) Q:PSBMI=1 94 I PSBRMRK'=PSBOTMP("REMARKS") D MSG("REMARKS",PSBOSP) Q:PSBMI=1 95 I PSBOTXT'=PSBOTMP("OTHER PRINT INFO") D MSG("OTHER PRINT INFO",PSBOSP) Q:PSBMI=1 96 I PSBMD'=PSBOTMP("PROVIDER") D MSG("PROVIDER",PSBOSP) Q:PSBMI=1 97 I $E(PSBOST,1,10)'=$E(PSBOTMP("START DATE/TIME"),1,10) D MSG("START DATE/TIME",PSBOSP) Q:PSBMI=1 98 I $E(PSBOSP,1,10)'=$E(PSBOTMP("STOP DATE/TIME"),1,10) D MSG("STOP DATE/TIME",PSBOSP) 99 Q 100 CHKADD ; 101 N X,Y 102 I '$D(PSBADA),'$D(PSBOTMP("ADD")) Q ; no additives 103 I $O(PSBADA(""),-1)>$O(PSBOTMP("ADD",""),-1) D MSG("ADDITIVE",PSBOSP) Q ;previous order has addtives not in current order 104 I $O(PSBADA(""),-1)<$O(PSBOTMP("ADD",""),-1) D MSG("ADDITIVE",PSBOSP) Q ;previous order missing additives in current order 105 S X="" F S X=$O(PSBADA(X)) Q:X="" D Q ; check that additives, strength, and bottle are the same 106 .I PSBADA(X)=PSBOTMP("ADD",X) Q ; everything the same 107 .I $P(PSBADA(X),U,2)'=$P(PSBOTMP("ADD",X),U,2) D MSG("ADDITIVE",PSBOSP) Q 108 .I $P(PSBADA(X),U,4)'=$P(PSBOTMP("ADD",X),U,4) D MSG("STRENGTH",PSBOSP) Q 109 Q 110 ; 111 CHKSOL ; 112 N X,Y 113 I '$D(PSBSOLA),'$D(PSBOTMP("SOL")) Q ; no solutions 114 I $O(PSBSOLA(""),-1)>$O(PSBOTMP("SOL",""),-1) D MSG("SOLUTION",PSBOSP) Q ;previous order has solutions not in current order 115 I $O(PSBSOLA(""),-1)<$O(PSBOTMP("SOL",""),-1) D MSG("SOLUTION",PSBOSP) Q ;previous order missing solutions in current order 116 S X="" F S X=$O(PSBSOLA(X)) Q:X="" D Q ; check that solutions volume are the same 117 .I PSBSOLA(X)=PSBOTMP("SOL",X) Q ; everything the same 118 .I $P(PSBSOLA(X),U,2)'=$P(PSBOTMP("SOL",X),U,2) D MSG("SOLUTION",PSBOSP) Q 119 .I $P(PSBSOLA(X),U,4)'=$P(PSBOTMP("SOL",X),U,4) D MSG("VOLUME",PSBOSP) Q 120 Q 121 ; 122 BWAR ; 123 N X,Y,Z,PSBONX 124 S X=^TMP("PSBAR",$J,"W",0)+1 125 S Z="" F Z=1:1 S PSBONX=$P(PSBONXS,U,Z) Q:$G(PSBONX)="" D ; Display "Warning"s for changes 126 .I '$D(PSBMWAR(PSBONX)) Q 127 .S Y="" F S Y=$O(PSBMWAR(PSBONX,Y)) Q:Y'?.N1".".N D 128 ..S Z="",PSBYS="" F S Z=$O(PSBMWAR(PSBONX,Y,Z)) Q:Z="" S PSBYS=PSBYS_Z_";" 129 ..S PSBYS=$P(PSBYS,";",1,$L(PSBYS,";")-1) 130 ..S ^TMP("PSBAR",$J,"W",X)=PSBONX_U_Y_U_"2^The "_PSBYS_" was changed on",^TMP("PSBAR",$J,"W",0)=X,X=X+1 131 .K PSBMWAR(PSBONX) 132 Q 133 ; 134 MSG(PSBMVAR,PSBDATE) ; 135 I PSBMI=1 Q ;already have an invalid don't need anymore 136 F Y=1:1 S PSBSPAR=$P(PSBCSTR,U,Y) I PSBSPAR=$TR(PSBMVAR,"^") D Q 137 .I $P(PSBIVPAR,U,Y)="W" D 138 ..S PSBMVAR=$TR(PSBMVAR,"^") 139 ..I PSBMW=0 S PSBMW=1 140 ..S PSBMWC=PSBMWC+1,PSBMWM="2^The "_PSBSPAR_" has been changed." 141 ..I $D(PSBMWAR(PSBONX,PSBMVAR)) S PSBOLDT=$O(PSBMWAR(PSBONX,PSBMVAR,"")) I PSBOLDT<$E(PSBDATE,1,12) K PSBMWAR(PSBONX,PSBMVAR,PSBOLDT) 142 ..S PSBMWAR(PSBONX,PSBMVAR,$E(PSBDATE,1,12))="" 143 ..S PSBMWAR(PSBONX,$E(PSBDATE,1,12),PSBMVAR)="" 144 .I $P(PSBIVPAR,U,Y)="I" S PSBMI=1,PSBMIDT=PSBDATE,PSBMIM="-1^IV invalid "_PSBSPAR_".",^TMP("PSBAR",$J,"I")=PSBONX_U_PSBMIDT_U_PSBMIM 145 Q -
WorldVistAEHR/trunk/r/BAR_CODE_MED_ADMIN-ALPB-PSB/PSBRPC2.m
r613 r623 1 PSBRPC2 2 ;;3.0;BAR CODE MED ADMIN;**6,3,16,32,WVEHR1**;WorldVistA 30-Jan-08;Build 4 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 GETOHIST(RESULTS,DFN,PSBORD) 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 BAGDTL(RESULTS,PSBUID,PSBORD) 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 INITIAL(PSBDUZ) 104 105 SCANMED(RESULTS,PSBDIEN,PSBTAB) 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 1 PSBRPC2 ;BIRMINGHAM/EFC-BCMA RPC BROKER CALLS ;7:42 PM 30 Jan 2008 2 ;;3.0;BAR CODE MED ADMIN;**6,3,16,32,WVEHR1**;WorldVistA 30-Jan-08 3 ;Per VHA Directive 2004-038 (or future revisions regarding same), this routine should not be modified. 4 ; 5 ;Modified from FOIA VISTA, 6 ;Copyright 2008 WorldVistA. Licensed under the terms of the GNU 7 ;General Public License See attached copy of the License. 8 ; 9 ;This program is free software; you can redistribute it and/or modify 10 ;it under the terms of the GNU General Public License as published by 11 ;the Free Software Foundation; either version 2 of the License, or 12 ;(at your option) any later version. 13 ; 14 ;This program is distributed in the hope that it will be useful, 15 ;but WITHOUT ANY WARRANTY; without even the implied warranty of 16 ;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 ;GNU General Public License for more details. 18 ; 19 ;You should have received a copy of the GNU General Public License along 20 ;with this program; if not, write to the Free Software Foundation, Inc., 21 ;51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 22 ; 23 ; Reference/IA 24 ; File 50/221 25 ; File 52.6/436 26 ; File 52.7/437 27 ; File 200/10060 28 GETOHIST(RESULTS,DFN,PSBORD) ; 29 S RESULTS=$NAME(^TMP("PSB",$J)),PSB=0 K ^TMP("PSB",$J) 30 S ^TMP("PSB",$J,0)=1,^TMP("PSB",$J,1)="-1^No History On File" 31 D NOW^%DTC S PSBNOW=$P(%,".",1),PSBNOWZ=% 32 D EN^PSBPOIV(DFN,PSBORD) 33 S PSBUID=DFN_"V"_99999 F S PSBUID=$O(^TMP("PSBAR",$J,PSBUID),-1) Q:PSBUID="" D 34 .S PSBUIDS=^TMP("PSBAR",$J,PSBUID) 35 .I ((PSBOSTS="D")!(PSBOSTS="E")),$P(PSBUIDS,U,2)'="I",$P(PSBUIDS,U,2)'="S" Q ; only want the infusing bag on a dc'ed order 36 .I (PSBOSTS="A"),(PSBOSP<PSBNOWZ),$P(PSBUIDS,U,2)'="I",$P(PSBUIDS,U,2)'="S" S PSBOSTS="E" Q ; only want the infusing bag on an expired order 37 .I $P(PSBUIDS,U,2)'="" D Q ; get orders from med log (53.79) 38 ..S PSBMLOR=$P(PSBUIDS,U,4),PSBIEN=$O(^PSB(53.79,"AUID",DFN,PSBMLOR,PSBUID,"")) 39 ..S PSBLADT=$P(^PSB(53.79,PSBIEN,0),U,6) 40 ..S PSBLASTS=$P(^PSB(53.79,PSBIEN,0),U,9) 41 ..I PSBLASTS="M",$P(PSBUIDS,U,8)'="" Q 42 ..S PSBINJS=$P(^PSB(53.79,PSBIEN,.1),U,6) 43 ..S PSB=PSB+1,^TMP("PSB",$J,PSB)=PSBORD_U_PSBUID_U_PSBIEN_U_PSBLADT_U_PSBLASTS_U_PSBINJS 44 ..F PSBL=1:1 Q:'$D(^PSB(53.79,PSBIEN,.6,PSBL,0)) S PSB=PSB+1,^TMP("PSB",$J,PSB)="ADD^"_^PSB(53.79,PSBIEN,.6,PSBL,0) 45 ..F PSBL=1:1 Q:'$D(^PSB(53.79,PSBIEN,.7,PSBL,0)) S PSB=PSB+1,^TMP("PSB",$J,PSB)="SOL^"_^PSB(53.79,PSBIEN,.7,PSBL,0) 46 ..S PSB=PSB+1,^TMP("PSB",$J,PSB)="END" 47 .I $P(PSBUIDS,U,1)="I" Q ; IV parameters say bag is invalid 48 .I $P(PSBUIDS,U,8)'="",$P(PSBUIDS,U,2)'="I",$P(PSBUIDS,U,2)'="S" Q ; label has been reprinted/distroyed etc. - bag is not infusing or stopped 49 .S PSB=PSB+1,^TMP("PSB",$J,PSB)=$P(PSBUIDS,U,5)_U_PSBUID_U_U_PSBNOW_U_"A" 50 .S PSBUIDP=$P(PSBUIDS,U,10,999) 51 .F Y=3:1 S PSBMEDTY=$P(PSBUIDP,U,Y) Q:PSBMEDTY="" D 52 ..D CLEAN^PSBVT,PSJ1^PSBVT(DFN,$P(PSBUIDS,U,5)) 53 ..I $P(PSBMEDTY,";",1)="ADD" F Z=1:1 S PSBAD=$G(PSBADA(Z)) Q:PSBAD="" I $P(PSBADA(Z),U,2)=$P(PSBMEDTY,";",2) S PSB=PSB+1,^TMP("PSB",$J,PSB)=PSBADA(Z) Q 54 ..I $P(PSBMEDTY,";",1)="SOL" F Z=1:1 S PSBSOL=$G(PSBSOLA(Z)) Q:PSBSOL="" I $P(PSBSOLA(Z),U,2)=$P(PSBMEDTY,";",2) S PSB=PSB+1,^TMP("PSB",$J,PSB)=PSBSOLA(Z) Q 55 .D CLEAN^PSBVT,PSJ1^PSBVT(DFN,PSBORD) 56 .S PSB=PSB+1,^TMP("PSB",$J,PSB)="END" 57 F II=1:1 S I=$P(PSBONXS,U,II) Q:I="" D ; get ward stocks 58 .S PSBUID="" F S PSBUID=$O(^PSB(53.79,"AUID",DFN,I,PSBUID)) Q:PSBUID="" D 59 ..I PSBUID'["WS" Q ; not a ward stock 60 ..S PSBIEN=$O(^PSB(53.79,"AUID",DFN,I,PSBUID,"")) 61 ..S PSBLADT=$P(^PSB(53.79,PSBIEN,0),U,6) 62 ..S PSBLASTS=$P(^PSB(53.79,PSBIEN,0),U,9) 63 ..I PSBOSTS="D",PSBLASTS'="I",PSBLASTS'="S" Q ; want "not completed" on DC'ed orders 64 ..I (PSBOSTS="A"),(PSBOSP<PSBNOWZ),PSBLASTS'="I",PSBLASTS'="S" Q 65 ..S PSBINJS=$P(^PSB(53.79,PSBIEN,.1),U,6) 66 ..S PSB=PSB+1,^TMP("PSB",$J,PSB)=PSBORD_U_PSBUID_U_PSBIEN_U_PSBLADT_U_PSBLASTS_U_PSBINJS 67 ..F PSBL=1:1 Q:'$D(^PSB(53.79,PSBIEN,.6,PSBL,0)) S PSB=PSB+1,^TMP("PSB",$J,PSB)="ADD^"_^PSB(53.79,PSBIEN,.6,PSBL,0) 68 ..F PSBL=1:1 Q:'$D(^PSB(53.79,PSBIEN,.7,PSBL,0)) S PSB=PSB+1,^TMP("PSB",$J,PSB)="SOL^"_^PSB(53.79,PSBIEN,.7,PSBL,0) 69 ..S PSB=PSB+1,^TMP("PSB",$J,PSB)="END" 70 S ^TMP("PSB",$J,0)=PSB 71 K ^TMP("PSBAR",$J) 72 Q 73 ; 74 BAGDTL(RESULTS,PSBUID,PSBORD) ; bag detail 75 I $G(DFN)="" S DFN=+PSBUID 76 S (PSBIEN,X)="" F S X=$O(^PSB(53.79,"AUID",DFN,X)) Q:X="" S:$D(^PSB(53.79,"AUID",DFN,X,PSBUID)) PSBIEN=$O(^PSB(53.79,"AUID",DFN,X,PSBUID,"")) Q:PSBIEN]"" 77 I PSBIEN'>0 S RESULTS(0)=1,RESULTS(1)="-1^No History On File" Q 78 M PSBMLA=^PSB(53.79,PSBIEN) 79 S X=$P(^PSB(53.79,PSBIEN,0),U,9) 80 S PSBLAC=$S(X="I":"INFUSING",X="G":"GIVEN",X="C":"COMPLETE",X="H":"HELD",X="R":"REFUSED",X="RM":"REMOVED",X="S":"STOPPED",X="M":"MISSING",1:"NO ACTION") 81 ; comments 82 S PSBX="0" F S PSBX=$O(PSBMLA(.3,PSBX)) Q:PSBX="" S PSBTMP(10000000-$P(PSBMLA(.3,PSBX,0),U,3),"C")=$P(PSBMLA(.3,PSBX,0),U,3)_U_$$INITIAL($P(PSBMLA(.3,PSBX,0),U,2))_U_U_$P(PSBMLA(.3,PSBX,0),U,1) 83 ; audit 84 S PSBGA="" I $D(PSBMLA(.9,0)) D 85 .S PSBX="0" F S PSBX=$O(PSBMLA(.9,PSBX)) Q:PSBX="" I ((PSBMLA(.9,PSBX,0)["ACTION STATUS")!(PSBMLA(.9,PSBX,0)["ADMINISTRATION STATUS")) D Q 86 ..S PSBDATE=$P(PSBMLA(0),U,4) I (PSBX-2)>0 D DT^DILF("ENPST",$P(PSBMLA(.9,PSBX-2,0),"'",2),.PSBDATE) 87 ..S PSBTMP(10000000-PSBDATE,"B")=PSBDATE_U_$$INITIAL($P(PSBMLA(0),U,5))_U_$P(PSBMLA(.9,PSBX,0),"'",2) 88 ..S PSBGA=1 89 .S PSBX="0" F S PSBX=$O(PSBMLA(.9,PSBX)) Q:PSBX="" I ((PSBMLA(.9,PSBX,0)["ACTION STATUS")!(PSBMLA(.9,PSBX,0)["ADMINISTRATION STATUS")) D 90 ..S PSBTMP(10000000-$P(PSBMLA(.9,PSBX,0),U,1),"B")=$P(PSBMLA(.9,PSBX,0),U,1)_U_$$INITIAL($P(PSBMLA(.9,PSBX,0),U,2))_U_$P($P(PSBMLA(.9,PSBX,0),U,3),"'",2) 91 ..S PSBGA=1 92 I PSBGA'=1 S PSBTMP(10000000-$P(PSBMLA(0),U,6),"A")=$P(PSBMLA(0),U,6)_U_$$INITIAL($P(PSBMLA(0),U,7))_U_PSBLAC 93 S PSBQRY="PSBTMP",PSBCNT=1 F S PSBQRY=$Q(@PSBQRY) Q:PSBQRY="" D ; does comment go with action 94 .S PSBPQRY=$Q(@PSBQRY,-1) 95 .I PSBPQRY="" S RESULTS(PSBCNT)=@PSBQRY,PSBCNT=PSBCNT+1 Q ; no previous action 96 .I $QS(PSBPQRY,2)="C" S RESULTS(PSBCNT)=@PSBQRY,PSBCNT=PSBCNT+1 Q ; previous line is a comment 97 .I $QS(PSBQRY,2)="C",$E($P(@$Q(@PSBQRY,-1),U,1),1,12)=$E($P(@PSBQRY,U,1),1,12),$P(@$Q(@PSBQRY,-1),U,2)=$P(@PSBQRY,U,2) S X=$P(@PSBQRY,U,4),$P(RESULTS(PSBCNT-1),U,4)=X Q 98 .S RESULTS(PSBCNT)=@PSBQRY,PSBCNT=PSBCNT+1 99 S RESULTS(0)=PSBCNT-1 100 K PSBMLA,PSBIEN,PSBTMP,PSBQRY 101 Q 102 ; 103 INITIAL(PSBDUZ) ; 104 Q $$GET1^DIQ(200,PSBDUZ,"INITIAL") 105 SCANMED(RESULTS,PSBDIEN,PSBTAB) ; Lookup Medication 106 ; 107 ; RPC: PSB SCANMED 108 ; 109 ; Description: 110 ; Does a lookup on file 50 returns -1 on invalid lookup or 111 ; IEN^DrugName on success 112 ; 113 D NOW^%DTC S PSBDT=% 114 S PSBCNT=0 115 I $L(PSBDIEN)>40 S PSBDIEN=$E(PSBDIEN,1,40) 116 S RESULTS(PSBCNT)=1 117 S PSBCNT=PSBCNT+1,RESULTS(PSBCNT)="-1^Invalid Medication Lookup" 118 I $$GET^XPAR("DIV","PSB ROBOT RX"),PSBDIEN?1"3"15N!(PSBDIEN?1"3"17N),123[$E(PSBDIEN,12) S PSBDIEN=$E(PSBDIEN,2,11) 119 I PSBTAB="UDTAB" D Q 120 .S X=$$FIND1^DIC(50,"","AX",PSBDIEN,"B^C") 121 .I X<1 Q 122 .E S RESULTS(PSBCNT)="DD"_U_X_U_$$GET1^DIQ(50,X_",",.01) 123 ; 124 ; IV/IVPB ward stock scan 125 ; 126 S PSBDIEN=$$FIND1^DIC(50,"","AX",PSBDIEN,"B^C") I PSBDIEN<1 Q 127 S PSBOIT=$$GET1^DIQ(50,PSBDIEN,"PHARMACY ORDERABLE ITEM","I") 128 I $D(^PSDRUG("A527",PSBDIEN)) S X="" F S X=$O(^PSDRUG("A527",PSBDIEN,X)) Q:X="" D 129 .S PSBINACT=$$GET1^DIQ(52.7,X,8,"I") I PSBINACT]"",PSBINACT'>PSBDT Q 130 .S RESULTS(PSBCNT)="SOL"_U_X_U_$$GET1^DIQ(50,PSBDIEN_",",.01),PSBCNT=PSBCNT+1,RESULTS(0)=PSBCNT-1 131 I $D(^PSDRUG("A526",PSBDIEN)) S X="" F S X=$O(^PSDRUG("A526",PSBDIEN,X)) Q:X="" D 132 .S PSBINACT=$$GET1^DIQ(52.6,X,12,"I") I PSBINACT]"",PSBINACT'>PSBDT Q 133 .S RESULTS(PSBCNT)="ADD"_U_X_U_$$GET1^DIQ(50,PSBDIEN_",",.01),PSBCNT=PSBCNT+1,RESULTS(0)=PSBCNT-1 134 ; 135 I PSBTAB="PBTAB",$$FIND1^DIC(50,"","AX",PSBDIEN,"B^C")'<1 S X=$$FIND1^DIC(50,"","AX",PSBDIEN,"B^C"),RESULTS(PSBCNT)="DD"_U_X_U_$$GET1^DIQ(50,X_",",.01),PSBCNT=PSBCNT+1,RESULTS(0)=PSBCNT-1 136 Q 137 ;
Note:
See TracChangeset
for help on using the changeset viewer.