SPNHL1 ;WDE/SAN-DIEGO;Build the hl7 segment for file 154
 ;;2.0;Spinal Cord Dysfunction;**10,12,15,24**;01/02/97
 ;this routine is called from spnhl7 spnhl7 is called from the
 ;edit rtn for file 154
EN(SPNFDFN) ;
 K OBXCNT,SPNOBR,SPLINE,DATA,X,Y,SPNDD,SPNDT,SPNTMP
 ;collect the registration data from 154
 S SPNOBR=1,OBXCNT=1
 S OBXCNT=1
 S SPLINE="",SPLINE=$O(SPMSG(SPLINE),-1)+1
 S SPMSG(SPLINE)="OBR|"_SPNOBR_"|||Registration OBR"
 ;set up the obr with the date of registration
 S X=$$GET1^DIQ(154,SPNFDFN_",",.02,"I"),X=$$HLDATE^HLFNC(X,"TS")
 S $P(SPMSG(SPLINE),"|",8)=X S SPLINE=SPLINE+1
 S SPNDD=$G(^DD(154,.02,0)),SPNDD=$P(SPNDD,U,1)
 ;loop through the fields and set up the message
 ;this section will set up all data type of date (ts)
 F X=.02,.05,8.8,10.2 D
 . S SPNDD=$G(^DD(154,X,0)),SPNDD=$P(SPNDD,U,1) S:SPNDD="" SPNDD="ERROR"
 . S SPDATA=$$GET1^DIQ(154,SPNFDFN_",",X,"I") I $G(SPDATA)'="" D
 .. S SPDATA=$$HLDATE^HLFNC(SPDATA,"TS")
 .. S SPMSG(SPLINE)="OBX|"_OBXCNT_"|TS|"_X_"^"_SPNDD_"||"_SPDATA
 .. S SPLINE=SPLINE+1,OBXCNT=OBXCNT+1,SPNDD=""
 .. S (SPDATA,SPNDD)=""
 F SPNCOMP=999.06,999.07,999.08 D
 . S X=$$GET1^DIQ(154,SPNFDFN_",",SPNCOMP,"") I $G(X)'="" D
 .. D ^%DT S SPDATA=Y  ;flip date around to fm type
 .. S SPDATA=$$HLDATE^HLFNC(SPDATA,"TS")
 .. S SPNDD=$G(^DD(154,SPNCOMP,0)),SPNDD=$P(SPNDD,U,1) S:SPNDD="" SPNDD="ERROR"
 .. S SPMSG(SPLINE)="OBX|"_OBXCNT_"|TS|"_SPNCOMP_"^"_SPNDD_"||"_SPDATA
 .. S SPLINE=SPLINE+1,OBXCNT=OBXCNT+1,SPNDD=""
 .. S (SPDATA,SPNDD)=""
 ;check for date of death if so get it
 S SPDATA=$$GET1^DIQ(2,SPNFDFN_",",.351,"I") I $G(SPDATA)'="" D
 . S SPDATA=$$HLDATE^HLFNC(SPDATA,"TS")
 . S SPMSG(SPLINE)="OBX|"_OBXCNT_"|TS|"_".351"_"^"_"DATE OF DEATH"_"||"_SPDATA
 . S SPLINE=SPLINE+1,OBXCNT=OBXCNT+1,SPNDD="",SPDATA=""
 ;
 ;this secton will set up all data types of free text (ST)
 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
 . S SPNDD=$G(^DD(154,X,0)),SPNDD=$P(SPNDD,U,1) S:SPNDD="" SPNDD="ERROR"
 . S SPDATA=$$GET1^DIQ(154,SPNFDFN_",",X) I $G(SPDATA)'="" D
 .. S SPNTBL=$S(X=".03":"^VA0504",X="2.2":"^VA0505",X="2.3":"^VA0506",X="2.6":"^VA0507",1:"")
 .. S SPMSG(SPLINE)="OBX|"_OBXCNT_"|ST|"_X_"^"_SPNDD_SPNTBL_"||"_SPDATA
 .. S SPLINE=SPLINE+1,OBXCNT=OBXCNT+1,SPNDD=""
 .. S (SPDATA,SPNDD,SPNTBL)=""
 ;
 ;set up station suffix from 40.8
 S SPMSG(SPLINE)="OBX|"_OBXCNT_"|ST|154.91.2^DIVISION||"_$$EN^SPNMAIN(DUZ)
 S SPLINE=SPLINE+1,OBXCNT=OBXCNT+1,SPNDD=""
 ;this section is as well data types of free text (ST)
 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
 . S SPNDD=$G(^DD(154,X,0)),SPNDD=$P(SPNDD,U,1) S:SPNDD="" SPNDD="ERROR"
 . S SPDATA=$$GET1^DIQ(154,SPNFDFN_",",X) I $G(SPDATA)'="" D
 .. S SPMSG(SPLINE)="OBX|"_OBXCNT_"|ST|"_X_"^"_SPNDD_"||"_SPDATA
 .. S SPLINE=SPLINE+1,OBXCNT=OBXCNT+1,SPNDD=""
 .. S (SPDATA,SPNDD)=""
 ;this section will collect the etiology information
 D GETS^DIQ(154,SPNFDFN_",","4*","","SPNTMP")
 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
 . S SPNDD=$G(^DD(154.004,SPND,0)),SPNDD=$P(SPNDD,U,1) S:SPNDD="" SPNDD="ERROR"
 . S X=$G(SPNTMP(154.004,SPNET,SPND)) I $G(X)'="" D
 .. I SPND=".02" D ^%DT S X=$$HLDATE^HLFNC(Y,"TS")  ;make hl7 date
 .. S SPNTBL=$S(SPND=.01:"^VA503",1:"")
 .. S SPDTYPE=$S(SPND=.02:"TS",1:"ST")
 .. S SPMSG(SPLINE)="OBX|"_OBXCNT_"|"_SPDTYPE_"|"_SPND_"^"_SPNDD_SPNTBL_"||"_X S SPLINE=SPLINE+1,OBXCNT=OBXCNT+1
 .. K SPDTYPE,SPNTBL
 .Q
EVAL ;
 K SPNTMP,SPDATA,SPDD,SPD
 D GETS^DIQ(154,SPNFDFN_",","7*","I","SPNTMP")
 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
 . S SPDATA=$G(SPNTMP(154.07,SPNET,SPND,"I")) I $G(SPDATA)'="" D
 .. S SPDATA=$$HLDATE^HLFNC(SPDATA,"TS")
 .. S SPNDD=$G(^DD(154.07,SPND,0)),SPNDD=$P(SPNDD,U,1) S:SPNDD="" SPNDD="-----"
 .. S SPMSG(SPLINE)="OBX|"_OBXCNT_"|TS|"_SPND_"^"_SPNDD_"||"_SPDATA
 .. S SPLINE=SPLINE+1,OBXCNT=OBXCNT+1
 .. S (SPDATA,SPNDD,SPD)=""
 K SPNTMP
 Q
 ;
ETIOBR ;
 S SPNOBR=SPNOBR+1
 S X=$G(SPNTMP(154.004,SPNET,.02)) D ^%DT S ETDATE=Y K Y,X
 S ETDATE=$$HLDATE^HLFNC(ETDATE,"TS")
 ;note that this resets the date to an hl7 format
 S SPMSG(SPLINE)="OBR|"_SPNOBR_"|||154 ETIOLOGY DATA|||"_ETDATE
 S SPLINE=SPLINE+1
 S OBXCNT=1
 Q
EVLOBR ;
 S SPNOBR=SPNOBR+1
 S SPDT=$G(SPNTMP(154.07,SPNET,.01,"I"))
 S SPDT=$$HLDATE^HLFNC(SPDT,"TS")
 S SPMSG(SPLINE)="OBR|"_SPNOBR_"|||154 ANNUAL EVAL DATA|||"_SPDT
 S SPLINE=SPLINE+1
 S OBXCNT=1
 Q
