Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: PRCOESE

PRCOESE.m

Go to the documentation of this file.
PRCOESE ;WISC/DJM-IFCAP EDI POA Server Interface ; [8/31/98 1:55pm]
V ;;5.1;IFCAP;**202**;Oct 20, 2000;Build 27
 ;Per VA Directive 6402, this routine should not be modified.
SERV N A,AA,AC,ACD,B,CC,CU,CU1,CU2,C1L,DA,DC,DIE,DR,EE,ERR,FOB,G,G1,I,IT
 N KD,KP,L,LINE,LN,MPN,M1,N,N1,N1L,N2,N2L,N3,N3L,PC,PN,PO,PO1,PPM,PPT
 N PRC,PRCNO,PRCOI,PU,QT,QTFLG,RP,S1,UC,UC1,UC2,UNIT,UP,UPN,VP,V1,V2
 N X,X1,X2,PRCTC,PRCX,RECORD,STATION,STCK,VENDOR
 K ERR
 ;
 ;If QTFLG=1, processing stops because the error is serious
 ;
 S (QTFLG,LN)=0
 F  S LN=$O(^PRCF(423.6,PRCDA,1,LN)) QUIT:'LN  G:QTFLG>0 S1 D MAIN
 ;
 D KILL^PRCOSRV3(PRCDA)
 QUIT
 ;
MAIN ;Start processing the POA segments
 ;
 S LINE=^(LN,0)
 I LINE["$" D S1 QUIT  ;End of this record. Stop and process any errors.
 ;
 S A=$P(LINE,U)
 S AA="SEG"_$S(A="ISM":"1",A="HE":"2",A="VE":"3",A="AC":"4",A="ST":"5",A="IT":"6",A="DE":"7",A="AK":"8",A="CO":"9",1:"10")
 ;
 D @AA ;Process segment
 ;
 QUIT
 ;
SEG1 S B=$P(LINE,U,4)
 G:B'="POA" SEG10
 S CC=$P(LINE,U,7)
 F  Q:$A(CC,$L(CC))'=32  S CC=$E(CC,1,$L(CC)-1)
 S CC=$E(CC,1,3)_"-"_$E(CC,4,$L(CC))
 S ERR(CC,0)=""
 S STATION=$P(LINE,U,3)
 S STCK=$O(^PRC(411,"B",STATION,0))
 I STCK'>0 S ERR("STATION")=STATION,QTFLG=1 Q
 S PO=$O(^PRC(442,"B",CC,0))
 S:PO="" ERR(CC,0)="*",QTFLG=1
 Q:QTFLG>0
 S PO1=$G(^PRC(442,PO,1))
 S:PO1="" ERR(CC,0)="*",QTFLG=1
 Q:QTFLG>0
 S PPM=$P(PO1,U,10)
 D BUL^PRCOESE1
 ;
 ; GATHER DATA FROM CONTROL SEGMENT.
 ;
 S PRCTC=$P(LINE,U,4)
 S X1=$E($P(LINE,U,5),1,4)-1700_"0101"
 S X2=$E($P(LINE,U,5),5,7)-1
 D C^%DTC
 S PRCX=X_"."_$P(LINE,U,6)
 ;
 QUIT  ;Exit the SEG1 sub routine
 ;
SEG2 QUIT
 ;
SEG3 ; GET DATA FROM "VE" SEGMENT.
 S VENDOR=$P(LINE,U,2)
 ;
 ; NOW LETS FIND THE PROPER RECORD IN FILE 443.75.
 ;
 ;Austin did not provide the Vendor_Id.  Use the PO to get it.
 I VENDOR="" D  QUIT:QTFLG=1
 . N PO,IEN
 . S PO=CC                                  ;PO number
 . S IEN=$O(^PRC(442,"B",PO,""))            ;Get IEN
 . S VENDOR=$P($G(^PRC(442,IEN,1)),U)       ;Internal_Vendor_Number
 . S VENDOR=$P($G(^PRC(440,VENDOR,3)),U,3)  ;Vendor_Id
 . I VENDOR'="" QUIT                        ;Vendor_Id (yes) 
 . S $P(ERR("VENDOR"),U)="*",QTFLG=1        ;Vendor_Id (no)
 .  ;
 S RECORD=$O(^PRC(443.75,"AO","PHA",CC,VENDOR,0))
 I RECORD="" S $P(ERR("RECORD"),U)="*",QTFLG=1
 ;
 QUIT  ;Exit the SEG3 sub routine
 ;
SEG4 S ERR(CC,"AC")=""
 I $P(LINE,U,3)]"" D  ;
 .  S FOB=$G(^PRC(442,PO,1))
 .  S:FOB="" ERR(CC,"AC")="*"
 .  S:$P(FOB,U,6)="" ERR(CC,"AC")="*"
 .  I $P(FOB,U,6)'=$P(LINE,U,3) S $P(ERR(CC,"AC"),U,2)="*"
 .  Q
 .  ;
 I $P(LINE,U,3)="" D  ;
 .  S FOB=$G(^PRC(442,PO,1))
 .  S:$P(FOB,U,6)'="" $P(ERR(CC,"AC"),U,3)="*"
 .  Q
 .  ;
 S KP=$P(LINE,U,5)
 S KD=$P(LINE,U,6)
 S (EE,G1,PC)=""
 S AC=$G(^PRC(442,PO,5,0))
 S:AC="" $P(ERR(CC,"AC"),U,4)="*"
 S:$P(AC,U,4)'>0 $P(ERR(CC,"AC"),U,4)="*"
 Q:$P(ERR(CC,"AC"),U,4)]""
 F ACD=1:1:$P(AC,U,4) D  ;
 .  S PPT(ACD)=$G(^PRC(442,PO,5,ACD,0))
 .  I +$P(PPT(ACD),U)=$P(PPT(ACD),U) S EE=$S(EE]"":EE_"^"_ACD,1:ACD)
 .  Q
 .  ;
 I EE]"" D  ;
 .  S G=$P(EE,U)
 .  S PC=$P(PPT(ACD),U)/100
 .  S G1=$P(PPT(ACD),U,2)
 .  Q
 .  ;
 I KP]"",PC'>0 S $P(ERR(CC,"AC"),U,7)="*"
 I EE]"",KP]"",KP'=PC S $P(ERR(CC,"AC"),U,5)="*"
 I KD]"",G1="" S $P(ERR(CC,"AC"),U,8)="*"
 I EE]"",KD]"",KD'=G1 S $P(ERR(CC,"AC"),U,6)="*"
 I KP="",PC>0 S $P(ERR(CC,"AC"),U,9)="*"
 I KD="",G1>0 S $P(ERR(CC,"AC"),U,10)="*"
 ;
 QUIT  ;Exit the SEG4 sub routine
 ;
SEG5 QUIT
 ;
SEG6 ;Process the "IT" segment from Austin
 S B=$P(LINE,U,2)    ;item line number  
 I B'>0 S $P(ERR(CC,.5),U,13)="*" Q
 S ERR(CC,B)=""
 S IT=$O(^PRC(442,PO,2,"B",B,0))
 S:IT="" $P(ERR(CC,B),U,2)="*"
 Q:IT=""
 S IT=$G(^PRC(442,PO,2,IT,0))
 S:IT="" $P(ERR(CC,B),U,2)="*"
 Q:IT=""
 S VP=$P(IT,U,6)
 S:VP="" $P(ERR(CC,B),U,3)="*"
 S:$E(VP,1)="#" VP=$E(VP,2,99)
 S:VP'=$P(LINE,U,5) $P(ERR(CC,B),U,9)="*"
 S QT=$P(IT,U,2)
 S:QT="" $P(ERR(CC,B),U,5)="*"
 S QT=QT\1+(QT#1>0)_"00"
 S:QT'=$P(LINE,U,8) $P(ERR(CC,B),U,10)="*"
 S PN=$P(LINE,U,6) ;Product number
 I PN]"" D  ;
 .  S RP=$P(IT,U,5)
 .  S:RP="" $P(ERR(CC,B),U,8)="*"
 .  I RP]"" D  ;
 .  .  S MPN=$G(^PRC(441,RP,3))
 .  .  S:MPN="" $P(ERR(CC,B),U,8)="*"
 .  .  I MPN]"" D  ;
 .  .  .  S MPN=$P(MPN,U,5)
 .  .  .  S:$E(MPN,1)="#" MPN=$E(MPN,2,99)
 .  .  .  S:MPN'=PN $P(ERR(CC,B),U,8)="*"
 .  .  .  Q
 .  .  Q
 .  Q
 .  ;
 S DC=$P(LINE,U,7) ;Get the National drug code
 I DC]"" D
 .  S N=$P(IT,U,15)
 .  S:N="" $P(ERR(CC,B),U,4)="*"
 .  I N]"" D
 .  .  S N1=$P(N,"-")
 .  .  S N2=$P(N,"-",2)
 .  .  S N3=$P(N,"-",3)
 .  .  S N1="000000"_N1
 .  .  S N1L=$L(N1)
 .  .  S N1=$E(N1,N1L-5,N1L)
 .  .  S N2="0000"_N2
 .  .  S N2L=$L(N2)
 .  .  S N2=$E(N2,N2L-3,N2L)
 .  .  S N3="00"_N3
 .  .  S N3L=$L(N3)
 .  .  S N3=$E(N3,N3L-1,N3L)
 .  .  S N=N1_N2_N3
 .  .  S:N'=DC $P(ERR(CC,B),U,4)="*"
 .  .  Q
 .  Q
 .  ;
 S UC=$P(LINE,U,10) ;Get the unit cost
 S UC1=$E(UC,1,$L(UC)-4)
 S UC2=$E(UC,$L(UC)-3,99)
 S UC1=$E(UC1+1000000,2,7)
 I UC2="0000" S UC=UC1_UC2 G S6B
 S UC2="."_UC2
 S UC2=$E($E(UC2+.005,2,3)_"0000",1,4)
 S UC=UC1_UC2
S6B S CU=$P(IT,U,9)
 S:CU="" $P(ERR(CC,B),U,7)="*"
 G:CU="" S6A
 I CU]"",CU="N/C" D  G S6A
 .  S CU="0000000000"
 .  S:UC'=CU $P(ERR(CC,B),U,12)="*"
 .  Q
 .  ;
 S CU1=$P(CU,".")
 S CU2=$P(CU,".",2)
 S CU1="000000"_CU1
 S C1L=$L(CU1)
 S CU1=$E(CU1,C1L-5,C1L)
 S CU2=CU2_"0000"
 S CU2=$E(CU2,1,4)
 S CU=CU1_CU2
 S:UC'=CU $P(ERR(CC,B),U,12)="*"
S6A S PU=$P(LINE,U,9) ;Get the unit of purchase
 S UP=$P(IT,U,3)
 S:UP="" $P(ERR(CC,B),U,6)="*"
 I UP]"" D  ;
 .  S UPN=$G(^PRCD(420.5,UP,0))
 .  S:UPN="" $P(ERR(CC,B),U,6)="*"
 .  I UPN]"" S UNIT=$P(UPN,U) S:UNIT'=PU $P(ERR(CC,B),U,11)="*"
 .  Q
 .  ;
 S DA(1)=PO
 S DIE="^PRC(442,DA(1),2,"
 S DR="12///@;12.5///@;13///@;13.5///@"
 S DA=B
 D ^DIE
 S PRC(1,443.75,"?+1,",.01)=$P($G(^PRC(443.75,RECORD,0)),U)
 S PRC(1,443.75,"?+1,",23)=PRCTC
 S PRC(1,443.75,"?+1,",24)=PRCX
 I $G(ERR(CC,B))]"" D  ;
 .  S PRC(1,443.75,"?+1,",19)="E"
 .  S PRC(1,443.75,"?+1,",20)=ERR(CC,B)
 .  Q
 .  ;
 D UPDATE^DIE("","PRC(1)")
 ;
 QUIT  ;Exit the SEG6 sub routine
 ;
SEG7 QUIT
 ;
SEG8 K DIE,DA,DR
 S B=$P(LINE,U,2)
 I B'>0 S $P(ERR(CC,.5),U,13)="*" Q
 S B=$O(^PRC(442,PO,2,"B",B,0))
 I B'>0 S $P(ERR(CC,B),U,2)="*" Q
 S DA(1)=PO
 S DA=B
 S DIE="^PRC(442,DA(1),2,"
 I $P($G(ERR(CC,B)),U,2)="" D  ;
 .  S V1=$P(LINE,U,3)
 .  S V2=$P(LINE,U,4)
 .  S:$P(^PRC(442,PO,2,B,2),U,9)="" DR="12///^S X=V1;12.5///^S X=V2"
 .  S:'$D(DR) DR="13///^S X=V1;13.5///^S X=V2"
 .  D ^DIE
 .  Q
 .  ;
 QUIT  ;Exit the SEG8 sub routine
 ;
SEG9 QUIT
 ;
SEG10 S ERR("SEG")=A,QTFLG=1
 ;
 QUIT  ;Exit the SEG10 sub routine
 ;
S1 D ^PRCOESE1
 ;
 QUIT