1 | VAQUIN01 ;ALB/JFP - REQUEST PDX RECORD - (API);3JUL91
|
---|
2 | ;;1.5;PATIENT DATA EXCHANGE;**43**;NOV 17, 1993
|
---|
3 | ; Programmer entry point for sending PDX requests.
|
---|
4 | ;
|
---|
5 | ; This API can be used for both request and unsolicited.
|
---|
6 | ; It also utilizes time and occurrence limits for Health Summary
|
---|
7 | ; which are pieces on the segment root array. These pieces need
|
---|
8 | ; to be set by the developer. If these are not included the defaults
|
---|
9 | ; in the sites PDX parameter file will be used.
|
---|
10 | ;
|
---|
11 | PDX(VAQOPT,VAQDFN,VAQNM,VAQISSN,VAQIDOB,DOMROOT,SEGROOT,NOTROOT) ; EP
|
---|
12 | ;Input: VAQOPT - REQ = request, UNS = unsolicited
|
---|
13 | ; VAQDFN - IFN of patient in patient file
|
---|
14 | ; VAQNM - name of patient
|
---|
15 | ; VAQISSN - patient social security number (no dashes)
|
---|
16 | ; VAQIDOB - patients date of birth (external format)
|
---|
17 | ; DOMROOT - array of domains (full global reference)
|
---|
18 | ; (ie: PXB.ISC-ALBANY.VA.GOV)=Institution name or null
|
---|
19 | ; SEGROOT - array of segments (full global reference)
|
---|
20 | ; (ie: PDX*MIN)=P1^P2
|
---|
21 | ; P1 = TIME LIMIT
|
---|
22 | ; P2 = OCCURRENCE LIMIT
|
---|
23 | ; NOTROOT - array of who to notify (only used for request)
|
---|
24 | ; TLIMIT - time limit for health summary (ie: 1D,12M,5Y)
|
---|
25 | ; OLIMIT - occurrence limit for health summary, up to 5 digits
|
---|
26 | ;
|
---|
27 | ;Output: 0 - ok
|
---|
28 | ; -1^error text
|
---|
29 | ; -- Initialize
|
---|
30 | N POP,ERR,VAQ0,Y,XMITARR,X,VAQDOM,VAQPID,VAQRQDT,PARMNODE,FACDA,DOMDA
|
---|
31 | N VAQRQSIT,VAQRQADD,VAQDZ,VAQDZN,VAQPR,DA,DR,VAQDT,SEG
|
---|
32 | N VAQAUSIT,VAQNOTI
|
---|
33 | N OLDEF,TLDEF,TLMT,OLMT
|
---|
34 | ; -- CHECK INPUT PARAMETERS
|
---|
35 | S POP=0
|
---|
36 | Q:('$D(VAQOPT)) "-1^option required"
|
---|
37 | I (VAQOPT'="REQ")&(VAQOPT'="UNS") Q "-1^option required"
|
---|
38 | Q:('$D(DOMROOT)) "-1^reference to domain required for processing"
|
---|
39 | Q:($O(@DOMROOT@(""))="") "-1^domain data required for processing"
|
---|
40 | Q:('$D(SEGROOT)) "-1^reference to segment required for processing"
|
---|
41 | Q:($O(@SEGROOT@("")))="" "-1^segment data required for processing"
|
---|
42 | ;
|
---|
43 | S:'$D(VAQDFN) VAQDFN=""
|
---|
44 | I VAQDFN="" D Q:POP=1 ERR
|
---|
45 | .I '$D(VAQNM) S POP=1,ERR="-1^Name is required if DFN is null" QUIT
|
---|
46 | .I '$D(VAQISSN) S POP=1,ERR="-1^SSN is required if DFN is null" QUIT
|
---|
47 | .I '$D(VAQNM)&'$D(VAQISSN) S POP=1,ERR="-1^name and SSN is required if DFN=null" QUIT
|
---|
48 | .I (VAQNM="")&(VAQISSN="") S POP=1,ERR="-1^name and SSN is required if DFN=null" QUIT
|
---|
49 | .S:'$D(VAQIDOB) VAQIDOB=""
|
---|
50 | I VAQDFN'="" D Q:POP=1 ERR
|
---|
51 | .I VAQDFN<1 S POP=1,ERR="-1^DFN can not be less than 1" QUIT
|
---|
52 | .I '$D(^DPT(VAQDFN)) S POP=1,ERR="-1^DFN is not in data base" QUIT
|
---|
53 | .S VAQ0=$G(^DPT(VAQDFN,0))
|
---|
54 | .S VAQNM=$P(VAQ0,U,1)
|
---|
55 | .S (VAQISSN)=$P(VAQ0,U,9)
|
---|
56 | .S (Y,VAQIDOB)=$P(VAQ0,U,3) X ^DD("DD") S VAQIDOB=Y
|
---|
57 | I (VAQNM="")&(VAQISSN="") Q "-1^name or SSN is required"
|
---|
58 | ;
|
---|
59 | S XMITARR="^TMP(""TRANARR"","_$J_")"
|
---|
60 | K @XMITARR
|
---|
61 | D PRELOAD^VAQREQ06
|
---|
62 | S VAQDOM=""
|
---|
63 | F S VAQDOM=$O(@DOMROOT@(VAQDOM)) Q:VAQDOM="" D XMIT
|
---|
64 | S X=$$GENTASK^VAQADM5(XMITARR)
|
---|
65 | I +X=-1 S ERR="-1^"_$P(X,U,2) Q ERR
|
---|
66 | K @XMITARR
|
---|
67 | QUIT 0
|
---|
68 | ;
|
---|
69 | XMIT ; -- Make an entry in the 'PDX TRANSACTION' FILE
|
---|
70 | S X="+" ; -- auto number
|
---|
71 | S DIC="^VAT(394.61,",DIC(0)="L",DLAYGO=394.61
|
---|
72 | D ^DIC K DIC,X,DLAYGO
|
---|
73 | Q:Y<0
|
---|
74 | S (VAQPR,DA)=+Y,VAQDT=$P(Y,U,2)
|
---|
75 | ; -- FILL IN REST OF FIELDS OF 'TRANSACTION' FILE
|
---|
76 | I VAQOPT="REQ" D LDREQ^VAQREQ06
|
---|
77 | I VAQOPT="UNS" D LDUNS^VAQREQ06
|
---|
78 | I $D(@SEGROOT) D MSEG
|
---|
79 | I (VAQOPT="REQ")&($D(NOTIROOT)) D:$D(@NOTROOT) MNOTI
|
---|
80 | S @XMITARR@(VAQPR)="" ; -- Load an array of newly entered transactions
|
---|
81 | ; -- Update workload file
|
---|
82 | S X=$$WORKDONE^VAQADS01($S(VAQOPT="REQ":"RQST",VAQOPT="UNS":"SEND",1:""),VAQPR,$G(DUZ))
|
---|
83 | QUIT
|
---|
84 | ;
|
---|
85 | MSEG ; -- Loads the data segment multiple
|
---|
86 | S PARAMND=$G(^VAT(394.81,1,"LIMITS")) ; -- Sets defaults from PDX param
|
---|
87 | S TLDEF=$P(PARAMND,U,1)
|
---|
88 | S OLDEF=$P(PARAMND,U,2)
|
---|
89 | ;
|
---|
90 | S DIE="^VAT(394.61,",SEG=""
|
---|
91 | F S SEG=$O(@SEGROOT@(SEG)) Q:SEG="" D
|
---|
92 | .S HSCOMPND=$$HLTHSEG^VAQDBIH1(SEG,0)
|
---|
93 | .I $P(HSCOMPND,U,1)=0 S (TLMT,OLMT)="" ; -- Not health summary segment
|
---|
94 | .I $P(HSCOMPND,U,1)'=0 D
|
---|
95 | ..S SEGND=$G(@SEGROOT@(SEG))
|
---|
96 | ..S TLMT=$P(SEGND,U,1),OLMT=$P(SEGND,U,2)
|
---|
97 | ..I (TLMT="")&($P(HSCOMPND,U,2)=1) S TLMT=TLDEF
|
---|
98 | ..I (OLMT="")&($P(HSCOMPND,U,3)=1) S OLMT=OLDEF
|
---|
99 | ..I $P(HSCOMPND,U,2)=0 S TLMT=""
|
---|
100 | ..I $P(HSCOMPND,U,3)=0 S OLMT=""
|
---|
101 | .S DR(2,394.618)=".02///"_TLMT_";.03///"_OLMT
|
---|
102 | .S DR="80///"_SEG
|
---|
103 | .D ^DIE
|
---|
104 | K DIE,DR,DLAYGO
|
---|
105 | QUIT
|
---|
106 | ;
|
---|
107 | MNOTI ; -- Loads the notify muliple
|
---|
108 | S DIE="^VAT(394.61,",DLAYGO=394.61,NOTI=""
|
---|
109 | F S NOTI=$O(@NOTROOT@(NOTI)) Q:NOTI="" D
|
---|
110 | .S DR="71///"_NOTI
|
---|
111 | .D ^DIE
|
---|
112 | K DIE,DR,DLAYGO
|
---|
113 | QUIT
|
---|
114 | ;
|
---|