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

PXRMMSER.m

Go to the documentation of this file.
  1. PXRMMSER ;SLC/PKR,AJB - Computed findings for military service information. ;12/11/2013
  1. ;;2.0;CLINICAL REMINDERS;**11,12,21,24,26**;Feb 04, 2005;Build 404
  1. ;
  1. ;======================================================
  1. AORANGE(DFN,NGET,BDT,EDT,NFOUND,TEST,DATE,DATA,TEXT) ;This computed
  1. ;finding will be true if the agent orange exposure registration
  1. ;date is in the date range specified by Beginning Date/Time
  1. ;and Ending Date/Time. VA-AGENT ORANGE EXPOSURE.
  1. N RDATE
  1. S NFOUND=0
  1. D GETSVCD(DFN)
  1. S TEST=^TMP($J,"SVC",DFN,2)
  1. I 'TEST Q
  1. S RDATE=+$P(^TMP($J,"SVC",DFN,2,1),U,1)
  1. I (RDATE=0)!(RDATE<BDT)!(RDATE>EDT) S TEST=0 Q
  1. S NFOUND=1
  1. S TEST(NFOUND)=1,DATE(NFOUND)=RDATE
  1. S (DATA(NFOUND,"VALUE"),DATA(NFOUND,"LOCATION"))=$P(^TMP($J,"SVC",DFN,2,5),U,2)
  1. S TEXT(NFOUND)="Agent orange exposure registration date: "_$$FMTE^XLFDT(RDATE,"5Z")_"; location: "_DATA(NFOUND,"LOCATION")
  1. Q
  1. ;
  1. ;======================================================
  1. COMBAT(DFN,NGET,BDT,EDT,NFOUND,TEST,DATE,DATA,TEXT) ;This computed
  1. ;finding will be true if combat service is found in the
  1. ;date range the date range specified by Beginning Date/Time
  1. ;and Ending Date/Time. VA-COMBAT SERVICE.
  1. N FDATE,TDATE
  1. S NFOUND=0
  1. D GETSVCD(DFN)
  1. S TEST=^TMP($J,"SVC",DFN,5)
  1. I 'TEST Q
  1. S FDATE=$P(^TMP($J,"SVC",DFN,5,1),U,1)
  1. S TDATE=$P(^TMP($J,"SVC",DFN,5,2),U,1)
  1. I $$OVERLAP^PXRMINDX(FDATE,TDATE,BDT,EDT)'="O" S TEST=0 Q
  1. S NFOUND=1
  1. S TEST(NFOUND)=1,DATE(NFOUND)=FDATE
  1. S (DATA(NFOUND,"VALUE"),DATA(NFOUND,"LOCATION"))=$P(^TMP($J,"SVC",DFN,5,3),U,2)
  1. S TEXT(NFOUND)="Combat service from "_$$FMTE^XLFDT(FDATE,"5Z")_" to "_$$FMTE^XLFDT(TDATE,"5Z")_"; location: "_DATA(NFOUND,"LOCATION")
  1. Q
  1. ;
  1. ;======================================================
  1. CVELIG(DFN,NGET,BDT,EDT,NFOUND,TEST,DATE,DATA,TEXT) ;Computed finding for
  1. ;combat vet eligiblity data. VA-COMBAT VET ELIGIBILITY.
  1. N CV,EDATE,ELIG,RESULT
  1. ;DBIA #4156
  1. S RESULT=$$CVEDT^DGCV(DFN,$$NOW^PXRMDATE)
  1. ;RESULT=(1,0,-1)^End Date (if populated, otherwise null)^CV
  1. ; (piece 1) 1 - qualifies as a CV
  1. ; 0 - does not qualify as a CV
  1. ; -1 - bad DFN or date
  1. ; (piece 3) 1 - vet was eligible on date specified (or DT)
  1. ; 0 - vet was not eligible on date specified (or DT)
  1. S CV=$P(RESULT,U,1),EDATE=$P(RESULT,U,2),ELIG=$P(RESULT,U,3)
  1. I 'CV S NFOUND=0 Q
  1. S NFOUND=1
  1. S TEST(NFOUND)=CV,DATE(NFOUND)=$$NOW^PXRMDATE
  1. S TEXT(NFOUND)="End date is "_$$FMTE^XLFDT(EDATE,"5Z")
  1. S DATA(NFOUND,"END DATE")=EDATE
  1. S DATA(NFOUND,"VALUE")=$S(ELIG:"ELIGIBLE",1:"EXPIRED")
  1. S DATA(NFOUND,"STATUS")=DATA(NFOUND,"VALUE")
  1. Q
  1. ;
  1. ;======================================================
  1. DISCHDT(DFN,NGET,BDT,EDT,NFOUND,TEST,DATE,DATA,TEXT) ;
  1. ; This computed finding returns the service separation date.
  1. ; CF.VA-SERVICE SEPARATION DATES
  1. N IND
  1. D MSDATA(DFN,NGET,BDT,EDT,.NFOUND,.TEST,.DATE,.DATA,.TEXT,1)
  1. F IND=1:1:NFOUND S DATA(IND,"VALUE")=DATE(IND)
  1. Q
  1. ;
  1. ;======================================================
  1. GETSVCD(DFN) ;Get the SVC^VADPT service data.
  1. I $D(^TMP($J,"SVC",DFN)) Q
  1. N VAERR,VAROOT
  1. S VAROOT="^TMP($J,""SVC"",DFN)"
  1. D SVC^VADPT
  1. Q
  1. ;
  1. ;======================================================
  1. MSDATA(DFN,NGET,BDT,EDT,NFOUND,TEST,DATE,DATA,TEXT,SEPDTR) ;This computed
  1. ;finding will return service branch information.
  1. ;CF.VA-SERVICE BRANCH.
  1. ;DBIA #5354
  1. N ENTRYDTA,MSDATA,NEPS
  1. D MSDATA^DGMSE(DFN,.NEPS,.ENTRYDTA,.MSDATA)
  1. I NEPS=0 S NFOUND=0 Q
  1. N BRANCH,DISTYPE,ENTRYDT,ENTRYDTO,IND,NOW
  1. N SCOMP,SDIR,SEPDT,SEPDTC,SEPDTCO
  1. S NOW=$$NOW^PXRMDATE
  1. S SDIR=$S(NGET>0:-1,1:1)
  1. S NGET=$S(NGET<0:-NGET,1:NGET)
  1. S NFOUND=0,ENTRYDT=""
  1. F S ENTRYDT=$O(ENTRYDTA(ENTRYDT),SDIR) Q:(ENTRYDT="")!(NFOUND=NGET) D
  1. . S IND=ENTRYDTA(ENTRYDT)
  1. . S SEPDT=MSDATA(IND,"SEPARATION DATE")
  1. .;Check for separation date required.
  1. . I SEPDTR,SEPDT="" Q
  1. . I SEPDTR,(SEPDT>EDT) Q
  1. .;If there is no Separation Date use the evaluation date and time.
  1. . S SEPDTC=$S(SEPDT'="":SEPDT,1:NOW)
  1. . I $$OVERLAP^PXRMINDX(ENTRYDT,SEPDTC,BDT,EDT)'="O" Q
  1. . S NFOUND=NFOUND+1
  1. . S TEST(NFOUND)=1
  1. . S DATE(NFOUND)=MSDATA(IND,"DATE")
  1. . S BRANCH=MSDATA(IND,"BRANCH")
  1. . I BRANCH="" S BRANCH="<NO DATA>"
  1. . S DATA(NFOUND,"BRANCH")=BRANCH
  1. . S SCOMP=MSDATA(IND,"SERVICE COMPONENT")
  1. . S SCOMP=$S(SCOMP="":"<NO DATA>",1:SCOMP)
  1. . S DATA(NFOUND,"SERVICE COMPONENT")=SCOMP
  1. . S DISTYPE=MSDATA(IND,"DISCHARGE TYPE")
  1. . S DISTYPE=$S(DISTYPE="":"<NO DATA>",1:DISTYPE)
  1. . S DATA(NFOUND,"DISCHARGE TYPE")=DISTYPE
  1. . S ENTRYDTO=$$FMTE^XLFDT(ENTRYDT,"5Z")
  1. . S SEPDTO=$S(SEPDT="":"<NO DATA>",1:$$FMTE^XLFDT(SEPDT,"5Z"))
  1. . S TEXT(NFOUND)="Service from "_ENTRYDTO_" to "_SEPDTO_" in "_BRANCH_"; service component "_SCOMP_"; discharge "_DISTYPE_"."
  1. Q
  1. ;
  1. ;======================================================
  1. OEF(DFN,NGET,BDT,EDT,NFOUND,TEST,DATE,DATA,TEXT) ;This computed
  1. ;finding will return OEF service information in the date range
  1. ;specified by Beginning Date/Time and Ending Date/Time.
  1. ;VA-OEF SERVICE.
  1. N FDATE,IND,SDIR,TDATE,TEMP
  1. S NFOUND=0
  1. S SDIR=$S(NGET<0:1,1:-1)
  1. S NGET=$S(NGET<0:-NGET,1:NGET)
  1. D GETSVCD(DFN)
  1. I ^TMP($J,"SVC",DFN,12)=0 Q
  1. S IND=""
  1. F S IND=$O(^TMP($J,"SVC",DFN,12,IND)) Q:IND="" D
  1. . S FDATE=$P(^TMP($J,"SVC",DFN,12,IND,2),U,1)
  1. . I FDATE="" Q
  1. . S TDATE=$P(^TMP($J,"SVC",DFN,12,IND,3),U,1)
  1. . I $$OVERLAP^PXRMINDX(FDATE,TDATE,BDT,EDT)'="O" Q
  1. . S TEMP(FDATE,"TEST")=1
  1. . S TEMP(FDATE,"DATA","LOCATION")=$P(^TMP($J,"SVC",DFN,12,IND,1),U,2)
  1. . S TEMP(FDATE,"TEXT")="OEF service from "_$$FMTE^XLFDT(FDATE,"5Z")_" to "_$$FMTE^XLFDT(TDATE,"5Z")_"; location: "_TEMP(FDATE,"DATA","LOCATION")
  1. S FDATE=""
  1. F S FDATE=$O(TEMP(FDATE),SDIR) Q:(FDATE="")!(NFOUND=NGET) D
  1. . S NFOUND=NFOUND+1
  1. . S TEST(NFOUND)=TEMP(FDATE,"TEST"),DATE(NFOUND)=FDATE
  1. . S (DATA(NFOUND,"VALUE"),DATA(NFOUND,"LOCATION"))=TEMP(FDATE,"DATA","LOCATION")
  1. . S TEXT(NFOUND)=TEMP(FDATE,"TEXT")
  1. Q
  1. ;
  1. ;======================================================
  1. OEIF(NGET,BDT,EDT,TGLIST,PARAM) ;List computed finding to build patient
  1. ;list based on OEF/OIF/UNK data.
  1. ;VA-OEF/OIF
  1. N DA,DATE,DFN,FDATE,LOC,LOCATION,NFOUND,TDATE
  1. K ^TMP($J,TGLIST)
  1. ;DBIA #5354
  1. D OEIF^DGMSE(BDT,EDT,"OEIF")
  1. S DATE=$$NOW^PXRMDATE
  1. S NGET=$S(NGET<0:-NGET,1:NGET)
  1. S LOCATION=$G(PARAM)
  1. I LOCATION="" S LOCATION="ANY"
  1. S DFN=""
  1. F S DFN=$O(^TMP($J,"OEIF",DFN)) Q:DFN="" D
  1. . S FDATE=""
  1. . F S FDATE=$O(^TMP($J,"OEIF",DFN,FDATE)) Q:FDATE="" D
  1. .. S TDATE=""
  1. .. F S TDATE=$O(^TMP($J,"OEIF",DFN,FDATE,TDATE)) Q:TDATE="" D
  1. ... S LOC=""
  1. ... F S LOC=$O(^TMP($J,"OEIF",DFN,FDATE,TDATE,LOC)) Q:LOC="" D
  1. .... S NFOUND=+$O(^TMP($J,TGLIST,DFN,""))
  1. .... I NFOUND=NGET Q
  1. .... I (LOCATION["ANY")!(LOCATION[LOC) D
  1. ..... S DA=""
  1. ..... F S DA=$O(^TMP($J,"OEIF",DFN,FDATE,TDATE,LOC,DA)) Q:DA="" D
  1. ...... S NFOUND=NFOUND+1
  1. ...... S ^TMP($J,TGLIST,DFN,NFOUND)=DFN_";"_DA_U_DATE_U_2_U_LOC_U_TDATE_";"_FDATE
  1. K ^TMP($J,"OEIF")
  1. Q
  1. ;
  1. ;======================================================
  1. OIF(DFN,NGET,BDT,EDT,NFOUND,TEST,DATE,DATA,TEXT) ;This computed
  1. ;finding will return OIF service information in the date range
  1. ;specified by Beginning Date/Time and Ending Date/Time.
  1. ;VA-OIF SERVICE.
  1. N FDATE,IND,SDIR,TDATE,TEMP
  1. S NFOUND=0
  1. S SDIR=$S(NGET<0:1,1:-1)
  1. S NGET=$S(NGET<0:-NGET,1:NGET)
  1. D GETSVCD(DFN)
  1. I ^TMP($J,"SVC",DFN,11)=0 Q
  1. S IND=""
  1. F S IND=$O(^TMP($J,"SVC",DFN,11,IND)) Q:IND="" D
  1. . S FDATE=$P(^TMP($J,"SVC",DFN,11,IND,2),U,1)
  1. . I FDATE="" Q
  1. . S TDATE=$P(^TMP($J,"SVC",DFN,11,IND,3),U,1)
  1. . I $$OVERLAP^PXRMINDX(FDATE,TDATE,BDT,EDT)'="O" Q
  1. . S TEMP(FDATE,"TEST")=1
  1. . S TEMP(FDATE,"DATA","LOCATION")=$P(^TMP($J,"SVC",DFN,11,IND,1),U,2)
  1. . S TEMP(FDATE,"TEXT")="OIF service from "_$$FMTE^XLFDT(FDATE,"5Z")_" to "_$$FMTE^XLFDT(TDATE,"5Z")_"; location: "_TEMP(FDATE,"DATA","LOCATION")
  1. S FDATE=""
  1. F S FDATE=$O(TEMP(FDATE),SDIR) Q:(FDATE="")!(NFOUND=NGET) D
  1. . S NFOUND=NFOUND+1
  1. . S TEST(NFOUND)=TEMP(FDATE,"TEST"),DATE(NFOUND)=FDATE
  1. . S (DATA(NFOUND,"VALUE"),DATA(NFOUND,"LOCATION"))=TEMP(FDATE,"DATA","LOCATION")
  1. . S TEXT(NFOUND)=TEMP(FDATE,"TEXT")
  1. Q
  1. ;
  1. ;======================================================
  1. PHEART(DFN,TEST,DATE,VALUE,TEXT) ;Single value computed finding for
  1. ;purple heart data. VA-PURPLE HEART.
  1. N CV,EDATE,ELIG,RESULT
  1. D GETSVCD(DFN)
  1. S TEST=^TMP($J,"SVC",DFN,9)
  1. I 'TEST Q
  1. S DATE=$$NOW^PXRMDATE
  1. S VALUE=""
  1. S TEXT="Patient is a Purple Heart recipient."
  1. Q
  1. ;
  1. ;======================================================
  1. POW(DFN,NGET,BDT,EDT,NFOUND,TEST,DATE,DATA,TEXT) ;This computed
  1. ;finding will be true if the patient was a POW in the date range
  1. ;specified by Beginning Date/Time and Ending Date/Time.
  1. ;VA-POW.
  1. N FDATE,TDATE
  1. S NFOUND=0
  1. D GETSVCD(DFN)
  1. S TEST=^TMP($J,"SVC",DFN,4)
  1. I 'TEST Q
  1. S FDATE=$P(^TMP($J,"SVC",DFN,4,1),U,1)
  1. S TDATE=$P(^TMP($J,"SVC",DFN,4,2),U,1)
  1. I $$OVERLAP^PXRMINDX(FDATE,TDATE,BDT,EDT)'="O" S TEST=0 Q
  1. S NFOUND=1
  1. S TEST(NFOUND)=1,DATE(NFOUND)=FDATE
  1. S (DATA(NFOUND,"VALUE"),DATA(NFOUND,"LOCATION"))=$P(^TMP($J,"SVC",DFN,4,3),U,2)
  1. S TEXT(NFOUND)="Patient was a POW from "_$$FMTE^XLFDT(FDATE,"5Z")_" to "_$$FMTE^XLFDT(TDATE,"5Z")_"; location: "_DATA(NFOUND,"LOCATION")
  1. Q
  1. ;
  1. ;======================================================
  1. RADEXP(DFN,NGET,BDT,EDT,NFOUND,TEST,DATE,DATA,TEXT) ;;This computed
  1. ;finding will be true if the radiation exposure registration
  1. ;date is in the date range specified by Beginning Date/Time
  1. ;and Ending Date/Time. DVA-RADIATION EXPOSURE.
  1. N RDATE
  1. S NFOUND=0
  1. D GETSVCD(DFN)
  1. S TEST=^TMP($J,"SVC",DFN,3)
  1. I 'TEST Q
  1. S RDATE=$P(^TMP($J,"SVC",DFN,3,1),U,1)
  1. I (RDATE<BDT)!(RDATE>EDT) S TEST=0 Q
  1. S NFOUND=1
  1. S TEST(NFOUND)=1,DATE(NFOUND)=RDATE
  1. S (DATA(NFOUND,"VALUE"),DATA(NFOUND,"EXPOSURE METHOD"))=$P(^TMP($J,"SVC",DFN,3,2),U,2)
  1. S TEXT(NFOUND)="Radiation exposure registration date: "_$$FMTE^XLFDT(RDATE,"5Z")_"; exposure method: "_DATA(NFOUND,"EXPOSURE METHOD")
  1. Q
  1. ;
  1. ;======================================================
  1. SBRANCH(DFN,NGET,BDT,EDT,NFOUND,TEST,DATE,DATA,TEXT) ;This computed
  1. ;finding will return service branch information.
  1. ;CF.VA-SERVICE BRANCH.
  1. N IND
  1. D MSDATA(DFN,NGET,BDT,EDT,.NFOUND,.TEST,.DATE,.DATA,.TEXT,0)
  1. F IND=1:1:NFOUND S DATA(IND,"VALUE")=DATA(IND,"BRANCH")
  1. Q
  1. ;
  1. ;======================================================
  1. UNKOEIF(DFN,NGET,BDT,EDT,NFOUND,TEST,DATE,DATA,TEXT) ;This computed
  1. ;finding will return unknown OEF/OIF service information in the date
  1. ;range specified by Beginning Date/Time and Ending Date/Time.
  1. ;VA-UNKNOWN OEF/OIF SERVICE.
  1. N FDATE,IND,SDIR,TDATE,TEMP
  1. S NFOUND=0
  1. S SDIR=$S(NGET<0:1,1:-1)
  1. S NGET=$S(NGET<0:-NGET,1:NGET)
  1. D GETSVCD(DFN)
  1. I ^TMP($J,"SVC",DFN,13)=0 Q
  1. S IND=""
  1. F S IND=$O(^TMP($J,"SVC",DFN,13,IND)) Q:IND="" D
  1. . S FDATE=$P(^TMP($J,"SVC",DFN,13,IND,2),U,1)
  1. . I FDATE="" Q
  1. . S TDATE=$P(^TMP($J,"SVC",DFN,13,IND,3),U,1)
  1. . I $$OVERLAP^PXRMINDX(FDATE,TDATE,BDT,EDT)'="O" Q
  1. . S TEMP(FDATE,"TEST")=1
  1. . S TEMP(FDATE,"DATA","LOCATION")=$P(^TMP($J,"SVC",DFN,13,IND,1),U,2)
  1. . S TEMP(FDATE,"TEXT")="OEF/OIF service from "_$$FMTE^XLFDT(FDATE,"5Z")_" to "_$$FMTE^XLFDT(TDATE,"5Z")_"; location: "_TEMP(FDATE,"DATA","LOCATION")
  1. S FDATE=""
  1. F S FDATE=$O(TEMP(FDATE),SDIR) Q:(FDATE="")!(NFOUND=NGET) D
  1. . S NFOUND=NFOUND+1
  1. . S TEST(NFOUND)=TEMP(FDATE,"TEST"),DATE(NFOUND)=FDATE
  1. . S (DATA(NFOUND,"VALUE"),DATA(NFOUND,"LOCATION"))=TEMP(FDATE,"DATA","LOCATION")
  1. . S TEXT(NFOUND)=TEMP(FDATE,"TEXT")
  1. Q
  1. ;
  1. ;======================================================
  1. VETERAN(DFN,TEST,DATE,VALUE,TEXT) ;Computed finding for checking if a
  1. ;patient is a veteran. VA-VETERAN.
  1. N VAEL
  1. S DATE=$$NOW^PXRMDATE
  1. D ELIG^VADPT
  1. S TEST=VAEL(4)
  1. S VALUE=""
  1. D KVA^VADPT
  1. Q
  1. ;
  1. ;======================================================
  1. VIET(DFN,NGET,BDT,EDT,NFOUND,TEST,DATE,DATA,TEXT) ;This computed will be
  1. ;true if Vietnam service in the date range specified by BDT and EDT
  1. ;is found. Note even though it is a multi structure it can only
  1. ;return one occurrence. VA-VIETNAM SERVICE.
  1. N FDATE,TDATE
  1. S NFOUND=0
  1. D GETSVCD(DFN)
  1. S TEST=^TMP($J,"SVC",DFN,1)
  1. I 'TEST Q
  1. S FDATE=$P(^TMP($J,"SVC",DFN,1,1),U,1)
  1. S TDATE=$P(^TMP($J,"SVC",DFN,1,2),U,1)
  1. I $$OVERLAP^PXRMINDX(FDATE,TDATE,BDT,EDT)'="O" S TEST=0 Q
  1. S NFOUND=1
  1. S TEST(NFOUND)=1,DATE(NFOUND)=FDATE
  1. S TEXT(NFOUND)="Vietnam service from "_$$FMTE^XLFDT(FDATE,"5Z")_" to "_$$FMTE^XLFDT(TDATE,"5Z")
  1. Q
  1. ;