Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: DGPFHLU

DGPFHLU.m

Go to the documentation of this file.
  1. DGPFHLU ;ALB/RPM - PRF HL7 ORU/ACK PROCESSING ; 6/21/06 10:27am
  1. ;;5.3;Registration;**425,718,650,1015**;Aug 13, 1993;Build 21
  1. ;
  1. BLDORU(DGPFA,DGHARR,DGHL,DGROOT) ;Build ORU~R01 Message/Segments
  1. ;
  1. ; Input:
  1. ; DGPFA - (required) Assignment data array
  1. ; DGHARR - (required) Assignment history IENs array
  1. ; DGHL - (required) HL7 Kernel array passed by reference
  1. ; DGROOT - (required) Closed root segment storage array name
  1. ;
  1. ; Output:
  1. ; Function Value - IEN of last assignment history included in
  1. ; message segments, 0 on failure
  1. ; DGROOT - array of HL7 segments
  1. ;
  1. N DGADT ;assignment date
  1. N DGHIEN ;function value
  1. N DGLDT ;last assignment date
  1. N DGPFAH ;assignment history data array
  1. N DGSEG ;segment counter
  1. N DGSEGSTR ;formatted segment string
  1. N DGSET ;set id
  1. N DGSTR ;field string
  1. N DGTROOT ;text root
  1. ;
  1. S DGHIEN=0
  1. S DGSEG=0
  1. ;
  1. I $D(DGPFA),$D(DGHARR),$G(DGROOT)]"" D
  1. . ;
  1. . ;build PID
  1. . S DGSTR="1,2,3,5,7,8,19"
  1. . S DGSEGSTR=$$EN^VAFHLPID(+DGPFA("DFN"),DGSTR,1,1)
  1. . Q:(DGSEGSTR="")
  1. . S DGSEG=DGSEG+1,@DGROOT@(DGSEG)=DGSEGSTR
  1. . ;
  1. . ;build OBR
  1. . S DGLDT=+$O(DGHARR(""),-1) ;get last assignment date
  1. . Q:'$$GETHIST^DGPFAAH(DGHARR(DGLDT),.DGPFAH) ;load asgn hx array
  1. . S DGSET=1
  1. . S DGSTR="1,4,7,20,21"
  1. . S DGSEGSTR=$$OBR^DGPFHLU1(DGSET,.DGPFA,.DGPFAH,DGSTR,.DGHL)
  1. . Q:(DGSEGSTR="")
  1. . S DGSEG=DGSEG+1,@DGROOT@(DGSEG)=DGSEGSTR
  1. . ;
  1. . ;start OBX segments
  1. . S DGSET=0
  1. . ;
  1. . ;build narrative OBX segments
  1. . S DGTROOT="DGPFA(""NARR"")"
  1. . Q:'$$BLDOBXTX^DGPFHLU2(DGROOT,DGTROOT,"N",.DGPFAH,.DGHL,.DGSEG,.DGSET)
  1. . ;
  1. . ;for each history build status & comment OBX segments
  1. . S DGADT=0
  1. . F S DGADT=$O(DGHARR(DGADT)) Q:'DGADT D Q:'DGHIEN
  1. . . N DGPFAH
  1. . . S DGHIEN=0
  1. . . Q:'$$GETHIST^DGPFAAH(DGHARR(DGADT),.DGPFAH)
  1. . . ;
  1. . . ;build status OBX segment
  1. . . S DGSTR="1,2,3,5,11,14"
  1. . . S DGSET=DGSET+1
  1. . . S DGSEGSTR=$$OBX^DGPFHLU2(DGSET,"S","",$P($G(DGPFAH("ACTION")),U,2),.DGPFAH,DGSTR,.DGHL)
  1. . . Q:(DGSEGSTR="")
  1. . . S DGSEG=DGSEG+1,@DGROOT@(DGSEG)=DGSEGSTR
  1. . . ;
  1. . . ;build review comment OBX segments
  1. . . S DGTROOT="DGPFAH(""COMMENT"")"
  1. . . Q:'$$BLDOBXTX^DGPFHLU2(DGROOT,DGTROOT,"C",.DGPFAH,.DGHL,.DGSEG,.DGSET)
  1. . . ;
  1. . . ;success
  1. . . S DGHIEN=DGHARR(DGADT)
  1. ;
  1. Q DGHIEN
  1. ;
  1. PARSORU(DGWRK,DGHL,DGROOT,DGPFERR) ;Parse ORU~R01 Message/Segments
  1. ;
  1. ; Input:
  1. ; DGWRK - Closed root work global reference
  1. ; DGHL - HL7 environment array
  1. ; DGROOT - Closed root ORU results array name
  1. ;
  1. ; Output:
  1. ; DGROOT - ORU results array
  1. ; Subscript Field name Fld# File#
  1. ; ----------------------- -------------------- ---- -----
  1. ; "SNDFAC" N/A N/A N/A
  1. ; "DFN" PATIENT NAME .01 26.13
  1. ; "FLAG" FLAG NAME .02 26.13
  1. ; "OWNER" OWNER SITE .04 26.13
  1. ; "ORIGSITE" ORIGINATING SITE .05 26.13
  1. ; "NARR",line ASSIGNMENT NARRATIVE 1 26.13
  1. ; assigndt,"ACTION" ACTION .03 26.13
  1. ; assigndt,"COMMENT",line HISTORY COMMENTS 1 26.14
  1. ; DGPFERR - Undefined on success, ERR segment data array on failure
  1. ; Format: DGPFERR(seg_id,sequence,fld_pos)=error_code
  1. ;
  1. N DGFS ;field separator
  1. N DGCS ;component separator
  1. N DGRS ;repetition separator
  1. N DGCURLIN ;current segment line
  1. N DGSEG ;segment field data array
  1. N DGERR ;error processing array
  1. ;
  1. S DGFS=DGHL("FS")
  1. S DGCS=$E(DGHL("ECH"),1)
  1. S DGRS=$E(DGHL("ECH"),2)
  1. S DGCURLIN=0
  1. ;
  1. ;loop through message segments and retrieve field data
  1. F D Q:'DGCURLIN
  1. . N DGSEG
  1. . S DGCURLIN=$$NXTSEG^DGPFHLUT(DGWRK,DGCURLIN,DGFS,.DGSEG)
  1. . Q:'DGCURLIN
  1. . D @(DGSEG("TYPE")_"(.DGSEG,DGCS,DGRS,DGROOT,.DGPFERR)")
  1. ;
  1. MSH(DGSEG,DGCS,DGRS,DGORU,DGERR) ;
  1. ;
  1. ; Input:
  1. ; DGSEG - MSH segment field array
  1. ; DGCS - HL7 component separator
  1. ; DGRS - HL7 repetition separator
  1. ; DGORU - Closed root ORU results array name
  1. ;
  1. ; Output:
  1. ; DGORU - ORU results array
  1. ; Subscript
  1. ; ---------
  1. ; "SNDFAC"
  1. ; DGERR - undefined on success, error array on failure
  1. ; format: DGERR(seg_id,sequence,fld_pos)=error code
  1. ;
  1. S @DGORU@("SNDFAC")=$$IEN^XUAF4($P(DGSEG(4),DGCS,1))
  1. Q
  1. ;
  1. PID(DGSEG,DGCS,DGRS,DGORU,DGERR) ;
  1. ;
  1. ; Input:
  1. ; DGSEG - PID segment field array
  1. ; DGCS - HL7 component separator
  1. ; DGRS - HL7 repetition separator
  1. ; DGORU - Closed root ORU results array name
  1. ;
  1. ; Output:
  1. ; DGORU - ORU results array
  1. ; Subscript
  1. ; ---------
  1. ; "DFN"
  1. ; DGERR - undefined on success, error array on failure
  1. ; format: DGERR(seg_id,sequence,fld_pos)=error code
  1. ;
  1. N DGARR
  1. N DGDFNERR
  1. N DGICN
  1. ;
  1. S DGICN=+$P(DGSEG(3),DGCS,1)
  1. S DGARR("DFN")=$$GETDFN^DGPFUT2(DGICN,"DGDFNERR")
  1. I 'DGARR("DFN"),$G(DGDFNERR("DIERR",1))]"" D
  1. . S DGERR("PID",DGSEG(1),3)=DGDFNERR("DIERR",1) ;no match
  1. ;
  1. ;load results array
  1. S @DGORU@("DFN")=DGARR("DFN")
  1. Q
  1. ;
  1. OBR(DGSEG,DGCS,DGRS,DGORU,DGERR) ;
  1. ;
  1. ; Input:
  1. ; DGSEG - OBR segment field array
  1. ; DGCS - HL7 component separator
  1. ; DGRS - HL7 repetition separator
  1. ; DGORU - Closed root ORU results array name
  1. ;
  1. ; Output:
  1. ; DGORU - ORU results array
  1. ; Subscript
  1. ; ----------------
  1. ; "FLAG"
  1. ; "OWNER"
  1. ; "ORIGSITE"
  1. ; DGERR - undefined on success, error array on failure
  1. ; format: DGERR(seg_id,sequence,fld_pos)=error code
  1. ;
  1. N DGARR
  1. ;
  1. S DGARR("FLAG")=$P($G(DGSEG(4)),DGCS,1)_";DGPF(26.15,"
  1. I '$$TESTVAL^DGPFUT(26.13,.02,DGARR("FLAG")) D
  1. . S DGERR("OBR",DGSEG(1),4)=261111 ;invalid flag
  1. ;
  1. S DGARR("OWNER")=$$IEN^XUAF4(DGSEG(20))
  1. I (DGARR("OWNER")="")!('$$TESTVAL^DGPFUT(26.13,.04,DGARR("OWNER"))) D
  1. . S DGERR("OBR",DGSEG(1),20)=261126 ;invalid owner site
  1. ;
  1. S DGARR("ORIGSITE")=$$IEN^XUAF4($G(DGSEG(21)))
  1. I DGARR("ORIGSITE")="" S DGARR("ORIGSITE")=@DGORU@("SNDFAC")
  1. I (DGARR("ORIGSITE")="")!('$$TESTVAL^DGPFUT(26.13,.05,DGARR("ORIGSITE"))) D
  1. . S DGERR("OBR",DGSEG(1),21)=261125 ;invalid originating site
  1. ;
  1. ;load results array
  1. M @DGORU=DGARR
  1. Q
  1. ;
  1. OBX(DGSEG,DGCS,DGRS,DGORU,DGERR) ;
  1. ;
  1. ; Input:
  1. ; DGSEG - OBX segment field array
  1. ; DGCS - HL7 component separator
  1. ; DGRS - HL7 repetition separator
  1. ; DGORU - Closed root ORU results array name
  1. ;
  1. ; Output:
  1. ; DGORU - ORU results array
  1. ; Subscript
  1. ; -----------------------
  1. ; "NARR",line
  1. ; assigndt,"ACTION"
  1. ; assigndt,"COMMENT",line
  1. ; DGERR - undefined on success, error array on failure
  1. ; format: DGERR(seg_id,sequence,fld_pos)=error code
  1. ;
  1. N DGADT ;assignment date
  1. N DGI
  1. N DGLINE ;word processing line count
  1. N DGRSLT
  1. ;
  1. ; Narrative Observation Identifier
  1. I $P(DGSEG(3),DGCS,1)="N" D
  1. . S DGLINE=$O(@DGORU@("NARR",""),-1)
  1. . F DGI=1:1:$L(DGSEG(5),DGRS) D
  1. . . S @DGORU@("NARR",DGLINE+DGI,0)=$P(DGSEG(5),DGRS,DGI)
  1. ;
  1. ; Status Observation Identifier
  1. I $P(DGSEG(3),DGCS,1)="S" D
  1. . S DGADT=$$HL7TFM^XLFDT(DGSEG(14),"L")
  1. . Q:+DGADT'>0
  1. . D CHK^DIE(26.14,.03,,DGSEG(5),.DGRSLT)
  1. . S @DGORU@(DGADT,"ACTION")=+DGRSLT
  1. ;
  1. ; Comment Observation Identifier
  1. I $P(DGSEG(3),DGCS,1)="C" D
  1. . S DGADT=$$HL7TFM^XLFDT(DGSEG(14),"L")
  1. . Q:+DGADT'>0
  1. . S DGLINE=$O(@DGORU@(DGADT,"COMMENT",""),-1)
  1. . F DGI=1:1:$L(DGSEG(5),DGRS) D
  1. . . S @DGORU@(DGADT,"COMMENT",DGLINE+DGI,0)=$P(DGSEG(5),DGRS,DGI)
  1. Q