- GMPLBLD2 ; SLC/MKB,JFR,TC -- Bld PL Selection Lists cont ;07/19/17 13:32
- ;;2.0;Problem List;**3,28,36,42,49**;Aug 25, 1994;Build 43
- ;
- ; External References:
- ; ICR 2053 $$FILE^DIE,$$UPDATE^DIE
- ; ICR 2336 $$GETENT,$$EDIT,$$EDITPAR^XPAREDIT
- ; ICR 4083 $$STATCHK^LEXSRC2
- ; ICR 5747 $$CODECS^ICDEX,$$STATCHK^ICDEX
- ; ICR 10103 $$DT^XLFDT
- ; ICR 10006 ^DIC
- ; ICR 10013 ^DIK
- ; ICR 10026 ^DIR
- ; ICR 10116 FULL^VALM1
- ;
- NEWGRP ; Change problem groups
- N NEWGRP D FULL^VALM1
- I $D(GMPLSAVE),$$CKSAVE D SAVE
- NG1 S NEWGRP=$$GROUP("L") G:+NEWGRP'>0 NGQ G:+NEWGRP=+GMPLGRP NGQ
- L +^GMPL(125.11,+NEWGRP,0):1 I '$T D G NG1
- . W $C(7),!!,"This category is currently being edited by another user!",!
- L -^GMPL(125.11,+GMPLGRP,0) S GMPLGRP=NEWGRP
- D GETLIST^GMPLBLDC,BUILD^GMPLBLDC("^TMP(""GMPLIST"",$J)",GMPLMODE),HDR^GMPLBLDC
- NGQ S VALMBCK="R",VALMSG=$$MSG^GMPLX
- Q
- ;
- GROUP(L) ; Lookup into Problem Selection Group file #125.11
- N DIC,X,Y,DLAYGO,GMPDT ; L = "" or "L", if LAYGO is [not] allowed
- S GMPDT=$$DT^XLFDT
- S DIC="^GMPL(125.11,",DIC(0)="AEQMZ"_L,DIC("A")="Select CATEGORY NAME: "
- I DIC(0)["L" S DLAYGO=125.11,DIC("DR")=".02////"_GMPDT_";.03",DIC("?N","125.11")=6
- E S DIC("S")="I $P(^(0),U,3)'=""N"""
- D ^DIC S:Y'>0 Y="^" S:Y'="^" Y=+Y_U_Y(0)
- Q Y
- ;
- NEWLST ; Change selection lists
- N NEWLST D FULL^VALM1
- I $D(GMPLSAVE),$$CKSAVE D SAVE
- NL1 S NEWLST=$$LIST("L") G:+NEWLST'>0 NLQ G:+NEWLST=+GMPLSLST NLQ
- L +^GMPL(125,+NEWLST,0):1 I '$T D G NL1
- . W $C(7),!!,"This list is currently being edited by another user!",!
- L -^GMPL(125,+GMPLSLST,0) S GMPLSLST=NEWLST
- D GETLIST^GMPLBLD,BUILD^GMPLBLD("^TMP(""GMPLIST"",$J)",GMPLMODE),HDR^GMPLBLD
- NLQ S VALMBCK="R",VALMSG=$$MSG^GMPLX
- Q
- ;
- LIST(L) ; Lookup into Problem Selection List file #125
- N DIC,X,Y,DLAYGO,GMPDT ; L="" or "L" if LAYGO [not] allowed
- S GMPDT=$$DT^XLFDT
- S DIC="^GMPL(125,",DIC(0)="AEQMZ"_L,DIC("A")="Select LIST NAME: "
- S:DIC(0)["L" DLAYGO=125,DIC("DR")=".02////"_GMPDT_";.04"
- D ^DIC S:Y<0!($D(DTOUT))!($D(DUOUT)) Y="^" S:Y'="^" Y=+Y_U_Y(0)
- Q Y
- ;
- LAST(ROOT) ; Returns last subscript
- N I,J S (I,J)=""
- F S I=$O(@(ROOT_"I)")) Q:I="" S J=I
- Q J
- ;
- CKSAVE() ; Save [changes] ??
- N DIR,X,Y,TEXT S TEXT=$S($D(GMPLGRP):"category",1:"list")
- S DIR("A")="Save the changes to this "_TEXT_"? ",DIR("B")="YES"
- S DIR("?",1)="Enter YES to save the changes that have been made to this "_TEXT,DIR("?")="before exiting it; NO will leave this "_TEXT_" unchanged."
- S DIR(0)="YA" D ^DIR
- Q +Y
- ;
- SAVE ; Save changes to group/list
- N GMPLQT,LABEL,DA,GMPDT
- S GMPLQT=0,GMPDT=$$DT^XLFDT
- I $D(GMPLGRP) D I GMPLQT Q
- . N ITM,CODE
- . S ITM=0
- . F S ITM=$O(^TMP("GMPLIST",$J,ITM)) Q:'ITM!(GMPLQT) D
- .. N GMI,GMPSCTC
- .. S GMPSCTC=$P(^TMP("GMPLIST",$J,ITM),U,5) Q:'$L(GMPSCTC)
- .. I '$$STATCHK^LEXSRC2(GMPSCTC,GMPDT,"","SCT") S GMPLQT=1 Q
- .. S CODE=$P(^TMP("GMPLIST",$J,ITM),U,4) Q:'$L(CODE)
- .. F GMI=1:1:$L(CODE,"/") D
- ... N GMPLCPTR S GMPLCPTR=$P($$CODECS^ICDEX($P(CODE,"/",GMI),80,GMPDT),U)
- ... I '$$STATCHK^ICDEX($P(CODE,"/",GMI),GMPDT,GMPLCPTR) S GMPLQT=1 Q
- . I 'GMPLQT Q ;no inactive codes in the category
- . D FULL^VALM1
- . W !!,$C(7),"This Group contains problems with inactive SNOMED or ICD codes associated"
- . W !,"with them. The codes must be edited and corrected before the group can be saved."
- . N DIR,DUOUT,DTOUT,DIRUT
- . S DIR(0)="E" D ^DIR
- . S VALMBCK="R",GMPLQT=1
- . Q
- ;
- I '$D(GMPLGRP),$D(GMPLSLST) D I GMPLQT Q
- . N GRP
- . S GRP=0
- . F S GRP=$O(^TMP("GMPLIST",$J,"GRP",GRP)) Q:'GRP!(GMPLQT) D
- .. I $$VALGRP(GRP) Q ;no inactive codes in the GROUP
- .. S GMPLQT=1
- . I 'GMPLQT Q ; all groups and problems OK
- . D FULL^VALM1
- . W !!,$C(7),"This Selection List contains problems with inactive SNOMED or ICD codes"
- . W !,"associated with them. The codes must be edited and corrected before the"
- . W !,"list can be saved."
- . N DIR,DUOUT,DTOUT,DIRUT
- . S DIR(0)="E" D ^DIR
- . S VALMBCK="R",GMPLQT=1
- . Q
- W !!,"Saving ..."
- S DA=0,LABEL=$S($D(GMPLGRP):"SAVGRP",1:"SAVLST")
- F S DA=$O(^TMP("GMPLIST",$J,DA)) Q:+DA'>0 D @LABEL
- K GMPLSAVE S:$D(GMPLGRP) GMPSAVED=1
- S VALMBCK="Q" W " done." H 1
- Q
- SAVGRP ; Save changes to existing group
- N I,DIK,ITEM,TMPITEM,GMPJ,GMPFDA,GMPERR,GMPSFN,GMPLTXT
- S DA(1)=+GMPLGRP,DIK="^GMPL(125.11,"_DA(1)_",1,"
- S GMPSFN="125.111"
- I +DA'=DA D Q
- . Q:"@"[$G(^TMP("GMPLIST",$J,DA)) ; nothing to save
- . S TMPITEM=^TMP("GMPLIST",$J,DA) D NEW(GMPSFN,+GMPLGRP,TMPITEM)
- I "@"[$G(^TMP("GMPLIST",$J,DA)) D ^DIK Q
- S ITEM=$G(^GMPL(125.11,+GMPLGRP,1,DA,0))
- I ITEM'=^TMP("GMPLIST",$J,DA) D
- . F I=1:1:6 D
- .. S GMPJ=$S(I=1:".01",I=2:".02",I=3:".03",I=4:".04",I=5:".05",1:".06")
- .. Q:$P(^TMP("GMPLIST",$J,DA),U,I)=$P(ITEM,U,I)
- .. S GMPFDA(125.111,""_DA_","_+GMPLGRP_",",GMPJ)=$S($P(^TMP("GMPLIST",$J,DA),U,I)="":"@",1:$P(^TMP("GMPLIST",$J,DA),U,I))
- . D FILE^DIE("K","GMPFDA","GMPERR")
- I $D(GMPERR) D
- . S GMPLTXT(1)="Error updating Rec #"_+GMPLGRP_", Sub-rec #"_DA_"."
- . S GMPLTXT(2)="Error "_GMPERR("DIERR",1)_": "_GMPERR("DIERR",1,"TEXT",1)
- . D EN^DDIOL(.GMPLTXT)
- Q
- ;
- SAVLST ; Save changes to existing list
- N I,DIK,ITEM,TMPLST,GMPJ,GMPFDA,GMPERR,GMPSFN
- S DA(1)=+GMPLSLST,DIK="^GMPL(125,"_DA(1)_",1,"
- S GMPSFN="125.01"
- I +DA'=DA D Q ; new link
- . Q:"@"[$G(^TMP("GMPLIST",$J,DA)) ; nothing to save
- . S TMPLST=^TMP("GMPLIST",$J,DA) D NEW(GMPSFN,+GMPLSLST,TMPLST)
- I "@"[$G(^TMP("GMPLIST",$J,DA)) D ^DIK Q
- S ITEM=$G(^GMPL(125,+GMPLSLST,1,DA,0))
- I ITEM'=^TMP("GMPLIST",$J,DA) D
- . F I=1:1:4 D
- .. S GMPJ=$S(I=1:".01",I=2:".02",I=3:".03",1:".04")
- .. Q:$P(^TMP("GMPLIST",$J,DA),U,I)=$P(ITEM,U,I)
- .. S GMPFDA(125.01,""_DA_","_+GMPLSLST_",",GMPJ)=$S($P(^TMP("GMPLIST",$J,DA),U,I)="":"@",1:$P(^TMP("GMPLIST",$J,DA),U,I))
- . D FILE^DIE("K","GMPFDA","GMPERR")
- I $D(GMPERR) D
- . S GMPLTXT(1)="Error updating Rec #"_+GMPLSLST_", Sub-rec #"_DA_"."
- . S GMPLTXT(2)="Error "_GMPERR("DIERR",1)_": "_GMPERR("DIERR",1,"TEXT",1)
- . D EN^DDIOL(.GMPLTXT)
- Q
- ;
- NEW(GMPSFN,LIST,ITEM) ; Create new contents entry in subfile #125.01 or #125.111
- N I,GMPFDA,GMPJ,GMPNF,GMPERR,GMPFILE
- S GMPFILE=$S(GMPSFN="125.01":"125",1:"125.11")
- S GMPNF=$S(GMPSFN="125.01":4,1:6)
- F I=1:1:GMPNF D
- . S GMPJ=$S(I=1:".01",I=2:".02",I=3:".03",I=4:".04",I=5:".05",1:".06")
- . S GMPFDA(GMPSFN,"+2,"_LIST_",",GMPJ)=$P(ITEM,U,I)
- L +^GMPL(GMPFILE,LIST):5 I '$T D Q
- . W !,"Lock Error: error updating record #"_LIST_" in File #"_GMPFILE_"."
- D UPDATE^DIE("","GMPFDA","","GMPERR")
- L -^GMPL(GMPFILE,LIST)
- Q
- ;
- DELETE ; Delete problem group
- N DIR,X,Y,DA,DIK,IFN,GMPLSEQ,GMPLDA S VALMBCK=$S(VALMCC:"",1:"R")
- I $P($G(GMPLGRP),U,4)="N" W !!,"Cannot make edits to a National category." H 2 Q
- I $D(^GMPL(125,"AC",+GMPLGRP)) W $C(7),!!,">>> This category belongs to at least one problem selection list!",!," CANNOT DELETE" H 2 Q
- S DIR(0)="YA",DIR("B")="NO",DIR("A")="Are you sure you want to delete the entire '"_$P(GMPLGRP,U,2)_"' category? "
- S DIR("?")="Enter YES to completely remove this category and all its items."
- D ^DIR Q:'Y
- DEL1 ; Ok, go for it ...
- W !!,"Deleting category items ..."
- S (GMPLSEQ,GMPLDA)=0
- F S GMPLSEQ=$O(^GMPL(125.11,"C",+GMPLGRP,GMPLSEQ)) Q:'GMPLSEQ D
- . F S GMPLDA=$O(^GMPL(125.11,"C",+GMPLGRP,GMPLSEQ,GMPLDA)) Q:'GMPLDA D
- . . S DA(1)=+GMPLGRP,DA=GMPLDA,DIK="^GMPL(125.11,"_DA(1)_",1," D ^DIK W "."
- . K ^GMPL(125.11,+GMPLGRP,1,0)
- S DA=+GMPLGRP,DIK="^GMPL(125.11," D ^DIK W "."
- L -^GMPL(125.11,+GMPLGRP,0) S GMPLGRP=0 K GMPLSAVE W " <done>"
- D NEWGRP S:+GMPLGRP'>0 VALMBCK="Q"
- Q
- ;
- VALGRP(GMPLCAT,GMPLCODE) ; check all problems in the category for inactive SNOMED/ICD codes
- ; Input:
- ; GMPLCAT = ien from file 125.11
- ; GMPLCODE = Name of array where the categories & probs w/inactive codes are stored (Optional)
- ;
- ; Output:
- ; 1 = category has no problems with inactive codes
- ; 0 = category has one or more problems with inactive codes
- ; 0^GMPLCODE = category has one or more problems with inactive codes^array w/inactive codes
- ; 0^ERR = category is invalid^error message
- ;
- ; Array format (if returned):
- ; GMPLCODE(Category Name, Problem Sequence)=Display Text^(ICD-9/10-CM Code)^Inactive coding system (ICD,SCT,SCT/ICD)
- ;
- I '$G(GMPLCAT) Q "0^No category selected"
- N GMPLSEQ,GMPLVALC,GMPLDA,GMPDT,GMPLCNME
- S GMPLVALC=1,(GMPLSEQ,GMPLDA)=0,GMPDT=$$DT^XLFDT
- S GMPLCNME=$$GET1^DIQ(125.11,GMPLCAT,.01)
- F S GMPLSEQ=$O(^GMPL(125.11,"C",GMPLCAT,GMPLSEQ)) Q:'GMPLSEQ D
- . F S GMPLDA=$O(^GMPL(125.11,"C",GMPLCAT,GMPLSEQ,GMPLDA)) Q:'GMPLDA D
- . . N GMPLICD,GMPLSCTC,GMI,GMPLX,GMPSCT,GMPICD
- . . N GMPLICDS,GMPLCLBL,GMPLCPTR,GMPCSYS,GMPLDTXT
- . . S (GMPSCT,GMPICD)=0
- . . S GMPLX=$G(^GMPL(125.11,GMPLCAT,1,GMPLDA,0))
- . . S GMPLDTXT=$P(GMPLX,U,3)
- . . S GMPLICD=$P(GMPLX,U,4),GMPLSCTC=$P(GMPLX,U,5)
- . . Q:'$L(GMPLICD)&('$L(GMPLSCTC)) ; no code there
- . . I $L(GMPLSCTC) D
- . . . I '$$STATCHK^LEXSRC2(GMPLSCTC,GMPDT,"","SCT") S GMPLVALC=0,GMPSCT=1
- . . S GMPLICDS=$$CODECS^ICDEX($P(GMPLICD,"/"),80,GMPDT)
- . . S GMPLCPTR=$P(GMPLICDS,U),GMPLCLBL=$P(GMPLICDS,U,2)
- . . I $L(GMPLICD) D
- . . . F GMI=1:1:$L(GMPLICD,"/") D
- . . . . I '$$STATCHK^ICDEX($P(GMPLICD,"/",GMI),GMPDT,GMPLCPTR) S GMPLVALC=0,GMPICD=1
- . . I $D(GMPLCODE),(GMPSCT!GMPICD) D
- . . . S GMPCSYS=$S((GMPSCT&GMPICD):"SCT/ICD",GMPSCT:"SCT",GMPICD:"ICD",1:"")
- . . . S @GMPLCODE@(GMPLCNME,GMPLSEQ)=GMPLDTXT_U_"("_GMPLCLBL_" "_GMPLICD_")"_U_GMPCSYS
- . Q
- I $D(GMPLCODE),('GMPLVALC) S GMPLVALC=GMPLVALC_U_GMPLCODE
- Q GMPLVALC
- ;
- VALLIST(LIST,GMPLCODE) ;check all categories in list for probs w/ inactive SNOMED/ICD codes
- ; Input:
- ; LIST = ien from file 125
- ; GMPLCODE = Name of array where the categories & probs w/inactive codes are stored (Optional)
- ;
- ; Output:
- ; 1 = list has no problems with inactive codes
- ; 0 = list has one or more problems with inactive codes
- ; 0^GMPLCODE = list has one or more problems with inactive codes^array w/inactive codes
- ; O^ERR = list is invalid^error message
- ;
- ; Array format (if returned):
- ; GMPLCODE(Category Name, Problem Sequence)=Display Text^(ICD-9/10-CM Code)^Inactive coding system (ICD,SCT,SCT/ICD)
- ;
- N GMPLIEN,GMPLVAL
- I '$G(LIST) Q 0
- S GMPLCAT=0,GMPLVAL=1
- F S GMPLCAT=$O(^GMPL(125,LIST,1,"B",GMPLCAT)) Q:'GMPLCAT D
- . I $D(GMPLCODE) D
- . . I '$$VALGRP(GMPLCAT,GMPLCODE) S GMPLVAL=0
- . E I '$$VALGRP(GMPLCAT) S GMPLVAL=0
- . Q
- I $D(GMPLCODE) S GMPLVAL=GMPLVAL_U_GMPLCODE
- Q GMPLVAL
- ;
- ASSIGN ; assign or remove selection list to users/clinic
- ;
- N GMPLENT,GMPLPAR,GMPJUST1,GMPLDTXT
- I $D(VALMCC) D FULL^VALM1
- S GMPLPAR=$$FIND1^DIC(8989.51,,"BX","ORQQPL SELECTION LIST")
- I $D(GMPLPAR) S GMPLDTXT=$$GET1^DIQ(8989.51,GMPLPAR,.02),GMPLPAR=GMPLPAR_U_GMPLDTXT
- F D GETENT^XPAREDIT(.GMPLENT,GMPLPAR,.GMPJUST1) Q:'GMPLENT D EDIT^XPAREDIT(GMPLENT,GMPLPAR) Q:GMPJUST1
- I $D(VALMCC) S VALMBCK="R",VALMSG=$$MSG^GMPLX
- Q
- --- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HGMPLBLD2 11031 printed Apr 23, 2025@18:44:17 Page 2
- GMPLBLD2 ; SLC/MKB,JFR,TC -- Bld PL Selection Lists cont ;07/19/17 13:32
- +1 ;;2.0;Problem List;**3,28,36,42,49**;Aug 25, 1994;Build 43
- +2 ;
- +3 ; External References:
- +4 ; ICR 2053 $$FILE^DIE,$$UPDATE^DIE
- +5 ; ICR 2336 $$GETENT,$$EDIT,$$EDITPAR^XPAREDIT
- +6 ; ICR 4083 $$STATCHK^LEXSRC2
- +7 ; ICR 5747 $$CODECS^ICDEX,$$STATCHK^ICDEX
- +8 ; ICR 10103 $$DT^XLFDT
- +9 ; ICR 10006 ^DIC
- +10 ; ICR 10013 ^DIK
- +11 ; ICR 10026 ^DIR
- +12 ; ICR 10116 FULL^VALM1
- +13 ;
- NEWGRP ; Change problem groups
- +1 NEW NEWGRP
- DO FULL^VALM1
- +2 IF $DATA(GMPLSAVE)
- IF $$CKSAVE
- DO SAVE
- NG1 SET NEWGRP=$$GROUP("L")
- if +NEWGRP'>0
- GOTO NGQ
- if +NEWGRP=+GMPLGRP
- GOTO NGQ
- +1 LOCK +^GMPL(125.11,+NEWGRP,0):1
- IF '$TEST
- Begin DoDot:1
- +2 WRITE $CHAR(7),!!,"This category is currently being edited by another user!",!
- End DoDot:1
- GOTO NG1
- +3 LOCK -^GMPL(125.11,+GMPLGRP,0)
- SET GMPLGRP=NEWGRP
- +4 DO GETLIST^GMPLBLDC
- DO BUILD^GMPLBLDC("^TMP(""GMPLIST"",$J)",GMPLMODE)
- DO HDR^GMPLBLDC
- NGQ SET VALMBCK="R"
- SET VALMSG=$$MSG^GMPLX
- +1 QUIT
- +2 ;
- GROUP(L) ; Lookup into Problem Selection Group file #125.11
- +1 ; L = "" or "L", if LAYGO is [not] allowed
- NEW DIC,X,Y,DLAYGO,GMPDT
- +2 SET GMPDT=$$DT^XLFDT
- +3 SET DIC="^GMPL(125.11,"
- SET DIC(0)="AEQMZ"_L
- SET DIC("A")="Select CATEGORY NAME: "
- +4 IF DIC(0)["L"
- SET DLAYGO=125.11
- SET DIC("DR")=".02////"_GMPDT_";.03"
- SET DIC("?N","125.11")=6
- +5 IF '$TEST
- SET DIC("S")="I $P(^(0),U,3)'=""N"""
- +6 DO ^DIC
- if Y'>0
- SET Y="^"
- if Y'="^"
- SET Y=+Y_U_Y(0)
- +7 QUIT Y
- +8 ;
- NEWLST ; Change selection lists
- +1 NEW NEWLST
- DO FULL^VALM1
- +2 IF $DATA(GMPLSAVE)
- IF $$CKSAVE
- DO SAVE
- NL1 SET NEWLST=$$LIST("L")
- if +NEWLST'>0
- GOTO NLQ
- if +NEWLST=+GMPLSLST
- GOTO NLQ
- +1 LOCK +^GMPL(125,+NEWLST,0):1
- IF '$TEST
- Begin DoDot:1
- +2 WRITE $CHAR(7),!!,"This list is currently being edited by another user!",!
- End DoDot:1
- GOTO NL1
- +3 LOCK -^GMPL(125,+GMPLSLST,0)
- SET GMPLSLST=NEWLST
- +4 DO GETLIST^GMPLBLD
- DO BUILD^GMPLBLD("^TMP(""GMPLIST"",$J)",GMPLMODE)
- DO HDR^GMPLBLD
- NLQ SET VALMBCK="R"
- SET VALMSG=$$MSG^GMPLX
- +1 QUIT
- +2 ;
- LIST(L) ; Lookup into Problem Selection List file #125
- +1 ; L="" or "L" if LAYGO [not] allowed
- NEW DIC,X,Y,DLAYGO,GMPDT
- +2 SET GMPDT=$$DT^XLFDT
- +3 SET DIC="^GMPL(125,"
- SET DIC(0)="AEQMZ"_L
- SET DIC("A")="Select LIST NAME: "
- +4 if DIC(0)["L"
- SET DLAYGO=125
- SET DIC("DR")=".02////"_GMPDT_";.04"
- +5 DO ^DIC
- if Y<0!($DATA(DTOUT))!($DATA(DUOUT))
- SET Y="^"
- if Y'="^"
- SET Y=+Y_U_Y(0)
- +6 QUIT Y
- +7 ;
- LAST(ROOT) ; Returns last subscript
- +1 NEW I,J
- SET (I,J)=""
- +2 FOR
- SET I=$ORDER(@(ROOT_"I)"))
- if I=""
- QUIT
- SET J=I
- +3 QUIT J
- +4 ;
- CKSAVE() ; Save [changes] ??
- +1 NEW DIR,X,Y,TEXT
- SET TEXT=$SELECT($DATA(GMPLGRP):"category",1:"list")
- +2 SET DIR("A")="Save the changes to this "_TEXT_"? "
- SET DIR("B")="YES"
- +3 SET DIR("?",1)="Enter YES to save the changes that have been made to this "_TEXT
- SET DIR("?")="before exiting it; NO will leave this "_TEXT_" unchanged."
- +4 SET DIR(0)="YA"
- DO ^DIR
- +5 QUIT +Y
- +6 ;
- SAVE ; Save changes to group/list
- +1 NEW GMPLQT,LABEL,DA,GMPDT
- +2 SET GMPLQT=0
- SET GMPDT=$$DT^XLFDT
- +3 IF $DATA(GMPLGRP)
- Begin DoDot:1
- +4 NEW ITM,CODE
- +5 SET ITM=0
- +6 FOR
- SET ITM=$ORDER(^TMP("GMPLIST",$JOB,ITM))
- if 'ITM!(GMPLQT)
- QUIT
- Begin DoDot:2
- +7 NEW GMI,GMPSCTC
- +8 SET GMPSCTC=$PIECE(^TMP("GMPLIST",$JOB,ITM),U,5)
- if '$LENGTH(GMPSCTC)
- QUIT
- +9 IF '$$STATCHK^LEXSRC2(GMPSCTC,GMPDT,"","SCT")
- SET GMPLQT=1
- QUIT
- +10 SET CODE=$PIECE(^TMP("GMPLIST",$JOB,ITM),U,4)
- if '$LENGTH(CODE)
- QUIT
- +11 FOR GMI=1:1:$LENGTH(CODE,"/")
- Begin DoDot:3
- +12 NEW GMPLCPTR
- SET GMPLCPTR=$PIECE($$CODECS^ICDEX($PIECE(CODE,"/",GMI),80,GMPDT),U)
- +13 IF '$$STATCHK^ICDEX($PIECE(CODE,"/",GMI),GMPDT,GMPLCPTR)
- SET GMPLQT=1
- QUIT
- End DoDot:3
- End DoDot:2
- +14 ;no inactive codes in the category
- IF 'GMPLQT
- QUIT
- +15 DO FULL^VALM1
- +16 WRITE !!,$CHAR(7),"This Group contains problems with inactive SNOMED or ICD codes associated"
- +17 WRITE !,"with them. The codes must be edited and corrected before the group can be saved."
- +18 NEW DIR,DUOUT,DTOUT,DIRUT
- +19 SET DIR(0)="E"
- DO ^DIR
- +20 SET VALMBCK="R"
- SET GMPLQT=1
- +21 QUIT
- End DoDot:1
- IF GMPLQT
- QUIT
- +22 ;
- +23 IF '$DATA(GMPLGRP)
- IF $DATA(GMPLSLST)
- Begin DoDot:1
- +24 NEW GRP
- +25 SET GRP=0
- +26 FOR
- SET GRP=$ORDER(^TMP("GMPLIST",$JOB,"GRP",GRP))
- if 'GRP!(GMPLQT)
- QUIT
- Begin DoDot:2
- +27 ;no inactive codes in the GROUP
- IF $$VALGRP(GRP)
- QUIT
- +28 SET GMPLQT=1
- End DoDot:2
- +29 ; all groups and problems OK
- IF 'GMPLQT
- QUIT
- +30 DO FULL^VALM1
- +31 WRITE !!,$CHAR(7),"This Selection List contains problems with inactive SNOMED or ICD codes"
- +32 WRITE !,"associated with them. The codes must be edited and corrected before the"
- +33 WRITE !,"list can be saved."
- +34 NEW DIR,DUOUT,DTOUT,DIRUT
- +35 SET DIR(0)="E"
- DO ^DIR
- +36 SET VALMBCK="R"
- SET GMPLQT=1
- +37 QUIT
- End DoDot:1
- IF GMPLQT
- QUIT
- +38 WRITE !!,"Saving ..."
- +39 SET DA=0
- SET LABEL=$SELECT($DATA(GMPLGRP):"SAVGRP",1:"SAVLST")
- +40 FOR
- SET DA=$ORDER(^TMP("GMPLIST",$JOB,DA))
- if +DA'>0
- QUIT
- DO @LABEL
- +41 KILL GMPLSAVE
- if $DATA(GMPLGRP)
- SET GMPSAVED=1
- +42 SET VALMBCK="Q"
- WRITE " done."
- HANG 1
- +43 QUIT
- SAVGRP ; Save changes to existing group
- +1 NEW I,DIK,ITEM,TMPITEM,GMPJ,GMPFDA,GMPERR,GMPSFN,GMPLTXT
- +2 SET DA(1)=+GMPLGRP
- SET DIK="^GMPL(125.11,"_DA(1)_",1,"
- +3 SET GMPSFN="125.111"
- +4 IF +DA'=DA
- Begin DoDot:1
- +5 ; nothing to save
- if "@"[$GET(^TMP("GMPLIST",$JOB,DA))
- QUIT
- +6 SET TMPITEM=^TMP("GMPLIST",$JOB,DA)
- DO NEW(GMPSFN,+GMPLGRP,TMPITEM)
- End DoDot:1
- QUIT
- +7 IF "@"[$GET(^TMP("GMPLIST",$JOB,DA))
- DO ^DIK
- QUIT
- +8 SET ITEM=$GET(^GMPL(125.11,+GMPLGRP,1,DA,0))
- +9 IF ITEM'=^TMP("GMPLIST",$JOB,DA)
- Begin DoDot:1
- +10 FOR I=1:1:6
- Begin DoDot:2
- +11 SET GMPJ=$SELECT(I=1:".01",I=2:".02",I=3:".03",I=4:".04",I=5:".05",1:".06")
- +12 if $PIECE(^TMP("GMPLIST",$JOB,DA),U,I)=$PIECE(ITEM,U,I)
- QUIT
- +13 SET GMPFDA(125.111,""_DA_","_+GMPLGRP_",",GMPJ)=$SELECT($PIECE(^TMP("GMPLIST",$JOB,DA),U,I)="":"@",1:$PIECE(^TMP("GMPLIST",$JOB,DA),U,I))
- End DoDot:2
- +14 DO FILE^DIE("K","GMPFDA","GMPERR")
- End DoDot:1
- +15 IF $DATA(GMPERR)
- Begin DoDot:1
- +16 SET GMPLTXT(1)="Error updating Rec #"_+GMPLGRP_", Sub-rec #"_DA_"."
- +17 SET GMPLTXT(2)="Error "_GMPERR("DIERR",1)_": "_GMPERR("DIERR",1,"TEXT",1)
- +18 DO EN^DDIOL(.GMPLTXT)
- End DoDot:1
- +19 QUIT
- +20 ;
- SAVLST ; Save changes to existing list
- +1 NEW I,DIK,ITEM,TMPLST,GMPJ,GMPFDA,GMPERR,GMPSFN
- +2 SET DA(1)=+GMPLSLST
- SET DIK="^GMPL(125,"_DA(1)_",1,"
- +3 SET GMPSFN="125.01"
- +4 ; new link
- IF +DA'=DA
- Begin DoDot:1
- +5 ; nothing to save
- if "@"[$GET(^TMP("GMPLIST",$JOB,DA))
- QUIT
- +6 SET TMPLST=^TMP("GMPLIST",$JOB,DA)
- DO NEW(GMPSFN,+GMPLSLST,TMPLST)
- End DoDot:1
- QUIT
- +7 IF "@"[$GET(^TMP("GMPLIST",$JOB,DA))
- DO ^DIK
- QUIT
- +8 SET ITEM=$GET(^GMPL(125,+GMPLSLST,1,DA,0))
- +9 IF ITEM'=^TMP("GMPLIST",$JOB,DA)
- Begin DoDot:1
- +10 FOR I=1:1:4
- Begin DoDot:2
- +11 SET GMPJ=$SELECT(I=1:".01",I=2:".02",I=3:".03",1:".04")
- +12 if $PIECE(^TMP("GMPLIST",$JOB,DA),U,I)=$PIECE(ITEM,U,I)
- QUIT
- +13 SET GMPFDA(125.01,""_DA_","_+GMPLSLST_",",GMPJ)=$SELECT($PIECE(^TMP("GMPLIST",$JOB,DA),U,I)="":"@",1:$PIECE(^TMP("GMPLIST",$JOB,DA),U,I))
- End DoDot:2
- +14 DO FILE^DIE("K","GMPFDA","GMPERR")
- End DoDot:1
- +15 IF $DATA(GMPERR)
- Begin DoDot:1
- +16 SET GMPLTXT(1)="Error updating Rec #"_+GMPLSLST_", Sub-rec #"_DA_"."
- +17 SET GMPLTXT(2)="Error "_GMPERR("DIERR",1)_": "_GMPERR("DIERR",1,"TEXT",1)
- +18 DO EN^DDIOL(.GMPLTXT)
- End DoDot:1
- +19 QUIT
- +20 ;
- NEW(GMPSFN,LIST,ITEM) ; Create new contents entry in subfile #125.01 or #125.111
- +1 NEW I,GMPFDA,GMPJ,GMPNF,GMPERR,GMPFILE
- +2 SET GMPFILE=$SELECT(GMPSFN="125.01":"125",1:"125.11")
- +3 SET GMPNF=$SELECT(GMPSFN="125.01":4,1:6)
- +4 FOR I=1:1:GMPNF
- Begin DoDot:1
- +5 SET GMPJ=$SELECT(I=1:".01",I=2:".02",I=3:".03",I=4:".04",I=5:".05",1:".06")
- +6 SET GMPFDA(GMPSFN,"+2,"_LIST_",",GMPJ)=$PIECE(ITEM,U,I)
- End DoDot:1
- +7 LOCK +^GMPL(GMPFILE,LIST):5
- IF '$TEST
- Begin DoDot:1
- +8 WRITE !,"Lock Error: error updating record #"_LIST_" in File #"_GMPFILE_"."
- End DoDot:1
- QUIT
- +9 DO UPDATE^DIE("","GMPFDA","","GMPERR")
- +10 LOCK -^GMPL(GMPFILE,LIST)
- +11 QUIT
- +12 ;
- DELETE ; Delete problem group
- +1 NEW DIR,X,Y,DA,DIK,IFN,GMPLSEQ,GMPLDA
- SET VALMBCK=$SELECT(VALMCC:"",1:"R")
- +2 IF $PIECE($GET(GMPLGRP),U,4)="N"
- WRITE !!,"Cannot make edits to a National category."
- HANG 2
- QUIT
- +3 IF $DATA(^GMPL(125,"AC",+GMPLGRP))
- WRITE $CHAR(7),!!,">>> This category belongs to at least one problem selection list!",!," CANNOT DELETE"
- HANG 2
- QUIT
- +4 SET DIR(0)="YA"
- SET DIR("B")="NO"
- SET DIR("A")="Are you sure you want to delete the entire '"_$PIECE(GMPLGRP,U,2)_"' category? "
- +5 SET DIR("?")="Enter YES to completely remove this category and all its items."
- +6 DO ^DIR
- if 'Y
- QUIT
- DEL1 ; Ok, go for it ...
- +1 WRITE !!,"Deleting category items ..."
- +2 SET (GMPLSEQ,GMPLDA)=0
- +3 FOR
- SET GMPLSEQ=$ORDER(^GMPL(125.11,"C",+GMPLGRP,GMPLSEQ))
- if 'GMPLSEQ
- QUIT
- Begin DoDot:1
- +4 FOR
- SET GMPLDA=$ORDER(^GMPL(125.11,"C",+GMPLGRP,GMPLSEQ,GMPLDA))
- if 'GMPLDA
- QUIT
- Begin DoDot:2
- +5 SET DA(1)=+GMPLGRP
- SET DA=GMPLDA
- SET DIK="^GMPL(125.11,"_DA(1)_",1,"
- DO ^DIK
- WRITE "."
- End DoDot:2
- +6 KILL ^GMPL(125.11,+GMPLGRP,1,0)
- End DoDot:1
- +7 SET DA=+GMPLGRP
- SET DIK="^GMPL(125.11,"
- DO ^DIK
- WRITE "."
- +8 LOCK -^GMPL(125.11,+GMPLGRP,0)
- SET GMPLGRP=0
- KILL GMPLSAVE
- WRITE " <done>"
- +9 DO NEWGRP
- if +GMPLGRP'>0
- SET VALMBCK="Q"
- +10 QUIT
- +11 ;
- VALGRP(GMPLCAT,GMPLCODE) ; check all problems in the category for inactive SNOMED/ICD codes
- +1 ; Input:
- +2 ; GMPLCAT = ien from file 125.11
- +3 ; GMPLCODE = Name of array where the categories & probs w/inactive codes are stored (Optional)
- +4 ;
- +5 ; Output:
- +6 ; 1 = category has no problems with inactive codes
- +7 ; 0 = category has one or more problems with inactive codes
- +8 ; 0^GMPLCODE = category has one or more problems with inactive codes^array w/inactive codes
- +9 ; 0^ERR = category is invalid^error message
- +10 ;
- +11 ; Array format (if returned):
- +12 ; GMPLCODE(Category Name, Problem Sequence)=Display Text^(ICD-9/10-CM Code)^Inactive coding system (ICD,SCT,SCT/ICD)
- +13 ;
- +14 IF '$GET(GMPLCAT)
- QUIT "0^No category selected"
- +15 NEW GMPLSEQ,GMPLVALC,GMPLDA,GMPDT,GMPLCNME
- +16 SET GMPLVALC=1
- SET (GMPLSEQ,GMPLDA)=0
- SET GMPDT=$$DT^XLFDT
- +17 SET GMPLCNME=$$GET1^DIQ(125.11,GMPLCAT,.01)
- +18 FOR
- SET GMPLSEQ=$ORDER(^GMPL(125.11,"C",GMPLCAT,GMPLSEQ))
- if 'GMPLSEQ
- QUIT
- Begin DoDot:1
- +19 FOR
- SET GMPLDA=$ORDER(^GMPL(125.11,"C",GMPLCAT,GMPLSEQ,GMPLDA))
- if 'GMPLDA
- QUIT
- Begin DoDot:2
- +20 NEW GMPLICD,GMPLSCTC,GMI,GMPLX,GMPSCT,GMPICD
- +21 NEW GMPLICDS,GMPLCLBL,GMPLCPTR,GMPCSYS,GMPLDTXT
- +22 SET (GMPSCT,GMPICD)=0
- +23 SET GMPLX=$GET(^GMPL(125.11,GMPLCAT,1,GMPLDA,0))
- +24 SET GMPLDTXT=$PIECE(GMPLX,U,3)
- +25 SET GMPLICD=$PIECE(GMPLX,U,4)
- SET GMPLSCTC=$PIECE(GMPLX,U,5)
- +26 ; no code there
- if '$LENGTH(GMPLICD)&('$LENGTH(GMPLSCTC))
- QUIT
- +27 IF $LENGTH(GMPLSCTC)
- Begin DoDot:3
- +28 IF '$$STATCHK^LEXSRC2(GMPLSCTC,GMPDT,"","SCT")
- SET GMPLVALC=0
- SET GMPSCT=1
- End DoDot:3
- +29 SET GMPLICDS=$$CODECS^ICDEX($PIECE(GMPLICD,"/"),80,GMPDT)
- +30 SET GMPLCPTR=$PIECE(GMPLICDS,U)
- SET GMPLCLBL=$PIECE(GMPLICDS,U,2)
- +31 IF $LENGTH(GMPLICD)
- Begin DoDot:3
- +32 FOR GMI=1:1:$LENGTH(GMPLICD,"/")
- Begin DoDot:4
- +33 IF '$$STATCHK^ICDEX($PIECE(GMPLICD,"/",GMI),GMPDT,GMPLCPTR)
- SET GMPLVALC=0
- SET GMPICD=1
- End DoDot:4
- End DoDot:3
- +34 IF $DATA(GMPLCODE)
- IF (GMPSCT!GMPICD)
- Begin DoDot:3
- +35 SET GMPCSYS=$SELECT((GMPSCT&GMPICD):"SCT/ICD",GMPSCT:"SCT",GMPICD:"ICD",1:"")
- +36 SET @GMPLCODE@(GMPLCNME,GMPLSEQ)=GMPLDTXT_U_"("_GMPLCLBL_" "_GMPLICD_")"_U_GMPCSYS
- End DoDot:3
- End DoDot:2
- +37 QUIT
- End DoDot:1
- +38 IF $DATA(GMPLCODE)
- IF ('GMPLVALC)
- SET GMPLVALC=GMPLVALC_U_GMPLCODE
- +39 QUIT GMPLVALC
- +40 ;
- VALLIST(LIST,GMPLCODE) ;check all categories in list for probs w/ inactive SNOMED/ICD codes
- +1 ; Input:
- +2 ; LIST = ien from file 125
- +3 ; GMPLCODE = Name of array where the categories & probs w/inactive codes are stored (Optional)
- +4 ;
- +5 ; Output:
- +6 ; 1 = list has no problems with inactive codes
- +7 ; 0 = list has one or more problems with inactive codes
- +8 ; 0^GMPLCODE = list has one or more problems with inactive codes^array w/inactive codes
- +9 ; O^ERR = list is invalid^error message
- +10 ;
- +11 ; Array format (if returned):
- +12 ; GMPLCODE(Category Name, Problem Sequence)=Display Text^(ICD-9/10-CM Code)^Inactive coding system (ICD,SCT,SCT/ICD)
- +13 ;
- +14 NEW GMPLIEN,GMPLVAL
- +15 IF '$GET(LIST)
- QUIT 0
- +16 SET GMPLCAT=0
- SET GMPLVAL=1
- +17 FOR
- SET GMPLCAT=$ORDER(^GMPL(125,LIST,1,"B",GMPLCAT))
- if 'GMPLCAT
- QUIT
- Begin DoDot:1
- +18 IF $DATA(GMPLCODE)
- Begin DoDot:2
- +19 IF '$$VALGRP(GMPLCAT,GMPLCODE)
- SET GMPLVAL=0
- End DoDot:2
- +20 IF '$TEST
- IF '$$VALGRP(GMPLCAT)
- SET GMPLVAL=0
- +21 QUIT
- End DoDot:1
- +22 IF $DATA(GMPLCODE)
- SET GMPLVAL=GMPLVAL_U_GMPLCODE
- +23 QUIT GMPLVAL
- +24 ;
- ASSIGN ; assign or remove selection list to users/clinic
- +1 ;
- +2 NEW GMPLENT,GMPLPAR,GMPJUST1,GMPLDTXT
- +3 IF $DATA(VALMCC)
- DO FULL^VALM1
- +4 SET GMPLPAR=$$FIND1^DIC(8989.51,,"BX","ORQQPL SELECTION LIST")
- +5 IF $DATA(GMPLPAR)
- SET GMPLDTXT=$$GET1^DIQ(8989.51,GMPLPAR,.02)
- SET GMPLPAR=GMPLPAR_U_GMPLDTXT
- +6 FOR
- DO GETENT^XPAREDIT(.GMPLENT,GMPLPAR,.GMPJUST1)
- if 'GMPLENT
- QUIT
- DO EDIT^XPAREDIT(GMPLENT,GMPLPAR)
- if GMPJUST1
- QUIT
- +7 IF $DATA(VALMCC)
- SET VALMBCK="R"
- SET VALMSG=$$MSG^GMPLX
- +8 QUIT