source: ccr/trunk/p/CCRUTIL.m@ 217

Last change on this file since 217 was 217, checked in by George Lilly, 16 years ago

routine to look up SNOMED codes for drug allergies in the lexicon

File size: 3.9 KB
Line 
1CCRUTIL ;CCRCCD/SMH - Various Utilites for generating the CCR/CCD;06/15/08
2 ;;0.1;CCRCCD;;Jun 15, 2008;
3 ;Copyright 2008 WorldVistA. Licensed under the terms of the GNU
4 ;General Public License See attached copy of the License.
5 ;
6 ;This program is free software; you can redistribute it and/or modify
7 ;it under the terms of the GNU General Public License as published by
8 ;the Free Software Foundation; either version 2 of the License, or
9 ;(at your option) any later version.
10 ;
11 ;This program is distributed in the hope that it will be useful,
12 ;but WITHOUT ANY WARRANTY; without even the implied warranty of
13 ;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 ;GNU General Public License for more details.
15 ;
16 ;You should have received a copy of the GNU General Public License along
17 ;with this program; if not, write to the Free Software Foundation, Inc.,
18 ;51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19 ;
20 W "No Entry at Top!"
21 Q
22 ;
23FMDTOUTC(DATE,FORMAT) ; Convert Fileman Date to UTC Date Format; PUBLIC; Extrinsic
24 ; FORMAT is Format of Date. Can be either D (Day) or DT (Date and Time)
25 ; If not passed, or passed incorrectly, it's assumed that it is D.
26 ; FM Date format is "YYYMMDD.HHMMSS" HHMMSS may not be supplied.
27 ; UTC date is formatted as follows: YYYY-MM-DDThh:mm:ss_offsetfromUTC
28 ; UTC, Year, Month, Day, Hours, Minutes, Seconds, Time offset (obtained from Mailman Site Parameters)
29 N UTC,Y,M,D,H,MM,S,OFF
30 S Y=1700+$E(DATE,1,3)
31 S M=$E(DATE,4,5)
32 S D=$E(DATE,6,7)
33 S H=$E(DATE,9,10)
34 I $L(H)=1 S H="0"_H
35 S MM=$E(DATE,11,12)
36 I $L(MM)=1 S MM="0"_MM
37 S S=$E(DATE,13,14)
38 I $L(S)=1 S S="0"_S
39 S OFF=$$TZ^XLFDT ; See Kernel Manual for documentation.
40 ; If H, MM and S are empty, it means that the FM date didn't supply the time.
41 ; In this case, set H, MM and S to "00"
42 ; S:('$L(H)&'$L(MM)&'$L(S)) (H,MM,S)="00" ; IF ONLY SOME ARE MISSING?
43 S:'$L(H) H="00"
44 S:'$L(MM) MM="00"
45 S:'$L(S) S="00"
46 S UTC=Y_"-"_M_"-"_D_"T"_H_":"_MM_$S(S="":":00",1:":"_S)_OFF ; Skip's code to fix hanging colon if no seconds
47 I $L($G(FORMAT)),FORMAT="DT" Q UTC ; Date with time.
48 E Q $P(UTC,"T")
49 ;
50SORTDT(V1,V2,ORDR) ; DATE SORT ARRAY AND RETURN INDEX IN V1 AND COUNT
51 ; AS EXTRINSIC ORDR IS 1 OR -1 FOR FORWARD OR REVERSE
52 ; DATE AND TIME ORDER. DEFAULT IS FORWARD
53 ; V2 IS AN ARRAY OF DATES IN FILEMAN FORMAT
54 ; V1 IS RETURNS INDIRECT INDEXES OF V2 IN REVERSE DATE ORDER
55 ; SO V2(V1(X)) WILL RETURN THE DATES IN DATE/TIME ORDER
56 ; THE COUNT OF THE DATES IS RETURNED AS AN EXTRINSIC
57 ; BOTH V1 AND V2 ARE PASSED BY REFERENCE
58 N VSRT ; TEMP FOR HASHING DATES
59 N ZI,ZJ,ZTMP,ZCNT,ZP1,ZP2
60 S ZCNT=V2(0) ; COUNTING NUMBER OF DATES
61 F ZI=1:1:ZCNT D ; FOR EACH DATE IN THE ARRAY
62 . I $D(V2(ZI)) D ; IF THE DATE EXISTS
63 . . S ZP1=$P(V2(ZI),".",1) ; THE DATE PIECE
64 . . S ZP2=$P(V2(ZI),".",2) ; THE TIME PIECE
65 . . ; W "DATE: ",ZP1," TIME: ",ZP2,!
66 . . S VSRT(ZP1,ZP2,ZI)=ZI ; INDEX OF DATE, TIME AND COUNT
67 N ZG
68 S ZG=$Q(VSRT(""))
69 F D Q:ZG="" ;
70 . ; W ZG,!
71 . D PUSH^GPLXPATH("V1",@ZG)
72 . S ZG=$Q(@ZG)
73 I ORDR=-1 D ; HAVE TO REVERSE ORDER
74 . N ZG2
75 . F ZI=1:1:V1(0) D ; FOR EACH ELELMENT
76 . . S ZG2(V1(0)-ZI+1)=V1(ZI) ; SET IN REVERSE ORDER
77 . S ZG2(0)=V1(0)
78 . D CP^GPLXPATH("ZG2","V1") ; COPY OVER THE NEW ARRAY
79 Q ZCNT
80 ;
81DA2SNO(RTN,DNAME) ; LOOK UP DRUG ALLERGY CODE IN ^LEX
82 ; RETURNS AN ARRAY RTN PASSED BY REFERENCE
83 ; THIS ROUTINE CAN BE USED AS AN RPC
84 ; RTN(0) IS THE NUMBER OF ELEMENTS IN THE ARRAY
85 ; RTN(1) IS THE SNOMED CODE FOR THE DRUG ALLERGY
86 ;
87 N LEXIEN
88 I $O(^LEX(757.21,"ADIS",DNAME))'="" D ; IEN FOUND FOR THIS DRUG
89 . S LEXIEN=$O(^LEX(757.21,"ADIS",DNAME)) ; GET THE IEN IN THE LEXICON
90 . S RTN(1)=$P(^LEX(757.02,LEXIEN,0),"^",2) ; SNOMED CODE IN P2
91 . S RTN(0)=1 ; ONE THING RETURNED
92 E S RTN(0)=0 ; NOT FOUND
93 Q
94 ;
95DASNO(DANAME) ; PRINTS THE SNOMED CODE FOR ALLERGY TO DRUG DANAME
96 ;
97 N DARTN
98 D DA2SNO(.DARTN,DANAME) ; CALL THE LOOKUP ROUTINE
99 I DARTN(0)>0 D ; GOT RESULTS
100 . W !,RTN(1) ;PRINT THE SNOMED CODE
101 E W !,"NOT FOUND",!
102 Q
103 ;
Note: See TracBrowser for help on using the repository browser.