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

IBTRH3.m

Go to the documentation of this file.
  1. IBTRH3 ;ALB/VAD - IBT HCSR RESPONSE VIEW ;02-JUN-2014
  1. ;;2.0;INTEGRATED BILLING;**517**;21-MAR-94;Build 240
  1. ;;Per VA Directive 6402, this routine should not be modified.
  1. ;
  1. EN ; -- main entry point for IBT HCSR Response View
  1. N IBPTNO,IBTRIEN,IBOK,DATA,IBTRNM,IBTRSPEC
  1. N DFN,NODE0,IEN312,INSNODE0,VALMCNT
  1. S IBTRNM="IBTRH3"
  1. ;
  1. D EN^VALM("IBT HCSR RESPONSE VIEW")
  1. I $G(IBPTNO)'=-1,'$D(IBFASTXT) K IBTNO,IBTRIEN,IBOK,DATA,IBTRN,IBTRSPEC,DFN,NODE0,IEN312,INSNODE0,VALMCNT G EN
  1. Q
  1. ;
  1. EN2 ;JWS;alternate entry point when IBTRIEN is selected from
  1. ; a response list view, so IBTRIEN is known
  1. N DLINE,IBPTNO,IBTRIEN,IBOK,DATA,IBTRNM,IBTRSPEC
  1. N DFN,NODE0,IEN312,INSNODE0,VALMCNT
  1. S IBTRNM="IBTRH3"
  1. S IBTRIEN=+$$SELEVENT^IBTRH5(0,"Select entry",.DLINE) ; select entry to expand
  1. I IBTRIEN'>0 Q
  1. D EN^VALM("IBT HCSR RESPONSE VIEW")
  1. Q
  1. ;
  1. EN3 ;alternate entry point when IBTRIEN is selected from
  1. ; a response list view to display response pending entry,
  1. ; so IBTRIEN is known for the current entry and we need
  1. ; to figure out the pending response.
  1. N CURIEN,CURNODE0
  1. S CURIEN=IBTRIEN
  1. S CURNODE0=NODE0
  1. ;
  1. N DLINE,IBPTNO,IBTRIEN,IBOK,DATA,IBTRNM,IBTRSPEC
  1. N DFN,NODE0,IEN312,INSNODE0,VALMCNT
  1. S IBTRNM="IBTRH3"
  1. I $P(CURNODE0,U,8)'="07" D NODP Q
  1. S IBTRIEN=$P(CURNODE0,U,14)
  1. I IBTRIEN'>0 D NODP Q
  1. D EN^VALM("IBT HCSR RESPONSE VIEW")
  1. Q
  1. ;
  1. HDR ; -- header code
  1. N VADM,Z
  1. S Z=""
  1. I +$G(DFN) D DEM^VADPT S Z=$E(VADM(1),1,28),Z=Z_$J("",35-$L(Z))_$P(VADM(2),U,2)_" DOB: "_$P(VADM(3),U,2)_" AGE: "_VADM(4)
  1. S VALMHDR(1)=Z
  1. S VALMSG="#In-Prog"
  1. Q
  1. ;
  1. INIT ; -- init variables and list array
  1. ;JWS 9/9/14 - added conditions based on IBTRIEN already selected
  1. K ^TMP(IBTRNM,$J)
  1. ;
  1. ; May need a switch or 2 to call INIT^IBTRH2 one to not display comments and
  1. ; maybe another to change the primary subscript from "IBTRH2" to something else
  1. ;
  1. ; JWS 9/9/14 - if response IEN has value, set PATIENT variable and skip forward
  1. I +$G(IBTRIEN) S IBPTNO=$P($G(^IBT(356.22,IBTRIEN,0)),U,2) G INIT1
  1. ; Get the Patient.
  1. S IBPTNO=$$ASKPAT() I IBPTNO=-1 S VALMQUIT="" G INITQ
  1. I '$D(^IBT(356.22,"D",IBPTNO)) D G INIT
  1. . W !,"No HCSR Response data for this Patient.",!
  1. ;
  1. ; Get the Appointment/Admission Date.
  1. S IBTRIEN=$$ASKEVT(IBPTNO)
  1. I IBTRIEN=-1 S VALMQUIT="" G INITQ
  1. I '$G(IBTRIEN) S VALMQUIT="" G INITQ
  1. INIT1 ;
  1. S IBTRSPEC("IBTPATID")=IBPTNO
  1. S IBTRSPEC("IBTEVENT")=IBTRIEN
  1. ;
  1. S NODE0=$G(^IBT(356.22,IBTRIEN,0))
  1. S DFN=+$P(NODE0,U,2)
  1. S IEN312=+$P(NODE0,U,3)
  1. S INSNODE0="" S:IEN312>0 INSNODE0=$G(^DPT(DFN,.312,IEN312,0)) ; 0-node in file 2.312
  1. ;
  1. ; Compile the data for the display.
  1. D COMPILE(IBTRNM,.IBTRSPEC)
  1. INITQ Q
  1. ;
  1. ASKPAT() ; Get the Patient Name
  1. ; Init vars
  1. N DIC,DTOUT,DUOUT,X,Y
  1. ; Patient lookup
  1. W !
  1. S DIC(0)="AEQM",DIC("S")="I $D(^IBT(356.22,""D"",Y))"
  1. S DIC("A")=$$FO^IBCNEUT1("Select PATIENT NAME: ",21,"R")
  1. S DIC="^DPT("
  1. D ^DIC
  1. Q +Y
  1. ;
  1. ASKEVT(IBTRIEN) ; Get the Appointment/Admission
  1. N A1,A2,MX,SEL,YY,XIEN,XREQ,XREQDATA
  1. S YY=$$GTLIST(IBTRIEN) I YY=-1 D NODP G ASKEVTX ; If no Appts Quit.
  1. ASKEVT1 ;
  1. S A1="",MX=0
  1. W !!!,"Select Appt/Adm:",!
  1. ; Loop through the list if Appointments/Admissions and display each one.
  1. F S A1=$O(^TMP("IBTRH3E",$J,"XLISTNO",A1)) Q:A1="" S A2=$P(^(A1),"^",3) D
  1. . S XIEN=+$G(^TMP("IBTRH3E",$J,"DILIST",2,A2))
  1. . S XREQ=+$P($G(^IBT(356.22,XIEN,0)),"^",13),XREQDATA=$G(^IBT(356.22,XREQ,0))
  1. . W !?5,A1,". ",$S($P(XREQDATA,"^",4)="I":"Adm: ",1:"App: ")
  1. . W $$FMTE^XLFDT($P(^TMP("IBTRH3E",$J,"XLISTNO",A1),U,1))," "
  1. . W $S($P(XREQDATA,"^",20)=1:"215:",1:"217:") S MX=A1
  1. . W " ",$$FMTE^XLFDT($P($P(XREQDATA,U,15),"."))," "
  1. . I $P($G(^IBT(356.22,XIEN,103)),"^") W $$GET1^DIQ(356.22,XIEN_",",103.01)
  1. . E I $D(^IBT(356.22,XIEN,101)) W "AAA"
  1. R !,"Enter Selection: ",SEL:DTIME I SEL=""!(SEL="^") S YY=-1 G ASKEVTX ; Nothing selected.
  1. I SEL<1!(SEL>MX) W !?5,"INVALID SELECTION.",! G ASKEVT1
  1. S YY=$P($G(^TMP("IBTRH3E",$J,"XLISTNO",SEL)),U,3)
  1. S YY=+$G(^TMP("IBTRH3E",$J,"DILIST",2,YY))
  1. I YY=0 S YY=-1
  1. ASKEVTX Q YY
  1. ;
  1. GTLIST(IBTRIEN) ; Create list of Appointments/Admission Dates.
  1. ; This will create a ^TMP global that will look similar to the following:
  1. ; ^TMP("IBTRH3E",$J,"DILIST",0)="1^*^0^"
  1. ; ^TMP("IBTRH3E",$J,"DILIST",0,"MAP")=.07
  1. ; ^TMP("IBTRH3E",$J,"DILIST",I1,J)="JUN 19, 2014@11:00"
  1. ; ^TMP("IBTRH3E",$J,"DILIST",I2,J)=IBTRNO
  1. ; ^TMP("IBTRH3E",$J,"DILIST","ID",J,.07)=IBTEVNT
  1. ; where:
  1. ; I1 = The first cross-reference index which has the external event date values to display.
  1. ; I2 = The second cross-reference index which has the pointers to the IBT(356.22,...) Record no.
  1. ; J = Is just the internal counter of events for the selected patient.
  1. ; And ^IBT(356.22,"D",IBTRIEN,IBTEVNT,IBTRNO) is the actual Cross-reference record.
  1. ;
  1. N A,B,X,Z,Z1
  1. S X=-1
  1. K ^TMP("IBTRH3E",$J)
  1. ; Only want Responses for the selected Patient.
  1. D LIST^DIC(356.22,,".07",,,,,,"I $P(^(0),U,2)=IBTRIEN,$P(^(0),U,20)=2",,"^TMP(""IBTRH3E"",$J)")
  1. I +$P($G(^TMP("IBTRH3E",$J,"DILIST",0)),U,1) D
  1. . S A=""
  1. . F S A=$O(^TMP("IBTRH3E",$J,"DILIST","ID",A)) Q:A="" D
  1. . . S B=^(A,.07) S ^TMP("IBTRH3E",$J,"XLIST",B,$G(^TMP("IBTRH3E",$J,"DILIST",1,A)))=A
  1. . S Z=0,(A,B)=""
  1. . F S A=$O(^TMP("IBTRH3E",$J,"XLIST",A)) Q:A="" D ; Appt/Adm
  1. . . S B=""
  1. . . F S B=$O(^TMP("IBTRH3E",$J,"XLIST",A,B)) Q:B="" S Z1=$G(^(B)) D ; Date Entered
  1. . . . S Z=Z+1
  1. . . . S ^TMP("IBTRH3E",$J,"XLISTNO",Z)=A_U_B_U_Z1
  1. . S X=1
  1. Q X
  1. ;
  1. COMPILE(IBTRNM,IBTRSPEC) ; -- Compile the data
  1. K ^TMP(IBTRNM,$J)
  1. ;
  1. ; Compile Data
  1. D SETDATA,BLD
  1. Q
  1. ;
  1. SETDATA ; -- Set up the data
  1. N SQ,SQ1,SQ2,SQ3,SQ4,X,IBTRNO
  1. S IBTRNO=IBTRSPEC("IBTEVENT")
  1. S DATA(0)=$G(^IBT(356.22,IBTRNO,0))
  1. ;
  1. I $D(^IBT(356.22,IBTRNO,1)) D ; Comments Multiple.
  1. . S SQ="" F S SQ=$O(^IBT(356.22,IBTRNO,1,SQ)) Q:SQ="" S DATA(1,SQ,0)=$G(^IBT(356.22,IBTRNO,1,SQ,0))
  1. ;
  1. S DATA(2)=$G(^IBT(356.22,IBTRNO,2))
  1. ;
  1. I $D(^IBT(356.22,IBTRNO,3)) D ; Patient Diagnosis Multiple.
  1. . S SQ=0 F S SQ=$O(^IBT(356.22,IBTRNO,3,SQ)) Q:SQ="" S DATA(3,SQ,0)=$G(^IBT(356.22,IBTRNO,3,SQ,0))
  1. ;
  1. S DATA(4)=$G(^IBT(356.22,IBTRNO,4))
  1. S DATA(7)=$G(^IBT(356.22,IBTRNO,7))
  1. S DATA(8)=$G(^IBT(356.22,IBTRNO,8))
  1. S DATA(9)=$G(^IBT(356.22,IBTRNO,9))
  1. S DATA(10)=$G(^IBT(356.22,IBTRNO,10))
  1. ;
  1. I $D(^IBT(356.22,IBTRNO,11)) D ; Attachments Multiple.
  1. . S SQ=0 F S SQ=$O(^IBT(356.22,IBTRNO,11,SQ)) Q:(SQ="")!('+SQ) S DATA(11,SQ,0)=$G(^IBT(356.22,IBTRNO,11,SQ,0))
  1. ;
  1. I $D(^IBT(356.22,IBTRNO,12)) D
  1. . N SQ1,TEXT
  1. . S SQ=0 F S SQ=$O(^IBT(356.22,IBTRNO,12,SQ)) Q:SQ="" D
  1. . . S TEXT=$G(^IBT(356.22,IBTRNO,12,SQ,0))
  1. . . I $L(TEXT)>80 D Q
  1. . . . N SAV,X1,END
  1. . . . S END=$L(TEXT," ")
  1. . . . F I=1:1:END S X1=$P(TEXT," ",I) D
  1. . . . . I X1="",$G(SAV)="" Q
  1. . . . . I X1="" S X1=" "
  1. . . . . I $L(X1)+$L($G(SAV))<78 S:$G(SAV)'="" SAV=SAV_" " S SAV=$G(SAV)_X1 Q
  1. . . . . S SQ1=$G(SQ1)+1,DATA(12,SQ1)=SAV,SAV=X1
  1. . . . I $G(SAV)'="" S SQ1=$G(SQ1)+1,DATA(12,SQ1)=SAV
  1. . . . S DATA(12,0)=SQ1
  1. . . S SQ1=$G(SQ1)+1,DATA(12,SQ1)=TEXT
  1. . . S DATA(12,0)=+SQ1
  1. ;
  1. I $D(^IBT(356.22,IBTRNO,13)) D ; Patient Event Provider Multiple.
  1. . S SQ1=0 F S SQ1=$O(^IBT(356.22,IBTRNO,13,SQ1)) Q:SQ1="" D
  1. . . I SQ1'?.N Q
  1. . . S SQ2="" F SQ2=0:1:5 S DATA(13,SQ1,SQ2)=$G(^IBT(356.22,IBTRNO,13,SQ1,SQ2))
  1. ;
  1. I $D(^IBT(356.22,IBTRNO,14)) D ; Patient Event Transport Multiple.
  1. . S SQ="" F S SQ=$O(^IBT(356.22,IBTRNO,14,SQ)) Q:SQ="" S DATA(14,SQ,0)=$G(^IBT(356.22,IBTRNO,14,SQ,0))
  1. ;
  1. I $D(^IBT(356.22,IBTRNO,15)) D ; Other UMO Multiple.
  1. . S SQ="" F S SQ=$O(^IBT(356.22,IBTRNO,15,SQ)) Q:SQ="" S DATA(15,SQ,0)=$G(^IBT(356.22,IBTRNO,15,SQ,0))
  1. ;
  1. ;
  1. I $D(^IBT(356.22,IBTRNO,16)) D ; Service Line Multiple.
  1. . S SQ1=0 S DATA(16,0)=$G(^IBT(356.22,IBTRNO,16,0))
  1. . F S SQ1=$O(^IBT(356.22,IBTRNO,16,SQ1)) Q:SQ1="" D ; Service Line Item.
  1. . . I SQ1'?.N Q
  1. . . S DATA(16,SQ1,0)=$G(^IBT(356.22,IBTRNO,16,SQ1,0))
  1. . . S SQ2=0 F S SQ2=$O(^IBT(356.22,IBTRNO,16,SQ1,SQ2)) Q:SQ2="" D ; Service Line Item sub-record.
  1. . . . I SQ2'?.N Q
  1. . . . I "^4^6^7^8^10^"[(U_SQ2_U) D Q ; Service Line Item sub-record is a multiple.
  1. . . . . ; (i.e., ^IBT(356.22,IBTRNO,16,1,6,0))
  1. . . . . S DATA(16,SQ1,SQ2,0)=$G(^IBT(356.22,IBTRNO,SQ1,SQ2,0))
  1. . . . . S SQ3=0 F S SQ3=$O(^IBT(356.22,IBTRNO,16,SQ1,SQ2,SQ3)) Q:SQ3="" D
  1. . . . . . I SQ3'?.N Q
  1. . . . . . ; (i.e., ^IBT(356.22,IBTRNO,16,1,6,1,0))
  1. . . . . . S DATA(16,SQ1,SQ2,SQ3,0)=$G(^IBT(356.22,IBTRNO,16,SQ1,SQ2,SQ3,0))
  1. . . . . . S SQ4="" F S SQ4=$O(^IBT(356.22,IBTRNO,16,SQ1,SQ2,SQ3,SQ4)) Q:SQ4="" D
  1. . . . . . . I SQ4'?.N Q
  1. . . . . . . ; (ie., ^IBT(356.22,IBTRNO,16,1,8,1,0-5,0))
  1. . . . . . . S DATA(16,SQ1,SQ2,SQ3,SQ4,0)=$G(^IBT(356.22,IBTRNO,16,SQ1,SQ2,SQ3,SQ4,0))
  1. . . . . Q
  1. . . . ; These sub-records are not multiples.
  1. . . . S DATA(16,SQ1,SQ2)=$G(^IBT(356.22,IBTRNO,16,SQ1,SQ2)) ; This is true of sub-records 0,1,2,3,5,7,9,11.
  1. ;
  1. ;
  1. S DATA(17)=$G(^IBT(356.22,IBTRNO,17))
  1. S DATA(18)=$G(^IBT(356.22,IBTRNO,18))
  1. S DATA(19)=$G(^IBT(356.22,IBTRNO,19))
  1. S DATA(20)=$G(^IBT(356.22,IBTRNO,20))
  1. S DATA(21)=$G(^IBT(356.22,IBTRNO,21))
  1. S DATA(22)=$G(^IBT(356.22,IBTRNO,22))
  1. ;
  1. I $D(^IBT(356.22,IBTRNO,101)) D ; AAA Segment Multiple.
  1. . S SQ=0 S DATA(101,0)=$G(^IBT(356.22,IBTRNO,101,0))
  1. . F S SQ=$O(^IBT(356.22,IBTRNO,101,SQ)) Q:SQ="" S DATA(101,SQ,0)=$G(^IBT(356.22,IBTRNO,101,SQ,0))
  1. ;
  1. S DATA(103,0)=$G(^IBT(356.22,IBTRNO,103))
  1. ;
  1. I $D(^IBT(356.22,IBTRNO,105)) D ; TRN Segment Multiple.
  1. . S SQ=0 S DATA(105,0)=$G(^IBT(356.22,IBTRNO,105,0))
  1. . F S SQ=$O(^IBT(356.22,IBTRNO,105,SQ)) Q:SQ="" S DATA(105,SQ,0)=$G(^IBT(356.22,IBTRNO,105,SQ,0))
  1. ;
  1. I $D(^IBT(356.22,IBTRNO,107)) D ; HI Segment Multiple.
  1. . S SQ=0 S DATA(107,0)=$G(^IBT(356.22,IBTRNO,107,0))
  1. . F S SQ=$O(^IBT(356.22,IBTRNO,107,SQ)) Q:SQ="" S DATA(107,SQ,0)=$G(^IBT(356.22,IBTRNO,107,SQ,0))
  1. Q
  1. ;
  1. BLD ; charges, as they would display on the bill
  1. S VALMCNT=0
  1. D EN2^IBTRH2(IBTRNM,IBTRIEN) ; Get the Group Insurance information.
  1. D GETINFO^IBTRH3A(IBTRNM,IBTRIEN)
  1. Q
  1. ;
  1. NODP ; No Response Pending for this selection.
  1. D FULL^VALM1
  1. W !!," No Response Pending to view."
  1. D PAUSE^VALM1 S VALMBCK="R"
  1. Q
  1. ;
  1. SETDLN(DLN,SPEC) ; Add Display Line to ^TMP global.
  1. S VALMCNT=VALMCNT+1
  1. S ^TMP(IBTRNM,$J,VALMCNT,0)=DLN
  1. I $G(SPEC)="B" D CNTRL^VALM10(VALMCNT,1,80,IOINHI,IOINORM)
  1. Q
  1. ;
  1. GTXNMY(VARPTR) ; API to obtain a Provider's Taxonomy Code and Person Class.
  1. ; INPUT: VARPTR is the variable pointer to the Provider.
  1. ; It can point to 1 of the 3 following globals:
  1. ; "ien;VA(200" points to the VA Individual Provider global
  1. ; "ien;DIC(4" points to the VA Institutional Provider global
  1. ; "ien;IBA(355.93" points to the non-VA Provider global
  1. ; where the ien is the internal identifier to the specified global.
  1. ;
  1. ; OUTPUT: TAXNMY will contain Taxonomy Results in 2 pieces:
  1. ; Piece 1: will contain the Taxonomy Code
  1. ; Piece 2: will contain the Person Class Description.
  1. N RESULTS,TAXNMY,PC1,PC2
  1. S (RESULTS,TAXNMY)=""
  1. S PC1=$P(VARPTR,";",1),PC2=$P(VARPTR,";",2)
  1. I PC2["VA(200" S RESULTS=$$TAXIND^XUSTAX(PC1) ; Get Taxonomy for VA Individual Provider
  1. I PC2["DIC(4" S RESULTS=$$TAXORG^XUSTAX(PC1) ; Get Taxonomy for VA Institutional Provider
  1. I PC2["IBA(355.93" S RESULTS=$$TAXGET^IBCEP81(PC1) ; Get Taxonomy for Non-VA Provider
  1. I '+$P(RESULTS,U,2) Q TAXNMY
  1. S TAXNMY=$P(RESULTS,U,1) ; Taxonomy Code
  1. S $P(TAXNMY,U,2)=$$GET1^DIQ(8932.1,+$P(RESULTS,U,2),.01) ; Person Class description
  1. Q TAXNMY
  1. ;
  1. HELP ; -- help code
  1. D FULL^VALM1
  1. W !!,"This option displays the view of a Healthcare Services Review Response."
  1. D PAUSE^VALM1 S VALMBCK="R"
  1. Q
  1. ;
  1. EXIT ; -- exit code
  1. K ^TMP("IBTRH3",$J)
  1. D CLEAR^VALM1,CLEAN^VALM10
  1. Q
  1. ;
  1. PRMARK(WHICH) ;EP
  1. ; Listman Protocol Action to Mark/Remove 'In-Progress' from a selected entry
  1. ; from the expand entry worklist
  1. ; Input: WHICH - 0 - Remove 'In-Progress' mark
  1. ; 1 - Set 'In-Progress' mark
  1. ; IBTRIEN - IEN of the Expanded Entry being marked/removed
  1. N STATUS
  1. D PRMARK^IBTRH1(WHICH,IBTRIEN,"IBTRH5IX")
  1. S STATUS=$$GET1^DIQ(356.22,IBTRIEN_",",.21,"I")
  1. I WHICH=1 D Q
  1. . I +STATUS=1 S VALMSG="Entry has been Marked" Q
  1. . S VALMSG="Nothing Done"
  1. ;
  1. I +STATUS=0 S VALMSG="Entry has been Unmarked" Q
  1. S VALMSG="Nothing Done"
  1. Q
  1. ;