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

IBTRH8A.m

Go to the documentation of this file.
  1. IBTRH8A ;ALB/JWS - HCSR Worklist - view 278 message in X12 format ;24-AUG-2015
  1. ;;2.0;INTEGRATED BILLING;**517**;21-MAR-94;Build 240
  1. ;;Per VA Directive 6402, this routine should not be modified.
  1. ;;
  1. Q
  1. NM1 ; create NM1 segment in loop 2010EA
  1. N R1,R2,R3,R4
  1. N SEQ,Z,NODE0,PRVPTR,PERSON,PRVDATA,ADDR1,ADDR2,NAME,ADDR3,ENTITY,PCODEPRV,TAXONOMY
  1. ; create NM1 segments for patient event providers
  1. S (SEQ,Z)=0 F S Z=$O(^IBT(356.22,IBTRIEN,13,Z)) Q:Z'=+Z D
  1. . S NODE0=$G(^IBT(356.22,IBTRIEN,13,Z,0)) I NODE0="" Q ; 0-node of sub-file 356.2213
  1. . S SEQ=SEQ+1 I SEQ>14 Q ; only allow up to 14 providers
  1. . S PRVPTR=$P(NODE0,U,3) I PRVPTR="" Q ; missing provider pointer
  1. . S PERSON=$P(NODE0,U,2) I 'PERSON Q ; missing person / non-person indicator
  1. . S PRVDATA=$$PRVDATA^IBTRHLO2(+$P(PRVPTR,";"),$P($P(PRVPTR,"(",2),","))
  1. . S ADDR1=$P(PRVDATA,U,2,3),ADDR2=$P(PRVDATA,U,4,6)
  1. . S NAME=$$HLNAME^HLFNC($P(PRVDATA,U))
  1. . S ENTITY=$$GET1^DIQ(365.022,+$P(NODE0,U)_",",.01)
  1. . S X="NM1*"_ENTITY_"*"_PERSON_"*"_$P(NAME,"^")_"*"_$P(NAME,"^",2)_"*"_$P(NAME,"^",3)_"**"_$P(NAME,"^",4)_"*XX*"_$P(PRVDATA,U,7)
  1. . D SAVE^IBTRH8(X)
  1. . S ADDR3=$P($$HLADDR^HLFNC(ADDR1,ADDR2),U,1,5)
  1. . S X="N3*"_$P(ADDR3,U)_"*"_$P(ADDR3,U,2)
  1. . D SAVE^IBTRH8(X)
  1. . S X="N4*"_$P(ADDR3,U,3)_"*"_$P(ADDR3,U,4)_"*"_$P(ADDR3,U,5)
  1. . D SAVE^IBTRH8(X)
  1. . ; add PRV segment info for Patient Event Provider Loop 2010EA
  1. . S PCODEPRV=$$PCODECNV^IBTRHLO2(ENTITY) I PCODEPRV'="" D
  1. .. S TAXONOMY=$P($$GTXNMY^IBTRH3(PRVPTR),U) I TAXONOMY="" Q
  1. .. S X="PRV*"_PCODEPRV_"*PXC*"_TAXONOMY
  1. .. D SAVE^IBTRH8(X)
  1. .. Q
  1. . Q
  1. ; create NM1, N3, N4 for Patient Event Transport Loop 2010EB
  1. I 'MSGTYPE S (SEQ,Z)=0 F S Z=$O(^IBT(356.22,IBTRIEN,14,Z)) Q:Z'=+Z D
  1. . S NODE0=$G(^IBT(356.22,IBTRIEN,14,Z,0)) I NODE0="" Q ; 0-node of sub-file 356.2214
  1. . S SEQ=SEQ+1 I SEQ>5 Q ; only allow up to 5 transports
  1. . S X="NM1*"_$P(NODE0,U)_"*2*"_$P(NODE0,U,2) D SAVE^IBTRH8(X)
  1. . S (ADDR1,ADDR2,ADDR3)=""
  1. . I $P(NODE0,U,3)'="",$P(NODE0,U,5)'="" S ADDR1=$P(NODE0,U,3,4),ADDR2=$P(NODE0,U,5,7)
  1. . S X="N3*"_$P(NODE0,U,3)_"*"_$P(NODE0,U,4) D SAVE^IBTRH8(X)
  1. . S ADDR3=$P($$HLADDR^HLFNC(ADDR1,ADDR2),"^",1,5)
  1. . S X="N4*"_$P(ADDR3,U,3)_"*"_$P(ADDR3,U,4)_"*"_$P(ADDR3,U,5) D SAVE^IBTRH8(X)
  1. . Q
  1. ; create NM1 segment for Patient Event Other UMO Name loop 2010EC
  1. I 'MSGTYPE S (SEQ,Z)=0 F S Z=$O(^IBT(356.22,IBTRIEN,15,Z)) Q:Z'=+Z D
  1. . S NODE0=$G(^IBT(356.22,IBTRIEN,15,Z,0)) I NODE0="" Q ; 0-node of sub-file 356.2215
  1. . S SEQ=SEQ+1 I SEQ>3 Q ; only allow up to 3 other UMOs
  1. . S X="NM1*"_$P(NODE0,U)_"*2*"_$$EXTERNAL^DILFD(356.2215,.02,,+$P(NODE0,U,2))
  1. . D SAVE^IBTRH8(X)
  1. . S R1=$P(NODE0,U,3),R2=$P(NODE0,U,4),R3=$P(NODE0,U,5),R4=$P(NODE0,U,6)
  1. . I R1="",R2="",R3="",R4="" Q ; no UMO denial reasons to send
  1. . S X="REF*ZZ*"_R1_"**"_$S(R2'="":"ZZ",1:"")_":"_R2_":"_$S(R3'="":"ZZ",1:"")_":"_R3_":"_$S(R4'="":"ZZ",1:"")_":"_R4 D SAVE^IBTRH8(X)
  1. . I $P(NODE0,U,7)="" Q
  1. . S X="DTP*598*D8*"_$$HLDATE^HLFNC($P(NODE0,U,7)) D SAVE^IBTRH8(X)
  1. . Q
  1. Q
  1. ;
  1. DETAIL ; generate service line detail X12 segments
  1. N FQUAL,FTYPE,NODE160,PRB,REQCAT,Z1
  1. S Z1="" F S Z1=$O(^IBT(356.22,IBTRIEN,16,Z1)) Q:Z1'=+Z1 D
  1. . S NODE160=$G(^IBT(356.22,IBTRIEN,16,Z1,0)) I NODE160="" Q ; 0-node of sub-file 356.2216
  1. . S REQCAT=$$GET1^DIQ(356.001,+$P(NODE160,U,15)_",",.01)
  1. . I REQCAT'="" D
  1. .. S X="UM*"_REQCAT_"*"_$$GET1^DIQ(356.002,+$P(NODE160,U,2)_",",.01)_"*"_$$GET1^DIQ(365.013,+$P(NODE160,U,3)_",",.01)
  1. .. S FQUAL=$P(NODE160,U,4) I FQUAL'="" D
  1. ... S FTYPE=$S(FQUAL="A":$P(NODE160,U,6)_$P(NODE160,U,7),1:$$EXTERNAL^DILFD(356.2216,.05,,+$P(NODE160,U,5)))
  1. ... I FTYPE'="" S $P(X,"*",5)=FTYPE_":"_$P(NODE160,U,4)
  1. .. D SAVE^IBTRH8(X)
  1. .. Q
  1. . D DREF,DDTP,DSV
  1. . I 'MSGTYPE D HSD,PWK,NTE
  1. . D NM1F
  1. . Q
  1. Q
  1. ;
  1. DREF ; create service level REF segment
  1. N NODE169
  1. S NODE169=$G(^IBT(356.22,IBTRIEN,16,Z1,9)) ; 9-node of sub-file 356.2216
  1. S X=""
  1. I $P(NODE169,U)'="" S X="REF*BB*"_$P(NODE169,U)
  1. I X="",$P(NODE169,U,2)'="" S X="REF*NT*"_$P(NODE169,U,2)
  1. I X="" Q
  1. D SAVE^IBTRH8(X)
  1. Q
  1. ;
  1. DDTP ; create service level DTP Service Date segment
  1. N SRVDATE
  1. S SRVDATE=$P(NODE160,U,11) I SRVDATE="" Q
  1. S X="DTP*472*"_$S($F(SRVDATE,"-"):"RD8",1:"D8")_"*"_$$HLDATE^HLFNC($P(SRVDATE,"."))
  1. D SAVE^IBTRH8(X)
  1. Q
  1. ;
  1. DSV ; create service level SV segments
  1. N NODE161,NODE162,NODE163,NODE1640,NODE1612,SEQ,SRVTYPE,TMP,Z2
  1. N EXT161U2,EXT161U3
  1. S NODE161=$G(^IBT(356.22,IBTRIEN,16,Z1,1)) I NODE161="" Q ; 1-node of sub-file 356.2216
  1. S NODE162=$G(^IBT(356.22,IBTRIEN,16,Z1,2)) ; 2-node of sub-file 356.2216
  1. S NODE163=$G(^IBT(356.22,IBTRIEN,16,Z1,3)) ; 3-node of sub-file 356.2216
  1. S NODE1612=$G(^IBT(356.22,IBTRIEN,16,Z1,12)) ; 12-node of sub-file 356.2216
  1. S SRVTYPE=$P(NODE161,U,12)
  1. S TMP=$S(SRVTYPE="D":"AD",1:$P(NODE161,U))
  1. S EXT161U2=$$EXTERNAL^DILFD(356.2216,1.02,,$P(NODE161,U,2))
  1. S $P(TMP,":",2)=$S(TMP="N4":$P(NODE1612,U),1:EXT161U2)
  1. S EXT161U3=$$EXTERNAL^DILFD(356.2216,1.03,,$P(NODE161,U,3))
  1. S $P(TMP,":",8)=$S(TMP="N4":$P(NODE1612,U,2),1:EXT161U3)
  1. I 'MSGTYPE D
  1. . S $P(TMP,":",3)=$$EXTERNAL^DILFD(356.2216,1.04,,$P(NODE161,U,4))
  1. . S $P(TMP,":",4)=$$EXTERNAL^DILFD(356.2216,1.05,,$P(NODE161,U,5))
  1. . S $P(TMP,":",5)=$$EXTERNAL^DILFD(356.2216,1.06,,$P(NODE161,U,6))
  1. . S $P(TMP,":",6)=$$EXTERNAL^DILFD(356.2216,1.07,,$P(NODE161,U,7))
  1. . S $P(TMP,":",7)=$P(NODE161,U,8)
  1. . Q
  1. I SRVTYPE'="D" S $P(TMP,"*",4)=$P(NODE161,U,11),$P(TMP,"*",3)=$P(NODE161,U,10)
  1. I 'MSGTYPE S $P(TMP,"*",2)=$P(NODE161,U,9)
  1. I SRVTYPE="I" D
  1. . S X="SV2**"_TMP
  1. . S $P(X,"*",2)=$$GET1^DIQ(399.2,+$P(NODE162,U,6)_",",.01)
  1. . I 'MSGTYPE D
  1. .. S $P(X,"*",7)=$P(NODE162,U,7)
  1. .. S $P(X,"*",10)=$$GET1^DIQ(356.011,+$P(NODE162,U,8)_",",.01)
  1. .. S $P(X,"*",11)=$$GET1^DIQ(356.019,+$P(NODE162,U,9)_",",.01)
  1. .. Q
  1. . Q
  1. I SRVTYPE="P" D
  1. . S X="SV1*"_TMP
  1. . I 'MSGTYPE D
  1. .. S TMP=$P(NODE162,U)_":"_$P(NODE162,U,2)_":"_$P(NODE162,U,3)_":"_$P(NODE162,U,4)
  1. .. S $P(X,"*",8)=TMP
  1. .. S $P(X,"*",12)=$P(NODE162,U,5)
  1. .. S $P(X,"*",21)=$$GET1^DIQ(356.019,+$P(NODE162,U,9)_",",.01)
  1. .. Q
  1. . Q
  1. I SRVTYPE="D",$TR(NODE163,U)'="" D
  1. . S X="SV3*"_TMP
  1. . S $P(X,"*",6)=$P(NODE163,U,6)
  1. . S $P(X,"*",7)=$P(NODE161,U,11)
  1. . I 'MSGTYPE D
  1. .. S $P(X,"*",8)=$P(NODE163,U,7)
  1. .. Q
  1. . S TMP=$P(NODE163,U)_":"_$P(NODE163,U,2)_":"_$P(NODE163,U,3)_":"_$P(NODE163,U,4)_":"_$P(NODE163,U,5)
  1. . S $P(X,"*",5)=TMP
  1. . Q
  1. D SAVE^IBTRH8(X)
  1. I SRVTYPE'="D" Q
  1. ; additional TOO segments for tooth information
  1. S Z2="" F S Z2=$O(^IBT(356.22,IBTRIEN,16,Z1,4,Z2)) Q:Z2'=+Z2 D
  1. . S NODE1640=$G(^IBT(356.22,IBTRIEN,16,Z1,4,Z2,0)) I NODE1640="" Q ; 0-node of sub-file 356.22164
  1. . S X="TOO*JP*"_$$GET1^DIQ(356.022,+$P(NODE1640,U)_",",.01)
  1. . S TMP=$P(NODE1640,U,2)
  1. . I 'MSGTYPE D
  1. .. S TMP=TMP_":"_$P(NODE1640,U,3)_":"_$P(NODE1640,U,4)_":"_$P(NODE1640,U,5)_":"_$P(NODE1640,U,6)
  1. .. Q
  1. . S $P(X,"*",4)=TMP
  1. . D SAVE^IBTRH8(X)
  1. . Q
  1. Q
  1. ;
  1. HSD ; create HSD loop 2000F segment
  1. N NODE165,ZHS
  1. S NODE165=$G(^IBT(356.22,IBTRIEN,16,Z1,5)) I NODE165="" Q ; 5-node of sub-file 356.2216
  1. S X="HSD*"_$$GET1^DIQ(365.016,+$P(NODE165,U)_",",.01)_"*"
  1. S X=X_$P(NODE165,U,2)_"*"_$P(NODE165,U,3)_"*"_$P(NODE165,U,4)_"*"
  1. S X=X_$$GET1^DIQ(365.015,+$P(NODE165,U,5)_",",.01)_"*"_$P(NODE165,U,6)_"*"
  1. S X=X_$$GET1^DIQ(365.025,+$P(NODE165,U,7)_",",.01)_"*"_$$GET1^DIQ(356.007,+$P(NODE165,U,8)_",",.01)
  1. I $TR($P(X,"*",3,99),"*")="" Q
  1. D SAVE^IBTRH8(X)
  1. Q
  1. ;
  1. PWK ; create PWK segment loop 2000F
  1. N NODE1660,PSL,SEQ,Z2,Z3
  1. S (SEQ,Z2)=0 F S Z2=$O(^IBT(356.22,IBTRIEN,16,Z1,6,Z2)) Q:Z2'=+Z2 D
  1. . S NODE1660=$G(^IBT(356.22,IBTRIEN,16,Z1,6,Z2,0)) I NODE1660="" Q ; 0-node of sub-file 356.22166
  1. . S SEQ=SEQ+1 I SEQ>10 Q
  1. . S X="PWK*"
  1. . S $P(X,"*",2)=$$GET1^DIQ(356.018,+$P(NODE1660,U)_",",.01)
  1. . S $P(X,"*",3)=$P(NODE1660,U,2)
  1. . S $P(X,"*",6)="AC"
  1. . S $P(X,"*",7)=$P(NODE1660,U,3)
  1. . S $P(X,"*",8)=$P(NODE1660,U,4)
  1. . D SAVE^IBTRH8(X)
  1. . Q
  1. Q
  1. ;
  1. NTE ; create MSG segment loop 2000F
  1. N MSG,NTE
  1. S MSG=$$WP2STR^IBTRHLO2(356.2216,7,Z1_","_IBTRIEN_",",264)
  1. I MSG="" Q
  1. S X="MSG*"_MSG
  1. D SAVE^IBTRH8(X)
  1. Q
  1. ;
  1. NM1F ; create NM1, N3, N4 Service Provider segments loop 2000F
  1. N ADDR1,ADDR2,NODE1680,PERSON,PRD,PRVDATA,PRVPTR,SEQ,TMP,Z2,PCODEPRV,ENTITY,TAXONOMY
  1. S (SEQ,Z2)=0 F S Z2=$O(^IBT(356.22,IBTRIEN,16,Z1,8,Z2)) Q:Z2'=+Z2 D
  1. . S NODE1680=$G(^IBT(356.22,IBTRIEN,16,Z1,8,Z2,0)) I NODE1680="" Q ; 0-node of sub-file 356.22168
  1. . S SEQ=SEQ+1 I SEQ>14 Q ; only allow up to 14 providers
  1. . S PRVPTR=$P(NODE1680,U,3) I PRVPTR="" Q ; missing provider pointer
  1. . S PERSON=$P(NODE1680,U,2) I 'PERSON Q ; missing person / non-person indicator
  1. . S PRVDATA=$$PRVDATA^IBTRHLO2(+$P(PRVPTR,";"),$P($P(PRVPTR,"(",2),","))
  1. . S ADDR1=$P(PRVDATA,U,2,3),ADDR2=$P(PRVDATA,U,4,6)
  1. . S NAME=$$HLNAME^HLFNC($P(PRVDATA,U))
  1. . S X="NM1*"
  1. . S ENTITY=$$GET1^DIQ(365.022,+$P(NODE1680,U)_",",.01)
  1. . S $P(X,"*",2)=ENTITY
  1. . S $P(X,"*",3)=PERSON
  1. . S $P(X,"*",4)=$P(NAME,"^")
  1. . S $P(X,"*",5)=$P(NAME,"^",2)
  1. . S $P(X,"*",6)=$P(NAME,"^",3)
  1. . S $P(X,"*",8)=$P(NAME,"^",4)
  1. . S $P(X,"*",9)="XX"
  1. . S $P(X,"*",10)=$P(PRVDATA,U,7)
  1. . D SAVE^IBTRH8(X)
  1. . S ADDR3=$P($$HLADDR^HLFNC(ADDR1,ADDR2),U,1,5)
  1. . S X="N3*"_$P(ADDR3,U)_"*"_$P(ADDR3,U,2)
  1. . D SAVE^IBTRH8(X)
  1. . S X="N4*"_$P(ADDR3,U,3)_"*"_$P(ADDR3,U,4)_"*"_$P(ADDR3,U,5)
  1. . D SAVE^IBTRH8(X)
  1. . ; create PRV segment info for service level loop 2000F
  1. . S PCODEPRV=$$PCODECNV^IBTRHLO2(ENTITY) I PCODEPRV'="" D
  1. .. I '$F(",AS,OP,OR,OT,PC,PE",","_PCODEPRV) Q
  1. .. S TAXONOMY=$P($$GTXNMY^IBTRH3(PRVPTR),U) I TAXONOMY="" Q
  1. .. S X="PRV*"_PCODEPRV_"*PXC*"_TAXONOMY
  1. .. D SAVE^IBTRH8(X)
  1. .. Q
  1. . Q
  1. Q
  1. ;
  1. CR5 ; create CR5 segment
  1. N BGAS,RXE,OXYTST,Z
  1. S BGAS=+$P(NODE9,U) I 'BGAS Q ; missing arterial blood gas quantity
  1. S X="CR5***"
  1. S $P(X,"*",9)=$P(NODE8,U,7)
  1. S $P(X,"*",10)=$P(NODE8,U,8)
  1. S $P(X,"*",11)=BGAS
  1. S $P(X,"*",6)=$P(NODE8,U,4)
  1. S $P(X,"*",12)=$P(NODE9,U,2)
  1. S $P(X,"*",4)=$$GET1^DIQ(356.013,+$P(NODE8,U)_",",.01)
  1. S $P(X,"*",5)=$$GET1^DIQ(356.013,+$P(NODE8,U,2)_",",.01)
  1. S $P(X,"*",17)=$P(NODE9,U,7)
  1. S $P(X,"*",8)=$P(NODE8,U,6)
  1. S $P(X,"*",7)=$P(NODE8,U,5)
  1. S Z=+$P(NODE9,U,4) I Z>0 S $P(X,"*",14)=$$GET1^DIQ(356.015,Z_",",.01)
  1. S Z=+$P(NODE9,U,5) I Z>0 S $P(X,"*",15)=$$GET1^DIQ(356.015,Z_",",.01)
  1. S Z=+$P(NODE9,U,6) I Z>0 S $P(X,"*",16)=$$GET1^DIQ(356.015,Z_",",.01)
  1. S $P(X,"*",13)=$$GET1^DIQ(356.014,+$P(NODE9,U,3)_",",.01)
  1. S $P(X,"*",18)=$$GET1^DIQ(356.016,+$P(NODE9,U,8)_",",.01)
  1. S $P(X,"*",19)=$$GET1^DIQ(356.013,+$P(NODE8,U,3)_",",.01)
  1. D SAVE^IBTRH8(X)
  1. Q
  1. ;
  1. CR6 ; generate CR6 segment
  1. N DATESTR,PRB,PROCSTR,Z
  1. I $TR(NODE10,U)=""!(CERT="") Q
  1. S X="CR6*"
  1. S $P(X,"*",9)=CERT,$P(X,"*",8)="W"
  1. S Z=$P(NODE10,U,6) I Z'="" S $P(X,"*",11)=$$EXTERNAL^DILFD(356.22,10.06,,Z)
  1. S Z=$P(NODE10,U,7) I Z'="" S $P(X,"*",12)=$$EXTERNAL^DILFD(356.22,10.07,,Z)
  1. S $P(X,"*",13)=$$HLDATE^HLFNC($P(NODE10,U,8))
  1. S $P(X,"*",10)=$$HLDATE^HLFNC($P(NODE10,U,5))
  1. S $P(X,"*",14)=$$HLDATE^HLFNC($P(NODE10,U,9))
  1. S $P(X,"*",18)=$$GET1^DIQ(356.017,+$P(NODE10,U,13)_",",.01)
  1. S DATESTR="",Z=$P(NODE10,U,11) I Z'="" S DATESTR=$$HLDATE^HLFNC(Z)
  1. I DATESTR'="" S Z=$P(NODE10,U,12) S:Z'="" DATESTR=DATESTR_"-"_$$HLDATE^HLFNC(Z) S $P(X,"*",16)="RD8",$P(X,"*",17)=DATESTR ; last admission date range
  1. S $P(X,"*",15)=$$HLDATE^HLFNC($P(NODE10,U,10))
  1. S $P(X,"*",3)=$$HLDATE^HLFNC($P(NODE10,U))
  1. S DATESTR="",Z=$P(NODE10,U,2) I Z'="" S DATESTR=$$HLDATE^HLFNC(Z)
  1. I DATESTR'="" S Z=$P(NODE10,U,3) S:Z'="" DATESTR=DATESTR_"-"_$$HLDATE^HLFNC(Z) S $P(X,"*",4)="RD8",$P(X,"*",5)=DATESTR ; home health cert. date range
  1. S $P(X,"*",2)=$$GET1^DIQ(356.004,+$P(NODE2,U,15)_",",.01)
  1. D SAVE^IBTRH8(X)
  1. Q
  1. ;
  1. AAA(LP) ; AAA segment info
  1. N X,X1,LOOP,AAA03,AAA04,DATA
  1. S X1=0
  1. F S X1=$O(^IBT(356.22,IBTRIEN,101,X1)) Q:X1'=+X1 S DATA=$G(^(X1,0)),LOOP=$P(DATA,"^",2) I LOOP D
  1. . S LOOP=$$GET1^DIQ(365.027,LOOP_",",.01)
  1. . I LP'=LOOP Q
  1. . S X="AAA*"_$P(^IBT(356.22,IBTRIEN,101,X1,0),"^",3)
  1. . S AAA03=$P(DATA,"^",4)
  1. . S $P(X,"*",4)=$$GET1^DIQ(365.017,AAA03_",",.01)
  1. . S AAA04=$P(DATA,"^",5)
  1. . S $P(X,"*",5)=$$GET1^DIQ(365.018,AAA04_",",.01)
  1. . D SAVE^IBTRH8(X)
  1. . Q
  1. Q
  1. ;
  1. DISPLAY ;
  1. N X1,X2,CNT,DATA,I
  1. D CLEAR^VALM1
  1. S X1="" F S X1=$O(^TMP($J,"IBTRH8",X1)) Q:X1="" S DATA=^(X1) D Q:X="^"
  1. . ;;S DATA=$P(DATA,"~")
  1. . S X2=$L(DATA,"*") F I=2:1:X2 I $P(DATA,"*",I)'="" Q
  1. . I I=X2,$P(DATA,"*",I)="" Q
  1. . F I=$L(DATA):-1:1 Q:$E(DATA,I)'="*"
  1. . I I'=$L(DATA) S DATA=$E(DATA,1,I)
  1. . F I=$L(DATA):-1:1 Q:$E(DATA,I)'=":"
  1. . I I'=$L(DATA) S DATA=$E(DATA,1,I)
  1. . W !,DATA S CNT=$G(CNT)+1 I CNT#21=0 D PAUSE^VALM1 Q:X="^"
  1. I X'="^" D PAUSE^VALM1
  1. S VALMBCK="R"
  1. D RE^VALM4
  1. Q