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

VENPCCMA.m

Go to the documentation of this file.
  1. VENPCCMA ; IHS/OIT/GIS - USER PREFERENCE MANAGER FOR DIAGNOSES AND ICD CODES ;
  1. ;;2.6;PCC+;;NOV 12, 2007
  1. ;
  1. ;
  1. ;
  1. NEW N EF,PRV,PGRP,LIST,STATUS,X,Y,%,TITLE,DTOUT,DUOUT,DIRUT,%Y
  1. I '$D(LOOP) N LOOP S LOOP=""
  1. INIT S (PRV,EF)="",PGRP=0
  1. RUN W:$D(IOF) @IOF W !!!?20,"***** USER PREFERENCE MANAGER FOR DIAGNOSES *****"
  1. W !!!
  1. LOOP I LOOP S %=$$NEXT(EF,PRV,PGRP) Q:'% W !!! S EF=$P(%,";"),PRV=$P(%,";",2),PGRP=$P(%,";",3) G LST
  1. LEF S EF=$$EF(EF) I EF="" Q
  1. LPRV S PRV=$$PRV(PRV) I PRV="" Q
  1. LGRP S PGRP=$$PGRP() I PGRP="" Q
  1. LST S LIST=$$LIST(+EF,+PRV,+PGRP)
  1. S TITLE=$$TITLE(EF,PRV,PGRP)
  1. EDIT S STATUS=$$STATUS(+EF,LIST) W !!,$P(STATUS,U,3)
  1. W !,TITLE
  1. W ! D SHOW(LIST)
  1. I $L(LIST) W !!,"Select from 'ADD', 'EDIT', 'DELETE', 'COPY', 'SUBMIT', 'NEXT LIST', 'QUIT'" S DIR(0)="SBO^A:ADD;E:EDIT;D:DELETE;C:COPY;S:SUBMIT;N:NEXT LIST;Q:QUIT"
  1. I '$L(LIST) W !!,"Select from 'ADD', 'COPY', 'NEXT LIST', 'QUIT'" S DIR(0)="SBO^A:ADD;C:COPY;N:NEXT LIST;Q:QUIT"
  1. S DIR("A")="Your choice" KILL DA D ^DIR KILL DIR
  1. I Y=U!($D(DTOUT)) Q
  1. I LOOP,Y="" G LOOP
  1. I Y="A" S LIST=$$ADD(LIST,STATUS) G EDIT
  1. I Y="D" S LIST=$$DEL(LIST,STATUS) G EDIT
  1. I Y="C" S LIST=$$COPY(LIST,STATUS,TITLE,EF,PRV) G EDIT
  1. I Y="E" S LIST=$$UPDATE(LIST,STATUS) G EDIT
  1. I Y="S" G RUN:$$SUBMIT(LIST,EF,PRV,PGRP),EDIT
  1. I Y="N" G LPRV
  1. Q
  1. ;
  1. EF(EF) ;
  1. N DIC,X,Y,%
  1. S DIC="^VEN(7.41,",DIC(0)="AEQ"
  1. S DIC("A")="Encounter form name: "
  1. I $L($G(EF)) S DIC("B")=$P(EF,U,2)
  1. D ^DIC I Y=-1 Q ""
  1. Q Y
  1. PRV(PRV) ;
  1. N DIC,X,Y,%
  1. S DIC="^VA(200,",DIC(0)="AEQ"
  1. S DIC("A")="Provider: "
  1. I $L($G(PRV)) S DIC("B")=$P(PRV,U,2)
  1. D ^DIC I Y=-1 Q ""
  1. Q Y
  1. PGRP(DFLT) ;
  1. N DIC,X,Y,%
  1. N DIR,DTOUT,DIRUT,DUOUT
  1. S DIR(0)="S^1:Infants;2:Children;3:Teen Males;4:Teen Females;5:Adult Males;6:Adult Females;7:Senior Males;8:Senior Females"
  1. I $G(DFLT),DFLT>0,DFLT<9 S %=$P(DIR(0),(DFLT_":"),2) S %=$P(%,";") Q DFLT_U_%
  1. S DIR("A")="Patient group" KILL DA D ^DIR KILL DIR
  1. I 'Y Q ""
  1. Q Y_U_Y(0)
  1. ;
  1. STATUS(EF,X) ; SHOW MAX ENTRIES POSSIBLE
  1. N DISP,MAX
  1. S DISP=$L(X,U)
  1. I X="" S DISP=0
  1. S MAX=+$P($G(^VEN(7.41,+EF,1)),U,2)
  1. S X="There is room for "_MAX_" entries on this form" I DISP S X=X_" and you have selected "_DISP_$S(DISP=1:" entry",1:" entries")
  1. Q MAX_U_DISP_U_X
  1. ;
  1. TITLE(EF,PRV,G) ; TITLE OF LIST
  1. Q $P(EF,U,2)_"/"_$P(PRV,U,2)_"/"_$P(PGRP,U,2)
  1. ;
  1. LIST(EF,PRV,PGRP) ;
  1. N INDX,SIEN,REC,X,NAME,CODE,HDR
  1. S INDX=PRV_"."_PGRP,SIEN=0,REC=""
  1. F S SIEN=$O(^VEN(7.1,"AG",INDX,SIEN)) Q:'SIEN D
  1. . S X=$G(^VEN(7.1,SIEN,0)) I '$L(X) Q
  1. . S NAME=$P(X,U,3),CODE=$P(X,U,2)
  1. . I $L(REC) S REC=REC_U
  1. . S REC=REC_NAME_";"_CODE
  1. . Q
  1. Q REC
  1. ;
  1. SHOW(X) ; DISPLAY THE LIST
  1. N NAME,CODE,I,Y,STOP
  1. F I=1:1:$L(X,U) D I $G(STOP) Q
  1. . S Y=$P(X,U,I)
  1. . I Y="" W:I=1 !,"No entries found!" Q
  1. . S NAME=$P(Y,";"),CODE=$P(Y,";",2) W !
  1. . I '(I#18) S STOP='$$WAIT^VENPCCU I STOP Q
  1. . W I,?5,NAME," ",CODE
  1. . Q
  1. Q
  1. ;
  1. ADD(LIST,STAT) ; ADD AN ENTRY
  1. N DIRUT,DUOUT,DTOUT,X,Y,%,DIC,POS,NAME,CODE
  1. ADD1 S X=$P(STAT,U)-$P(STAT,U,2)
  1. I X>0 W !,"You have room for "_X_" more "_$S(X>1:"entries",1:"entry")
  1. E W !,"You are over the limit for adding new entries!"
  1. W !
  1. POS ;
  1. I '$L(LIST) S POS=1 G NAME
  1. S DIR("A")="Insert new entry at what position? (1 - END of list)"
  1. S DIR(0)="F^1:3",DIR("B")="END" KILL DA D ^DIR KILL DIR S POS=Y
  1. I $D(DIRUT) K DIRUT,DTOUT,DUOUT,DIROUT Q LIST
  1. P1 I POS=$E("END of list",1,$L(POS)) W $E("END of list",$L(POS)+1,99) S POS=1+$P(STAT,U,2) G NAME
  1. I POS,POS>0,POS'>$P(STAT,U,2)
  1. E W " ??" G POS
  1. NAME ;
  1. S DIR(0)="F^1:30",DIR("A")="Name of entry" KILL DA D ^DIR KILL DIR
  1. I '$D(DIRUT),'$D(DUOUT),'$D(DTOUT) S NAME=Y G CODE
  1. K DIRUT,DTOUT,DUOUT Q LIST
  1. CODE ;
  1. S CODE="",DIR(0)="FO^1:6",DIR("A")="ICD Code" KILL DA D ^DIR KILL DIR
  1. I $D(DUOUT)!($D(DTOUT)) Q LIST
  1. S CODE=Y
  1. ENT ;
  1. I $P(LIST,U,POS)="" S $P(LIST,U,POS)=NAME_";"_CODE
  1. E S %=$P(LIST,U,POS) S $P(LIST,U,POS)=NAME_";"_CODE_U_%
  1. S %=$P(STAT,U,2)+1 S $P(STAT,U,2)=%
  1. W ! D SHOW(LIST) W !
  1. W !!,"Want to add another entry" S %=1
  1. D YN^DICN I %'=1 Q LIST
  1. G ADD1
  1. ;
  1. DEL(LIST,STAT) ; DELETE AN ENTRY
  1. N DIRUT,DUOUT,DTOUT,X,Y,%,POS,ITEM,CNT,TOT
  1. DEL1 S %=$P(STAT,U,2) I '% W !,"There are no entries to delete!" Q ""
  1. S %=((+STAT)-($P(STAT,U,2))) I %<0 S %=%*-1 W !,"You should delete at least "_%_" entries..."
  1. DEL2 S DIR(0)="FO^",DIR("A")="Delete entry from what position" K DA
  1. S (HELP,DIR("?"))="Enter a number, a range (e.g., '1-32'), or '*' (all)"
  1. D ^DIR K DIR
  1. I Y?1."^" Q LIST
  1. I Y=+Y,Y>0,Y=(Y\1) S POS=+Y G CKD
  1. I Y="*"!(Y="ALL")!(Y="all") S Y="*",POS=1,POS(1)=$P(STAT,U,2) G CKD
  1. I Y?1.3N1"-"1.3N S POS=+Y,POS(1)=$P(Y,"-",2)
  1. I '$G(POS) W !,HELP G DEL2
  1. CKD I POS>$P(STAT,U,2)!(+$G(POS(1))>$P(STAT,U,2)) W !,"Select a number between 1 and ",$P(STAT,U,2) K POS G DEL2
  1. W !,"Sure you want to delete "_$S(Y=+Y:$P($P(LIST,U,POS),";"),Y["-":Y,1:"ALL")
  1. S %=1 D YN^DICN I $D(DIRUT)!($D(DTOUT)) Q LIST
  1. I %'=1 G DEL2
  1. I $G(POS(1)) S CNT=0,TOT=POS(1)-POS
  1. DLOOP S ITEM=$TR($P(LIST,U,POS),";"," ")
  1. I POS=$P(STAT,U,2) S LIST=$P(LIST,U,1,POS-1) G DEL3
  1. I POS=1 S LIST=$P(LIST,U,2,99) G DEL3
  1. S LIST=$P(LIST,U,1,POS-1)_U_$P(LIST,U,POS+1,99)
  1. DEL3 S %=$P(STAT,U,2)-1 S $P(STAT,U,2)=%
  1. W !," Deleting ",ITEM
  1. I $G(POS(1)) S CNT=CNT+1 I CNT'>TOT G DLOOP
  1. K ITEM,CNT,TOT,POS
  1. I '$L(LIST) G DEL1
  1. W !!,"Want to delete another entry" S %=1
  1. D YN^DICN I %'=1 Q LIST
  1. D SHOW(LIST)
  1. G DEL1
  1. ;
  1. COPY(LIST,STAT,TITLE,EF,PRV) ; COPY IN ANOTHER LIST
  1. N PGRP,CTITLE,CLIST,DUOUT,DIRUT,DTOUT,I
  1. W !,"Enter name of provider to copy from =>"
  1. S PRV1=$$PRV I 'PRV1 Q LIST
  1. W !!,"Define the Patient Group to copy from =>"
  1. S PGRP=$$PGRP I PGRP="" Q LIST
  1. S CLIST=$$LIST(+EF,+PRV1,+PGRP) I CLIST="" W !,"Unable to copy because no entries found!" H 3 Q LIST
  1. S CTITLE=$$TITLE(EF,PRV1,PGRP)
  1. W !,CTITLE
  1. W ! D SHOW(CLIST)
  1. W !,"OK to copy non-redundant entries from this list"
  1. S %=1 D YN^DICN I %'=1 Q LIST
  1. F I=1:1:$L(CLIST,U) S X=$P(CLIST,U,I) I LIST'[X S:LIST'="" LIST=LIST_U S LIST=LIST_X
  1. W !!,"Target list: ",TITLE
  1. Q LIST
  1. ;
  1. SUB(LIST,EF,PRV,PGRP) ; EP FOR SUBMITTING AN EXTERNALY GENERATED LIST
  1. N EFLAG S EFLAG=1
  1. G S1
  1. ;
  1. SUBMIT(LIST,EF,PRV,PGRP) ; ENTER THE LIST
  1. S1 N %,CODE,DIR,Y,DIRUT,DTOUT,DUOUT
  1. I $G(EFLAG) S Y="A" G S2
  1. S %=$L(LIST,U)-(+$P($G(^VEN(7.41,+EF,1)),U,2)) I %>0 W !!,"You have exceeded the maximum number of items allowed!",!,"Delete ",%," item",$S(%>1:"s",1:"")," before proceeding",! H 2 Q 0
  1. W !,"The following list will be saved: ",TITLE
  1. ; D SHOW(LIST)
  1. W !,"Are you sure you want to submit this list"
  1. S %=1 D YN^DICN I %'=1 Q 0
  1. S %=$P($P(LIST,U),";",2) S CODE=$L(%)
  1. I CODE S DIR(0)="S^A:ALPHABETIZE THE LIST AND SAVE;C:SORT BY CODE AND SAVE;S:SAVE AS IS"
  1. E S DIR(0)="S^A:ALPHABETIZE THE LIST AND SAVE;S:SAVE"
  1. S DIR("A")="Your choice" KILL DA D ^DIR KILL DIR
  1. S2 I Y="A" S LIST=$$ALPH(LIST,1) D SAVE(LIST,EF,+PRV,PGRP) Q 1
  1. I Y="C" S LIST=$$ALPH(LIST,2) D SAVE(LIST,EF,+PRV,PGRP) Q 1
  1. I Y="S" D SAVE(LIST,EF,PRV,PGRP) Q 1
  1. Q 0
  1. ;
  1. ALPH(LIST,TYPE) ; ORDER THE LIST: APLPHABETICAL OR BY CODE
  1. N I,X,Y,Z,CODE,NARR,STG,ENT
  1. I LIST="" Q ""
  1. I TYPE'=1,TYPE'=2 Q ""
  1. F I=1:1:$L(LIST,U) S X=$P(LIST,U,I) I $L(X) D
  1. . S NARR=$P(X,";",1),CODE=$P(X,";",2)
  1. . I TYPE=1,$L(NARR) S LIST(NARR,I)=CODE ; SORT BY NARRATIVE
  1. . I TYPE=2,$L(CODE) S LIST(CODE,I)=NARR ; SORT BY CODE
  1. . Q
  1. S I=0,STG=""
  1. S Y="" F S Y=$O(LIST(Y)) Q:Y="" S Z=0 F S Z=$O(LIST(Y,Z)) Q:'Z D
  1. . S I=I+1
  1. . S X=LIST(Y,Z)
  1. . I TYPE=1 S ENT=Y_";"_X
  1. . I TYPE=2 S ENT=X_";"_Y
  1. . S $P(STG,U,I)=ENT
  1. . Q
  1. Q STG
  1. ;
  1. SAVE(LIST,EF,PRV,PGRP) ; DELETE THE OLD LIST AND SAVE THE NEW ONE
  1. I $D(^VEN(7.41,+$G(EF),0)),$L(LIST)>1,$G(PGRP),PGRP=PGRP\1,PGRP>0,PGRP<9,$D(^VA(200,+$G(PRV),0))
  1. E W !,"Invalid parameters. No changes made. Contact site manager)" Q
  1. N CTAG,D,D0,DI,DIE,DIG,DIH,DIU,DIV,DQ,DR,HDR,PCE,DIK,DIC,IX,DA,MN,IX,CODE,DIW,HDR,DICR,%,%Y,DLAYGO,VENDUZ0
  1. S VENDUZ0=$G(DUZ(0))
  1. D WAIT^DICD
  1. S %="^VEN(7.1,""AG"")" K @% ; JUST TO BE SAFE, FIRST KILL OFF THE ENTIRE AG INDEX
  1. S %=$C(68,85,90),@%@(0)=$C(64)
  1. S DIK="^VEN(7.1,",DIK(1)=.05 D ENALL^DIK K DIK ; THEN, REINDEX AG INDEX FOR THE ENTIRE FILE
  1. S DIK="^VEN(7.1,",IX=+PRV_"."_+PGRP
  1. I $D(^VEN(7.1,"AG",IX)) S DA=0 F S DA=$O(^VEN(7.1,"AG",IX,DA)) Q:'DA D ^DIK ; USING THE REFRESHED INDEX, DELETE ALL ENTRIES FOR THE SPECIFIED GROUP
  1. S DIC=DIK,DIC(0)="L",DIE=DIC,DLAYGO=19707.1 ; LAST STEP: RE-POPULATE THE FILE WITH THE NEW LIST
  1. F PCE=1:1:$L(LIST,U) D
  1. . S %=$P(LIST,U,PCE)
  1. . S CODE=$P(%,";",2),NAME=$P(%,";")
  1. . S X="""`"_+PRV_""""
  1. . D ^DIC I Y=-1 Q ; MAKE A NEW ENTRY - REPOPULATE THE FILE
  1. . S DA=+Y,DR=".03////"_NAME_";.02////"_CODE_";.04////"_+PGRP
  1. . L +^VEN(7.1,DA):5 E Q
  1. . D ^DIE L -^VEN(7.1,DA) ; FILL IN THE FIELDS
  1. . Q
  1. EOJ D ^XBFMK
  1. W !,"Changes are now in effect..." H 3
  1. I $L($G(VENDUZ0)) S %=$C(68,85,90),@%@(0)=VENDUZ0
  1. Q
  1. ;
  1. EN1 ; EP FOR LOOPING THROUGH ALL ICD & PATIENT GROUPS IN A TEMPLATE
  1. N LOOP S LOOP=1
  1. G NEW
  1. Q
  1. ;
  1. NEXT(EF,PRV,PGRP) ;
  1. N CIEN,NAME
  1. I EF="" S EF=$$EF("") I '$L(EF) Q 0
  1. S PGRP=PGRP+1 I PGRP=9 S PGRP=1
  1. I PGRP>1 Q EF_";"_PRV_";"_PGRP
  1. S EF=$$EF("") I 'EF Q ""
  1. S PRV=$$PRV("") I 'PRV Q ""
  1. S PGRP=$$PGRP(PGRP) I 'PGRP Q ""
  1. Q EF_";"_PRV_";"_PGRP
  1. ;
  1. UPDATE(LIST,STAT) ; EDIT AN ENTRY IN THE LIST
  1. N DIR,X,Y,%,ENTRY,POS,NAME,CODE,DIRUT,DUOUT,DTOUT
  1. U1 S DIR(0)="NO^1:"_$P(STAT,U,2)_":",DIR("A")="Edit entry from what position" KILL DA D ^DIR KILL DIR
  1. I '+Y Q LIST
  1. S POS=+Y
  1. S ENTRY=$P(LIST,U,POS) I '$L(ENTRY) Q LIST
  1. S DIR(0)="F^1:30",DIR("A")="Name of entry" S DIR("B")=$P(ENTRY,";")
  1. D ^DIR KILL DIR
  1. I '$D(DIRUT),'$D(DUOUT),'$D(DTOUT) S NAME=Y G U2
  1. Q LIST
  1. U2 ;
  1. S CODE="",DIR(0)="FO^1:6",DIR("A")="ICD Code" S DIR("B")=$P(ENTRY,";",2)
  1. D ^DIR KILL DIR
  1. I $D(DUOUT)!($D(DTOUT)) Q LIST
  1. S CODE=Y
  1. S $P(ENTRY,";",1,2)=NAME_";"_CODE
  1. S $P(LIST,U,POS)=ENTRY
  1. W ! D SHOW(LIST) W !
  1. W !!,"Want to edit another entry" S %=1
  1. D YN^DICN I %'=1 Q LIST
  1. G U1
  1. ;
  1. CVT ;
  1. S DIE="^VEN(7.1,",DA=0
  1. F S DA=$O(^VEN(7.1,DA)) Q:'DA D
  1. . S X=$P($G(^VEN(7.1,DA,1)),U,1)
  1. . I 'X Q
  1. . S Y=$P($G(^VEN(7.91,X,0)),U) I '$L(Y) Q
  1. . S Z=$S(Y="INFANT":1,Y="CHILD":2,Y="TEEN MALE":3,Y="TEEN FEMALE":4,Y="ADULT MALE":5,Y="ADULT FEMALE":6,Y="SENIOR MALE":7,Y="SENIOR FEMALE":8,1:"")
  1. . S DR=".04////"_Z
  1. . L +^VEN(7.1,DA):0 I $T D ^DIE L -^VEN(7.1,DA)
  1. . Q
  1. Q
  1. ;