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

DVBACER1.m

Go to the documentation of this file.
  1. DVBACER1 ;BEST/JFW - DEMTRAN CONTRACTED EXAM REPORTS ; 6/27/12 3:56pm
  1. ;;2.7;AMIE;**178,185,186**;Apr 10, 1995;Build 21
  1. ;Per VHA Directive 2004-038, this routine should not be modified.
  1. ;
  1. ; - RPC: DVBAD CONTRACTED EXAM REPORTS
  1. ;
  1. ; Creates Detailed, Summary, or Timeliness Contracted Exam Reports
  1. ; for the Disability Examination Management Tracking, Referral and
  1. ; Notification application (demTRAN).
  1. ;
  1. ;Input:
  1. ; DVBALST: Global array to hold results to be returned
  1. ; DVBARTYP: Report Type to Generate (Required)
  1. ; D : Detailed
  1. ; S : Summary
  1. ; T : Timeliness
  1. ; DVBAFLTRS: Report Filters (Optional)
  1. ; ("DATE") = FM From Date ^ FM To Date (Inclusive)
  1. ; ("CONTRACTOR") = IEN of Contractor in 396.45
  1. ; ("PENDING") = 1 indicating Pending Exams Only ^
  1. ; # of Days Referral Exceeded (Optional)
  1. ; ("SORT") = 1 indicating Contractor sorted else
  1. ; Request DTM sorted (Detailed Reports Only)
  1. ; ("DELIMITTED") = 1 indicating Report returned Delimitted
  1. ; (Detailed Reports Only)
  1. ;
  1. CERPTS(DVBALST,DVBARTYP,DVBAFLTRS) ;Contracted Exam Reports
  1. N DVBAQ,DVBASDTE,DVBAEDTE,DVBACIEN,DVBAPEXMS,DVBAPDAYS,DVBAHFS
  1. N DVBARIEN,DVBAEIEN,DVBAENDE,DVBAGLBL,DVBARSLTS,DVBASCRH
  1. N DVBACSRT,DVBADLMT,X1,X2,X,%H,%Y
  1. N GETARY,ERARY,RSTAT
  1. K ^TMP($J,"DVBACER1")
  1. S DVBAHFS=$$GETHFS()
  1. S DVBASCRH=$NA(^TMP($J,"DVBASCRATCH"))
  1. S DVBAGLBL=$NA(^TMP($J,"DVBA"_$G(DVBARTYP)_"RPTS"))
  1. S DVBARSLTS=$NA(^TMP("DVBA"_$G(DVBARTYP)_"RSLTS",$J,1))
  1. K @DVBAGLBL,@DVBARSLTS,@DVBASCRH
  1. Q:($$OPENHFS("DVBRP",DVBAHFS,"W",DVBARSLTS)) ;Quit if error
  1. U IO
  1. ; Initial start values if filters undefined
  1. S (DVBAEDTE,DVBACIEN)=""
  1. S (DVBASDTE,DVBAPEXMS,DVBAPDAYS,DVBACSRT,DVBADLMT)=0
  1. ;
  1. ;Date filter defined, set loop conditions
  1. D:($D(DVBAFLTRS("DATE")))
  1. .S DVBASDTE=$P($G(DVBAFLTRS("DATE")),"^")_".2359"
  1. .S X1=DVBASDTE,X2=-1 D C^%DTC S DVBASDTE=X
  1. .S DVBAEDTE=$P($G(DVBAFLTRS("DATE")),"^",2)_".2359"
  1. ;Contractor filter defined
  1. S:($D(DVBAFLTRS("CONTRACTOR"))) DVBACIEN=$G(DVBAFLTRS("CONTRACTOR"))
  1. ;Pending Exam filter defined
  1. D:($D(DVBAFLTRS("PENDING")))
  1. .S DVBAPEXMS=1,DVBAPDAYS=+$P($G(DVBAFLTRS("PENDING")),"^",2)
  1. ;Sorting (Contractor or Request DTM - for Detailed Reports Only)
  1. S:($D(DVBAFLTRS("SORT"))) DVBACSRT=1
  1. ;Delimitted Output (for Detailed Reports Only)
  1. S:($D(DVBAFLTRS("DELIMITTED"))) DVBADLMT=1
  1. ;
  1. ;Get Contractor(s) list for Timeliness and Summary Reports
  1. ; if specific contractor NOT defined
  1. D:(($G(DVBARTYP)'="D")&(DVBACIEN']"")) CONLST(DVBACIEN,DVBARSLTS)
  1. ;
  1. ;Use "C" X-REF so results are in Date/Time Order
  1. F S DVBASDTE=$O(^DVB(396.3,"C",DVBASDTE)) Q:('+DVBASDTE)!((DVBAEDTE]"")&(DVBASDTE>DVBAEDTE)) D
  1. .S DVBARIEN="" ;In case there is more than 1 request ien for dtm
  1. .F S DVBARIEN=$O(^DVB(396.3,"C",DVBASDTE,DVBARIEN)) Q:'+DVBARIEN D
  1. ..;Use "C" X-REF for retrieving exams for request IEN
  1. ..I ($G(DVBARTYP)="T") D CERPTS2 Q
  1. ..S DVBAEIEN=""
  1. ..F S DVBAEIEN=$O(^DVB(396.4,"C",DVBARIEN,DVBAEIEN)) Q:'+DVBAEIEN D
  1. ...S DVBAENDE=$G(^DVB(396.4,DVBAEIEN,"CNTRCTR"))
  1. ...;Ignore exams that have NOT been contracted out
  1. ...;Q:($P(DVBAENDE,"^",2)']"")
  1. ...I ($P(DVBAENDE,"^",2)']"") Q
  1. ...;Ignore exams NOT for specified contractor if defined
  1. ...;Q:((DVBACIEN]"")&(DVBACIEN'=(+DVBAENDE)))
  1. ...I ((DVBACIEN]"")&(DVBACIEN'=(+DVBAENDE))) Q
  1. ...;DETAILED & SUMMARY REPORTING
  1. ...D:($G(DVBARTYP)'="T")
  1. ....S DVBAQ=0
  1. ....I (DVBAPEXMS) D Q:(DVBAQ) ;Pending Exams
  1. .....;Ignore Exams NOT received back from contractor
  1. .....S:($P(DVBAENDE,"^",3)]"") DVBAQ=1
  1. .....D:(('DVBAQ)&(DVBAPDAYS]""))
  1. ......;Ignore Pending Exams less than requested days
  1. ......S X1=DT,X2=$P(DVBAENDE,"^",2) D ^%DTC
  1. ......S:(X<=DVBAPDAYS) DVBAQ=1
  1. ....D:($G(DVBARTYP)="D") DRPTS(DVBACSRT,DVBARIEN,DVBAEIEN,DVBASCRH)
  1. ....D:($G(DVBARTYP)="S") SRPTS(DVBARIEN,DVBAENDE,DVBAGLBL,DVBARSLTS)
  1. ..D:($G(DVBARTYP)="T") TRPTS3(DVBAGLBL,DVBARSLTS)
  1. D:($G(DVBARTYP)="D") DSPLYDTL(DVBACSRT,DVBACIEN,DVBAPEXMS,DVBASCRH,DVBADLMT) ;Rpt Details
  1. D CLOSEHFS("DVBRP",DVBAHFS,DVBARSLTS)
  1. S DVBALST=$NA(@DVBARSLTS)
  1. K @DVBAGLBL,@DVBASCRH
  1. Q
  1. ;
  1. ;
  1. CERPTS2 ;Logic for timeliness report
  1. N EXSTAT
  1. K ^TMP($J,"DVBACER1")
  1. S DVBAEIEN=""
  1. F S DVBAEIEN=$O(^DVB(396.4,"C",DVBARIEN,DVBAEIEN)) Q:'+DVBAEIEN D
  1. .S DVBAENDE=$G(^DVB(396.4,DVBAEIEN,"CNTRCTR"))
  1. .;Ignore exams that have NOT been contracted out
  1. .Q:($P(DVBAENDE,"^",2)']"")
  1. .;Ignore exams NOT for specified contractor if defined
  1. .Q:((DVBACIEN]"")&(DVBACIEN'=(+DVBAENDE)))
  1. .;TIMELINESS REPORTING
  1. .;Innore exams that have been canceled
  1. .S EXSTAT=$P(^DVB(396.4,DVBAEIEN,0),"^",4)
  1. .Q:EXSTAT="X"!(EXSTAT="RX")
  1. .D TRPTS2(DVBAENDE)
  1. D TRPTS3(DVBAGLBL,DVBARSLTS)
  1. Q
  1. ;
  1. ;Input DVBACIEN - Specific Contrator Data Requested
  1. ; DVBARSLTS - Global Refernece for results
  1. ;Output Global Array Entries Added for Contractor(s)
  1. ; ^TMP("DVBATRSLTS",$J)
  1. CONLST(DVBACIEN,DVBARSLTS) ;Get Contractor List
  1. ;Used in Timeliness and Summary Reports
  1. N DVBACNDE
  1. ;Specific Contractor Info Requested
  1. I (DVBACIEN]"") D Q
  1. .S DVBACNDE=$G(^DVB(396.45,DVBACIEN,0))
  1. .S @DVBARSLTS@(DVBACIEN)=$P(DVBACNDE,"^")_"^"_$P(DVBACNDE,"^",3)_"^"
  1. ;All Contractor Info Requested
  1. S DVBACIEN=0 F S DVBACIEN=$O(^DVB(396.45,DVBACIEN)) Q:'+DVBACIEN D
  1. .S DVBACNDE=$G(^DVB(396.45,DVBACIEN,0))
  1. .;Create list of contractor info and initialize counters
  1. .; for the specific report to 0
  1. .S @DVBARSLTS@($P(DVBACNDE,"^"),DVBACIEN)=$P(DVBACNDE,"^")_"^"_$P(DVBACNDE,"^",3)_"^0"
  1. .S:($G(DVBARTYP)="S") @DVBARSLTS@($P(DVBACNDE,"^"),DVBACIEN)=@DVBARSLTS@($P(DVBACNDE,"^"),DVBACIEN)_"^0"
  1. Q
  1. ;
  1. ;Input DVBACSRT - 1/0 if report should be sorted by Contractor
  1. ; Name (1) or by Request Date (0)
  1. ; DVBARIEN - IEN of Request (396.3) associated with Exam
  1. ; DVBAEIEN - IEN of Exam (396.4)
  1. ; DVBASCRH - Global Reference for results (Scratch Global)
  1. ;Output Global Array Entry Added (Sorted) - ^TMP($J,"DVBASCRH")
  1. DRPTS(DVBACSRT,DVBARIEN,DVBAEIEN,DVBASCRH) ; Detailed Report Processing
  1. N DVBACNME,DVBAENME,DVBARDTM,DVBAEXM
  1. ;Retrieve Exam Info
  1. D GETS^DIQ(396.4,DVBAEIEN_",",".03;100","E","DVBAEXM")
  1. S DVBACNME=$G(DVBAEXM(396.4,DVBAEIEN_",",100,"E")) ;Contractor
  1. S:(DVBACNME']"") DVBACNME="UNKNOWN"
  1. S DVBAENME=$G(DVBAEXM(396.4,DVBAEIEN_",",.03,"E")) ;Exam Name
  1. S:(DVBAENME']"") DVBAENME="UNKNOWN"
  1. S DVBAENME=$TR(DVBAENME,","," ") ;Remove Commas
  1. S DVBARDTM=$P($G(^DVB(396.3,DVBARIEN,0)),"^",2) ;Request DateTime
  1. S:('DVBACSRT) @DVBASCRH@(DVBARDTM,DVBARIEN,DVBAENME,DVBAEIEN)=""
  1. S:(DVBACSRT) @DVBASCRH@($TR(DVBACNME,","," "),DVBARDTM,DVBARIEN,DVBAENME,DVBAEIEN)=DVBACNME
  1. Q
  1. ;
  1. ;Input DVBACSRT - 1/0 if report should be sorted by Contractor
  1. ; Name (1) or by Request Date (0)
  1. ; DVBAEIEN - IEN of Exam (396.4)
  1. ; DVBAPEXMS - 1/0 Indicates if only pending exams report
  1. ; DVBASCRH - Global Reference for results (Scratch Global)
  1. ; DVBADLMT - 1/0 if report output should be delimitted
  1. ; Delimitted Output (1) or Formatted Output (0)
  1. ;Output Write Report Details
  1. DSPLYDTL(DVBACSRT,DVBACIEN,DVBAPEXMS,DVBASCRH,DVBADLMT) ;Display Sorted Detailed Report Info
  1. N DVBAREF,DVBACNME,DVBARIEN,DVBAINFO,DVBAOFST
  1. N DVBASPCG,DVBALNE,DFN,VADM,X
  1. D DRPTSPCG(DVBACSRT,DVBADLMT,.DVBASPCG)
  1. S DVBAREF=DVBASCRH,DVBAOFST=0,(DVBACNME,DVBARIEN)=""
  1. S:('DVBACSRT) DVBAOFST=1
  1. ;Quit if no results found
  1. Q:('$D(@DVBASCRH))
  1. ;Report Column Header Info
  1. W:((DVBACIEN']"")&(DVBACSRT)) "Contractor",$S(DVBADLMT:"^",1:"")
  1. W:((DVBACIEN']"")&(DVBACSRT)&('DVBADLMT)) !
  1. W ?DVBASPCG(1),"Request Date",$S(DVBADLMT:"^",1:""),?DVBASPCG(2),"SSN",$S(DVBADLMT:"^",1:"")
  1. W ?DVBASPCG(3),"Patient Name",$S(DVBADLMT:"^",1:""),?DVBASPCG(4),"Status",$S(DVBADLMT:"^",1:"")
  1. W:('DVBADLMT) !
  1. W ?DVBASPCG(5),"Examinations",$S(DVBADLMT:"^",1:"")
  1. W:(('DVBACSRT)&(DVBACIEN']"")) ?DVBASPCG(6),"Contractor",$S(DVBADLMT:"^",1:"")
  1. W ?DVBASPCG(7),"Referred"
  1. S DVBALNE=(DVBASPCG(7)+18)
  1. D:('DVBAPEXMS)
  1. .W ?DVBASPCG(8),$S(DVBADLMT:"^",1:""),"Received"
  1. .S DVBALNE=(DVBASPCG(8)+12)
  1. S X="" S $P(X,"-",DVBALNE)="-" W:('DVBADLMT) !,X ;Header Line
  1. F S DVBAREF=$Q(@DVBAREF) Q:(DVBAREF'[$P(DVBASCRH,")")) D
  1. .;Display Contractor Name, if NOT specific contractor report
  1. .D:((DVBACIEN']"")&(DVBACSRT)&(DVBADLMT)) ; Delimitted Output
  1. ..W !,@DVBAREF_"^"
  1. .D:((DVBACNME'=@DVBAREF)&(DVBACIEN']"")&(DVBACSRT)&('DVBADLMT)) ;Formatted Output
  1. ..W:(DVBACNME]"") ! ;Extra Line Space between Contractors
  1. ..S DVBACNME=@DVBAREF
  1. ..W !,DVBACNME
  1. .;Display Request Info (Multiple Exams)
  1. .D:(DVBARIEN'=$P(DVBAREF,",",(5-DVBAOFST)))
  1. ..S DVBARIEN=$P(DVBAREF,",",(5-DVBAOFST))
  1. ..S DFN=+$G(^DVB(396.3,DVBARIEN,0)) ; Patient
  1. ..D DEM^VADPT ;DBIA: 10061
  1. ..D GETS^DIQ(396.3,DVBARIEN_",","17","E","DVBAINFO")
  1. ..D:('DVBADLMT) ;Formatted Report
  1. ...W !?DVBASPCG(1),$$FMTE^XLFDT($P(DVBAREF,",",(4-DVBAOFST)),"M") ;No Seconds
  1. ...W ?DVBASPCG(2),$P($G(VADM(2)),"^",2),?DVBASPCG(3),$G(VADM(1))
  1. ...W ?DVBASPCG(4),$G(DVBAINFO(396.3,DVBARIEN_",",17,"E"))
  1. .D:(DVBADLMT) ;Detailed Report
  1. ..W:'((DVBACIEN']"")&(DVBACSRT)) !
  1. ..W $$FMTE^XLFDT($P(DVBAREF,",",(4-DVBAOFST)),"M")_"^" ;No Seconds
  1. ..W $P($G(VADM(2)),"^",2)_"^"_$G(VADM(1))_"^"
  1. ..W $G(DVBAINFO(396.3,DVBARIEN_",",17,"E"))_"^"
  1. .;Exam Info for Request
  1. .D EXMINFO(DVBAPEXMS,+$P(DVBAREF,",",(7-DVBAOFST)),DVBACSRT,DVBADLMT,.DVBASPCG)
  1. K DVBAINFO,VADM
  1. Q
  1. ;
  1. ;Input DVBAPEXMS - 1/0 Indicates if only pending exams report
  1. ; DVBAEIEN - IEN of Exam (396.4)
  1. ; DVBACSRT - 1/0 if report should be sorted by Contractor
  1. ; Name (1) or by Request Date (0)
  1. ; DVBADLMT - 1/0 if report output should be delimitted
  1. ; Delimitted Output (1) or Formatted Output (0)
  1. ; DVBASPCG - Array to store spacing (By Ref)
  1. ;Output Write EXAM Info for request to report
  1. EXMINFO(DVBAPEXMS,DVBAEIEN,DVBACSRT,DVBADLMT,DVBASPCG) ;Display Exam Info
  1. N DVBAEXM
  1. ;Retrieve exam info for display on report
  1. D GETS^DIQ(396.4,DVBAEIEN_",",".03;100;101;102","EI","DVBAEXM")
  1. W:('DVBADLMT) !
  1. W ?DVBASPCG(5),$G(DVBAEXM(396.4,DVBAEIEN_",",.03,"E")),$S(DVBADLMT:"^",1:"")
  1. W:('DVBACSRT) ?DVBASPCG(6),$G(DVBAEXM(396.4,DVBAEIEN_",",100,"E")),$S(DVBADLMT:"^",1:"")
  1. W ?DVBASPCG(7),$$FMTE^XLFDT($P($G(DVBAEXM(396.4,DVBAEIEN_",",101,"I")),"@"),"M"),$S(DVBADLMT:"^",1:"")
  1. W:('DVBAPEXMS) ?DVBASPCG(8),$P($G(DVBAEXM(396.4,DVBAEIEN_",",102,"E")),"@")
  1. Q
  1. ;
  1. ;Input DVBACSRT - 1/0 if report should be sorted by Contractor
  1. ; Name (1) or by Request Date (0)
  1. ; DVBADLMT - 1/0 if report output should be delimitted
  1. ; Delimitted Output (1) or Formatted Output (0)
  1. ; DVBASPCG - Array to store spacing (By Ref)
  1. DRPTSPCG(DVBACSRT,DVBADLMT,DVBASPCG) ;Setup Detailed Report Spacing
  1. N DVBAOFST,DVBAI
  1. S DVBAOFST=0 S:('DVBACSRT&'DVBADLMT) DVBAOFST=3
  1. K DVBASPCG
  1. D:(DVBADLMT)
  1. .F DVBAI=1:1:8 S DVBASPCG(DVBAI)=0
  1. D:('DVBADLMT)
  1. .S DVBASPCG(1)=3-DVBAOFST,DVBASPCG(2)=23-DVBAOFST
  1. .S DVBASPCG(3)=36-DVBAOFST,DVBASPCG(4)=68-DVBAOFST
  1. .S DVBASPCG(5)=5-DVBAOFST,DVBASPCG(6)=70-DVBAOFST
  1. .S:(DVBACSRT) DVBASPCG(7)=70-DVBAOFST,DVBASPCG(8)=91-DVBAOFST
  1. .S:('DVBACSRT) DVBASPCG(7)=101,DVBASPCG(8)=121
  1. Q
  1. ;
  1. ;Input DVBARIEN - IEN of Request (396.3) associated with Exam
  1. ; DVBACNDE - CNTRCTR Node for Exam IEN in 396.4
  1. ; DVBAGLBL - Global Reference for Requests Counted
  1. ; DVBARSLTS - Global Reference for results
  1. ;Output Global Array Entries Updated for Contractor if applicable
  1. ; ^TMP($J,"DVBATRPTS") / ^TMP("DVBATRSLTS",$J)
  1. SRPTS(DVBARIEN,DVBACNDE,DVBAGLBL,DVBARSLTS) ;Summary Report Processing
  1. N DVBACNTR,DVBACNME
  1. S DVBACNME=$P($G(^DVB(396.45,+$P(DVBACNDE,"^"),0)),"^")
  1. ;Retrieve current number of exams referred by contractor
  1. S DVBACNTR=$P($G(@DVBARSLTS@(DVBACNME,+$P(DVBACNDE,"^"))),"^",3)
  1. ;Increment Number of Exams referred for contractor
  1. S $P(@DVBARSLTS@(DVBACNME,+$P(DVBACNDE,"^")),"^",3)=DVBACNTR+1
  1. ;Increment 2507 Request Counter if IEN NOT already counted for Contractor
  1. D:('$D(@DVBAGLBL@(+$P(DVBACNDE,"^"),DVBARIEN)))
  1. .S @DVBAGLBL@(+$P(DVBACNDE,"^"),DVBARIEN)="" ;Add request IEN to list
  1. .S DVBACNTR=$P($G(@DVBARSLTS@(DVBACNME,+$P(DVBACNDE,"^"))),"^",4)
  1. .;Increment # of 2507 Request referred to contractor
  1. .S $P(@DVBARSLTS@(DVBACNME,+$P(DVBACNDE,"^")),"^",4)=DVBACNTR+1
  1. Q
  1. ;
  1. ;Input DVBACNDE - CNTRCTR Node for Exam IEN in 396.4
  1. ; DVBAGLBL - Global Reference for Timeliness counters
  1. ; DVBARSLTS - Global Reference for results
  1. ;Output Global Array Entries Updated for Contractor if applicable
  1. ; ^TMP($J,"DVBATRPTS") / ^TMP("DVBATRSLTS",$J)
  1. TRPTS(DVBACNDE,DVBAGLBL,DVBARSLTS,DVBATVAL) ;Timeliness Report Processing
  1. N DVBACNME,DVBANDAYS,DVBANEXMS
  1. ;Ignore Exams NOT returned (Checked-In) by Contractor
  1. S DVBANDAYS=+$G(@DVBAGLBL@(+$P(DVBACNDE,"^"),"DAYS"))
  1. S DVBANEXMS=+$G(@DVBAGLBL@(+$P(DVBACNDE,"^"),"EXMS"))
  1. ;Increment Timeliness Counter (Total # of Days)
  1. S @DVBAGLBL@(+$P(DVBACNDE,"^"),"DAYS")=DVBANDAYS+DVBATVAL
  1. ;Increment Number of Exams Found
  1. S @DVBAGLBL@(+$P(DVBACNDE,"^"),"EXMS")=DVBANEXMS+1
  1. S DVBACNME=$P($G(^DVB(396.45,+$P(DVBACNDE,"^"),0)),"^")
  1. ;Update Average Timeliness result for Contractor
  1. S $P(@DVBARSLTS@(DVBACNME,+$P(DVBACNDE,"^")),"^",3)=$FN((DVBANDAYS+DVBATVAL)/(DVBANEXMS+1),"",0)
  1. Q
  1. ;
  1. TRPTS2(DVBACNDE) ;Timeliness include logic
  1. N DVBACNME,DVBATVAL,DVBANDAYS,DVBANEXMS,X1,X2,X,%Y
  1. N DVBAEXM2,STAT
  1. K ^TMP($J,"DVBACER1.FLAG")
  1. D GETS^DIQ(396.4,DVBAEIEN_",",".03;.04;100;101;102","EI","DVBAEXM2")
  1. S STAT=$G(DVBAEXM2(396.4,DVBAEIEN_",",.04,"I"))
  1. S CNTR=$G(DVBAEXM2(396.4,DVBAEIEN_",",100,"I")) S:$G(CNTR)="" CNTR="X"
  1. S X1=$P(DVBACNDE,"^",3),X2=$P(DVBACNDE,"^",2) D ^%DTC
  1. I $P(DVBACNDE,"^",3)="" S ^TMP($J,"DVBACER1.FLAG",CNTR)=1
  1. S DVBATVAL=X ;# Days between CheckIn and CheckOut
  1. S:DVBATVAL="" DVBATVAL=0
  1. S ^TMP($J,"DVBACER1",CNTR,DVBATVAL)=DVBACNDE_"|"_STAT
  1. Q
  1. ;
  1. TRPTS3(DVBAGLBL,DVBARSLTS) ;Timeliness calculation section
  1. Q:'$D(^TMP($J,"DVBACER1"))
  1. N OPENEXM,CNTR,DVBATVAL
  1. S CNTR="" F S CNTR=$O(^TMP($J,"DVBACER1",CNTR)) Q:CNTR="" D
  1. .Q:CNTR="X"
  1. .Q:$G(^TMP($J,"DVBACER1.FLAG",CNTR))=1
  1. .S OPENEXM(CNTR)=0
  1. .S DVBATVAL="" F S DVBATVAL=$O(^TMP($J,"DVBACER1",CNTR,DVBATVAL)) Q:DVBATVAL=""!(OPENEXM(CNTR)=1) D
  1. ..I $P(^TMP($J,"DVBACER1",CNTR,DVBATVAL),"|",2)'="C" S OPENEXM(CNTR)=1 Q
  1. S CNTR="" F S CNTR=$O(OPENEXM(CNTR)) Q:CNTR="" D
  1. .Q:OPENEXM(CNTR)=1
  1. .S DVBATVAL=$O(^TMP($J,"DVBACER1",CNTR,""),-1),DVBACNDE=$P(^TMP($J,"DVBACER1",CNTR,DVBATVAL),"|",1) D
  1. ..Q:DVBATVAL=0
  1. ..D TRPTS(DVBACNDE,DVBAGLBL,DVBARSLTS,DVBATVAL)
  1. K ^TMP($J,"DVBACER1")
  1. K ^TMP($J,"DVBACER1.FLAG")
  1. ;
  1. GETHFS() ;Get HFS File Name
  1. N DVBAH
  1. S DVBAH=$H
  1. Q "DVBA_"_$J_"_"_$P(DVBAH,",")_"_"_$P(DVBAH,",",2)_".DAT"
  1. ;
  1. OPENHFS(DVBAHNDL,DVBAHFS,DVBAMODE,DVBARSLTS) ;Open HFS File
  1. N DVBAERR,POP
  1. S DVBAERR=0
  1. D OPEN^%ZISH(DVBAHNDL,,DVBAHFS,$G(DVBAMODE,"W")) D:POP Q:POP
  1. .S DVBAERR=1,@DVBARSLTS@(1)="0^Unable to open HFS file."
  1. Q DVBAERR
  1. ;
  1. CLOSEHFS(DVBAHNDL,DVBAHFS,DVBARSLTS) ;Close HFS and unload data
  1. N DVBADEL,X,%ZIS
  1. D CLOSE^%ZISH(DVBAHNDL)
  1. S DVBADEL(DVBAHFS)=""
  1. S X=$$FTG^%ZISH(,DVBAHFS,$NA(@DVBARSLTS@(1)),4)
  1. S X=$$DEL^%ZISH(,$NA(DVBADEL))
  1. Q
  1. ;