| [613] | 1 | IBTRE4 ;ALB/AAS - CLAIMS TRACKING EDIT PROCEDURE ;1-SEP-93
 | 
|---|
 | 2 |  ;;2.0;INTEGRATED BILLING;**10,210,266**;21-MAR-94
 | 
|---|
 | 3 |  ;;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
 | 4 |  ;
 | 
|---|
 | 5 | % G ^IBTRE
 | 
|---|
 | 6 |  ;
 | 
|---|
 | 7 | EN(IBTRN) ; -- entry point for protocols
 | 
|---|
 | 8 |  ;    must do own rebuild actions
 | 
|---|
 | 9 |  ; -- Input - point to 356
 | 
|---|
 | 10 |  ;
 | 
|---|
 | 11 |  N IBETYP,IBTRND,IBXY,IBCNT,IBDGPM
 | 
|---|
 | 12 |  D FULL^VALM1
 | 
|---|
 | 13 |  S VALMBCK=""
 | 
|---|
 | 14 |  S IBTRND=$G(^IBT(356,IBTRN,0)),IBDGPM=$P(IBTRND,"^",5)
 | 
|---|
 | 15 |  ;
 | 
|---|
 | 16 |  S IBETYP=$$TRTP^IBTRE1(IBTRN)
 | 
|---|
 | 17 |  I IBETYP>2 W !!,"Clinical Information comes from the parent package." D PAUSE^VALM1 G ENQ
 | 
|---|
 | 18 |  ;
 | 
|---|
 | 19 |  ; -- outpatient procedure
 | 
|---|
 | 20 |  I IBETYP=2 D  G ENQ
 | 
|---|
 | 21 |  .W !!,*7,"You must use the add/edit action on Check-out to add procedures to Outpatient Encounters.",!
 | 
|---|
 | 22 |  .S VALMBCK="R"
 | 
|---|
 | 23 |  ;
 | 
|---|
 | 24 |  ; -- Inpatient procedure
 | 
|---|
 | 25 |  Q:'IBDGPM
 | 
|---|
 | 26 |  I IBETYP=1 D PROC(IBTRN,IBETYP) S VALMBCK="R"
 | 
|---|
 | 27 |  ;
 | 
|---|
 | 28 | ENQ ;
 | 
|---|
 | 29 |  Q
 | 
|---|
 | 30 |  ;
 | 
|---|
 | 31 | PROC(IBTRN,IBETYP) ; -- add/edit procedure
 | 
|---|
 | 32 |  Q:'IBTRN
 | 
|---|
 | 33 |  I $G(IBETYP)'=1 Q
 | 
|---|
 | 34 |  N DA,DR,DIC,DIE
 | 
|---|
 | 35 |  ;S IBDGPM=$P(^IBT(356,+IBTRN,0),"^",5)
 | 
|---|
 | 36 |  I IBETYP'=1!('IBDGPM) W !!,"You can only enter a procedure for an admission",! D PAUSE^VALM1 G PROCQ
 | 
|---|
 | 37 |  ;
 | 
|---|
 | 38 |  S X="IOINHI;IOINORM" D ENDR^%ZISS
 | 
|---|
 | 39 |  W !!,"--- ",IOINHI,"Procedure",IOINORM," --- "
 | 
|---|
 | 40 |  S IBSEL="Add"
 | 
|---|
 | 41 |  D SET(IBTRN) I $D(IBXY) D LIST(.IBXY) S IBSEL=$$ASK(IBCNT,"A")
 | 
|---|
 | 42 |  I IBSEL["^"!(IBSEL["Return") S:IBSEL["^" IBQUIT=1 G PROCQ
 | 
|---|
 | 43 |  I IBSEL="Add" D ADD(IBTRN)
 | 
|---|
 | 44 |  I IBSEL D EDT(+$G(IBXY(+IBSEL)),".01;.03;"),CHECK(+$G(IBXY(+IBSEL)))
 | 
|---|
 | 45 | PROCQ Q
 | 
|---|
 | 46 |  ;
 | 
|---|
 | 47 | CHECK(IBADG) ; Check active status of the ICD0 code (Code Set Versioning)
 | 
|---|
 | 48 |  N IBZ,DIR,X,Y
 | 
|---|
 | 49 |  S IBZ=$G(^IBT(356.91,+$G(IBADG),0)) Q:'IBZ
 | 
|---|
 | 50 |  Q:$$ICD0ACT^IBACSV(+IBZ,$P(IBZ,U,3))
 | 
|---|
 | 51 |  W !!,*7,"Warning! The Procedure Code ",$P($$ICD0^IBACSV(+IBZ),U)," is inactive on this date!"
 | 
|---|
 | 52 |  S DIR(0)="EA",DIR("A")="Press <Enter> to continue" D ^DIR
 | 
|---|
 | 53 |  Q
 | 
|---|
 | 54 |  ;
 | 
|---|
 | 55 | ADD(IBTRN,TYPE) ; -- Add a new procedure
 | 
|---|
 | 56 |  ;
 | 
|---|
 | 57 |  N DTOUT,DUTOU,X,Y,DIC,DIR,IBDATE,IBP,IBPN,IBPDT,IBADT,ICDVDT
 | 
|---|
 | 58 |  ;Service date (for CSV)
 | 
|---|
 | 59 |  S IBDATE=$$TRNDATE^IBACSV(IBTRN)
 | 
|---|
 | 60 |  S IBADT=$G(^DGPM(+$$DGPM^IBTRE3(IBTRN),0)) ;Admission Date
 | 
|---|
 | 61 |  S IBCNT=0
 | 
|---|
 | 62 |  I '$G(TYPE) S TYPE=""
 | 
|---|
 | 63 | NXT ; The Procedure Date has to be asked first for the Code Set Versioning requirements
 | 
|---|
 | 64 |  ; Input Procedure Date
 | 
|---|
 | 65 |  S DIR(0)="D",DIR("A")=$S(IBCNT<1:"Procedure Date",1:"Next Procedure Date")
 | 
|---|
 | 66 |  S DIR("B")=$$DAT3^IBOUTL(IBDATE)
 | 
|---|
 | 67 |  W:$G(IBCNT) !
 | 
|---|
 | 68 |  S IBPDT=IBDATE D ^DIR K DIR G ADDQ:Y'?7N S IBPDT=+Y W "  ",$$DAT2^IBOUTL(IBPDT)
 | 
|---|
 | 69 |  ; The same checking as in the Data Dictionary, file #356.91, field #.03 (PROCEDURE DATE):
 | 
|---|
 | 70 |  I IBADT,(IBPDT+.9)<IBADT W !!,*7,"The Procedure Date cannot be earlier than Admission (",$$DAT3^IBOUTL(IBADT),")",! G NXT
 | 
|---|
 | 71 |  ; Input Procedure (ICD0)
 | 
|---|
 | 72 |  S DIC("A")="Select Procedure: "
 | 
|---|
 | 73 |  S DIC("S")="I $$ICD0ACT^IBACSV(+Y,IBPDT)"
 | 
|---|
 | 74 |  S ICDVDT=IBPDT ; for DD ID (versioned text)
 | 
|---|
 | 75 |  S DIC="^ICD0(",DIC(0)="AEMQ",X=""
 | 
|---|
 | 76 |  D ^DIC K DIC G ADDQ:Y'>0
 | 
|---|
 | 77 |  S IBP=+Y,IBPN=$P(Y,U,2) ; Procedure IEN and name
 | 
|---|
 | 78 |  ;I '$$ICD0ACT^IBACSV(IBP,IBPDT) W !!,*7,IBPN," is not active for the procedure date ("_$$DAT3^IBOUTL(IBPDT),").",! G NXT
 | 
|---|
 | 79 |  I $D(^IBT(356.91,"ADGPM",$$DGPM^IBTRE3(IBTRN),IBP)) W !!,*7,IBPN," is already a procedure.",!
 | 
|---|
 | 80 |  S IBCNT=IBCNT+1
 | 
|---|
 | 81 |  S IBADG=$$NEW(IBP,IBTRN,TYPE,IBPDT)
 | 
|---|
 | 82 |  I IBADG>0,TYPE'=3 G NXT ;D EDT(IBADG) G NXT
 | 
|---|
 | 83 | ADDQ Q
 | 
|---|
 | 84 |  ;
 | 
|---|
 | 85 | NEW(ICDI,IBTRN,TYPE,IBPDT) ; -- file new entry
 | 
|---|
 | 86 |  ;
 | 
|---|
 | 87 |  N DA,DD,DO,DIC,DIK,DINUM,DLAYGO,X,Y,I,J
 | 
|---|
 | 88 |  S X=ICDI,(DIC,DIK)="^IBT(356.91,",DIC(0)="L",DLAYGO=356.91
 | 
|---|
 | 89 |  D FILE^DICN S IBADG=+Y I Y'>0 G NEWQ
 | 
|---|
 | 90 |  I '$G(IBPDT) S IBPDT=$P($P(^IBT(356,IBTRN,0),"^",6),".")
 | 
|---|
 | 91 |  L +^IBT(356.91,IBADG) S $P(^IBT(356.91,IBADG,0),"^",2,3)=$$DGPM^IBTRE3(IBTRN)_"^"_IBPDT,DA=IBADG D IX1^DIK L -^IBT(356.91,IBADG)
 | 
|---|
 | 92 | NEWQ Q IBADG
 | 
|---|
 | 93 |  ;
 | 
|---|
 | 94 | EDT(IBADG,IBDR) ; -- edit entry
 | 
|---|
 | 95 |  ;
 | 
|---|
 | 96 |  N DR,DIE,DA,DIDEL
 | 
|---|
 | 97 |  S DR=$G(IBDR),DIDEL=356.91 I DR="" S DR=".03;"
 | 
|---|
 | 98 |  S DA=IBADG,DIE="^IBT(356.91,"
 | 
|---|
 | 99 |  Q:'$G(^IBT(356.91,DA,0))
 | 
|---|
 | 100 |  L +^IBT(356.91,IBADG):5 I '$T D LOCKED^IBTRCD1 G EDTQ
 | 
|---|
 | 101 |  D ^DIE
 | 
|---|
 | 102 |  L -^IBT(356.91,IBADG)
 | 
|---|
 | 103 | EDTQ Q
 | 
|---|
 | 104 |  ;
 | 
|---|
 | 105 | SET(IBTRN) ; -- set array
 | 
|---|
 | 106 |  N IBDGPM,IBICD
 | 
|---|
 | 107 |  S IBDGPM=$$DGPM^IBTRE3(IBTRN)
 | 
|---|
 | 108 |  S (IBICD,IBDA,IBCNT)=0
 | 
|---|
 | 109 |  F  S IBICD=$O(^IBT(356.91,"ADGPM",IBDGPM,IBICD)) Q:'IBICD  S IBDA=0 F  S IBDA=$O(^IBT(356.91,"ADGPM",IBDGPM,IBICD,IBDA)) Q:'IBDA  D
 | 
|---|
 | 110 |  .Q:'$D(^IBT(356.91,+IBDA,0))
 | 
|---|
 | 111 |  .S IBCNT=IBCNT+1
 | 
|---|
 | 112 |  .S IBXY(IBCNT)=IBDA_"^"_IBICD
 | 
|---|
 | 113 | SETQ Q
 | 
|---|
 | 114 |  ;
 | 
|---|
 | 115 | LIST(IBXY) ;List Diagnosis Array
 | 
|---|
 | 116 |  ; Input  -- IBXY     Diagnosis Array Subscripted by a Number
 | 
|---|
 | 117 |  ; Output -- List Diagnosis Array
 | 
|---|
 | 118 |  N I,IBXD,IBDATE
 | 
|---|
 | 119 |  W !
 | 
|---|
 | 120 |  S I=0 F  S I=$O(IBXY(I)) Q:'I  D
 | 
|---|
 | 121 |  . S IBTNOD=$G(^IBT(356.91,+IBXY(I),0))
 | 
|---|
 | 122 |  . S IBDATE=$P($P(IBTNOD,U,3),".") ; Procedure date
 | 
|---|
 | 123 |  . S IBXD=$$ICD0^IBACSV(+$P(IBXY(I),U,2),IBDATE)
 | 
|---|
 | 124 |  . W !?2,I,"  ",$P(IBXD,U),?15,$E($P(IBXD,U,4),1,43),?60,$$DAT1^IBOUTL(IBDATE)
 | 
|---|
 | 125 |  Q
 | 
|---|
 | 126 |  ;
 | 
|---|
 | 127 | ASK(IBCNT,IBPAR,IBSELDF) ;Ask user to select from list
 | 
|---|
 | 128 |  ; Input  -- SDCNT    Number of Entities
 | 
|---|
 | 129 |  ;           SDPAR    Selection Parameters (A=Add)
 | 
|---|
 | 130 |  ;           SDSELDF  Selection Default  [Optional]
 | 
|---|
 | 131 |  ; Output -- Selection
 | 
|---|
 | 132 |  N DIR,DIRUT,DTOUT,DUOUT,X,Y
 | 
|---|
 | 133 | REASK S DIR("?")="Enter "_$S($G(IBSELDF)]"":"<RETURN> for '"_IBSELDF_"', ",1:"")_$S(IBCNT=1:"1",1:"1-"_IBCNT)_" to Edit"_$S(IBPAR["A":", or 'A' to Add",1:"")
 | 
|---|
 | 134 |  S DIR("A")="Enter "_$S(IBCNT=1:"1",1:"1-"_IBCNT)_" to Edit"_$S(IBPAR["A":", or 'A' to Add",1:"")_": "_$S($G(IBSELDF)]"":IBSELDF_"// ",1:"")
 | 
|---|
 | 135 |  S DIR(0)="FAO^1:30"
 | 
|---|
 | 136 |  D ^DIR I $D(DTOUT)!($D(DUOUT)) S Y="^" G ASKQ
 | 
|---|
 | 137 |  S Y=$$UPPER^VALM1(Y)
 | 
|---|
 | 138 |  I Y?.N,Y,Y'>IBCNT G ASKQ
 | 
|---|
 | 139 |  I IBPAR["A",$E(Y)="A" S Y="Add" G ASKQ
 | 
|---|
 | 140 |  I Y="" S Y=$S($G(IBSELDF)]"":IBSELDF,1:"Return") G ASKQ
 | 
|---|
 | 141 |  W !!?5,DIR("?"),".",! G REASK
 | 
|---|
 | 142 | ASKQ Q $G(Y)
 | 
|---|