1 | HLSUB ;IRMFO-SF/JC - Subscription Registry ;03/24/2004 14:43
|
---|
2 | ;;1.6;HEALTH LEVEL SEVEN;**14,57,58,59,66,83,108**;Oct 13, 1995
|
---|
3 | ; DBIA #2270 Supported APIs:
|
---|
4 | ; $$ACT - Function to return new subscription control number
|
---|
5 | ; GET - Get information about a subscriber.
|
---|
6 | ; UPD - Add a new subscription or update an existing one
|
---|
7 | ACT() ;Activate a new subscription
|
---|
8 | ;Returns new file 774 ien (Subscription Control number)
|
---|
9 | ;Returns -1 if error
|
---|
10 | N X,DLAYGO,DIC,DA,DR
|
---|
11 | Q:'$$LOCK774(0) -1
|
---|
12 | S DLAYGO=774,X=$O(^HLS(774,"B"),-1),X=X+1,DIC=774,DIC(0)="L" D ^DIC
|
---|
13 | L -^HLS(774,0)
|
---|
14 | Q +Y
|
---|
15 | LOCK774(IEN) ;
|
---|
16 | N I
|
---|
17 | S I=0
|
---|
18 | TRY L +^HLS(774,IEN):1 I '$T S I=I+1 Q:I>600 0 G TRY
|
---|
19 | Q 1
|
---|
20 | UPD(HLSCN,HLNN,HLTP,HLAD,HLTD,HLRAP,HLER,HLAPP,HLDESC) ;Subscription update
|
---|
21 | ;HLSCN - Subscription Control number (IEN in file 774), required
|
---|
22 | ;HLNN - Network node (Logical Link IEN or name in file 870), required
|
---|
23 | ;HLTP - Subscription type
|
---|
24 | ; 0 descriptive updates only (default)
|
---|
25 | ; 1 activates clinical updates
|
---|
26 | ; 2 other (locally defined)
|
---|
27 | ;HLTD - Termination date/time (external format), optional.
|
---|
28 | ; If date is supplied, but time isn't, default time is 1 minute
|
---|
29 | ; past midnight.
|
---|
30 | ; For a new subscription,
|
---|
31 | ; - if HLTD is null or not supplied, it means it's open-ended.
|
---|
32 | ; (default)
|
---|
33 | ; For an existing subscription,
|
---|
34 | ; - if HLTD is null or not supplied, no change is made to
|
---|
35 | ; existing TD. (default)
|
---|
36 | ; - the existing TD is deleted if
|
---|
37 | ; 1. HLTD="@" or
|
---|
38 | ; 2. HLTD='""' This is NOT the null string! It is 2 double
|
---|
39 | ; quotes. The variable HL("Q")="""""" is 2 double quotes.
|
---|
40 | ;HLAD - Activation date AND time (external format), optional,
|
---|
41 | ; default 'now'
|
---|
42 | ;HLRAP - Receiving Application (IEN or name in file 771), optional
|
---|
43 | ;HLER - (output) Error message array passed by reference
|
---|
44 | ;HLAPP - Optional, application that created the subscription record.
|
---|
45 | ; 1-40 characters. Excess is truncated.
|
---|
46 | ;HLDESC - Optional, description/documentation, ie, file and record that
|
---|
47 | ; points to this subscription. 1-75 characters. Excess is
|
---|
48 | ; truncated.
|
---|
49 | ;Modification of existing entry triggers archive of previous record.
|
---|
50 | D CHKPARM Q:$D(HLER)
|
---|
51 | Q:'$$LOCK774(HLSCN)
|
---|
52 | D ADDUP
|
---|
53 | L -^HLS(774,HLSCN)
|
---|
54 | Q
|
---|
55 | ADDUP ;Lookup and add subscriber (logical link)
|
---|
56 | N HLCD,DIC,DIE,DA,DR,X,Y,HLINKIEN,HLINK0
|
---|
57 | I $G(HLAPP)]"" S $P(^HLS(774,HLSCN,0),U,2)=$E(HLAPP,1,40)
|
---|
58 | I $G(HLDESC)]"" S ^HLS(774,HLSCN,1)=$E(HLDESC,1,75)
|
---|
59 | S HLCD=$$FMTE^XLFDT($$NOW^XLFDT) ;Creation date
|
---|
60 | I $G(HLAD)="" S HLAD=HLCD ;Activation date
|
---|
61 | S DLAYGO=774
|
---|
62 | S DA(1)=HLSCN,DIC="^HLS(774,DA(1),""TO"",",DIC("P")=$P(^DD(774,1,0),U,2)
|
---|
63 | S X=$G(HLRAP)_"@"_HLNN
|
---|
64 | S DIC(0)="LMZ" D ^DIC Q:Y<1
|
---|
65 | S HLINKIEN=+Y,HLINK0=Y(0)
|
---|
66 | K DIC,DIE,DA,DR,X,Y
|
---|
67 | ;If Updating existing record-archive old record
|
---|
68 | I $P(HLINK0,U,2)]"" D ARCHIVE(HLSCN,HLINKIEN,HLINK0)
|
---|
69 | ;bring in update
|
---|
70 | S DA(1)=HLSCN,DA=HLINKIEN,DIE="^HLS(774,DA(1),"_"""TO"""_","
|
---|
71 | S DR="3///^S X=HLNN;4///^S X=HLTP;5///^S X=HLCD;6///^S X=HLAD"
|
---|
72 | I $G(HLRAP)]"" S DR=DR_";1///^S X=HLRAP"
|
---|
73 | I $G(HLTD)=$G(HL("Q"),"""""")!($G(HLTD)="@") D
|
---|
74 | . I $P(HLINK0,U,8)]"" S DR=DR_";7///@" ; remove termination date
|
---|
75 | E I $G(HLTD)]"" D
|
---|
76 | . S DR=DR_";7///"_HLTD_$S(HLTD["@":"",1:"@0001") ; change it
|
---|
77 | D ^DIE
|
---|
78 | Q
|
---|
79 | CHKPARM ;
|
---|
80 | K HLER
|
---|
81 | I $G(HLSCN)="" S HLER(1)="Missing subscription control number."
|
---|
82 | I $G(HLNN)="" S HLER(2)="Missing logical link."
|
---|
83 | Q:$D(HLER)
|
---|
84 | S HLTP=+$G(HLTP)
|
---|
85 | I '$D(^HLS(774,HLSCN)) S HLER(4)="Invalid Subscription Control number"
|
---|
86 | I HLNN?1N.N S HLNN=$P($G(^HLCS(870,HLNN,0)),U) I HLNN="" S HLER(5)="Invalid Logical Link" Q
|
---|
87 | I '$O(^HLCS(870,"B",HLNN,0)) S HLER(5)="Invalid logical link" Q
|
---|
88 | I $G(HLRAP)?1N.N S HLRAP=$P($G(^HL(771,HLRAP,0)),U) I $G(HLRAP)="" S HLER(6)="Invalid receiving application." Q
|
---|
89 | ;
|
---|
90 | ; patch HL*1.6*108 start
|
---|
91 | ;I $G(HLRAP)]"",'$O(^HL(771,"B",HLRAP,0)) S HLER(6)="Invalid receiving application."
|
---|
92 | I $G(HLRAP)]"",'$O(^HL(771,"B",$E(HLRAP,1,30),0)) S HLER(6)="Invalid receiving application."
|
---|
93 | ; patch HL*1.6*108 end
|
---|
94 | ;
|
---|
95 | Q
|
---|
96 | ARCHIVE(HLSCN,HLINKIEN,HLINK0) ;
|
---|
97 | N DLAYGO,DIC,DIE,DA,DR,X,Y,CD,AD,TD
|
---|
98 | S CD=$P(HLINK0,U,6),AD=$P(HLINK0,U,7),TD=$P(HLINK0,U,8)
|
---|
99 | S CD=$$FMTE^XLFDT(CD),AD=$$FMTE^XLFDT(AD) I TD]"" S TD=$$FMTE^XLFDT(TD)
|
---|
100 | S DA(2)=HLSCN,DA(1)=HLINKIEN,X=$$FMTE^XLFDT($$NOW^XLFDT)
|
---|
101 | S DIC="^HLS(774,DA(2),""TO"",DA(1),""HX"","
|
---|
102 | S DIC("DR")="1///^S X=CD;2///^S X=AD;4///^S X=$P(HLINK0,U,5)"
|
---|
103 | I TD]"" S DIC("DR")=DIC("DR")_";3///^S X=TD"
|
---|
104 | S DLAYGO=774,DIC(0)="L",DIC("P")=$P(^DD(774.01,8,0),U,2)
|
---|
105 | D ^DIC
|
---|
106 | Q
|
---|
107 | GET(HLSCN,HLTP,HLCL,HLL) ;Return active subscribers
|
---|
108 | ;Called by a HL7 ROUTING protocol to return array of subscribers
|
---|
109 | ;Make separate call for each 'type' specified EXCEPT TYPE 0
|
---|
110 | ;type 0 returns both '0' and '1' subscribers
|
---|
111 | ;HLSCN=SUBSCRIPTION CONTROL NUMBER
|
---|
112 | ;HLTP=SUBSCRIBER TYPE (0,1,2)/Null=all
|
---|
113 | ;HLCL=HL7 CLIENT PROTOCOL
|
---|
114 | ;HLL=HLL("LINKS",x)=CLIENT PROTOCOL^LOGICAL LINK (passed by reference)
|
---|
115 | ;If the client protocol is not passed in, piece three will be checked
|
---|
116 | ;for a complete destination reference. The destination is of the format
|
---|
117 | ;RECEIVING APPLICATION@LOGICAL LINK. When a valid destination is present
|
---|
118 | ;it will be used for populating the message header and routing.
|
---|
119 | ;The HLL("LINKS") array is required by the HL7 package for routing.
|
---|
120 | N I,J,HLINK,HLND,HLDT,HLINKP,HLINKX,DIC,X,Y
|
---|
121 | Q:'$G(HLSCN)
|
---|
122 | Q:'$G(^HLS(774,HLSCN,0))
|
---|
123 | S HLCL=$G(HLCL)
|
---|
124 | I HLCL]"" S DIC=101,DIC(0)="X",X=HLCL D ^DIC Q:+Y<1
|
---|
125 | S X="",HLTP=$G(HLTP)
|
---|
126 | I $D(HLL("LINKS")) S X=$O(HLL("LINKS",X),-1)
|
---|
127 | S HLDT=$$NOW^XLFDT
|
---|
128 | S I=0
|
---|
129 | F S I=$O(^HLS(774,HLSCN,"TO",I)) Q:'I S J=$G(^(I,0)) D
|
---|
130 | . I HLTP'="",HLTP'=0 Q:$P(J,U,5)'=HLTP ;type specified
|
---|
131 | . I HLTP=0 Q:$P(J,U,5)>1 ;return clinical and descriptive
|
---|
132 | . Q:$P(J,U,7)>HLDT ;Activation date is later
|
---|
133 | . I $P(J,U,8)]"" Q:$P(J,U,8)<HLDT ;Subscription terminated
|
---|
134 | . S (HLINKX,HLINKP)=$P(J,U,4)
|
---|
135 | . I HLINKP S HLINKX=$P(^HLCS(870,HLINKP,0),U)
|
---|
136 | . S X=X+1,HLL("LINKS",X)=HLCL_U_HLINKX_U_J
|
---|
137 | Q
|
---|