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

LEXQDRG.m

Go to the documentation of this file.
  1. LEXQDRG ;ISL/KER - Query - DRG Calc. ;12/19/2014
  1. ;;2.0;LEXICON UTILITY;**86**;Sep 23, 1996;Build 1
  1. ;
  1. ; Global Variables
  1. ; ^XTMP(ID) SACC 2.3.2.5.2
  1. ;
  1. ; External References
  1. ; HOME^%ZIS ICR 10086
  1. ; $$GET1^DIQ ICR 2056
  1. ; ^DIR ICR 10026
  1. ; ^ICDDRG ICR 371
  1. ; $$DT^XLFDT ICR 10103
  1. ; $$FMADD^XLFDT ICR 10103
  1. ; $$UP^XLFSTR ICR 10104
  1. ;
  1. ; Non-Namespaced variables used
  1. ;
  1. ; ICDDATE Effective Date nnnnnnn
  1. ; ICDEXP Patient died during episode of care 1/0
  1. ; ICDTRS Was patient transferred to acute care 1/0
  1. ; ICDDMS Patient discharged against med advice 1/0
  1. ; SEX Patient's Sex (pre-surgical) M/F
  1. ; AGE Patient's Age Numeric
  1. ; ICDDX(1) ICD Principal Diagnosis file 80 IEN
  1. ; ICDDX(n) ICD Secondary Diagnosis file 80 IENs
  1. ; ICDPRC(n) ICD Procedures file 80.1 IENs
  1. ; ICDPOA(n) Presence on Admission (Y,N,W,U or BLANK)
  1. ;
  1. EN ; Main Entry Point
  1. N AGE,DIC,DIR,DIROUT,DIRUT,DTOUT,DUOUT,ICDDATE,ICDDMS,ICDDRG,ICDDX,ICDEXP,ICDPOA
  1. N ICDPRC,ICDTRS,LEX,LEXB,LEXBG,LEXC,LEXCUR,LEXENV,LEXF,LEXGDAT,LEXHAS
  1. N LEXI,LEXID,LEXIEN,LEXIT,LEXLS,LEXN,LEXOK,LEXPTF,LEXS,LEXV,LEXX,SEX,X,Y
  1. S LEXENV=$$EV Q:'$L(LEXENV)
  1. S U="^",(LEXOK,LEXPTF,LEXCUR)=0 S:$D(LEXDEV) LEXPTF=$$PAT
  1. I +LEXPTF'>0,$L($P(LEXPTF,"^",2)) W !!," ",$P(LEXPTF,"^",2) Q
  1. I LEXPTF>0 D EN^LEXQDRG3 Q
  1. S LEXHAS=$$HASPRE^LEXQDRG2 S:LEXHAS>0 LEXCUR=$$UC S:LEXCUR>0 LEXOK=$$GETPRE^LEXQDRG2
  1. I LEXCUR>0,LEXOK'>0,$L($P(LEXOK,"^",2)) W !!," ",$P(LEXOK,"^",2) Q
  1. I LEXCUR>0,LEXOK'>0 W !!," Missing or invalid input variables" Q
  1. S:LEXCUR'>0 LEXOK=$$ASK I +LEXOK'>0 D Q
  1. . I $L($P(LEXOK,"^",2)) W !!," ",$P(LEXOK,"^",2) Q
  1. . W !!," Missing or invalid input variables"
  1. D ^ICDDRG I +($G(ICDDRG))>0 D
  1. . W:$L($G(IOF)) @IOF D DCD^LEXQDRG4,WRT^LEXQDRG4($G(ICDDRG),$G(ICDDATE))
  1. Q
  1. UC(X) ; Use Previously Saved Values
  1. N DIR,DIROUT,DIRUT,DTOUT,DUOUT,LEXB,LEXF,LEXID,LEXN,LEXV,Y
  1. S LEXID="LEXQDRG "_$G(DUZ)_" UC"
  1. S LEXN=$$DT^XLFDT,LEXF=$$FMADD^XLFDT(LEXN,60)
  1. S DIR(0)="YAO",DIR("A")=" Use previously saved values: (Y/N) "
  1. S (X,DIR("PRE"))="S X=$$UCP^LEXQDRG($G(X))"
  1. S LEXB=$G(^XTMP(LEXID,"UC")) S:$L(LEXB) DIR("B")=LEXB
  1. D ^DIR Q:$D(DTOUT) "-1^'Use previously saved values' selection timed-out"
  1. I $D(DIROUT)!($D(DIRUT))!($D(DUOUT)) D Q X
  1. . S X="-1^'Use previously saved values' selection aborted"
  1. S:"^0^1^"'[("^"_Y_"^") Y="^"
  1. Q:"^0^1^"'[("^"_Y_"^") "-1^'Use previously saved values' selection aborted"
  1. S X=Y,LEXV=$S(Y="0":"No",Y="1":"Yes",1:"") I $L(LEXV) D
  1. . S ^XTMP(LEXID,0)=LEXF_"^"_LEXN_"^Use Previous"
  1. . S ^XTMP(LEXID,"UC")=LEXV
  1. Q X
  1. UCP(X) ; Use Previously Saved Values (Preprocess)
  1. S X=$G(X) Q:'$L(X) "" Q:X["?" "??"
  1. I $G(DIR(0))["YAO",$E(X,1)'="^","^Y^N^"'[("^"_$$UP^XLFSTR($E(X,1)_"^")) Q "??"
  1. Q X
  1. ASK(X) ; Ask for input parameters
  1. N LEXIMP S LEXIMP=$$IMPDATE^LEXU(30)
  1. S X=$$EFF^LEXQDRG3 Q:X'?7N X S (LEXGDAT,ICDDATE)=X
  1. I ICDDATE<LEXIMP S X=$$AGE Q:X'?1N.N!(X["^") X S AGE=X
  1. S X=$$SEX Q:"^M^F^"'[("^"_X_"^") X S SEX=X
  1. S X=$$EXP Q:"^1^0^"'[("^"_X_"^") X S ICDEXP=X
  1. S:$G(ICDEXP)>0 (ICDDMS,ICDTRS)=0
  1. I $G(ICDEXP)'>0 S X=$$DMS Q:"^1^0^"'[("^"_X_"^") X S ICDDMS=X
  1. I $G(ICDEXP)'>0 S X=$$TRS Q:"^1^0^"'[("^"_X_"^") X S ICDTRS=X
  1. K ICDDX W ! S X=$$PDX^LEXQDRG2(ICDDATE) Q:+X'>0 X W ! S X=$$SEC^LEXQDRG2(ICDDATE) Q:+X'>0 X
  1. K ICDDX("B") K ICDPRC W ! S X=$$PRO^LEXQDRG2(ICDDATE) Q:+X'>0 X K ICDPRC("B")
  1. Q 1
  1. AGE(X) ; What is the patient's age
  1. N DIR,DIROUT,DIRUT,DTOUT,DUOUT,LEXB,LEXF,LEXID,LEXN,LEXX,Y
  1. S LEXN=$$DT^XLFDT,LEXF=$$FMADD^XLFDT(LEXN,60),LEXID="LEXQDRG "_$G(DUZ)_" AGE"
  1. S LEXB=$G(^XTMP(LEXID,"PRE")) S:LEXB>0 DIR("B")=LEXB
  1. S DIR(0)="NOA^0:124:0",DIR("A")=" Enter the patient's age: (0-124) "
  1. S (DIR("?"),DIR("??"))="^D AGEH^LEXQDRG"
  1. S DIR("PRE")="S:X[""?"" X=""??"" S LEXX=X"
  1. D ^DIR Q:X["^"!($D(DIROUT))!($D(DIRUT))!($D(DTOUT))!($D(DUOUT)) "^"
  1. W:'$L($G(LEXX))&(+Y>0)&(+Y<125) +Y," year",$S(X>1:"s",1:"")," old"
  1. W:$L($G(LEXX))&(+Y>0)&(+Y<125) " year",$S(X>1:"s",1:"")," old"
  1. I +Y>0 S ^XTMP(LEXID,0)=LEXF_"^"_LEXN_"^Previous",^XTMP(LEXID,"PRE")=Y
  1. S X=Y
  1. Q X
  1. AGEH ; What is the patient's age Help
  1. W !," Enter the patient's age, 0-124."
  1. Q
  1. SEX(X) ; What is the sex of the patient
  1. N DIR,DIROUT,DIRUT,DTOUT,DUOUT,LEXB,LEXF,LEXID,LEXN,Y
  1. S LEXN=$$DT^XLFDT,LEXF=$$FMADD^XLFDT(LEXN,60),LEXID="LEXQDRG "_$G(DUZ)_" SEX"
  1. S LEXB=$G(^XTMP(LEXID,"PRE")) S:'$L(LEXB) LEXB="Male"
  1. S LEXB=$S(LEXB="M":"Male",LEXB="F":"Female",1:"") S:$L(LEXB) DIR("B")=LEXB
  1. S DIR(0)="SAO^M:Male;F:Female",DIR("A")=" Enter the patient's sex: (M/F) "
  1. S (DIR("??"),DIR("?"))="^D SEXH^LEXQDRG"
  1. S DIR("PRE")="S X=$$UP^XLFSTR(X) S:$E(X,1)'=""M""&($E(X,1)'=""F"")&($L(X)) X=""??"" S:X[""?"" X=""??"""
  1. D ^DIR Q:X["^"!($D(DIROUT))!($D(DIRUT))!($D(DTOUT))!($D(DUOUT)) "^"
  1. I "^M^F^"[("^"_Y_"^") S ^XTMP(LEXID,0)=LEXF_"^"_LEXN_"^Previous",^XTMP(LEXID,"PRE")=Y
  1. S X=Y
  1. Q X
  1. SEXH ; What is the sex of the patient Help
  1. W !," Answer M for Male or F for Female."
  1. Q
  1. DMS(X) ; Discharged against medical advice
  1. N DIR,DIROUT,DIRUT,DTOUT,DUOUT,LEXB,LEXF,LEXID,LEXN,Y
  1. S LEXN=$$DT^XLFDT,LEXF=$$FMADD^XLFDT(LEXN,60),LEXID="LEXQDRG "_$G(DUZ)_" DMS"
  1. S LEXB=$G(^XTMP(LEXID,"PRE")),LEXB=$S(LEXB="1":"YES",LEXB="0":"NO",1:"") S:$L(LEXB) DIR("B")=LEXB
  1. S DIR(0)="YAO",DIR("A")=" Was the patient discharged against medical advice? (Y/N) "
  1. S DIR("?")=" Answer YES if the patient was discharged against medical advice."
  1. S DIR("PRE")="S:X[""?"" X=""?""" D ^DIR
  1. Q:$D(DTOUT) "0^'Discharged against medical advice' selection timed-out"
  1. I $D(DIROUT)!($D(DIRUT))!($D(DUOUT))!("^1^0^"'[("^"_Y_"^")) D Q X
  1. . S X="0^'Discharged against medical advice' selection aborted"
  1. I "^1^0^"[("^"_Y_"^") S ^XTMP(LEXID,0)=LEXF_"^"_LEXN_"^Previous",^XTMP(LEXID,"PRE")=Y
  1. S X=Y
  1. Q X
  1. TRS(X) ; Was the patient transferred to acute care
  1. N DIR,DIROUT,DIRUT,DTOUT,DUOUT,LEXB,LEXF,LEXID,LEXN,Y
  1. S LEXN=$$DT^XLFDT,LEXF=$$FMADD^XLFDT(LEXN,60),LEXID="LEXQDRG "_$G(DUZ)_" TRS"
  1. S LEXB=$G(^XTMP(LEXID,"PRE")),LEXB=$S(LEXB="1":"YES",LEXB="0":"NO",1:"") S:$L(LEXB) DIR("B")=LEXB
  1. S DIR(0)="YAO",DIR("A")=" Was the patient transferred to an acute care facility? (Y/N) "
  1. S DIR("?")=" Answer YES if the patient was transferred to an acute care facility."
  1. S DIR("PRE")="S:X[""?"" X=""?"""
  1. D ^DIR Q:$D(DTOUT) "0^'Was the patient transferred to acute care' selection timed-out"
  1. I $D(DIROUT)!($D(DIRUT))!($D(DUOUT))!("^1^0^"'[("^"_Y_"^")) D Q X
  1. . S X="0^'Was the patient transferred to acute care' selection aborted"
  1. I "^1^0^"[("^"_Y_"^") S ^XTMP(LEXID,0)=LEXF_"^"_LEXN_"^Previous",^XTMP(LEXID,"PRE")=Y
  1. S X=Y
  1. Q X
  1. EXP(X) ; Did the patient die during episode of care
  1. N DIR,DIROUT,DIRUT,DTOUT,DUOUT,LEXB,LEXF,LEXID,LEXN,Y
  1. S LEXN=$$DT^XLFDT,LEXF=$$FMADD^XLFDT(LEXN,60),LEXID="LEXQDRG "_$G(DUZ)_" EXP"
  1. S LEXB=$G(^XTMP(LEXID,"PRE")),LEXB=$S(LEXB="1":"YES",LEXB="0":"NO",1:"") S:$L(LEXB) DIR("B")=LEXB
  1. S DIR(0)="YAO",DIR("A")=" Did the patient die during this episode of care? (Y/N) "
  1. S DIR("?")=" Answer YES if the patient died during this episode of care."
  1. S DIR("PRE")="S:X[""?"" X=""?""" D ^DIR
  1. Q:$D(DTOUT) "0^'Did the patient die during episode of care' selection timed-out"
  1. I $D(DIROUT)!($D(DIRUT))!($D(DUOUT))!("^1^0^"'[("^"_Y_"^")) D Q X
  1. . S X="0^'Did the patient die during episode of care' selection aborted"
  1. I "^1^0^"[("^"_Y_"^") S ^XTMP(LEXID,0)=LEXF_"^"_LEXN_"^Previous",^XTMP(LEXID,"PRE")=Y
  1. S X=Y
  1. Q X
  1. PAT(X) ; Patient
  1. N DIR,DIROUT,DIRUT,DTOUT,DUOUT,LEXB,LEXF,LEXID,LEXN,Y
  1. S LEXN=$$DT^XLFDT,LEXF=$$FMADD^XLFDT(LEXN,60),LEXID="LEXQDRG "_$G(DUZ)_" PAT"
  1. S LEXB=$G(^XTMP(LEXID,"PRE")),LEXB=$S(LEXB="1":"YES",1:"NO") S:$L(LEXB) DIR("B")=LEXB
  1. S DIR(0)="YAO",DIR("A")=" Calculate DRGs for a Registered Patient? (Y/N) "
  1. S DIR("?")="Enter 'Yes' if the patient has been previously registered, enter 'No' for other patient."
  1. S DIR("PRE")="S:X[""?"" X=""?""" D ^DIR
  1. Q:$D(DTOUT) "0^'Calculate DRGs for a Registered Patient' selection timed-out"
  1. I $D(DIROUT)!($D(DIRUT))!($D(DUOUT))!("^1^0^"'[("^"_Y_"^")) D Q X
  1. . S X="0^'Calculate DRGs for a Registered Patient' selection aborted"
  1. I "^1^0^"[("^"_Y_"^") S ^XTMP(LEXID,0)=LEXF_"^"_LEXN_"^Previous",^XTMP(LEXID,"PRE")=Y
  1. S X=Y
  1. Q X
  1. SXTMP ; Show ^XTMP DX/PR
  1. N LEXSYS F LEXSYS="ICD","ICP","10D","ICP" D
  1. . N LEXCT,LEXIN S LEXCT=0
  1. . F LEXIN=1:1:10 D
  1. . . N LEXNN,LEXNC,LEXID
  1. . . S LEXID="LEXQDRG "_+($G(DUZ))_" DX"_LEXIN_" "_LEXSYS
  1. . . S LEXNN="^XTMP("""_LEXID_""")",LEXNC="^XTMP("""_LEXID_""","
  1. . . F S LEXNN=$Q(@LEXNN) Q:'$L(LEXNN)!(LEXNN'[LEXNC) D
  1. . . . S LEXCT=LEXCT+1 W:LEXCT=1 ! W !,LEXNN,"=",@LEXNN
  1. . F LEXIN=1:1:10 D
  1. . . N LEXNN,LEXNC,LEXID S LEXID="LEXQDRG "_+($G(DUZ))_" PR"_LEXIN_" "_LEXSYS
  1. . . S LEXNN="^XTMP("""_LEXID_""")",LEXNC="^XTMP("""_LEXID_""","
  1. . . F S LEXNN=$Q(@LEXNN) Q:'$L(LEXNN)!(LEXNN'[LEXNC) D
  1. . . . S LEXCT=LEXCT+1 W:LEXCT=1 ! W !,LEXNN,"=",@LEXNN
  1. W !
  1. Q
  1. EV(X) ; Check environment
  1. N LEX,LEXDEV S DT=$$DT^XLFDT D HOME^%ZIS S U="^" I +($G(DUZ))=0 W !!,?5,"DUZ not defined" Q 0
  1. S LEX=$$GET1^DIQ(200,(DUZ_","),.01) I '$L(LEX) W !!,?5,"DUZ not valid" Q 0
  1. Q 1