PSAUP6 ;BIR/JMB-Upload and Process Prime Vendor Invoice Data - CONT'D ;7/23/97
;;3.0; DRUG ACCOUNTABILITY/INVENTORY INTERFACE;**3**; 10/24/97
;This routine looks in the DRUG file for a supply line item. It looks
;for a NDC with an "S" in front of the UPC. It then looks for a matching
;VSN. If it is found, the NDC becomes "S"_UPC.
;
UPC ;If there is no NDC, the VSN is not found, & there is a UPC, look
;for a supply item.
S (PSACNT,PSACNT1,PSAFND,PSAFND1,PSAIEN50)=0,PSASUP="S"_$P($P(PSADATA,"^",26),"~")
F S PSAIEN50=+$O(^PSDRUG("C",PSASUP,PSAIEN50)) Q:'PSAIEN50 S PSASYN=0 F S PSASYN=+$O(^PSDRUG("C",PSASUP,PSAIEN50,PSASYN)) Q:'PSASYN D
.Q:'$D(^PSDRUG(PSAIEN50,1,PSASYN,0))
.;DAVE B (PSA*3*3)
.Q:$D(^PSDRUG(PSAIEN50,"I"))
.I $P(^PSDRUG(PSAIEN50,1,PSASYN,0),"^",4)=PSAVSN S PSAFND=PSAFND+1,PSAFND1=PSAIEN50_"^"_PSASYN Q
.I $P(^PSDRUG(PSAIEN50,1,PSASYN,0),"^",4)'=PSAVSN S PSACNT=PSACNT+1,PSACNT1=PSAIEN50_"^"_PSASYN
;
;If VSN & UPC match, set ^XTMP
I PSAFND=1 D Q
.S PSAIEN=$P(PSAFND1,"^"),$P(^XTMP("PSAPV",PSACTRL,"IT",PSALINE),"^",6)=PSAIEN,PSASUB=$P(PSAFND1,"^",2),$P(^(PSALINE),"^",7)=PSASUB
.S $P(^XTMP("PSAPV",PSACTRL,"IT",PSALINE),"^",5)=PSAVSN,PSANDC=PSASUP,$P(^(PSALINE),"^",4)=PSANDC
;
;If >1 with same VSN & UPC, set # with same UPC & VSN in ^XTMP & flag
I PSAFND>1 S $P(^XTMP("PSAPV",PSACTRL,"IT",PSALINE),"^",26)=$P(^XTMP("PSAPV",PSACTRL,"IT",PSALINE),"^",26)_"~"_PSAFND,PSAOK=0 Q
;
;If 1 UPC and ...
I PSACNT=1 S PSAIEN=$P(PSACNT1,"^"),$P(^XTMP("PSAPV",PSACTRL,"IT",PSALINE),"^",6)=PSAIEN,PSASUB=$P(PSACNT1,"^",2),$P(^(PSALINE),"^",7)=PSASUB D Q
.;VSN is null, accept as found & set ^XTMP
.I $P(^PSDRUG(PSAIEN,1,PSASUB,0),"^",4)="" S $P(^XTMP("PSAPV",PSACTRL,"IT",PSALINE),"^",5)=PSAVSN,PSANDC=PSASUP,$P(^XTMP("PSAPV",PSACTRL,"IT",PSALINE),"^",4)=PSANDC Q
.;Different VSN, set VSN in UPC piece in ^XTMP
.S $P(^XTMP("PSAPV",PSACTRL,"IT",PSALINE),"^",26)=$P(^XTMP("PSAPV",PSACTRL,"IT",PSALINE),"^",26)_"~~"_$P(^PSDRUG(PSAIEN,1,PSASUB,0),"^",5),PSAOK=0
;
;If >1 VSN with differnt NDC, set flag in NDC piece of ^XTMP
I PSACNT>1 S $P(^XTMP("PSAPV",PSACTRL,"IT",PSALINE),"^",26)=$P(^XTMP("PSAPV",PSACTRL,"IT",PSALINE),"^",26)_"~"_PSACNT,PSAOK=0
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HPSAUP6 2230 printed Oct 16, 2024@17:51:41 Page 2
PSAUP6 ;BIR/JMB-Upload and Process Prime Vendor Invoice Data - CONT'D ;7/23/97
+1 ;;3.0; DRUG ACCOUNTABILITY/INVENTORY INTERFACE;**3**; 10/24/97
+2 ;This routine looks in the DRUG file for a supply line item. It looks
+3 ;for a NDC with an "S" in front of the UPC. It then looks for a matching
+4 ;VSN. If it is found, the NDC becomes "S"_UPC.
+5 ;
UPC ;If there is no NDC, the VSN is not found, & there is a UPC, look
+1 ;for a supply item.
+2 SET (PSACNT,PSACNT1,PSAFND,PSAFND1,PSAIEN50)=0
SET PSASUP="S"_$PIECE($PIECE(PSADATA,"^",26),"~")
+3 FOR
SET PSAIEN50=+$ORDER(^PSDRUG("C",PSASUP,PSAIEN50))
if 'PSAIEN50
QUIT
SET PSASYN=0
FOR
SET PSASYN=+$ORDER(^PSDRUG("C",PSASUP,PSAIEN50,PSASYN))
if 'PSASYN
QUIT
Begin DoDot:1
+4 if '$DATA(^PSDRUG(PSAIEN50,1,PSASYN,0))
QUIT
+5 ;DAVE B (PSA*3*3)
+6 if $DATA(^PSDRUG(PSAIEN50,"I"))
QUIT
+7 IF $PIECE(^PSDRUG(PSAIEN50,1,PSASYN,0),"^",4)=PSAVSN
SET PSAFND=PSAFND+1
SET PSAFND1=PSAIEN50_"^"_PSASYN
QUIT
+8 IF $PIECE(^PSDRUG(PSAIEN50,1,PSASYN,0),"^",4)'=PSAVSN
SET PSACNT=PSACNT+1
SET PSACNT1=PSAIEN50_"^"_PSASYN
End DoDot:1
+9 ;
+10 ;If VSN & UPC match, set ^XTMP
+11 IF PSAFND=1
Begin DoDot:1
+12 SET PSAIEN=$PIECE(PSAFND1,"^")
SET $PIECE(^XTMP("PSAPV",PSACTRL,"IT",PSALINE),"^",6)=PSAIEN
SET PSASUB=$PIECE(PSAFND1,"^",2)
SET $PIECE(^(PSALINE),"^",7)=PSASUB
+13 SET $PIECE(^XTMP("PSAPV",PSACTRL,"IT",PSALINE),"^",5)=PSAVSN
SET PSANDC=PSASUP
SET $PIECE(^(PSALINE),"^",4)=PSANDC
End DoDot:1
QUIT
+14 ;
+15 ;If >1 with same VSN & UPC, set # with same UPC & VSN in ^XTMP & flag
+16 IF PSAFND>1
SET $PIECE(^XTMP("PSAPV",PSACTRL,"IT",PSALINE),"^",26)=$PIECE(^XTMP("PSAPV",PSACTRL,"IT",PSALINE),"^",26)_"~"_PSAFND
SET PSAOK=0
QUIT
+17 ;
+18 ;If 1 UPC and ...
+19 IF PSACNT=1
SET PSAIEN=$PIECE(PSACNT1,"^")
SET $PIECE(^XTMP("PSAPV",PSACTRL,"IT",PSALINE),"^",6)=PSAIEN
SET PSASUB=$PIECE(PSACNT1,"^",2)
SET $PIECE(^(PSALINE),"^",7)=PSASUB
Begin DoDot:1
+20 ;VSN is null, accept as found & set ^XTMP
+21 IF $PIECE(^PSDRUG(PSAIEN,1,PSASUB,0),"^",4)=""
SET $PIECE(^XTMP("PSAPV",PSACTRL,"IT",PSALINE),"^",5)=PSAVSN
SET PSANDC=PSASUP
SET $PIECE(^XTMP("PSAPV",PSACTRL,"IT",PSALINE),"^",4)=PSANDC
QUIT
+22 ;Different VSN, set VSN in UPC piece in ^XTMP
+23 SET $PIECE(^XTMP("PSAPV",PSACTRL,"IT",PSALINE),"^",26)=$PIECE(^XTMP("PSAPV",PSACTRL,"IT",PSALINE),"^",26)_"~~"_$PIECE(^PSDRUG(PSAIEN,1,PSASUB,0),"^",5)
SET PSAOK=0
End DoDot:1
QUIT
+24 ;
+25 ;If >1 VSN with differnt NDC, set flag in NDC piece of ^XTMP
+26 IF PSACNT>1
SET $PIECE(^XTMP("PSAPV",PSACTRL,"IT",PSALINE),"^",26)=$PIECE(^XTMP("PSAPV",PSACTRL,"IT",PSALINE),"^",26)_"~"_PSACNT
SET PSAOK=0
+27 QUIT