| 1 | SPNHL1 ;WDE/SAN-DIEGO;Build the hl7 segment for file 154
 | 
|---|
| 2 |  ;;2.0;Spinal Cord Dysfunction;**10,12,15,24**;01/02/97
 | 
|---|
| 3 |  ;this routine is called from spnhl7 spnhl7 is called from the
 | 
|---|
| 4 |  ;edit rtn for file 154
 | 
|---|
| 5 | EN(SPNFDFN) ;
 | 
|---|
| 6 |  K OBXCNT,SPNOBR,SPLINE,DATA,X,Y,SPNDD,SPNDT,SPNTMP
 | 
|---|
| 7 |  ;collect the registration data from 154
 | 
|---|
| 8 |  S SPNOBR=1,OBXCNT=1
 | 
|---|
| 9 |  S OBXCNT=1
 | 
|---|
| 10 |  S SPLINE="",SPLINE=$O(SPMSG(SPLINE),-1)+1
 | 
|---|
| 11 |  S SPMSG(SPLINE)="OBR|"_SPNOBR_"|||Registration OBR"
 | 
|---|
| 12 |  ;set up the obr with the date of registration
 | 
|---|
| 13 |  S X=$$GET1^DIQ(154,SPNFDFN_",",.02,"I"),X=$$HLDATE^HLFNC(X,"TS")
 | 
|---|
| 14 |  S $P(SPMSG(SPLINE),"|",8)=X S SPLINE=SPLINE+1
 | 
|---|
| 15 |  S SPNDD=$G(^DD(154,.02,0)),SPNDD=$P(SPNDD,U,1)
 | 
|---|
| 16 |  ;loop through the fields and set up the message
 | 
|---|
| 17 |  ;this section will set up all data type of date (ts)
 | 
|---|
| 18 |  F X=.02,.05,8.8,10.2 D
 | 
|---|
| 19 |  . S SPNDD=$G(^DD(154,X,0)),SPNDD=$P(SPNDD,U,1) S:SPNDD="" SPNDD="ERROR"
 | 
|---|
| 20 |  . S SPDATA=$$GET1^DIQ(154,SPNFDFN_",",X,"I") I $G(SPDATA)'="" D
 | 
|---|
| 21 |  .. S SPDATA=$$HLDATE^HLFNC(SPDATA,"TS")
 | 
|---|
| 22 |  .. S SPMSG(SPLINE)="OBX|"_OBXCNT_"|TS|"_X_"^"_SPNDD_"||"_SPDATA
 | 
|---|
| 23 |  .. S SPLINE=SPLINE+1,OBXCNT=OBXCNT+1,SPNDD=""
 | 
|---|
| 24 |  .. S (SPDATA,SPNDD)=""
 | 
|---|
| 25 |  F SPNCOMP=999.06,999.07,999.08 D
 | 
|---|
| 26 |  . S X=$$GET1^DIQ(154,SPNFDFN_",",SPNCOMP,"") I $G(X)'="" D
 | 
|---|
| 27 |  .. D ^%DT S SPDATA=Y  ;flip date around to fm type
 | 
|---|
| 28 |  .. S SPDATA=$$HLDATE^HLFNC(SPDATA,"TS")
 | 
|---|
| 29 |  .. S SPNDD=$G(^DD(154,SPNCOMP,0)),SPNDD=$P(SPNDD,U,1) S:SPNDD="" SPNDD="ERROR"
 | 
|---|
| 30 |  .. S SPMSG(SPLINE)="OBX|"_OBXCNT_"|TS|"_SPNCOMP_"^"_SPNDD_"||"_SPDATA
 | 
|---|
| 31 |  .. S SPLINE=SPLINE+1,OBXCNT=OBXCNT+1,SPNDD=""
 | 
|---|
| 32 |  .. S (SPDATA,SPNDD)=""
 | 
|---|
| 33 |  ;check for date of death if so get it
 | 
|---|
| 34 |  S SPDATA=$$GET1^DIQ(2,SPNFDFN_",",.351,"I") I $G(SPDATA)'="" D
 | 
|---|
| 35 |  . S SPDATA=$$HLDATE^HLFNC(SPDATA,"TS")
 | 
|---|
| 36 |  . S SPMSG(SPLINE)="OBX|"_OBXCNT_"|TS|"_".351"_"^"_"DATE OF DEATH"_"||"_SPDATA
 | 
|---|
| 37 |  . S SPLINE=SPLINE+1,OBXCNT=OBXCNT+1,SPNDD="",SPDATA=""
 | 
|---|
| 38 |  ;
 | 
|---|
| 39 |  ;this secton will set up all data types of free text (ST)
 | 
|---|
| 40 |  F X=.03,2.1,2.2,2.3,2.4,2.5,2.6,3.1,3.2,3.3,3.4,3.5,5.01,5.11,5.12,6.09,8.3,8.4,8.6,10.3,999.03,999.04,999.05 D
 | 
|---|
| 41 |  . S SPNDD=$G(^DD(154,X,0)),SPNDD=$P(SPNDD,U,1) S:SPNDD="" SPNDD="ERROR"
 | 
|---|
| 42 |  . S SPDATA=$$GET1^DIQ(154,SPNFDFN_",",X) I $G(SPDATA)'="" D
 | 
|---|
| 43 |  .. S SPNTBL=$S(X=".03":"^VA0504",X="2.2":"^VA0505",X="2.3":"^VA0506",X="2.6":"^VA0507",1:"")
 | 
|---|
| 44 |  .. S SPMSG(SPLINE)="OBX|"_OBXCNT_"|ST|"_X_"^"_SPNDD_SPNTBL_"||"_SPDATA
 | 
|---|
| 45 |  .. S SPLINE=SPLINE+1,OBXCNT=OBXCNT+1,SPNDD=""
 | 
|---|
| 46 |  .. S (SPDATA,SPNDD,SPNTBL)=""
 | 
|---|
| 47 |  ;
 | 
|---|
| 48 |  ;set up station suffix from 40.8
 | 
|---|
| 49 |  S SPMSG(SPLINE)="OBX|"_OBXCNT_"|ST|154.91.2^DIVISION||"_$$EN^SPNMAIN(DUZ)
 | 
|---|
| 50 |  S SPLINE=SPLINE+1,OBXCNT=OBXCNT+1,SPNDD=""
 | 
|---|
| 51 |  ;this section is as well data types of free text (ST)
 | 
|---|
| 52 |  F X=1.1,5.02,5.03,5.04,5.05,5.06,5.07,5.08,5.09,5.1,5.13,5.14,10.1,8.1,8.2 D
 | 
|---|
| 53 |  . S SPNDD=$G(^DD(154,X,0)),SPNDD=$P(SPNDD,U,1) S:SPNDD="" SPNDD="ERROR"
 | 
|---|
| 54 |  . S SPDATA=$$GET1^DIQ(154,SPNFDFN_",",X) I $G(SPDATA)'="" D
 | 
|---|
| 55 |  .. S SPMSG(SPLINE)="OBX|"_OBXCNT_"|ST|"_X_"^"_SPNDD_"||"_SPDATA
 | 
|---|
| 56 |  .. S SPLINE=SPLINE+1,OBXCNT=OBXCNT+1,SPNDD=""
 | 
|---|
| 57 |  .. S (SPDATA,SPNDD)=""
 | 
|---|
| 58 |  ;this section will collect the etiology information
 | 
|---|
| 59 |  D GETS^DIQ(154,SPNFDFN_",","4*","","SPNTMP")
 | 
|---|
| 60 |  S SPNET="" F  S SPNET=$O(SPNTMP(154.004,SPNET)) Q:(SPNET="")!('+SPNET)  D ETIOBR S SPND="" F  S SPND=$O(SPNTMP(154.004,SPNET,SPND)) Q:(SPND="")!('+SPND)  D
 | 
|---|
| 61 |  . S SPNDD=$G(^DD(154.004,SPND,0)),SPNDD=$P(SPNDD,U,1) S:SPNDD="" SPNDD="ERROR"
 | 
|---|
| 62 |  . S X=$G(SPNTMP(154.004,SPNET,SPND)) I $G(X)'="" D
 | 
|---|
| 63 |  .. I SPND=".02" D ^%DT S X=$$HLDATE^HLFNC(Y,"TS")  ;make hl7 date
 | 
|---|
| 64 |  .. S SPNTBL=$S(SPND=.01:"^VA503",1:"")
 | 
|---|
| 65 |  .. S SPDTYPE=$S(SPND=.02:"TS",1:"ST")
 | 
|---|
| 66 |  .. S SPMSG(SPLINE)="OBX|"_OBXCNT_"|"_SPDTYPE_"|"_SPND_"^"_SPNDD_SPNTBL_"||"_X S SPLINE=SPLINE+1,OBXCNT=OBXCNT+1
 | 
|---|
| 67 |  .. K SPDTYPE,SPNTBL
 | 
|---|
| 68 |  .Q
 | 
|---|
| 69 | EVAL ;
 | 
|---|
| 70 |  K SPNTMP,SPDATA,SPDD,SPD
 | 
|---|
| 71 |  D GETS^DIQ(154,SPNFDFN_",","7*","I","SPNTMP")
 | 
|---|
| 72 |  S SPNET="" F  S SPNET=$O(SPNTMP(154.07,SPNET)) Q:(SPNET="")!('+SPNET)  D EVLOBR S SPND=0 F  S SPND=$O(SPNTMP(154.07,SPNET,SPND)) Q:(SPND="")!('+SPND)  D
 | 
|---|
| 73 |  . S SPDATA=$G(SPNTMP(154.07,SPNET,SPND,"I")) I $G(SPDATA)'="" D
 | 
|---|
| 74 |  .. S SPDATA=$$HLDATE^HLFNC(SPDATA,"TS")
 | 
|---|
| 75 |  .. S SPNDD=$G(^DD(154.07,SPND,0)),SPNDD=$P(SPNDD,U,1) S:SPNDD="" SPNDD="-----"
 | 
|---|
| 76 |  .. S SPMSG(SPLINE)="OBX|"_OBXCNT_"|TS|"_SPND_"^"_SPNDD_"||"_SPDATA
 | 
|---|
| 77 |  .. S SPLINE=SPLINE+1,OBXCNT=OBXCNT+1
 | 
|---|
| 78 |  .. S (SPDATA,SPNDD,SPD)=""
 | 
|---|
| 79 |  K SPNTMP
 | 
|---|
| 80 |  Q
 | 
|---|
| 81 |  ;
 | 
|---|
| 82 | ETIOBR ;
 | 
|---|
| 83 |  S SPNOBR=SPNOBR+1
 | 
|---|
| 84 |  S X=$G(SPNTMP(154.004,SPNET,.02)) D ^%DT S ETDATE=Y K Y,X
 | 
|---|
| 85 |  S ETDATE=$$HLDATE^HLFNC(ETDATE,"TS")
 | 
|---|
| 86 |  ;note that this resets the date to an hl7 format
 | 
|---|
| 87 |  S SPMSG(SPLINE)="OBR|"_SPNOBR_"|||154 ETIOLOGY DATA|||"_ETDATE
 | 
|---|
| 88 |  S SPLINE=SPLINE+1
 | 
|---|
| 89 |  S OBXCNT=1
 | 
|---|
| 90 |  Q
 | 
|---|
| 91 | EVLOBR ;
 | 
|---|
| 92 |  S SPNOBR=SPNOBR+1
 | 
|---|
| 93 |  S SPDT=$G(SPNTMP(154.07,SPNET,.01,"I"))
 | 
|---|
| 94 |  S SPDT=$$HLDATE^HLFNC(SPDT,"TS")
 | 
|---|
| 95 |  S SPMSG(SPLINE)="OBR|"_SPNOBR_"|||154 ANNUAL EVAL DATA|||"_SPDT
 | 
|---|
| 96 |  S SPLINE=SPLINE+1
 | 
|---|
| 97 |  S OBXCNT=1
 | 
|---|
| 98 |  Q
 | 
|---|