| 1 | PSON52 ;BIR/DSD - files new entries in prescription file ;08/09/93
 | 
|---|
| 2 |  ;;7.0;OUTPATIENT PHARMACY;**1,16,23,27,32,46,71,111,124,117,131,139,157,143,219,148,239,201,268,260**;DEC 1997;Build 84
 | 
|---|
| 3 |  ;External reference ^PS(55 supported by DBIA 2228
 | 
|---|
| 4 |  ;External reference to PSOUL^PSSLOCK supported by DBIA 2789
 | 
|---|
| 5 |  ;External reference to ^XUSEC supported by DBIA 10076
 | 
|---|
| 6 |  ;External reference SWSTAT^IBBAPI supported by DBIA 4663
 | 
|---|
| 7 |  ;External reference SAVNDC^PSSNDCUT supported by DBIA 4707
 | 
|---|
| 8 | EN(PSOX) ;Entry Point
 | 
|---|
| 9 | START ;
 | 
|---|
| 10 |  D:$D(XRTL) T0^%ZOSV ; Start RT Monitor
 | 
|---|
| 11 |  D INIT G:PSON52("QFLG") END D NFILE Q:$G(PSONEW("DFLG"))  D PS55,DIK
 | 
|---|
| 12 |  S:$D(XRT0) XRTN=$T(+0) D:$D(XRT0) T1^%ZOSV ; Stop RT Monitor
 | 
|---|
| 13 |  D FINISH
 | 
|---|
| 14 |  I $P(^PSRX(PSOX("IRXN"),0),"^",11)="W",$G(^("IB")) S ^PSRX("ACP",$P(^PSRX(PSOX("IRXN"),0),"^",2),$P(^(2),"^",2),0,PSOX("IRXN"))=""
 | 
|---|
| 15 | END D EOJ
 | 
|---|
| 16 |  Q
 | 
|---|
| 17 | INIT ;
 | 
|---|
| 18 |  K X,%DT S:$G(PSOID) PSOX("ISSUE DATE")=PSOID
 | 
|---|
| 19 |  S PSOX("CS")=0
 | 
|---|
| 20 |  F DEA=1:1 Q:$E(PSODRUG("DEA"),DEA)=""  I $E(+PSODRUG("DEA"),DEA)>1,$E(+PSODRUG("DEA"),DEA)<6 S $P(PSOX("CS"),"^")=1 S:$E(+PSODRUG("DEA"),DEA)=2 $P(PSOX("CS"),"^",2)=1
 | 
|---|
| 21 |  S PSON52("QFLG")=0,X1=PSOX("ISSUE DATE"),X2=PSOX("DAYS SUPPLY")*(PSOX("# OF REFILLS")+1)\1
 | 
|---|
| 22 |  I $D(CLOZPAT) S X2=$S(X2=14:14,X2=7:7,1:X2) G DT
 | 
|---|
| 23 |  S X2=$S(PSOX("DAYS SUPPLY")=X2:X2,+$G(PSOX("CS")):184,+$G(DEA("CS")):184,1:366)
 | 
|---|
| 24 |  I X2<30 D
 | 
|---|
| 25 |  . N % S %=$P($G(PSORX("PATIENT STATUS")),"^"),X2=30
 | 
|---|
| 26 |  . S:%?.N %=$P($G(^PS(53,+%,0)),"^") I %["AUTH ABS" S X2=5
 | 
|---|
| 27 | DT D C^%DTC S PSOX("STOP DATE")=$P(X,".") K X
 | 
|---|
| 28 |  I PSOX("# OF REFILLS")>0 S X1=PSOX("FILL DATE"),X2=$S((PSOX("DAYS SUPPLY")-10\1)<1:1,1:PSOX("DAYS SUPPLY")-10\1) D C^%DTC S PSOX("NEXT POSSIBLE REFILL")=$P(X,".") K X
 | 
|---|
| 29 |  S PSOX("TYPE OF RX")=0,PSOX("DISPENSED DATE")=PSOX("FILL DATE") D NOW^%DTC S PSOX("LOGIN DATE")=$S($P($G(OR0),"^",12):$P($G(OR0),"^",12),1:%) K %,X
 | 
|---|
| 30 |  S PSOX("STATUS")=$S($G(PSOX("STATUS"))]"":PSOX("STATUS"),$D(PSORX("VERIFY")):1,1:0)
 | 
|---|
| 31 |  S PSOX("COPIES")=$S($G(PSOX("COPIES"))]"":PSOX("COPIES"),1:1)
 | 
|---|
| 32 |  I $G(PSORX("PHARM"))]"" S PSOX("PHARMACIST")=PSORX("PHARM") K PSORX("PHARM")
 | 
|---|
| 33 | INITX Q
 | 
|---|
| 34 |  ;
 | 
|---|
| 35 | NFILE I $G(OR0) D  Q:$G(PSONEW("DFLG"))
 | 
|---|
| 36 |  .D NOOR^PSONEW Q:$G(PSONEW("DFLG"))
 | 
|---|
| 37 |  .I $G(PSOSIGFL)!($G(PSODRUG("OI"))'=$P(OR0,"^",8)) S PSONEW("CLERK CODE")=DUZ,PSONEW("REMARKS")=$G(PSONEW("REMARKS"))_" CPRS Order #"_$P(OR0,"^")_" Edited."
 | 
|---|
| 38 |  S DIC="^PSRX(",DLAYGO=52,DIC(0)="L",X=PSOX("RX #") K DD,DO D FILE^DICN S PSOX("IRXN")=+Y K DLAYGO,X,Y,DIC,DD,DO D:+$G(DGI) TECH^PSODGDGI
 | 
|---|
| 39 |  F PSOX1=0:1 S PSON52=$P($T(DD+PSOX1),";;",2,4) Q:PSON52=""  K PSOY S PSOY=$P(PSON52,";;") I $G(@PSOY)]"" S $P(PSON52(PSOX("IRXN"),$P(PSON52,";;",2)),"^",$P(PSON52,";;",3))=@PSOY
 | 
|---|
| 40 |  F I=1:1:PSOX("ENT") S ^PSRX(PSOX("IRXN"),6,I,0)=PSOX("DOSE",I)_"^"_$G(PSOX("DOSE ORDERED",I))_"^"_$G(PSOX("UNITS",I))_"^"_$G(PSOX("NOUN",I))_"^" D
 | 
|---|
| 41 |  .S ^PSRX(PSOX("IRXN"),6,I,0)=^PSRX(PSOX("IRXN"),6,I,0)_$G(PSOX("DURATION",I))_"^"_$G(PSOX("CONJUNCTION",I))_"^"_$G(PSOX("ROUTE",I))_"^"_$G(PSOX("SCHEDULE",I))_"^"_$G(PSOX("VERB",I))
 | 
|---|
| 42 |  .I $G(PSOX("ODOSE",I))]"" S ^PSRX(PSOX("IRXN"),6,I,1)=PSOX("ODOSE",I)
 | 
|---|
| 43 |  S ^PSRX(PSOX("IRXN"),6,0)="^52.0113^"_PSOX("ENT")_"^"_PSOX("ENT")
 | 
|---|
| 44 |  K PSOX1,PSOY
 | 
|---|
| 45 |  S PSOX1="" F  S PSOX1=$O(PSON52(PSOX("IRXN"),PSOX1)) Q:PSOX1=""  S ^PSRX(PSOX("IRXN"),PSOX1)=$G(PSON52(PSOX("IRXN"),PSOX1))
 | 
|---|
| 46 |  I $O(PSOX("SIG",0)) D
 | 
|---|
| 47 |  .S D=0 F  S D=$O(PSOX("SIG",D)) Q:'D  S ^PSRX(PSOX("IRXN"),"INS1",D,0)=PSOX("SIG",D),TP=$G(TP)+1
 | 
|---|
| 48 |  .S ^PSRX(PSOX("IRXN"),"INS1",0)="^52.0115^"_TP_"^"_TP_"^"_DT_"^^" K TP,D
 | 
|---|
| 49 |  I $G(PSOX("SINS"))]"" S ^PSRX(PSOX("IRXN"),"INSS")=PSOX("SINS")
 | 
|---|
| 50 |  I $G(SIGOK) D
 | 
|---|
| 51 |  .S $P(^PSRX(PSOX("IRXN"),"SIG"),"^",2)=1,^PSRX(PSOX("IRXN"),"SIG1",0)="^52.04A^^"
 | 
|---|
| 52 |  .S D=0 F  S D=$O(SIG(D)) Q:'D  S ^PSRX(PSOX("IRXN"),"SIG1",D,0)=SIG(D),$P(^PSRX(PSOX("IRXN"),"SIG1",0),"^",3)=+$P(^PSRX(PSOX("IRXN"),"SIG1",0),"^",3)+1,$P(^(0),"^",4)=+$P(^(0),"^",4)+1 Q:'$O(SIG(D))
 | 
|---|
| 53 |  .K SIG
 | 
|---|
| 54 |  I $D(PSOINSFL) S ^PSRX(PSOX("IRXN"),"A",0)="^52.3DA^1^1",^PSRX(PSOX("IRXN"),"A",1,0)=DT_"^G^^0^Patient Instructions "_$S(PSOINSFL=1:"",1:"Not ")_"Sent By Provider."
 | 
|---|
| 55 |  I $G(OR0) S:$P(OR0,"^",24) ^PSRX(PSOX("IRXN"),"PKI")=1
 | 
|---|
| 56 |  K PSOX1,PSOFINFL,HLDSIG,D,PSOINSFL,D
 | 
|---|
| 57 |  D:$G(^TMP("PSODAI",$J,0))
 | 
|---|
| 58 |  .S $P(^PSRX(PSOX("IRXN"),3),"^",6)=1
 | 
|---|
| 59 |  .I $O(^TMP("PSODAI",$J,0)) S DAI=0 F  S DAI=$O(^TMP("PSODAI",$J,DAI)) Q:'DAI  D
 | 
|---|
| 60 |  ..S:'$D(^PSRX(PSOX("IRXN"),"DAI",0)) ^PSRX(PSOX("IRXN"),"DAI",0)="^52.03^^" S ^PSRX(PSOX("IRXN"),"DAI",DAI,0)=^TMP("PSODAI",$J,DAI,0)
 | 
|---|
| 61 |  ..S $P(^PSRX(PSOX("IRXN"),"DAI",0),"^",3)=+$P(^PSRX(PSOX("IRXN"),"DAI",0),"^",3)+1,$P(^(0),"^",4)=+$P(^(0),"^",4)+1
 | 
|---|
| 62 |  .K ^TMP("PSODAI",$J),DAI
 | 
|---|
| 63 |  I $G(PSOX("CHCS NUMBER"))'="" S $P(^PSRX(PSOX("IRXN"),"EXT"),"^")=$G(PSOX("CHCS NUMBER"))
 | 
|---|
| 64 |  I $G(PSOX("EXTERNAL SYSTEM"))'="" S $P(^PSRX(PSOX("IRXN"),"EXT"),"^",2)=$G(PSOX("EXTERNAL SYSTEM"))
 | 
|---|
| 65 |  I $G(PSOX("NEWCOPAY")) S ^PSRX(PSOX("IRXN"),"IB")=$G(PSOX("NEWCOPAY"))
 | 
|---|
| 66 |  ;Next line, set SC question based on Copay status?
 | 
|---|
| 67 | IBQ ;I $G(PSOBILL)=2 S ^PSRX(PSOX("IRXN"),"IBQ")=$S($G(PSOX("NEWCOPAY")):0,1:1)
 | 
|---|
| 68 |  N PSOSCFLD S PSOSCFLD=$S(PSOSCP'="":$G(PSOANSQ("SC")),1:"")_"^"_$G(PSOANSQ("MST"))_"^"_$G(PSOANSQ("VEH"))_"^"_$G(PSOANSQ("RAD"))_"^"_$G(PSOANSQ("PGW"))_"^"_$G(PSOANSQ("HNC"))_"^"_$G(PSOANSQ("CV"))
 | 
|---|
| 69 |  I PSOSCP<50&($TR(PSOSCFLD,"^")'="")&($P($G(^PS(53,+$G(PSONEW("PATIENT STATUS")),0)),"^",7)'=1) D
 | 
|---|
| 70 |  . S ^PSRX(PSOX("IRXN"),"IBQ")=PSOSCFLD K PSOSCFLD  ;don't set if SC % is null or 0, just set it in ICD node
 | 
|---|
| 71 |  D ICD^PSODIAG
 | 
|---|
| 72 |  D:$$SWSTAT^IBBAPI() GACT^PSOPFSU0(PSOX("IRXN"),0)
 | 
|---|
| 73 |  K PSOANSQ,PSOANSQD,PSOX("NEWCOPAY")
 | 
|---|
| 74 |  L -^PSRX("B",PSOX("IRXN"))
 | 
|---|
| 75 |  Q
 | 
|---|
| 76 |  ;
 | 
|---|
| 77 | PS55 ;
 | 
|---|
| 78 |  L +^PS(55,PSODFN,"P"):$S(+$G(^DD("DILOCKTM"))>0:+^DD("DILOCKTM"),1:3)
 | 
|---|
| 79 |  S:'$D(^PS(55,PSODFN,"P",0)) ^(0)="^55.03PA^^"
 | 
|---|
| 80 |  F PSOX1=$P(^PS(55,PSODFN,"P",0),"^",3):1 Q:'$D(^PS(55,PSODFN,"P",PSOX1))
 | 
|---|
| 81 |  S PSOX("55 IEN")=PSOX1
 | 
|---|
| 82 |  S ^PS(55,PSODFN,"P",PSOX1,0)=PSOX("IRXN"),$P(^PS(55,PSODFN,"P",0),"^",3,4)=PSOX1_"^"_($P(^PS(55,PSODFN,"P",0),"^",4)+1)
 | 
|---|
| 83 |  S ^PS(55,PSODFN,"P","A",PSONEW("STOP DATE"),PSOX("IRXN"))=""
 | 
|---|
| 84 | PS55X L -^PS(55,PSODFN,"P")
 | 
|---|
| 85 |  K PSOX1
 | 
|---|
| 86 |  Q
 | 
|---|
| 87 | DIK ;
 | 
|---|
| 88 |  I $D(^XUSEC("PSORPH",DUZ)) S DA=PSOX("IRXN"),DIE=52,DR="41////"_PSOCOU_";S:'X Y=""@1"";42////"_PSOCOUU_";@1" D ^DIE K DIE,DR
 | 
|---|
| 89 |  K DIK,DA S DIK="^PSRX(",DA=PSOX("IRXN") D IX1^DIK K DIK
 | 
|---|
| 90 |  S DA=PSOX("IRXN") D ORC^PSORN52C
 | 
|---|
| 91 |  Q
 | 
|---|
| 92 | FINISH ;
 | 
|---|
| 93 | ANQ I $G(ANQDATA)]"" D NOW^%DTC G:$D(^PS(52.52,"B",%)) ANQ D
 | 
|---|
| 94 |  .K DD,DO S DIC="^PS(52.52,",DIC(0)="L",DLAYGO=52.52,X=% D FILE^DICN K DIC,DLAYGO,DD,DO
 | 
|---|
| 95 |  .S ^PS(52.52,+Y,0)=$P(Y,"^",2)_"^"_PSOX("IRXN")_"^"_ANQDATA,^PS(52.52,"A",PSOX("IRXN"),+Y)="" K ANQDATA,X,Y,%,ANQREM
 | 
|---|
| 96 |  G:PSOX("STATUS")=4 FINISHP
 | 
|---|
| 97 |  I $D(PSORX("VERIFY")) D  G FINISHX
 | 
|---|
| 98 |  .K DIC,DLAYGO,DINUM,DIADD,X,DD,DO S DIC="^PS(52.4,",DLAYGO=52.4,DINUM=PSOX("IRXN"),DIC(0)="ML",X=PSOX("IRXN")
 | 
|---|
| 99 |  .D FILE^DICN K DD,DO,DIC,DLAYGO,DINUM S ^PS(52.4,PSOX("IRXN"),0)=PSOX("IRXN")_"^"_PSODFN_"^"_DUZ_"^"_"^"_$E(PSOX("LOGIN DATE"),1,7)_"^"_PSOX("IRXN")_"^"_PSOX("STOP DATE")
 | 
|---|
| 100 |  .K DIK,DA S DIK="^PS(52.4,",DA=PSOX("IRXN") D IX^DIK K DIK,DA
 | 
|---|
| 101 |  ;
 | 
|---|
| 102 |  I PSOX("FILL DATE")>DT,$P(PSOPAR,"^",6) S DA=PSOX("IRXN"),RXFL(PSOX("IRXN"))=0 D SUS^PSORXL K DA G FINISHX
 | 
|---|
| 103 |  ;
 | 
|---|
| 104 |  ; - Calling ECME for claims generation and transmission / REJECT handling
 | 
|---|
| 105 |  N ACTION,PSOERX
 | 
|---|
| 106 |  S PSOERX=PSOX("IRXN")
 | 
|---|
| 107 |  I $$SUBMIT^PSOBPSUT(PSOERX,0) D  I ACTION="Q"!(ACTION="^") Q
 | 
|---|
| 108 |  . S ACTION="" D ECMESND^PSOBPSU1(PSOERX,0,PSOX("FILL DATE"),"OF")
 | 
|---|
| 109 |  . I $$FIND^PSOREJUT(PSOERX,0) D
 | 
|---|
| 110 |  . . S ACTION=$$HDLG^PSOREJU1(PSOERX,0,"79,88","OF","IOQ","I")
 | 
|---|
| 111 |  . I $$STATUS^PSOBPSUT(PSOERX,0)="E PAYABLE" D
 | 
|---|
| 112 |  . . D SAVNDC^PSSNDCUT(+$$GET1^DIQ(52,PSOERX,6,"I"),$G(PSOSITE),$$GETNDC^PSONDCUT(PSOERX,0))
 | 
|---|
| 113 |  ;
 | 
|---|
| 114 | FINISHP ;
 | 
|---|
| 115 |  I $G(PSORX("PSOL",1))']"" S PSORX("PSOL",1)=PSOX("IRXN")_",",RXFL(PSOX("IRXN"))=0 G FINISHX
 | 
|---|
| 116 |  F PSOX1=0:0 S PSOX1=$O(PSORX("PSOL",PSOX1)) Q:'PSOX1  S PSOX2=PSOX1
 | 
|---|
| 117 |  I $L(PSORX("PSOL",PSOX2))+$L(PSOX("IRXN"))<220 S PSORX("PSOL",PSOX2)=PSORX("PSOL",PSOX2)_PSOX("IRXN")_","
 | 
|---|
| 118 |  E  S PSORX("PSOL",PSOX2+1)=PSOX("IRXN")_","
 | 
|---|
| 119 |  S RXFL(PSOX("IRXN"))=0
 | 
|---|
| 120 | FINISHX ;call to build Rx array for bingo board
 | 
|---|
| 121 |  I $G(PSORX("MAIL/WINDOW"))["W" S BINGCRT=1,BINGRTE="W",BBFLG=1 D BBRX^PSORN52C
 | 
|---|
| 122 |  K PSOX1,PSOX2
 | 
|---|
| 123 |  Q
 | 
|---|
| 124 | EOJ ;
 | 
|---|
| 125 |  ;B xref locked in routine PSONRXN
 | 
|---|
| 126 |  L -^PSRX("B",PSOX("IRXN")) K OTHDOS,DA,PSON52,PSOPRC,RTE,SCH,PSOX("INS"),PSONEW("INS"),PSORXED("INS"),PSONEW("ENT"),PSORXED("ENT"),OLENT
 | 
|---|
| 127 |  D PSOUL^PSSLOCK(PSOX("IRXN"))
 | 
|---|
| 128 |  Q
 | 
|---|
| 129 |  ;
 | 
|---|
| 130 |  ;;PSOX("SIG");;SIG;;1
 | 
|---|
| 131 | DD ;;PSOX("RX #");;0;;1
 | 
|---|
| 132 |  ;;PSOX("ISSUE DATE");;0;;13
 | 
|---|
| 133 |  ;;PSODFN;;0;;2
 | 
|---|
| 134 |  ;;PSOX("PATIENT STATUS");;0;;3
 | 
|---|
| 135 |  ;;PSOX("PROVIDER");;0;;4
 | 
|---|
| 136 |  ;;PSOX("CLINIC");;0;;5
 | 
|---|
| 137 |  ;;PSODRUG("IEN");;0;;6
 | 
|---|
| 138 |  ;;PSODRUG("TRADE NAME");;TN;;1
 | 
|---|
| 139 |  ;;PSOX("QTY");;0;;7
 | 
|---|
| 140 |  ;;PSOX("DAYS SUPPLY");;0;;8
 | 
|---|
| 141 |  ;;PSOX("# OF REFILLS");;0;;9
 | 
|---|
| 142 |  ;;PSOX("COPIES");;0;;18
 | 
|---|
| 143 |  ;;PSOX("MAIL/WINDOW");;0;;11
 | 
|---|
| 144 |  ;;PSOX("REMARKS");;3;;7
 | 
|---|
| 145 |  ;;PSOX("CLERK CODE");;0;;16
 | 
|---|
| 146 |  ;;PSODRUG("COST");;0;;17
 | 
|---|
| 147 |  ;;PSOSITE;;2;;9
 | 
|---|
| 148 |  ;;PSOX("LOGIN DATE");;2;;1
 | 
|---|
| 149 |  ;;PSOX("FILL DATE");;2;;2
 | 
|---|
| 150 |  ;;PSOX("PHARMACIST");;2;;3
 | 
|---|
| 151 |  ;;PSOX("LOT #");;2;;4
 | 
|---|
| 152 |  ;;PSOX("DISPENSED DATE");;2;;5
 | 
|---|
| 153 |  ;;PSOX("STOP DATE");;2;;6
 | 
|---|
| 154 |  ;;PSODRUG("NDC");;2;;7
 | 
|---|
| 155 |  ;;PSODRUG("DAW");;EPH;;1
 | 
|---|
| 156 |  ;;PSODRUG("MANUFACTURER");;2;;8
 | 
|---|
| 157 |  ;;PSOX("EXPIRATION DATE");;2;;11
 | 
|---|
| 158 |  ;;PSOX("GENERIC PROVIDER");;2;;12
 | 
|---|
| 159 |  ;;PSOX("RELEASED DATE/TIME");;2;;13
 | 
|---|
| 160 |  ;;PSOX("METHOD OF PICK-UP");;MP;;1
 | 
|---|
| 161 |  ;;PSOX("STATUS");;STA;;1
 | 
|---|
| 162 |  ;;PSOX("LAST DISPENSED DATE");;3;;1
 | 
|---|
| 163 |  ;;PSOX("NEXT POSSIBLE REFILL");;3;;2
 | 
|---|
| 164 |  ;;PSOX("COSIGNING PROVIDER");;3;;3
 | 
|---|
| 165 |  ;;PSOX("TYPE OF RX");;TYPE;;1
 | 
|---|
| 166 |  ;;PSOX("SAND");;SAND;;1
 | 
|---|
| 167 |  ;;PSOX("POE");;POE;;1
 | 
|---|
| 168 |  ;;PSOX("INS");;INS;;1
 | 
|---|