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

DGPTFM6.m

Go to the documentation of this file.
  1. DGPTFM6 ;ALB/BOK/ADL/PLT - 601 SCREEN: PROCEDURE ENTER/EDIT ;21 JUL 88 @ 0900
  1. ;;5.3;Registration;**164,510,729,850,898,884,1057**;Aug 13, 1993;Build 17
  1. ;;Per VA Directive 6402, this routine should not be modified.
  1. ;
  1. ;;ADL;Update for CSV Project;;Mar 26, 2003
  1. EN ; Entry point - begin date checks
  1. I $G(^DGPT(PTF,70)),^(70)<2871000 W !!,"Data can't be entered into Procedure Records until 10/1/1987" H 5 G ^DGPTFM
  1. G @($S(X=6:"E",1:X))
  1. ;
  1. T ;add procedure record
  1. S DGZP=0 S:'$D(^DGPT(PTF,"P",0)) ^(0)="^45.05DA^^"
  1. S DIC="^DGPT("_PTF_",""P"",",DIC(0)="AEQLMZ",DA(1)=PTF D ^DIC G ^DGPTFM:Y'>0!('$D(^DGPT(PTF,"P",+Y))) S DGPROCM=+Y,DGPROCD=$P(Y,U,2) D MOB I DGPC F I=1:1:DGPC S:P(I,1)=DGPROCM DGZP=I
  1. G:'DGZP ^DGPTFM S DGPROC(DGZP)=DGPROCM,X="1,2"
  1. EDIT ;
  1. I X'=1,X'=2,X'="1,2",X'="1-2" G HELP
  1. S DGCODSYS=$$CODESYS^DGPTIC10(PTF),DIE="^DGPT(",(DA,DGPTF)=PTF,DR=$S(DGCODSYS="ICD10":"[DG601-10P]",1:"[DG601]"),DGJUMP=X
  1. S DIE="^DGPT(",DGJUMP=X D ^DIE,CHK601^DGPTSCAN K DR,DIE,DIC,DA,DGADD,DGJUMP D MOB
  1. SET D MOB:'$D(P) S:'$D(DGZP) DGZP=1 S P(DGZP,1)=$S($D(P(DGZP,1)):P(DGZP,1),1:"") I P(DGZP,1)="" K P(DGZP) G NEXP
  1. S (P1,P(DGZP))=$S($D(^DGPT(PTF,"P",P(DGZP,1),0)):^(0),1:"")
  1. WRT ;
  1. N EFFDATE,IMPDATE
  1. D EFFDATE^DGPTIC10(PTF)
  1. G:'$D(^DGPT(PTF,"P",P(DGZP,1),0)) ^DGPTFM S DGPROCI=^(0) W @IOF,HEAD,?68 S Z="<601-"_DGZP_">" W @DGVI,Z,@DGVO
  1. W !,?30,"Initial Date Of Service: ",$$EXTERNAL^DILFD(45,14,,$G(DGIDTS)) ; DG*5.3*1057
  1. W !! S (Y,L)=+P(DGZP),Z=1 D D^DGPTUTL,Z^DGPTFM5 W $J("Date of Proc: ",32),Y,!,$J("Specialty: ",35)
  1. W $S($D(^DIC(42.4,+$P(P(DGZP),U,2),0)):$P(^(0),U),1:""),! I $P(P(DGZP),U,4) W " Number of Dialysis Treatments: ",$P(P(DGZP),U,4),!
  1. W !! S Z=2 D Z^DGPTFM5 W " Procedures: ",$$GETLABEL^DGPTIC10(EFFDATE,"P")
  1. ;F I=1:1:5 S L=$P(P(DGZP),U,4+I) I L D
  1. D PTFICD^DGPTFUT(601,PTF,P(DGZP,1),.DGX601)
  1. S I=0 F S I=$O(DGX601(I)) QUIT:'I S L=+DGX601(I) D
  1. . S DGPTTMP=$$ICDDATA^ICDXCODE("PROC",+L,EFFDATE)
  1. . D WRITECOD^DGPTIC10("PROC",+L,EFFDATE,2,1,7) W $S(+DGPTTMP<1!('$P(DGPTTMP,U,10)):"*",1:"") ;W !?7
  1. . I $Y>(IOSL-4) D PGBR W @IOF,HEAD,?72 S Z="<601-"_DGZP_">" D Z^DGPTFM W !
  1. . QUIT
  1. K DGX601
  1. F I=1:1:(IOSL-$Y-5) W !
  1. S DGNUM=$S($D(P(DGZP+1)):601_"-"_(DGZP+1),1:"MAS") G 601^DGPTFJC:DGST
  1. W "Enter <RET> to continue, 1-2 to edit,",!,"'T' to add a Procedure Segment, '^N' for screen N, or '^' to abort: <",DGNUM,">//"
  1. R X:DTIME S:'$T X="^",DGPTOUT=""
  1. K DGNUM G Q^DGPTF:X="^"
  1. I X?1"^".E S DGPTSCRN=601 G ^DGPTFJ
  1. G T:X="T"!(X="t"),HELP:X["?"
  1. I X[1!(X[2) S DA=+P(DGZP) G EDIT
  1. I X'="" G HELP
  1. NEXP ;S DGZP=DGZP+1 G ^DGPTFM:'$D(P(DGZP)),SET
  1. S DGZP=DGZP+1 I '$D(P(DGZP)) S DGZP=1 G ^DGPTFM
  1. G SET
  1. ;
  1. HELP W !,"Enter '^' to stop display and edit of data",!,"'^N' to jump to screen #N (appears in upper right of screen as <N>)",!,"<RET> to continue on to next screen or 1-2 to edit:"
  1. W !?10,"1-Procedure information",!,?10,"2-Procedure codes",!,"You may also enter any combination of the above, separated by commas (ex:1,2)",!
  1. R !!,"Enter <RET>: ",X:DTIME G WRT
  1. MOB K P,P1,P2 S (I,P2)=0 F I1=1:1 S I=$O(^DGPT(PTF,"P",I)) Q:I'>0 S P(I1)=^(I,0),P(I1,1)=I I P(I1)']"" K P(I1) S I1=I1-1
  1. S DGPC=I1-1 Q
  1. BS ;CALLED FROM [DG601]
  1. S I=$O(^DGPT(PTF,"M","AM",^DGPT(PTF,"P",DA,0)-.0000001)),I=$O(^(+I,0))
  1. S DGMOVM=$S($D(^DGPT(PTF,"M",$S(I:I,1:1),0)):$P(^(0),U,2),1:"")
  1. Q
  1. R ;DELETE PROCEDURE RECORD
  1. G R^DGPTFM4
  1. E ;EDIT PROCEDURE RECORD
  1. G E^DGPTFM1
  1. ;
  1. ;add procedure codes in 601p (before 2871000) or procedure record
  1. P I $G(^DGPT(PTF,70)),^(70)<2871000 G FY86
  1. I '$D(P2) W !,"View Prodedure Codes first",! H 3 G ^DGPTFM
  1. I 'P2 W !,"No codes can be added to a Procedure Record",! H 3 G ^DGPTFM
  1. S L=""
  1. S DGCODSYS=$$CODESYS^DGPTIC10(PTF),L="" F I=1:1:DGPC S L2=1 D
  1. . N A
  1. . F J=5:1:9 I $P(P(I),U,J)="" S L=L_I_",",L2=0 QUIT
  1. . QUIT:DGCODSYS="ICD9"!'L2
  1. . F J=10:1:24 I $P(P(I),U,J)="" S L=L_I_",",L2=0 QUIT:'L2
  1. . QUIT:'L2
  1. . S A=$G(^DGPT(PTF,"P",+P(I,1),1)) F J=1:1:5 I $P(A,U,J)="" S L=L_I_",",L2=0 QUIT:'L2
  1. . QUIT
  1. I L="" W !!,"There are no procedure records that can be added to.",*7 H 3 G ^DGPTFM
  1. S L=$E(L,1,$L(L)-1) I L=+L S DGRC=+L G P2
  1. P1 I 'Z W !!,"Add to procedure record <",L,"> : " R DGRC:DTIME G ^DGPTFM:DGRC[U!(DGRC="")
  1. E S DGRC=+$E(A,2,99)
  1. P2 I +DGRC'=DGRC!(","_L_","'[(","_DGRC_",")) W !!,"Enter the procedure record number to add ICD operation codes to: ",L G P1:'Z S Z="" G P1
  1. S DGCODSYS=$$CODESYS^DGPTIC10(PTF),DIE="^DGPT(",(DGPTF,DA)=PTF,DR=$S(DGCODSYS="ICD10":"[DG601-10P]",1:"[DG601]")
  1. S ST=1,DGZS0=DGRC,DGADD=1,DGZP=P(DGZS0,1) D ^DIE,CHK601^DGPTSCAN K DR,DGPTF,DGZP,DGADD G ^DGPTFM
  1. ;
  1. FY86 S DR="" F J=1:1:5 I $P(PROC,U,J)="" S DR=DR_(J/100+45)_";"
  1. I DR="" W !!,"No more 401P procedures (before 10/01/1987) can be added.",*7 H 3 G ^DGPTFM
  1. S DR=$E(DR,1,$L(DR)-1),DP=45,DIE="^DGPT(",DA=PTF D ^DIE K DR,DIE G ^DGPTFM
  1. GETVAR ;CALLED FROM GET+1^DGPTFM
  1. S PM=I1-1,I=0 F I1=1:1 S I=$O(^DGPT(PTF,"S",I)) Q:I'>0 S S(I1)=^(I,0),S(I1,1)=I
  1. K P2P S SU=I1-1 S PROC=$S($D(^DGPT(PTF,"401P")):^("401P"),1:""),P2P=0 F J1=1:1:5 S:$P(PROC,U,J1) P2P=P2P+1,P2P(P2P)=J1
  1. QUIT
  1. ;
  1. BADDT(DGPROCD) ; Check patients admit date and entered date against census DATE
  1. ; If admit date is after census date then we're done
  1. ; checks to see if Patient has been discharged or has a closed census and returns false
  1. ; If not discharged or closed and the admit and procedure date is within census date range then return false
  1. ; If admit date and procedure date is past the date range then return true
  1. N DGADM,DGI,DGIDS ; DG*5.3*1057
  1. S DGADM=$P(^DGPT(DA(1),0),U,2) ; DG*5.3*1057
  1. S DGIDS=$P(^DGPT(DA(1),0),U,14) ; initial date of service DG*5.3*1057
  1. I DGIDS>0,$G(DGPROCD,0)<DGIDS D EN^DDIOL("Must be on or after initial date of service") Q 1 ; DG*5.3*1057
  1. I DGIDS'>0,($G(DGPROCD,0)<$$FMADD^XLFDT(DGADM,,-72)) D EN^DDIOL("Must be at most 72 hrs prior to admission") Q 1 ; DG*5.3*1057
  1. I $G(DGPROCD,0)>($S($D(^DGPT(DA(1),70)):$S(+^(70):+^(70),1:9999999),1:9999999)) D EN^DDIOL("Not After discharge") Q 1
  1. I (DGADM>DGPTDAT) Q 0 ; Admit date is after census date
  1. I ($G(DGADM,$P(^DGPT(PTF,0),U,2))>DGPTDAT) Q 0 ; Admit date is after census date
  1. N DG601DT
  1. F DGI=0:0 S DGI=$O(^DGPT("ACENSUS",PTF,DGI)) Q:'DGI I $D(^DGPT(DGI,0)),$P(^(0),U,12)=PTF,$D(^DG(45.86,+$P(^(0),U,13),0)) S Y=+^(0) X ^DD("DD") S DGI(DGI)=Y
  1. Q:($D(DGI)>1) 0 ;Closed Census
  1. I $D(^DGPT(PTF,70)),$P($G(^(70)),U)'="" Q 0 ; Patient has been discharged
  1. S DG601DT=$S($G(DGPROCD):DGPROCD,1:$G(EFFDATE))
  1. Q:(DGADM<(DGPTDAT+.09))&(DG601DT<(DGPTDAT+.09)) 0 ;Admit and procedure Date in Census Range
  1. D EN^DDIOL("Not After Census Date") Q 1 ; Reject date
  1. ;
  1. ;
  1. PGBR N DIR,X,Y S DIR(0)="E",DIR("A")="Enter RETURN to continue" D ^DIR QUIT
  1. ;