| [613] | 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 |  ;
 | 
|---|