| 1 | PPPPDX2 ;ALB/DMB/DAD - PPP PDX ROUTINES ; 6/30/92 | 
|---|
| 2 | ;;V1.0;PHARMACY PRESCRIPTION PRACTICE;**8**;APR 7,1995 | 
|---|
| 3 | ;;Per VHA Directive 10-93-142, this routine should not be modified. | 
|---|
| 4 | ; | 
|---|
| 5 | PDXFFX(SSN,STATION) ; Get the FFX IFN or create a new entry for PDX | 
|---|
| 6 | ; | 
|---|
| 7 | ; This function is called by the PDX trigger to lookup or create | 
|---|
| 8 | ; an entry in the foreign facility cross-reference. | 
|---|
| 9 | ; | 
|---|
| 10 | ; Parameters: | 
|---|
| 11 | ;    SSN - The Patient SSN | 
|---|
| 12 | ;    STATION - The Station Number the patient visited | 
|---|
| 13 | ; | 
|---|
| 14 | ; Returns: | 
|---|
| 15 | ;    Normal Termination - The Internal File Number of the entry. | 
|---|
| 16 | ;    Error - -9002 = could not find SSN in patient file or Station | 
|---|
| 17 | ;                    number in institution file. | 
|---|
| 18 | ;            -9003 = An error occurred while creating the new entry. | 
|---|
| 19 | ; | 
|---|
| 20 | N LKUPERR,FMERR,ERR,PATDFN,SNIFN,FFXIFN,X,DIC,Y,DA,HDRNODE | 
|---|
| 21 | N TRECS,U,NEWREC | 
|---|
| 22 | ; | 
|---|
| 23 | S LOCKERR=-9004 | 
|---|
| 24 | S LKUPERR=-9003 | 
|---|
| 25 | S FMERR=-9002 | 
|---|
| 26 | S ERR=0 | 
|---|
| 27 | S U="^" | 
|---|
| 28 | ; | 
|---|
| 29 | ; Look up the patient and station IFN. | 
|---|
| 30 | ; | 
|---|
| 31 | S PATDFN=$O(^DPT("SSN",SSN,"")) | 
|---|
| 32 | S:PATDFN<1 ERR=LKUPERR | 
|---|
| 33 | ;S SNIFN=$O(^DIC(4,"D",STATION,"")) | 
|---|
| 34 | S SNIFN=STATION | 
|---|
| 35 | S:SNIFN<1 ERR=LKUPERR | 
|---|
| 36 | ; | 
|---|
| 37 | ; If the IFN's are good then see if there is an entry in the FFX file. | 
|---|
| 38 | ; First lock the file.  Return LOCKERR if we can't. | 
|---|
| 39 | ; | 
|---|
| 40 | L +(^PPP(1020.2)):5 | 
|---|
| 41 | S:'$T ERR=LOCKERR | 
|---|
| 42 | ; | 
|---|
| 43 | I 'ERR D | 
|---|
| 44 | .S FFXIFN=$O(^PPP(1020.2,"APOV",PATDFN,SNIFN,"")) | 
|---|
| 45 | .; | 
|---|
| 46 | .; If the entry isn't there then create a new one | 
|---|
| 47 | .; | 
|---|
| 48 | .I FFXIFN'>0 D | 
|---|
| 49 | ..S X=PATDFN | 
|---|
| 50 | ..; | 
|---|
| 51 | ..; Get the header node of the file | 
|---|
| 52 | ..; | 
|---|
| 53 | ..S HDRNODE=$G(^PPP(1020.2,0)) | 
|---|
| 54 | ..; | 
|---|
| 55 | ..; Get the last record and total records values. Quit if NULL | 
|---|
| 56 | ..; | 
|---|
| 57 | ..S (FFXIFN,DA)=+$P(HDRNODE,U,3)+1 | 
|---|
| 58 | ..S TRECS=+$P(HDRNODE,U,3) | 
|---|
| 59 | ..I +$P(HDRNODE,U,3)="" S ERR=FMERR Q | 
|---|
| 60 | ..; | 
|---|
| 61 | ..; Add the new record | 
|---|
| 62 | ..; | 
|---|
| 63 | ..S NEWREC=X | 
|---|
| 64 | ..S $P(NEWREC,U,2)=SNIFN | 
|---|
| 65 | ..S $P(NEWREC,U,4)=0 | 
|---|
| 66 | ..S ^PPP(1020.2,FFXIFN,0)=NEWREC | 
|---|
| 67 | ..; | 
|---|
| 68 | ..; Create the necessary indexes | 
|---|
| 69 | ..; | 
|---|
| 70 | ..S ^PPP(1020.2,"B",$E(X,1,30),FFXIFN)="" | 
|---|
| 71 | ..S X=SNIFN D SDFNPOV^PPPFMX | 
|---|
| 72 | ..; | 
|---|
| 73 | ..; Update the header node | 
|---|
| 74 | ..; | 
|---|
| 75 | ..S $P(HDRNODE,U,3)=FFXIFN | 
|---|
| 76 | ..S $P(HDRNODE,U,4)=TRECS+1 | 
|---|
| 77 | ..S ^PPP(1020.2,0)=HDRNODE | 
|---|
| 78 | .L -^PPP(1020.2) | 
|---|
| 79 | ; | 
|---|
| 80 | ; Return the IFN or ERR | 
|---|
| 81 | ; | 
|---|
| 82 | Q:ERR ERR | 
|---|
| 83 | Q FFXIFN | 
|---|