| 1 | PSORN52D ;BIR/LE - files new and renewal entries con't ;02/27/04
 | 
|---|
| 2 |  ;;7.0;OUTPATIENT PHARMACY;**143,219,239**;DEC 1997
 | 
|---|
| 3 |  ;External reference VADPT supported by DBIA 10061
 | 
|---|
| 4 |  Q
 | 
|---|
| 5 | GET ;must have FILE and PSORENW variables to pull default data for ICD and SC/EI for SC>50% Rx's from file 52
 | 
|---|
| 6 |  N ARRAY,ERR,SUBF,RXN,II,JJ,ORXN,SUBFLD,PENDSC,PSOPATST,PSOIBQF
 | 
|---|
| 7 |  I FILE=52 S SUBF=52.052311,SUBFLD=52311,RXN=PSORENW("IRXN"),(SRXN,ORXN)=PSORENW("OIRXN") S:($TR($G(^PSRX(SRXN,"IBQ")),"^")'="") PSOIBQF=1
 | 
|---|
| 8 |  ;            $TR checks for when patient status is exempt, null IBQ node was set for exempts, or SC>50 - data is in ICD node
 | 
|---|
| 9 |  I FILE=52.41 S SUBF=52.41311,SUBFLD=311,(SRXN,RXN)=ORD,ORXN=PSORENW("OIRXN") S:($TR($G(^PS(52.41,SRXN,"IBQ")),"^")'="") PSOIBQF=1
 | 
|---|
| 10 |  D GETS^DIQ(FILE,SRXN,SUBFLD_"*","I","ARRAY","ERR")
 | 
|---|
| 11 |  K PSORX("ICD"),PSOX("ICD")
 | 
|---|
| 12 |  Q:'$D(ARRAY)
 | 
|---|
| 13 |  I FILE=52.41 S PENDSC=$$GET1^DIQ(52.41,ORD,"17"),PENDSC=$S(PENDSC="SC":1,PENDSC="NSC":0,1:"")
 | 
|---|
| 14 |  S PSOPATST=$$GET1^DIQ(52,RXN_",",3,"I")
 | 
|---|
| 15 |  ;
 | 
|---|
| 16 | G1 ;get ICD, if no IBQ node get SC/EI's
 | 
|---|
| 17 |  F II=1:1:8 Q:'$D(ARRAY(SUBF,(II_","_SRXN_",")))  D
 | 
|---|
| 18 |  . S PSORX("ICD",II)=ARRAY(SUBF,(II_","_SRXN_","),.01,"I") S:FILE=52.41 PSONEW("ICD",II)=PSORX("ICD",II)
 | 
|---|
| 19 |  . Q:II>1!($G(PSOIBQF))  ;only need ei's from 1st node; all nodes same for SC/EI
 | 
|---|
| 20 |  . F JJ=1:1:7 I ARRAY(SUBF,(II_","_SRXN_","),JJ,"I")=1!(ARRAY(SUBF,(II_","_SRXN_","),JJ,"I")=0) D
 | 
|---|
| 21 |  .. I JJ=1 S (PSOANSQ(RXN,"VEH"),PSORX(ORXN,"VEH"))=ARRAY(SUBF,(II_","_SRXN_","),JJ,"I") Q
 | 
|---|
| 22 |  .. I JJ=2 S (PSOANSQ(RXN,"RAD"),PSORX(ORXN,"RAD"))=ARRAY(SUBF,(II_","_SRXN_","),JJ,"I") Q
 | 
|---|
| 23 |  .. I JJ=4 S (PSOANSQ(RXN,"PGW"),PSORX(ORXN,"PGW"))=ARRAY(SUBF,(II_","_SRXN_","),JJ,"I") Q
 | 
|---|
| 24 |  .. I JJ=5 S (PSOANSQ(RXN,"MST"),PSORX(ORXN,"MST"))=ARRAY(SUBF,(II_","_SRXN_","),JJ,"I") Q
 | 
|---|
| 25 |  .. I JJ=6 S (PSOANSQ(RXN,"HNC"),PSORX(ORXN,"HNC"))=ARRAY(SUBF,(II_","_SRXN_","),JJ,"I") Q
 | 
|---|
| 26 |  .. I JJ=7 S (PSOANSQ(RXN,"CV"),PSORX(ORXN,"CV"))=ARRAY(SUBF,(II_","_SRXN_","),JJ,"I") Q
 | 
|---|
| 27 |  ;
 | 
|---|
| 28 |  I '$G(PSOIBQF) S II=1,JJ=3 D
 | 
|---|
| 29 |  . I PSOSCP>49&(FILE=52.41) S (PSOANSQ(RXN,"SC>50"),PSORX(ORXN,"SC>50"),PSOANSQ("SC>50"))=PENDSC Q
 | 
|---|
| 30 |  . I PSOSCP>49&(FILE'=52.41) S:$D(ARRAY(SUBF,(II_","_SRXN_","),JJ,"I")) (PSOANSQ(RXN,"SC>50"),PSOANSQ("SC>50"),PSORX(ORXN,"SC>50"))=ARRAY(SUBF,(II_","_SRXN_","),JJ,"I") Q
 | 
|---|
| 31 |  . ; when patient status is exempt use SC>50 variable to differenciate regular SC<50 and exempt SC<50
 | 
|---|
| 32 |  . I PSOSCP<50&($P($G(^PS(53,+$G(PSOPATST),0)),"^",7)=1) D
 | 
|---|
| 33 |  .. I FILE=52.41 S (PSOANSQ(RXN,"SC>50"),PSORX(ORXN,"SC>50"),PSOANSQ("SC>50"))=PENDSC Q
 | 
|---|
| 34 |  .. S:$G(ARRAY(SUBF,(II_","_SRXN_","),JJ,"I")) (PSOANSQ(RXN,"SC>50"),PSORX(ORXN,"SC>50"),PSOANSQ("SC>50"))=ARRAY(SUBF,(II_","_SRXN_","),JJ,"I")
 | 
|---|
| 35 |  . I PSOSCP<50&($P($G(^PS(53,+$G(PSOPATST),0)),"^",7)'=1) D
 | 
|---|
| 36 |  .. I FILE=52.41 S (PSOANSQ(RXN,"SC"),PSORX(ORXN,"SC"),PSOANSQ("SC"))=PENDSC Q
 | 
|---|
| 37 |  .. S:$D(ARRAY(SUBF,(II_","_SRXN_","),JJ,"I")) (PSOANSQ(RXN,"SC"),PSORX(ORXN,"SC"),PSOANSQ("SC"))=ARRAY(SUBF,(II_","_SRXN_","),JJ,"I")
 | 
|---|
| 38 |  ;
 | 
|---|
| 39 |  Q
 | 
|---|
| 40 |  ;
 | 
|---|
| 41 | FILE ;
 | 
|---|
| 42 |  Q:'$D(^PSRX(PSOX("OIRXN"),"ICD"))
 | 
|---|
| 43 |  N II F II=1:1:8 Q:$G(^PSRX(PSOX("OIRXN"),"ICD",II,0))=""  D
 | 
|---|
| 44 |  . S ^PSRX(PSOX("IRXN"),"ICD",II,0)=$G(^PSRX(PSOX("OIRXN"),"ICD",II,0))
 | 
|---|
| 45 |  . S:$P(^PSRX(PSOX("IRXN"),"ICD",II,0),"^",1)'="" ^PSRX(PSOX("IRXN"),"ICD","B",$P(^PSRX(PSOX("IRXN"),"ICD",II,0),"^",1),II)=""
 | 
|---|
| 46 |  I II>1 S ^PSRX(PSOX("IRXN"),"ICD",0)="^52.052311^"_(II-1)_"^"_(II-1)
 | 
|---|
| 47 |  Q
 | 
|---|
| 48 | FILE2 ;file ICD's on existing node or build new nodes
 | 
|---|
| 49 |  ;note: variable PSOSCP2 is only available from CPRS Edit API and MISS
 | 
|---|
| 50 |  ;        sub-routine below.
 | 
|---|
| 51 |  N D,RXN,II,TYPE,DATA,DATA1,PSOPATST
 | 
|---|
| 52 |  I $G(PSOX("IRXN")) S PSOPATST=$$GET1^DIQ(52,PSOX("IRXN")_",",3,"I")
 | 
|---|
| 53 |  ;I '$G(PSONEW("PATIENT STATUS")) I $G(PSOX("IRXN")) S PSONEW("PATIENT STATUS")=$$GET1^DIQ(52,PSOX("IRXN")_",",3,"I")
 | 
|---|
| 54 |  I $G(PSOSCP2)!($G(PSOFDR)&($G(ORD))) D
 | 
|---|
| 55 |  .;if RX edited in CPRS delete all but what is sent from CPRS
 | 
|---|
| 56 |  . K ^PSRX(PSOX("IRXN"),"ICD"),^PSRX(PSOX("IRXN"),"IBQ")
 | 
|---|
| 57 |  ;
 | 
|---|
| 58 |  S DATA="^^^^^^^",(DATA1,TYPE)=""
 | 
|---|
| 59 |  S $P(DATA,U,4)=$S(PSOSCP>49:$G(PSOANSQ("SC>50")),PSOSCP<50&($P($G(^PS(53,+$G(PSOPATST),0)),"^",7)=1):$G(PSOANSQ("SC>50")),PSOSCP<50&(PSOSCP'=""):$G(PSOANSQ("SC")),1:"")
 | 
|---|
| 60 |  ;
 | 
|---|
| 61 |  F  S TYPE=$O(PSOANSQ(PSOX("IRXN"),TYPE)) Q:TYPE=""  D
 | 
|---|
| 62 |  . I TYPE="VEH" S $P(DATA,U,2)=PSOANSQ(PSOX("IRXN"),"VEH")
 | 
|---|
| 63 |  . I TYPE="RAD" S $P(DATA,U,3)=PSOANSQ(PSOX("IRXN"),"RAD")
 | 
|---|
| 64 |  . I TYPE="PGW" S $P(DATA,U,5)=PSOANSQ(PSOX("IRXN"),"PGW")
 | 
|---|
| 65 |  . I TYPE="MST" S $P(DATA,U,6)=PSOANSQ(PSOX("IRXN"),"MST")
 | 
|---|
| 66 |  . I TYPE="HNC" S $P(DATA,U,7)=PSOANSQ(PSOX("IRXN"),"HNC")
 | 
|---|
| 67 |  . I TYPE="CV" S $P(DATA,U,8)=PSOANSQ(PSOX("IRXN"),"CV")
 | 
|---|
| 68 |  ;
 | 
|---|
| 69 |  I $O(PSORX("ICD","")) F D=1:1:8 Q:'$D(PSORX("ICD",D))  S $P(DATA,"^")=PSORX("ICD",D) D
 | 
|---|
| 70 |  . S ^PSRX(PSOX("IRXN"),"ICD",D,0)=DATA,$P(DATA,"^")="",^PSRX(PSOX("IRXN"),"ICD",0)="^52.052311P^"_D_"^"_D
 | 
|---|
| 71 |  . S:PSORX("ICD",D)'="" ^PSRX(PSOX("IRXN"),"ICD","B",PSORX("ICD",D),D)=""
 | 
|---|
| 72 |  E  S ^PSRX(PSOX("IRXN"),"ICD",0)="^52.052311P^1^1",^PSRX(PSOX("IRXN"),"ICD",1,0)=$G(DATA)
 | 
|---|
| 73 |  ;
 | 
|---|
| 74 |  I PSOSCP<50&(($TR(DATA,"^")'=""))&(($P($G(^PS(53,+$G(PSOPATST),0)),"^",7)'=1)) D
 | 
|---|
| 75 |  .S DATA1=$G(PSOANSQ("SC"))_"^"_$G(PSOANSQ(PSOX("IRXN"),"MST"))_"^"_$G(PSOANSQ(PSOX("IRXN"),"VEH"))_"^"_$G(PSOANSQ(PSOX("IRXN"),"RAD"))
 | 
|---|
| 76 |  .S DATA1=DATA1_"^"_$G(PSOANSQ(PSOX("IRXN"),"PGW"))_"^"_$G(PSOANSQ(PSOX("IRXN"),"HNC"))_"^"_$G(PSOANSQ(PSOX("IRXN"),"CV"))
 | 
|---|
| 77 |  .S:($TR(DATA1,"^")'="") ^PSRX(PSOX("IRXN"),"IBQ")=DATA1
 | 
|---|
| 78 |  K PSORX("ICD")
 | 
|---|
| 79 |  Q
 | 
|---|
| 80 |  ;
 | 
|---|
| 81 | RESET ;called from reset copay status PSOCPC
 | 
|---|
| 82 |  ;Must be available at this point:  PSODA, PSOIBQ=SC^MST^AO^IR^EC^HNC^CV
 | 
|---|
| 83 |  Q:'$D(PSODA)!('$D(PSOIBQ))
 | 
|---|
| 84 |  Q:'$D(^PSRX(PSODA))
 | 
|---|
| 85 |  ;Q:'$D(^PSRX(PSODA,"ICD"))  ;if old Rx and no ICD's defined; don't set
 | 
|---|
| 86 |  N I,DATA,PSOICD
 | 
|---|
| 87 |  S:$D(^PSRX(PSODA,"ICD")) PSOICD=1
 | 
|---|
| 88 |  I '$G(DFN) S DFN=$$GET1^DIQ(52,PSODA_",",2,"I")
 | 
|---|
| 89 |  S DATA="^^^^^^^"
 | 
|---|
| 90 |  F I=1:1:7 D
 | 
|---|
| 91 |  . I I=1 S $P(DATA,"^",4)=$P(PSOIBQ,"^",I)
 | 
|---|
| 92 |  . I I=2 S $P(DATA,"^",6)=$P(PSOIBQ,"^",I)
 | 
|---|
| 93 |  . I I=3 S $P(DATA,"^",2)=$P(PSOIBQ,"^",I)
 | 
|---|
| 94 |  . I I=4 S $P(DATA,"^",3)=$P(PSOIBQ,"^",I)
 | 
|---|
| 95 |  . I I=5 S $P(DATA,"^",5)=$P(PSOIBQ,"^",I)
 | 
|---|
| 96 |  . I I=6 S $P(DATA,"^",7)=$P(PSOIBQ,"^",I)
 | 
|---|
| 97 |  . I I=7 S $P(DATA,"^",8)=$P(PSOIBQ,"^",I)
 | 
|---|
| 98 |  ;
 | 
|---|
| 99 |  I $G(PSOICD) S I=0 F  S I=$O(^PSRX(PSODA,"ICD",I)) Q:I=""!(I'?1N.NN)  D
 | 
|---|
| 100 |  . Q:'$D(^PSRX(PSODA,"ICD",I,0))
 | 
|---|
| 101 |  . S $P(^PSRX(PSODA,"ICD",I,0),"^",2,8)=$P(DATA,"^",2,8)
 | 
|---|
| 102 |  ; for pre-cidc RX
 | 
|---|
| 103 |  I '$G(PSOICD) S ^PSRX(PSODA,"ICD",1,0)="^"_$P(DATA,"^",2,8),^PSRX(PSODA,"ICD",0)="^52.052311P^1^1"
 | 
|---|
| 104 |  Q
 | 
|---|
| 105 |  ;
 | 
|---|
| 106 | SCP ;Called from multiple routines - DFN or PSODFN variable must be available to call this subroutine.
 | 
|---|
| 107 |  I '$G(DFN) S DFN=+$G(PSODFN)
 | 
|---|
| 108 |  D ELIG^VADPT S PSOANSQ("SC>50")="",(PSOSCA,PSOSCP)="",PSOSCP=$P(VAEL(3),U,2)
 | 
|---|
| 109 |  S:PSOSCP=""&($P(VAEL(3),U)=1) PSOSCP=0
 | 
|---|
| 110 |  S PSOSCA=$$SC^SDCO22(DFN)
 | 
|---|
| 111 |  K VAEL
 | 
|---|
| 112 |  Q
 | 
|---|