1 | DGENSEC ;ALB/KCL/CKN - Patient Security API's ; 5/11/05 12:02pm
|
---|
2 | ;;5.3;Registration;**222,653**;Aug 13,1993;Build 2
|
---|
3 | ;
|
---|
4 | ;
|
---|
5 | LOCK(DFN) ;
|
---|
6 | ; Description: Used to lock the DG SECURITY LOG record for a patient
|
---|
7 | ;
|
---|
8 | ; Input:
|
---|
9 | ; DFN - internal entry number of record in the DG SECURITY LOG file
|
---|
10 | ;
|
---|
11 | ; Output:
|
---|
12 | ; Function Value: Returns 1 if the DG SECURITY LOG record can be
|
---|
13 | ; locked, otherwise returns 0 on failure
|
---|
14 | ;
|
---|
15 | I $G(DFN) L +^DGSL(38.1,DFN,0):2
|
---|
16 | Q $T
|
---|
17 | ;
|
---|
18 | ;
|
---|
19 | UNLOCK(DFN) ;
|
---|
20 | ; Description: Used to unlock the DG SECURITY LOG record for a patient
|
---|
21 | ;
|
---|
22 | ; Input:
|
---|
23 | ; DFN - internal entry number of record in the DG SECURITY LOG file
|
---|
24 | ;
|
---|
25 | ; Output:
|
---|
26 | ; None
|
---|
27 | ;
|
---|
28 | I $G(DFN) L -^DGSL(38.1,DFN,0)
|
---|
29 | Q
|
---|
30 | ;
|
---|
31 | ;
|
---|
32 | FINDSEC(DFN) ;
|
---|
33 | ; Description: Used to find a record in the DG SECURITY LOG file
|
---|
34 | ;
|
---|
35 | ; Input:
|
---|
36 | ; DFN - Patient IEN
|
---|
37 | ;
|
---|
38 | ; Output:
|
---|
39 | ; Function Value: If successful, returns internal entry number of
|
---|
40 | ; DG SECURITY LOG file, otherwise returns 0 on failure
|
---|
41 | ;
|
---|
42 | Q:'$G(DFN)="" 0
|
---|
43 | Q +$O(^DGSL(38.1,"B",DFN,0))
|
---|
44 | ;
|
---|
45 | ;
|
---|
46 | GET(SECIEN,DGSEC) ;
|
---|
47 | ; Description: Used to obtain a record in the DG SECURITY LOG file. The values will be returned in the DGSEC() array.
|
---|
48 | ;
|
---|
49 | ; Input:
|
---|
50 | ; SECIEN - internal entry number of record in the DG SECURITY LOG file
|
---|
51 | ;
|
---|
52 | ; Output:
|
---|
53 | ; DGSEC - the patient security array, passed by reference
|
---|
54 | ; subscripts are:
|
---|
55 | ; "DFN" Patient
|
---|
56 | ; "LEVEL" Security Level
|
---|
57 | ; "USER" Security Assigned By
|
---|
58 | ; "DATETIME" Date/Time Security Assigned
|
---|
59 | ; "SOURCE" Secuity Source
|
---|
60 | ;
|
---|
61 | N SUB,NODE0
|
---|
62 | K DGSEC S DGSEC=""
|
---|
63 | ;
|
---|
64 | I '$G(SECIEN) D Q 0
|
---|
65 | .F SUB="DFN","LEVEL","USER","DATETIME","SOURCE" S DGSEC(SUB)=""
|
---|
66 | ;
|
---|
67 | S NODE0=$G(^DGSL(38.1,SECIEN,0))
|
---|
68 | S DGSEC("DFN")=$P(NODE0,"^")
|
---|
69 | S DGSEC("LEVEL")=$P(NODE0,"^",2)
|
---|
70 | S DGSEC("USER")=$P(NODE0,"^",3)
|
---|
71 | S DGSEC("DATETIME")=$P(NODE0,"^",4)
|
---|
72 | S DGSEC("SOURCE")=$P(NODE0,"^",5)
|
---|
73 | Q 1
|
---|
74 | ;
|
---|
75 | ;
|
---|
76 | STORE(DGSEC,ERROR) ;
|
---|
77 | ; Description: Creates a new entry in the DG SECURITY LOG file.
|
---|
78 | ;
|
---|
79 | ; Input:
|
---|
80 | ; DGSEC - as array containing the DG SECURITY LOG record,
|
---|
81 | ; passed by reference
|
---|
82 | ;
|
---|
83 | ; Output:
|
---|
84 | ; Function Value: Returns internal entry number of the entry created,
|
---|
85 | ; otherwise 0 is returned
|
---|
86 | ; ERROR - (optional) if not successful, an error msg is
|
---|
87 | ; returned, pass by reference
|
---|
88 | ;
|
---|
89 | N DA,DD,DIC,DIE,DLAYGO,DO,DR,X,Y
|
---|
90 | S DIC(0)="L",(X,DINUM)=DGSEC("DFN"),DIC="^DGSL(38.1,",DLAYGO=38.1
|
---|
91 | D FILE^DICN
|
---|
92 | I Y=-1 S ERROR="FILEMAN UNABLE TO CREATE DG SECURITY LOG RECORD" Q 0
|
---|
93 | S DA=+Y
|
---|
94 | ;
|
---|
95 | I 'DA S ERROR="FILEMAN UNABLE TO CREATE DG SECURITY LOG RECORD" Q 0
|
---|
96 | ;
|
---|
97 | ; edit/update the new record
|
---|
98 | I '$$UPDATE(DA,.DGSEC,.ERROR) S ERROR="FILEMAN UNABLE TO CREATE DG SECURITY LOG RECORD" Q 0
|
---|
99 | ;
|
---|
100 | ; quit with ien
|
---|
101 | Q DA
|
---|
102 | ;
|
---|
103 | ;
|
---|
104 | UPDATE(DFN,DGSEC,ERROR) ;
|
---|
105 | ; Description: Updates a DG SECURITY LOG record for a patient. This
|
---|
106 | ; function locks the DG SECURITY LOG record and releases the lock
|
---|
107 | ; when the update is complete.
|
---|
108 | ;
|
---|
109 | ; Input:
|
---|
110 | ; DFN - internal entry number of record in the DG SECURITY LOG file
|
---|
111 | ; DGSEC - the DG SECURITY LOG array, passed by reference
|
---|
112 | ;
|
---|
113 | ; Output:
|
---|
114 | ; Function Value - Returns 1 if successful, otherwise 0
|
---|
115 | ; ERROR - if not successful, an error message is returned,
|
---|
116 | ; pass by reference
|
---|
117 | ;
|
---|
118 | N SUCCESS,DATA
|
---|
119 | S SUCCESS=1
|
---|
120 | S ERROR=""
|
---|
121 | ;
|
---|
122 | D ; drops out if an invalid condition is found
|
---|
123 | .I $G(DFN),$D(^DGSL(38.1,DFN,0))
|
---|
124 | .E S SUCCESS=0,ERROR="DG SECURITY LOG RECORD NOT FOUND" Q
|
---|
125 | .I '$$LOCK(DFN) S SUCCESS=0,ERROR="SECURITY LOG RECORD IS LOCKED, CAN NOT BE EDITED" Q
|
---|
126 | .S DATA(2)=DGSEC("LEVEL")
|
---|
127 | .S DATA(3)=DGSEC("USER")
|
---|
128 | .S DATA(4)=DGSEC("DATETIME")
|
---|
129 | .S DATA(5)=DGSEC("SOURCE")
|
---|
130 | .I '$$UPD^DGENDBS(38.1,DFN,.DATA) S ERROR="FILEMAN UNABLE TO PERFORM UPDATE",SUCCESS=0 Q
|
---|
131 | ;
|
---|
132 | D UNLOCK(DFN)
|
---|
133 | ;
|
---|
134 | Q SUCCESS
|
---|
135 | ;
|
---|
136 | ;
|
---|
137 | CHECK(DGSEC,ERROR) ;
|
---|
138 | ; Description: Performs validation checks on DG SECURITY LOG record
|
---|
139 | ; contained in the DGSEC array.
|
---|
140 | ;
|
---|
141 | ; Input:
|
---|
142 | ; DGSEC - as the patient security array, passed by reference
|
---|
143 | ;
|
---|
144 | ; Output:
|
---|
145 | ; Function Value - Returns 1 if validation checks passed, 0 otherwise
|
---|
146 | ; ERROR - if validation checks fail, an error message is
|
---|
147 | ; returned, pass by reference
|
---|
148 | ;
|
---|
149 | N VALID,RESULT,EXTERNAL
|
---|
150 | S VALID=1,ERROR=""
|
---|
151 | ;
|
---|
152 | D ; drops out of block if an invalid condition is found
|
---|
153 | .;
|
---|
154 | .I '$G(DGSEC("DFN")) S VALID=0,ERROR="PATIENT NOT FOUND IN DATABASE" Q
|
---|
155 | .I '$D(^DPT(DGSEC("DFN"),0)) S VALID=0,ERROR="PATIENT NOT FOUND IN DATABASE" Q
|
---|
156 | .;
|
---|
157 | .; check for required fields
|
---|
158 | .I $G(DGSEC("LEVEL"))="" S VALID=0,ERROR="REQUIRED FIELD 'SECURITY LEVEL' MISSING" Q
|
---|
159 | .I $G(DGSEC("USER"))="" S VALID=0,ERROR="REQUIRED FIELD 'SECURITY ASSIGNED BY' MISSING" Q
|
---|
160 | .I $G(DGSEC("DATETIME"))="" S VALID=0,ERROR="REQUIRED FIELD 'DATE/TIME SECURITY ASSIGNED' MISSING" Q
|
---|
161 | .I $G(DGSEC("SOURCE"))="" S VALID=0,ERROR="REQUIRED FIELD 'SECURITY SOURCE' MISSING" Q
|
---|
162 | .;
|
---|
163 | .; apply consistency rules
|
---|
164 | .I DGSEC("LEVEL")'=1 S VALID=0,ERROR="'SECURITY LEVEL' OTHER THAN SENSITIVE NOT ALLOWED" Q
|
---|
165 | .;Remove consistency check for SOURCE - DG*5.3*653
|
---|
166 | .;I DGSEC("SOURCE")'="AAC" S VALID=0,ERROR="'SECURITY SOURCE' OTHER THAN AAC NOT ALLOWED" Q
|
---|
167 | .;
|
---|
168 | .; check if field values are valid
|
---|
169 | .S EXTERNAL=$$EXTERNAL^DILFD(38.1,2,"",DGSEC("LEVEL"))
|
---|
170 | .I EXTERNAL="" S VALID=0,ERROR="'SECURITY LEVEL' NOT VALID" Q
|
---|
171 | .S EXTERNAL=$$EXTERNAL^DILFD(38.1,4,"",DGSEC("DATETIME"))
|
---|
172 | .I EXTERNAL="" S VALID=0,ERROR="'DATE/TIME SECURITY ASSIGNED' NOT VALID" Q
|
---|
173 | .I ($L($G(DGSEC("SOURCE")))<1)!($L($G(DGSEC("SOURCE")))>65) S VALID=0,ERROR="'SECURITY SOURCE' NOT VALID" Q
|
---|
174 | ;
|
---|
175 | Q VALID
|
---|
176 | ;
|
---|
177 | ;
|
---|
178 | EXT(SUB,VALUE) ; Description: Given the subscript used in the PATIENT SECURITY
|
---|
179 | ; array and a field value, this function returns the external
|
---|
180 | ; representation of the value, as defined in the fields output
|
---|
181 | ; transform of the DG SECURITY LOG file.
|
---|
182 | ;
|
---|
183 | ; Input:
|
---|
184 | ; SUB - array subscript defined for the PATIENT SECURITY object
|
---|
185 | ; VALUE - field value
|
---|
186 | ;
|
---|
187 | ; Output:
|
---|
188 | ; Function Value - Returns the external value of the field
|
---|
189 | ;
|
---|
190 | Q:(('$G(SUB)="")!($G(VALUE)="")) ""
|
---|
191 | ;
|
---|
192 | N FIELD
|
---|
193 | S FIELD=$S(SUB="DFN":.01,SUB="LEVEL":2,SUB="USER":3,SUB="DATETIME":4,SUB="SOURCE":5,1:"")
|
---|
194 | ;
|
---|
195 | Q:(FIELD="") ""
|
---|
196 | ;
|
---|
197 | Q $$EXTERNAL^DILFD(38.1,FIELD,"F",VALUE)
|
---|