- IBTRE5 ;ALB/AAS - CLAIMS TRACKING EDIT PROVIDER ; 1-SEP-93
- ;;Version 2.0 ; INTEGRATED BILLING ;; 21-MAR-94
- ;;Per VHA Directive 10-93-142, this routine should not be modified.
- ;
- % G ^IBTRE
- ;
- EN(IBTRN) ; -- entry point for protocols
- ; must do own rebuild actions
- ; -- Input - pointer to 356
- ;
- N IBETYP,IBTRND,IBXY,IBCNT,IBDGPM
- D FULL^VALM1
- S VALMBCK=""
- S IBTRND=$G(^IBT(356,IBTRN,0)),IBDGPM=$P(IBTRND,"^",5)
- ;
- S IBETYP=$$TRTP^IBTRE1(IBTRN)
- I IBETYP>2 W !!,"Clinical Information comes from the parent package." D PAUSE^VALM1 G ENQ
- ;
- ; -- outpatient provider
- I IBETYP=2 D G ENQ
- .I $P(IBTRND,"^",4) D ASK^SDCO3(+$P(IBTRND,"^",4)) K SDCOQUIT
- .I '$P(IBTRND,"^",4) W !!,"Can not add provider to outpatient visits prior to Check-out.",! D PAUSE^VALM1
- .S VALMBCK="R"
- ;
- ; -- Inpatient provider
- I IBETYP=1 D
- .Q:'IBDGPM
- .; -- ask admitting provider
- .I '$O(^IBT(356.94,"ADG",IBDGPM,0)) D APRVD(IBTRN,IBETYP)
- .I $G(IBSEL)="^" Q
- .;
- .; -- edit other provider
- .D PRVD(IBTRN,IBETYP)
- .S VALMBCK="R"
- ;
- ENQ ;
- Q
- APRVD(IBTRN,IBETYP) ; -- add admitting provider
- ;
- N IBAPR,DA,DR,DIC,DIE,DD,DO,IOINHI,IOINORM
- S IBAPR=""
- ;
- I IBETYP'=1!('IBDGPM) W !!,"You can only enter and admitting provider for an admission",! D PAUSE^VALM1 G APRVDQ
- ;
- S X="IOINHI;IOINORM" D ENDR^%ZISS
- S IBAPR=$O(^IBT(356.94,"ADG",IBDGPM,0)) I IBAPR S IBDA=$O(^IBT(356.94,"ADG",IBDGPM,IBAPR,0))
- W !!,"--- ",IOINHI,"Admitting Physician",IOINORM," --- ",$S('IBAPR:"Unspecified",1:$P($G(^VA(200,+$P(IBAPR,"^",3),0)),"^"))
- I +IBAPR D EDT(IBDA,".03;") W !
- I '$O(^IBT(356.94,"ADG",IBDGPM,0)) D ADD(IBTRN,3)
- ;
- W !
- APRVDQ Q
- ;
- PRVD(IBTRN,IBETYP) ; -- add/edit provider
- Q:'IBTRN
- I $G(IBETYP)'=1 Q
- N DA,DR,DIC,DIE
- I IBETYP'=1!('IBDGPM) W !!,"You can only enter a provider for an admission",! D PAUSE^VALM1 G PRVDQ
- ;
- S X="IOINHI;IOINORM" D ENDR^%ZISS
- W !!,"--- ",IOINHI,"Provider",IOINORM," --- "
- S IBSEL="Add"
- D SET(IBTRN) I $D(IBXY) D LIST(.IBXY) S IBSEL=$$ASK^IBTRE4(IBCNT,"A")
- I IBSEL["^"!(IBSEL["Return") S:IBSEL["^" IBQUIT=1 G PRVDQ
- I IBSEL="Add" D ADD(IBTRN)
- D:IBSEL EDT(+$G(IBXY(+IBSEL)),".01;.03;.04")
- PRVDQ Q
- ;
- ADD(IBTRN,TYPE) ; -- Add a new provider
- ;
- N DTOUT,DUTOU,X,Y,DIC
- S IBCNT=0
- I '$G(TYPE) S TYPE=""
- NXT S DIC("A")=$S(TYPE=3:"Admitting Provider: ",IBCNT<1:"Select Provider: ",1:"Next Provider: ")
- S DIC("S")="I $D(^VA(200,""AK.PROVIDER"",$P(^(0),U,1),+Y))"
- S DIC="^VA(200,",DIC(0)="AEMQ",X=""
- W:$G(IBCNT) ! D ^DIC K DIC G ADDQ:Y<0
- S IBCNT=IBCNT+1
- S IBAPR=$$NEW(+Y,IBTRN,TYPE)
- I IBAPR,TYPE'=3 D EDT(IBAPR) G NXT
- ADDQ I $D(DUOUT)!($D(DTOUT)) S IBSEL="^"
- Q
- ;
- NEW(VA200,IBTRN,TYPE) ; -- file new entry
- ;
- N DA,DD,DO,DIC,DIK,DINUM,DLAYGO,X,Y,I,J
- ;
- ; -- default date = episode date
- S X=$P($P(^IBT(356,IBTRN,0),"^",6),".")
- S (DIC,DIK)="^IBT(356.94,",DIC(0)="L",DLAYGO=356.94
- D FILE^DICN S IBAPR=+Y
- I IBAPR>0 L +^IBT(356.94,IBAPR) S $P(^IBT(356.94,IBAPR,0),"^",2,4)=$$DGPM^IBTRE3(IBTRN)_"^"_VA200_"^"_$G(TYPE),DA=IBAPR D IX1^DIK L -^IBT(356.94,IBAPR)
- NEWQ Q IBAPR
- ;
- EDT(IBAPR,IBDR) ; -- edit entry
- ;
- N DR,DIE,DA
- S DR=$G(IBDR) I DR="" S DR=".01;.03;.04"
- S DA=IBAPR,DIE="^IBT(356.94,"
- L +^IBT(356.94,IBAPR):5 I '$T D LOCKED^IBTRCD1 G EDTQ
- Q:'$G(^IBT(356.94,DA,0))
- D ^DIE
- L -^IBT(356.94,IBAPR)
- EDTQ Q
- ;
- SET(IBTRN) ; -- set array
- N IBDGPM,IBPRV
- S IBDGPM=$$DGPM^IBTRE3(IBTRN)
- S (IBPRV,IBCNT)=0
- F S IBPRV=$O(^IBT(356.94,"ADGPM",IBDGPM,IBPRV)) Q:'IBPRV S IBDA=0 F S IBDA=$O(^IBT(356.94,"ADGPM",IBDGPM,IBPRV,IBDA)) Q:'IBDA D
- .S IBCNT=IBCNT+1
- .S IBXY(IBCNT)=IBDA
- SETQ Q
- ;
- LIST(IBXY) ;List Provider Array
- ; Input -- IBXY Provider Array Subscripted by a Number
- ; Output -- List Provider Array
- N I,IBXD,IBTNOD
- W !
- S I=0 F S I=$O(IBXY(I)) Q:'I D
- .S IBTNOD=$G(^IBT(356.94,+IBXY(I),0))
- .S IBXD=$P($G(^VA(200,$P(IBTNOD,"^",3),0)),"^")
- .W !?2,I," ",IBXD,?40,$$DAT1^IBOUTL($P($P(IBTNOD,"^",1),"."),2),?60,$$EXPAND^IBTRE(356.94,.04,$P(IBTNOD,"^",4))
- Q
- ;
- DICS(Y) ; -- called by input transform and screen logic for type of provider
- N IBY
- S IBY=0
- I Y<3 S IBY=1 G DICSQ
- I Y=3 I '$D(^IBT(356.94,"ATP",+$P($G(^IBT(356.94,DA,0)),U,2),3))!($O(^IBT(356.94,"ATP",+$P($G(^IBT(356.94,DA,0)),U,2),3,0))=DA) S IBY=1
- DICSQ Q IBY
- ;
- DTCHK(DA,X) ; -- input transform for 356.94;.01. date not before admission or after discharge
- N IBTRN,IBOK,IBCDT
- S IBOK=1
- G:'DA!($G(X)<1) DTCHKQ
- S IBTRN=+$O(^IBT(356,"AD",+$P(^IBT(356.94,DA,0),"^",2),0))
- G:'IBTRN DTCHKQ
- S IBCDT=$$CDT^IBTODD1(IBTRN)
- I X<$P(+IBCDT,".") S IBOK=0 G DTCHKQ ;before adm
- I $P(IBCDT,"^",2),X>$P(IBCDT,"^",2) S IBOK=0 G DTCHKQ ; after disch
- I X>$$FMADD^XLFDT(DT,7) S IBOK=0 G DTCHKQ
- ;
- DTCHKQ Q IBOK
- IBTRE5 ;ALB/AAS - CLAIMS TRACKING EDIT PROVIDER ; 1-SEP-93
- +1 ;;Version 2.0 ; INTEGRATED BILLING ;; 21-MAR-94
- +2 ;;Per VHA Directive 10-93-142, this routine should not be modified.
- +3 ;
- % GOTO ^IBTRE
- +1 ;
- EN(IBTRN) ; -- entry point for protocols
- +1 ; must do own rebuild actions
- +2 ; -- Input - pointer to 356
- +3 ;
- +4 NEW IBETYP,IBTRND,IBXY,IBCNT,IBDGPM
- +5 DO FULL^VALM1
- +6 SET VALMBCK=""
- +7 SET IBTRND=$GET(^IBT(356,IBTRN,0))
- SET IBDGPM=$PIECE(IBTRND,"^",5)
- +8 ;
- +9 SET IBETYP=$$TRTP^IBTRE1(IBTRN)
- +10 IF IBETYP>2
- WRITE !!,"Clinical Information comes from the parent package."
- DO PAUSE^VALM1
- GOTO ENQ
- +11 ;
- +12 ; -- outpatient provider
- +13 IF IBETYP=2
- Begin DoDot:1
- +14 IF $PIECE(IBTRND,"^",4)
- DO ASK^SDCO3(+$PIECE(IBTRND,"^",4))
- KILL SDCOQUIT
- +15 IF '$PIECE(IBTRND,"^",4)
- WRITE !!,"Can not add provider to outpatient visits prior to Check-out.",!
- DO PAUSE^VALM1
- +16 SET VALMBCK="R"
- End DoDot:1
- GOTO ENQ
- +17 ;
- +18 ; -- Inpatient provider
- +19 IF IBETYP=1
- Begin DoDot:1
- +20 IF 'IBDGPM
- QUIT
- +21 ; -- ask admitting provider
- +22 IF '$ORDER(^IBT(356.94,"ADG",IBDGPM,0))
- DO APRVD(IBTRN,IBETYP)
- +23 IF $GET(IBSEL)="^"
- QUIT
- +24 ;
- +25 ; -- edit other provider
- +26 DO PRVD(IBTRN,IBETYP)
- +27 SET VALMBCK="R"
- End DoDot:1
- +28 ;
- ENQ ;
- +1 QUIT
- APRVD(IBTRN,IBETYP) ; -- add admitting provider
- +1 ;
- +2 NEW IBAPR,DA,DR,DIC,DIE,DD,DO,IOINHI,IOINORM
- +3 SET IBAPR=""
- +4 ;
- +5 IF IBETYP'=1!('IBDGPM)
- WRITE !!,"You can only enter and admitting provider for an admission",!
- DO PAUSE^VALM1
- GOTO APRVDQ
- +6 ;
- +7 SET X="IOINHI;IOINORM"
- DO ENDR^%ZISS
- +8 SET IBAPR=$ORDER(^IBT(356.94,"ADG",IBDGPM,0))
- IF IBAPR
- SET IBDA=$ORDER(^IBT(356.94,"ADG",IBDGPM,IBAPR,0))
- +9 WRITE !!,"--- ",IOINHI,"Admitting Physician",IOINORM," --- ",$SELECT('IBAPR:"Unspecified",1:$PIECE($GET(^VA(200,+$PIECE(IBAPR,"^",3),0)),"^"))
- +10 IF +IBAPR
- DO EDT(IBDA,".03;")
- WRITE !
- +11 IF '$ORDER(^IBT(356.94,"ADG",IBDGPM,0))
- DO ADD(IBTRN,3)
- +12 ;
- +13 WRITE !
- APRVDQ QUIT
- +1 ;
- PRVD(IBTRN,IBETYP) ; -- add/edit provider
- +1 IF 'IBTRN
- QUIT
- +2 IF $GET(IBETYP)'=1
- QUIT
- +3 NEW DA,DR,DIC,DIE
- +4 IF IBETYP'=1!('IBDGPM)
- WRITE !!,"You can only enter a provider for an admission",!
- DO PAUSE^VALM1
- GOTO PRVDQ
- +5 ;
- +6 SET X="IOINHI;IOINORM"
- DO ENDR^%ZISS
- +7 WRITE !!,"--- ",IOINHI,"Provider",IOINORM," --- "
- +8 SET IBSEL="Add"
- +9 DO SET(IBTRN)
- IF $DATA(IBXY)
- DO LIST(.IBXY)
- SET IBSEL=$$ASK^IBTRE4(IBCNT,"A")
- +10 IF IBSEL["^"!(IBSEL["Return")
- IF IBSEL["^"
- SET IBQUIT=1
- GOTO PRVDQ
- +11 IF IBSEL="Add"
- DO ADD(IBTRN)
- +12 IF IBSEL
- DO EDT(+$GET(IBXY(+IBSEL)),".01;.03;.04")
- PRVDQ QUIT
- +1 ;
- ADD(IBTRN,TYPE) ; -- Add a new provider
- +1 ;
- +2 NEW DTOUT,DUTOU,X,Y,DIC
- +3 SET IBCNT=0
- +4 IF '$GET(TYPE)
- SET TYPE=""
- NXT SET DIC("A")=$SELECT(TYPE=3:"Admitting Provider: ",IBCNT<1:"Select Provider: ",1:"Next Provider: ")
- +1 SET DIC("S")="I $D(^VA(200,""AK.PROVIDER"",$P(^(0),U,1),+Y))"
- +2 SET DIC="^VA(200,"
- SET DIC(0)="AEMQ"
- SET X=""
- +3 IF $GET(IBCNT)
- WRITE !
- DO ^DIC
- KILL DIC
- IF Y<0
- GOTO ADDQ
- +4 SET IBCNT=IBCNT+1
- +5 SET IBAPR=$$NEW(+Y,IBTRN,TYPE)
- +6 IF IBAPR
- IF TYPE'=3
- DO EDT(IBAPR)
- GOTO NXT
- ADDQ IF $DATA(DUOUT)!($DATA(DTOUT))
- SET IBSEL="^"
- +1 QUIT
- +2 ;
- NEW(VA200,IBTRN,TYPE) ; -- file new entry
- +1 ;
- +2 NEW DA,DD,DO,DIC,DIK,DINUM,DLAYGO,X,Y,I,J
- +3 ;
- +4 ; -- default date = episode date
- +5 SET X=$PIECE($PIECE(^IBT(356,IBTRN,0),"^",6),".")
- +6 SET (DIC,DIK)="^IBT(356.94,"
- SET DIC(0)="L"
- SET DLAYGO=356.94
- +7 DO FILE^DICN
- SET IBAPR=+Y
- +8 IF IBAPR>0
- LOCK +^IBT(356.94,IBAPR)
- SET $PIECE(^IBT(356.94,IBAPR,0),"^",2,4)=$$DGPM^IBTRE3(IBTRN)_"^"_VA200_"^"_$GET(TYPE)
- SET DA=IBAPR
- DO IX1^DIK
- LOCK -^IBT(356.94,IBAPR)
- NEWQ QUIT IBAPR
- +1 ;
- EDT(IBAPR,IBDR) ; -- edit entry
- +1 ;
- +2 NEW DR,DIE,DA
- +3 SET DR=$GET(IBDR)
- IF DR=""
- SET DR=".01;.03;.04"
- +4 SET DA=IBAPR
- SET DIE="^IBT(356.94,"
- +5 LOCK +^IBT(356.94,IBAPR):5
- IF '$TEST
- DO LOCKED^IBTRCD1
- GOTO EDTQ
- +6 IF '$GET(^IBT(356.94,DA,0))
- QUIT
- +7 DO ^DIE
- +8 LOCK -^IBT(356.94,IBAPR)
- EDTQ QUIT
- +1 ;
- SET(IBTRN) ; -- set array
- +1 NEW IBDGPM,IBPRV
- +2 SET IBDGPM=$$DGPM^IBTRE3(IBTRN)
- +3 SET (IBPRV,IBCNT)=0
- +4 FOR
- SET IBPRV=$ORDER(^IBT(356.94,"ADGPM",IBDGPM,IBPRV))
- IF 'IBPRV
- QUIT
- SET IBDA=0
- FOR
- SET IBDA=$ORDER(^IBT(356.94,"ADGPM",IBDGPM,IBPRV,IBDA))
- IF 'IBDA
- QUIT
- Begin DoDot:1
- +5 SET IBCNT=IBCNT+1
- +6 SET IBXY(IBCNT)=IBDA
- End DoDot:1
- SETQ QUIT
- +1 ;
- LIST(IBXY) ;List Provider Array
- +1 ; Input -- IBXY Provider Array Subscripted by a Number
- +2 ; Output -- List Provider Array
- +3 NEW I,IBXD,IBTNOD
- +4 WRITE !
- +5 SET I=0
- FOR
- SET I=$ORDER(IBXY(I))
- IF 'I
- QUIT
- Begin DoDot:1
- +6 SET IBTNOD=$GET(^IBT(356.94,+IBXY(I),0))
- +7 SET IBXD=$PIECE($GET(^VA(200,$PIECE(IBTNOD,"^",3),0)),"^")
- +8 WRITE !?2,I," ",IBXD,?40,$$DAT1^IBOUTL($PIECE($PIECE(IBTNOD,"^",1),"."),2),?60,$$EXPAND^IBTRE(356.94,.04,$PIECE(IBTNOD,"^",4))
- End DoDot:1
- +9 QUIT
- +10 ;
- DICS(Y) ; -- called by input transform and screen logic for type of provider
- +1 NEW IBY
- +2 SET IBY=0
- +3 IF Y<3
- SET IBY=1
- GOTO DICSQ
- +4 IF Y=3
- IF '$DATA(^IBT(356.94,"ATP",+$PIECE($GET(^IBT(356.94,DA,0)),U,2),3))!($ORDER(^IBT(356.94,"ATP",+$PIECE($GET(^IBT(356.94,DA,0)),U,2),3,0))=DA)
- SET IBY=1
- DICSQ QUIT IBY
- +1 ;
- DTCHK(DA,X) ; -- input transform for 356.94;.01. date not before admission or after discharge
- +1 NEW IBTRN,IBOK,IBCDT
- +2 SET IBOK=1
- +3 IF 'DA!($GET(X)<1)
- GOTO DTCHKQ
- +4 SET IBTRN=+$ORDER(^IBT(356,"AD",+$PIECE(^IBT(356.94,DA,0),"^",2),0))
- +5 IF 'IBTRN
- GOTO DTCHKQ
- +6 SET IBCDT=$$CDT^IBTODD1(IBTRN)
- +7 ;before adm
- IF X<$PIECE(+IBCDT,".")
- SET IBOK=0
- GOTO DTCHKQ
- +8 ; after disch
- IF $PIECE(IBCDT,"^",2)
- IF X>$PIECE(IBCDT,"^",2)
- SET IBOK=0
- GOTO DTCHKQ
- +9 IF X>$$FMADD^XLFDT(DT,7)
- SET IBOK=0
- GOTO DTCHKQ
- +10 ;
- DTCHKQ QUIT IBOK