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

VAFHLZCE.m

Go to the documentation of this file.
  1. VAFHLZCE ;ALB/KUM - Create generic HL7 Community Care Program (ZCE) segments ;06/16/20 3:34PM
  1. ;;5.3;Registration;**1014**;Aug 13, 1993;Build 42
  1. ;Per VHA Directive 2004-038, this routine should not be modified.
  1. ;
  1. ;
  1. ;Supported ICRs
  1. ; #2056 - $$GET1^DIQ(}
  1. ;
  1. ; This generic extrinsic function is designed to return the
  1. ; HL7 Community Care Program (ZCE) segment. This segment contains VA-specific
  1. ; Community Care Eligibility data for a patient.
  1. ;
  1. EN(DFN,VAFSTR,VAFNUM,VAFHLQ,VAFHLFS,VAFZCE) ; build HL7 ZCE segments.
  1. ; ZCE segments will be returned in the array VAFZCE.
  1. ;
  1. ; Input: DFN - Pointer to PATIENT file (#2)
  1. ; VAFSTR - String of fields requested separated by commas
  1. ; VAFNUM - (optional) sequential number for SET ID (default=1)
  1. ; VAFHLQ - (optional) HL7 null variable.
  1. ; VAFHLFS - (optional) HL7 field separator.
  1. ; .VAFZCE - Array to return segments in
  1. ;
  1. ;
  1. ; Output: VAFZCE(X) = ZCE segment (first 245 characters)
  1. ; VAFZCE(X,Y) = Remaining portion of ZCE segment in 245 character chunks
  1. ;
  1. ; Notes: VAFZCE is initialized (KILLed) on input.
  1. ;
  1. N VAFHLZCE,VAFNUM,VAFMAXL,VAFIE1,DGFIDX,DGUPDT,DGREC
  1. K VAFZCE
  1. ;
  1. ; if VAFHLQ or VAFHLFS not passed, use default HL7 variables
  1. S VAFHLQ=$S($D(VAFHLQ):VAFHLQ,1:$G(HLQ)),VAFHLFS=$S($D(VAFHLFS):VAFHLFS,1:$G(HLFS))
  1. ;
  1. ; if set id not passed, use default
  1. S VAFNUM=$S($G(VAFNUM):VAFNUM,1:1)
  1. ;
  1. S VAFMAXL=245
  1. S VAFSTR=","_VAFSTR_","
  1. ; Do not create ZCE segment if Archive flag is 1
  1. K DGTMP
  1. M DGTMP(DFN,5)=^DPT(DFN,5)
  1. S DGFIDX=0
  1. F S DGFIDX=$O(DGTMP(DFN,5,DGFIDX)) Q:'DGFIDX S DGREC=$G(DGTMP(DFN,5,DGFIDX,0)) D ;
  1. .I $P(DGREC,U,5)'=1 D
  1. ..S DGUPDT=$P(DGREC,U)
  1. ..S DGTMP("UPDT",DGUPDT,DGFIDX)=DGREC
  1. ; ZCE for approved requests
  1. S DGUPDT=""
  1. F S DGUPDT=$O(DGTMP("UPDT",DGUPDT)) Q:DGUPDT="" D
  1. .S DGFIDX="" F S DGFIDX=$O(DGTMP("UPDT",DGUPDT,DGFIDX)) Q:DGFIDX="" D
  1. ..D GETDATA(DGFIDX),MAKESEG S VAFNUM=VAFNUM+1
  1. ..Q
  1. .Q
  1. Q
  1. ;
  1. GETDATA(DGFIDX) ; Get information needed to build ZCE segment
  1. ; Input:
  1. ; DGFIDX = IEN of Subfile #2.191 Community Care Program
  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. ; VAFNUM - Value to use for Set ID (optional)
  1. ; HL7 encoding characters (HLFS, HLENC, HLQ)
  1. ;
  1. ; Output: VAFHLZCE(SeqNum) = Value
  1. ;
  1. ; Notes: VAFHLZCE is initialized (KILLed) on entry
  1. ;
  1. N VAFIEN,VAFPGM,VAFEFD,VAFEND,VAFCCD
  1. K VAFHLZCE
  1. S VAFIEN=DGFIDX_","_DFN_","
  1. S VAFPGM=$$GET1^DIQ(2.191,VAFIEN,1,"I")
  1. S VAFEFD=$$GET1^DIQ(2.191,VAFIEN,2,"I")
  1. S VAFEND=$$GET1^DIQ(2.191,VAFIEN,3,"I")
  1. S VAFCCD=$$GET1^DIQ(2.191,VAFIEN,.01,"I")
  1. ;
  1. ; set-up segment data fields
  1. I VAFSTR[",1," S VAFHLZCE(1)=+$G(VAFNUM) ; Sequential ID
  1. I VAFSTR[",2," S VAFHLZCE(2)=$S($G(VAFPGM)]"":$G(VAFPGM),1:VAFHLQ) ; Community Care Progarm Code
  1. I VAFSTR[",3," S VAFHLZCE(3)=$S($G(VAFEFD)]"":$$HLDATE^HLFNC($G(VAFEFD),"DT"),1:VAFHLQ) ; Effective Date
  1. I VAFSTR[",4," S VAFHLZCE(4)=$S($G(VAFEND)]"":$$HLDATE^HLFNC($G(VAFEND),"DT"),1:VAFHLQ) ; End Date
  1. I VAFSTR[",5," S VAFHLZCE(5)=$S($G(VAFCCD)]"":$$HLDATE^HLFNC($G(VAFCCD),"TS"),1:VAFHLQ) ; Last Updated Date
  1. ;
  1. Q
  1. ;
  1. MAKESEG ; Create segment using obtained data
  1. ; Input: Existence of the following variables is assumed
  1. ; VAFNUM = Number denoting Xth repetition of the ZCE segment
  1. ; VAFMAXL = Maximum length of each node (defaults to 245)
  1. ; VAFHLZCE(SeqNum) = Value
  1. ; HL7 encoding characters (HLFS, HLECH)
  1. ;
  1. ; Output: VAFZCE(VAFNUM) = ZCE segment (first VAFMAXL characters)
  1. ; VAFZCE(VAFNUM,x) = Remaining portion of ZCE segment in VAFMAXL character chunks (if needed), beginning with a field separator
  1. ;
  1. ; Notes: VAFZCE(VAFNUM) is initialized (KILLed) on input. Fields will not be split across nodes in VAFZCE()
  1. ;
  1. N VAFSEQ,VAFSPIL,VAFSPON,VAFSPOT,VAFLSEQ,VAFY
  1. K VAFZCE(VAFNUM)
  1. S VAFZCE(VAFNUM)="ZCE"
  1. S:'+$G(VAFMAXL) VAFMAXL=245
  1. S VAFY=$NA(VAFZCE(VAFNUM))
  1. S (VAFSPIL,VAFSPON)=0
  1. S VAFLSEQ=+$O(VAFHLZCE(""),-1)
  1. F VAFSEQ=1:1:VAFLSEQ D
  1. .; Make sure maximum length won't be exceeded
  1. .I ($L(@VAFY)+$L($G(VAFHLZCE(VAFSEQ)))+1)>VAFMAXL D
  1. ..; Max length exceeded - start putting data on next node
  1. ..S VAFSPIL=VAFSPIL+1
  1. ..S VAFSPON=VAFSEQ-1
  1. ..S VAFY=$NA(VAFZCE(VAFNUM,VAFSPIL))
  1. .; Add to string
  1. .S VAFSPOT=(VAFSEQ+1)-VAFSPON
  1. .S $P(@VAFY,VAFHLFS,VAFSPOT)=$G(VAFHLZCE(VAFSEQ))
  1. Q