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

VAFHLZTE.m

Go to the documentation of this file.
  1. VAFHLZTE ;SHRPE/YMG - Create HL7 ZTE segment ;06/17/19
  1. ;;5.3;Registration;**952,977**;Aug 13, 1993;Build 177
  1. ;;Per VA Directive 6402, this routine should not be modified.
  1. ;
  1. Q
  1. EN(DFN,VAFSTR,VAFCHK,VAFZTE) ; build HL7 ZTE segments.
  1. ; These segments contain VA-specific data for OTH (Other Than Honorable)
  1. ; patients. ZTE segments will be returned in the array VAFZTE.
  1. ;
  1. ; Input: DFN - Pointer to PATIENT file (#2)
  1. ; VAFSTR - String of fields requested separated by commas
  1. ; VAFCHK - 1 to only create ZTE segments if patient is OTH, 0 to create segments regardless of patient's OTH status (default)
  1. ; .VAFZEL - Array to return segments in
  1. ;
  1. ; Existence of HL7 encoding characters (HLFS,HLECH) is assumed
  1. ;
  1. ; Output: VAFZTE(X) = ZTE segment (first 245 characters)
  1. ; VAFZTE(X,Y) = Remaining portion of ZTE segment in 245 character chunks
  1. ;
  1. ; Notes: VAFZTE is initialized (KILLed) on input.
  1. ;
  1. N DGOTHSTR,IEN33,IEN3301,IEN3303,IEN3311,VAFHLZTE,VAFSETID,VAFMAXL
  1. K VAFZTE
  1. S VAFMAXL=245
  1. S VAFCHK=+$G(VAFCHK,0)
  1. I VAFCHK,'$$ISOTHD^DGOTHD(DFN) Q
  1. I '$G(DFN)!($G(VAFSTR)="") Q
  1. S VAFSTR=","_VAFSTR_","
  1. S IEN33=+$O(^DGOTH(33,"B",DFN,"")) I 'IEN33 Q
  1. ; Build ZTE segments
  1. S VAFSETID=1
  1. ; ZTE for pending request
  1. S DGOTHSTR=$$GETPEND^DGOTHUT1(DFN)
  1. I $P(DGOTHSTR,U)>0 D GETDATA("P",DGOTHSTR),MAKESEG S VAFSETID=VAFSETID+1
  1. ; ZTE for denied requests
  1. S IEN3303=0 F S IEN3303=$O(^DGOTH(33,IEN33,3,IEN3303)) Q:'IEN3303 D
  1. .S DGOTHSTR=$$GETDEN^DGOTHUT1(IEN33,IEN3303)
  1. .I $P(DGOTHSTR,U)>0 D GETDATA("D",DGOTHSTR),MAKESEG S VAFSETID=VAFSETID+1
  1. .Q
  1. ; ZTE for approved requests
  1. S IEN3301=0 F S IEN3301=$O(^DGOTH(33,IEN33,1,IEN3301)) Q:'IEN3301 D
  1. .S IEN3311=0 F S IEN3311=$O(^DGOTH(33,IEN33,1,IEN3301,1,IEN3311)) Q:'IEN3311 D
  1. ..S DGOTHSTR=$$GETAUTH^DGOTHUT1(IEN33,IEN3301,IEN3311)
  1. ..I $P(DGOTHSTR,U)>0 D GETDATA("A",DGOTHSTR),MAKESEG S VAFSETID=VAFSETID+1
  1. ..Q
  1. .Q
  1. Q
  1. ;
  1. GETDATA(DGTYPE,DGOTHSTR) ; Get information needed to build ZTE segment
  1. ; Input:
  1. ; DGTYPE = request type: "P" = Pending, "D" = Denied, "A" = Approved
  1. ; DGOTHSTR = "^" - delimited string containing data from file 33 to use
  1. ;
  1. ; Existence of the following variables is assumed
  1. ; DFN - Pointer to Patient (#2) file
  1. ; VAFSTR - Fields to extract (padded with commas)
  1. ; VAFSETID - Value to use for Set ID (optional)
  1. ; HL7 encoding characters (HLFS, HLENC, HLQ)
  1. ;
  1. ; Output: VAFHLZTE(SeqNum) = Value
  1. ;
  1. ; Notes: VAFHLZTE is initialized (KILLed) on entry
  1. ;
  1. K VAFHLZTE
  1. ; Set ID
  1. I VAFSTR[",1," S VAFHLZTE(1)=+$G(VAFSETID)
  1. ; Date request submitted
  1. I VAFSTR[",2," S VAFHLZTE(2)=$$HLDATE^HLFNC($P(DGOTHSTR,U,$S(DGTYPE="A":4,1:2)))
  1. ; Request creation timestamp
  1. I VAFSTR[",3," S VAFHLZTE(3)=$$HLDATE^HLFNC($P(DGOTHSTR,U,$S(DGTYPE="A":10,DGTYPE="D":7,1:6)))
  1. ; Authorization status
  1. I VAFSTR[",4," S VAFHLZTE(4)=DGTYPE
  1. ; Request entered/edited timestamp
  1. I VAFSTR[",5," S VAFHLZTE(5)=$$HLDATE^HLFNC($P(DGOTHSTR,U,$S(DGTYPE="A":7,DGTYPE="D":5,1:4)))
  1. ; Request entered by
  1. I VAFSTR[",6," S VAFHLZTE(6)=$P(DGOTHSTR,U,$S(DGTYPE="A":6,DGTYPE="D":4,1:3)) ; DG*5.3*977 OTH-EXT
  1. ; Facility
  1. I VAFSTR[",7," S VAFHLZTE(7)=$$STA^XUAF4($P(DGOTHSTR,U,$S(DGTYPE="A":9,DGTYPE="D":6,1:5)))
  1. ; 365 day period number
  1. I VAFSTR[",8," S VAFHLZTE(8)=$S(DGTYPE="A":$P(DGOTHSTR,U),1:"")
  1. ; 90 day period number
  1. I VAFSTR[",9," S VAFHLZTE(9)=$S(DGTYPE="A":$P(DGOTHSTR,U,2),1:"")
  1. ; Authorization date
  1. I VAFSTR[10 S VAFHLZTE(10)=$S(DGTYPE="A":$$HLDATE^HLFNC($P(DGOTHSTR,U,5)),1:"")
  1. ; Request authorized by
  1. I VAFSTR[11 S VAFHLZTE(11)=$S(DGTYPE="A":$P(DGOTHSTR,U,8),1:"") ; DG*5.3*977 OTH-EXT
  1. ; 90 day period start date
  1. I VAFSTR[12 S VAFHLZTE(12)=$S(DGTYPE="A":$$HLDATE^HLFNC($P(DGOTHSTR,U,3)),1:"")
  1. ; Authorization comment
  1. I VAFSTR[13 S VAFHLZTE(13)=$S(DGTYPE="D":$P(DGOTHSTR,U,3),1:"") ; DG*5.3*977 OTH-EXT
  1. Q
  1. ;
  1. MAKESEG ; Create segment using obtained data
  1. ; Input: Existence of the following variables is assumed
  1. ; VAFSETID = Number denoting Xth repetition of the ZTE segment
  1. ; VAFMAXL = Maximum length of each node (defaults to 245)
  1. ; VAFHLZTE(SeqNum) = Value
  1. ; HL7 encoding characters (HLFS, HLECH)
  1. ;
  1. ; Output: VAFZTE(VAFSETID) = ZTE segment (first VAFMAXL characters)
  1. ; VAFZTE(VAFSETID,x) = Remaining portion of ZTE segment in VAFMAXL character chunks (if needed), beginning with a field separator
  1. ;
  1. ; Notes: VAFZTE(VAFSETID) is initialized (KILLed) on input. Fields will not be split across nodes in VAFZTE()
  1. ;
  1. N SEQ,SPILL,SPILLON,SPOT,LASTSEQ,VAFY
  1. K VAFZTE(VAFSETID)
  1. S VAFZTE(VAFSETID)="ZTE"
  1. S:'+$G(VAFMAXL) VAFMAXL=245
  1. S VAFY=$NA(VAFZTE(VAFSETID))
  1. S (SPILL,SPILLON)=0
  1. S LASTSEQ=+$O(VAFHLZTE(""),-1)
  1. F SEQ=1:1:LASTSEQ D
  1. .; Make sure maximum length won't be exceeded
  1. .I ($L(@VAFY)+$L($G(VAFHLZTE(SEQ)))+1)>VAFMAXL D
  1. ..; Max length exceeded - start putting data on next node
  1. ..S SPILL=SPILL+1
  1. ..S SPILLON=SEQ-1
  1. ..S VAFY=$NA(VAFZTE(VAFSETID,SPILL))
  1. .; Add to string
  1. .S SPOT=(SEQ+1)-SPILLON
  1. .S $P(@VAFY,HLFS,SPOT)=$G(VAFHLZTE(SEQ))
  1. Q