| [613] | 1 | ECXDSSD ;ALB/JAP - Derive DSS Department code ;July 16, 1998
 | 
|---|
 | 2 |  ;;3.0;DSS EXTRACTS;**8**;Dec 22, 1997
 | 
|---|
 | 3 |  ;
 | 
|---|
 | 4 | DERIVE(ECXSVC,ECXPUNIT,ECXDIV,ECXSUF) ;entry point for extrinsic function
 | 
|---|
 | 5 |  ; input
 | 
|---|
 | 6 |  ; ECXSVC = null or pointer to file #730; required
 | 
|---|
 | 7 |  ; ECXPUNIT = null or pointer to file #729; required
 | 
|---|
 | 8 |  ; ECXDIV = null or pointer to file #727.3; required
 | 
|---|
 | 9 |  ; ECXSUF = null or character string; optional
 | 
|---|
 | 10 |  ; output
 | 
|---|
 | 11 |  ; DSSDEPT = dss department code as ABBCxxx or null
 | 
|---|
 | 12 |  ;           A=DSS CODE from file (#730)
 | 
|---|
 | 13 |  ;          BB=DSS PRODUCTION UNIT CODE from file (#729)
 | 
|---|
 | 14 |  ;           C=DSS DIVISION IDENTIFIER from file (#727.3)
 | 
|---|
 | 15 |  ;         xxx=suffix of not more than three characters (optional)
 | 
|---|
 | 16 |  ;
 | 
|---|
 | 17 |  N DSSDEPT
 | 
|---|
 | 18 |  S DSSDEPT=""
 | 
|---|
 | 19 |  Q:'$D(ECXSVC) DSSDEPT Q:'$D(ECXPUNIT) DSSDEPT Q:'$D(ECXDIV) DSSDEPT
 | 
|---|
 | 20 |  D GETDIV(.ECXDIV)
 | 
|---|
 | 21 |  I ECXDIV="" Q DSSDEPT
 | 
|---|
 | 22 |  D GETSVC(.ECXSVC)
 | 
|---|
 | 23 |  I ECXSVC="" Q DSSDEPT
 | 
|---|
 | 24 |  D GETPUNIT(.ECXPUNIT)
 | 
|---|
 | 25 |  I ECXPUNIT="" Q DSSDEPT
 | 
|---|
 | 26 |  S DSSDEPT=ECXSVC_ECXPUNIT_ECXDIV
 | 
|---|
 | 27 |  ;if variable ecxsuf does not exist, then do nothing
 | 
|---|
 | 28 |  ;if variable ecxsuf is null, then assume user interaction for entry
 | 
|---|
 | 29 |  ;if variable suffix is a character string, then assume no user interaction; validate ecxsuf
 | 
|---|
 | 30 |  I $D(ECXSUF) D
 | 
|---|
 | 31 |  .D GETSUF(.ECXSUF)
 | 
|---|
 | 32 |  .S DSSDEPT=DSSDEPT_ECXSUF
 | 
|---|
 | 33 |  Q DSSDEPT
 | 
|---|
 | 34 |  ;
 | 
|---|
 | 35 | GETDIV(ECXDIV) ;get division portion of dss dept code
 | 
|---|
 | 36 |  ; input
 | 
|---|
 | 37 |  ; ECXDIV = pointer to file #40.8 or null; required; passed by reference
 | 
|---|
 | 38 |  ; output
 | 
|---|
 | 39 |  ; ECXDIV = dss division identifier or null
 | 
|---|
 | 40 |  N ECX,USER,DIC,DR,DIQ,DA,X,Y,DTOUT,DUOUT,JJ,SS
 | 
|---|
 | 41 |  S USER=0
 | 
|---|
 | 42 |  I ECXDIV="" D  Q:$D(DTOUT)!($D(DUOUT))!(+Y<1)
 | 
|---|
 | 43 |  .W !!
 | 
|---|
 | 44 |  .S USER=1
 | 
|---|
 | 45 |  .S DIC(0)="AEMQZ",DIC="^ECX(727.3," D ^DIC
 | 
|---|
 | 46 |  .S:+Y>0 ECXDIV=+Y Q
 | 
|---|
 | 47 |  S DIC="^ECX(727.3,",DR="1;",DIQ(0)="E",DIQ="ECX",DA=ECXDIV
 | 
|---|
 | 48 |  D EN^DIQ1
 | 
|---|
 | 49 |  S ECXDIV=$G(ECX(727.3,ECXDIV,1,"E"))
 | 
|---|
 | 50 |  I ECXDIV="",USER=1 D
 | 
|---|
 | 51 |  .W !!,"The selected division does not yet have a"
 | 
|---|
 | 52 |  .W !,"DSS Identifier code defined.",!
 | 
|---|
 | 53 |  .W !,"Use the Enter/Edit DSS Division Identifier option"
 | 
|---|
 | 54 |  .W !,"to associate a DSS identifier with this division.",!
 | 
|---|
 | 55 |  .I $E(IOST)="C" D
 | 
|---|
 | 56 |  ..S SS=22-$Y F JJ=1:1:SS W !
 | 
|---|
 | 57 |  ..S DIR(0)="E" W ! D ^DIR K DIR W !
 | 
|---|
 | 58 |  Q
 | 
|---|
 | 59 |  ;
 | 
|---|
 | 60 | GETSVC(ECXSVC) ;get service portion of dss dept code
 | 
|---|
 | 61 |  ; input
 | 
|---|
 | 62 |  ; ECXSVC = pointer to file #730 or null; required; passed by reference
 | 
|---|
 | 63 |  ; output
 | 
|---|
 | 64 |  ; ECXSVC = dss service code or null
 | 
|---|
 | 65 |  N ECX,USER,DIC,DR,DIQ,X,Y,JJ,SS,DA,DTOUT,DUOUT
 | 
|---|
 | 66 |  S USER=0
 | 
|---|
 | 67 |  I ECXSVC="" D  Q:$D(DTOUT)!($D(DUOUT))!(+Y<1)
 | 
|---|
 | 68 |  .W !!
 | 
|---|
 | 69 |  .S USER=1
 | 
|---|
 | 70 |  .S DIC(0)="AEMQZ",DIC="^ECC(730," D ^DIC
 | 
|---|
 | 71 |  .S:+Y>0 ECXSVC=+Y
 | 
|---|
 | 72 |  S DIC="^ECC(730,",DR="3;",DIQ(0)="E",DIQ="ECX",DA=ECXSVC
 | 
|---|
 | 73 |  D EN^DIQ1
 | 
|---|
 | 74 |  S ECXSVC=$G(ECX(730,ECXSVC,3,"E"))
 | 
|---|
 | 75 |  I ECXSVC="",USER=1 D
 | 
|---|
 | 76 |  .W !!,"The selected National Service does not have a"
 | 
|---|
 | 77 |  .W !,"DSS Clinical Service code defined.",!
 | 
|---|
 | 78 |  .W !,"It cannot be used in a DSS Department code.",!
 | 
|---|
 | 79 |  .I $E(IOST)="C" D
 | 
|---|
 | 80 |  ..S SS=22-$Y F JJ=1:1:SS W !
 | 
|---|
 | 81 |  ..S DIR(0)="E" W ! D ^DIR K DIR W !
 | 
|---|
 | 82 |  Q
 | 
|---|
 | 83 |  ;
 | 
|---|
 | 84 | GETPUNIT(ECXPUNIT) ;get production unit portion of dss dept code
 | 
|---|
 | 85 |  ; input
 | 
|---|
 | 86 |  ; ECXPUNIT = pointer to file #729 or null; required; passed by reference
 | 
|---|
 | 87 |  ; output
 | 
|---|
 | 88 |  ; ECXPUNIT = dss production unit code or null
 | 
|---|
 | 89 |  N ECX,DIC,DR,DIQ,X,Y,DTOUT,DUOUT,DA
 | 
|---|
 | 90 |  I ECXPUNIT="" D  Q:$D(DTOUT)!($D(DUOUT))!(+Y<1)
 | 
|---|
 | 91 |  .W !!
 | 
|---|
 | 92 |  .S DIC(0)="AEMQZ",DIC="^ECX(729," D ^DIC
 | 
|---|
 | 93 |  .S:+Y>0 ECXPUNIT=+Y
 | 
|---|
 | 94 |  S DIC="^ECX(729,",DR=".01;",DIQ(0)="E",DIQ="ECX",DA=ECXPUNIT
 | 
|---|
 | 95 |  D EN^DIQ1
 | 
|---|
 | 96 |  S ECXPUNIT=$G(ECX(729,ECXPUNIT,.01,"E"))
 | 
|---|
 | 97 |  Q
 | 
|---|
 | 98 |  ;
 | 
|---|
 | 99 | GETSUF(ECXSUF) ;get suffix portion of dss dept code
 | 
|---|
 | 100 |  ; input
 | 
|---|
 | 101 |  ; ECXSUF = character string or null; required; passed by reference
 | 
|---|
 | 102 |  ; output
 | 
|---|
 | 103 |  ; ECXSUF = character string or null;
 | 
|---|
 | 104 |  ;          input character string will be returned as null
 | 
|---|
 | 105 |  N USER,AGAIN,LEN,ZERO,OUT,DIR,DIRUT,DTOUT,DUOUT,X,Y
 | 
|---|
 | 106 |  ;ask user for input only if ecxsuf="", otherwise assume no user interaction
 | 
|---|
 | 107 |  ;variable user acts as a flag --> if =1, then assume user interaction
 | 
|---|
 | 108 |  S USER=0 S:ECXSUF="" USER=1,AGAIN=0
 | 
|---|
 | 109 |  ;variable again acts as a flag --> if =1, don't ask user if he wants to enter suffix 
 | 
|---|
 | 110 |  D SUF2
 | 
|---|
 | 111 |  Q
 | 
|---|
 | 112 | SUF2 ;ask user for input if necessary, then validate variable ecxsuf
 | 
|---|
 | 113 |  I USER=1 D
 | 
|---|
 | 114 |  .I AGAIN=0 D  Q:$D(DIRUT)!(Y=0)
 | 
|---|
 | 115 |  ..W !!
 | 
|---|
 | 116 |  ..S DIR(0)="YA",DIR("A")="Do you want to enter a suffix? ",DIR("B")="NO" K X,Y
 | 
|---|
 | 117 |  ..D ^DIR K DIR
 | 
|---|
 | 118 |  .W !!
 | 
|---|
 | 119 |  .S AGAIN=0
 | 
|---|
 | 120 |  .S DIR(0)="FA^1:3",DIR("A")="Enter suffix: " K X,Y
 | 
|---|
 | 121 |  .D ^DIR K DIR
 | 
|---|
 | 122 |  .Q:$D(DIRUT)  Q:(X="^")&(Y="^")
 | 
|---|
 | 123 |  .S ECXSUF=Y,LEN=$L(ECXSUF)
 | 
|---|
 | 124 |  .I ECXSUF["-" D
 | 
|---|
 | 125 |  ..I $L(ECXSUF)=1 W !!,"Invalid ...try again." S ECXSUF="",AGAIN=1 Q
 | 
|---|
 | 126 |  ..I $E(ECXSUF,1)'="-" D  Q
 | 
|---|
 | 127 |  ...W !!,"The hyphen character < - > is only allowed as the"
 | 
|---|
 | 128 |  ...W !!,"1st character in the suffix.",!
 | 
|---|
 | 129 |  ...W !,"Try again...",!
 | 
|---|
 | 130 |  ...S ECXSUF="",AGAIN=1
 | 
|---|
 | 131 |  ..W !!,"The hyphen character < - > should not be used unless this"
 | 
|---|
 | 132 |  ..W !,"DSS Department code was previously established in DSS/Austin."
 | 
|---|
 | 133 |  ..W !
 | 
|---|
 | 134 |  ..S DIR(0)="YA",DIR("A")="Do you want to remove the hyphen? ",DIR("B")="YES" K X,Y
 | 
|---|
 | 135 |  ..D ^DIR K DIR
 | 
|---|
 | 136 |  ..S:($D(DIRUT))!(Y=1) ECXSUF="" S:(Y=1) AGAIN=1
 | 
|---|
 | 137 |  .Q:AGAIN=1
 | 
|---|
 | 138 |  .S ZERO=0
 | 
|---|
 | 139 |  .F I=1:1:LEN S X=$E(ECXSUF,I) D  Q:AGAIN=1
 | 
|---|
 | 140 |  ..Q:X="-"&(I=1)
 | 
|---|
 | 141 |  ..I X?1P D  Q:AGAIN=1
 | 
|---|
 | 142 |  ...W !!,"There is an invalid punctuation character < "_X_" > in the suffix.",!
 | 
|---|
 | 143 |  ...W !,"Try again...",!
 | 
|---|
 | 144 |  ...S ECXSUF="",AGAIN=1
 | 
|---|
 | 145 |  ..I X?1L D  Q:AGAIN=1
 | 
|---|
 | 146 |  ...W !!,"There is an invalid lowercase character < "_X_" > in the suffix.",!
 | 
|---|
 | 147 |  ...W !,"Try again...",!
 | 
|---|
 | 148 |  ...S ECXSUF="",AGAIN=1
 | 
|---|
 | 149 |  ..S:X="0" ZERO=ZERO+0 S:X'="0" ZERO=ZERO+1
 | 
|---|
 | 150 |  .Q:AGAIN=1
 | 
|---|
 | 151 |  .I ZERO=0 D
 | 
|---|
 | 152 |  ..W !!,"There are too many zeroes in the suffix.",!
 | 
|---|
 | 153 |  ..W !,"Try again...",!
 | 
|---|
 | 154 |  ..S ECXSUF="",AGAIN=1
 | 
|---|
 | 155 |  I USER=1,AGAIN=1 G SUF2
 | 
|---|
 | 156 |  ;no user interaction; validate ecxsuf
 | 
|---|
 | 157 |  I USER=0,ECXSUF]"" D
 | 
|---|
 | 158 |  .S (ZERO,OUT)=0
 | 
|---|
 | 159 |  .S LEN=$L(ECXSUF) I LEN>3 S ECXSUF="" Q
 | 
|---|
 | 160 |  .F I=1:1:LEN S X=$E(ECXSUF,I) D  Q:OUT=1
 | 
|---|
 | 161 |  ..I X="-",I'=1 S ECXSUF="",OUT=1
 | 
|---|
 | 162 |  ..I X?1P,X'="-" S ECXSUF="",OUT=1
 | 
|---|
 | 163 |  ..I X?1L S ECXSUF="",OUT=1
 | 
|---|
 | 164 |  ..S:X="0" ZERO=ZERO+0 S:X'="0" ZERO=ZERO+1
 | 
|---|
 | 165 |  .I ZERO=0 S ECXSUF=""
 | 
|---|
 | 166 |  Q
 | 
|---|
 | 167 |  ;
 | 
|---|
 | 168 | DECODE ;allow user to decode a dss department code
 | 
|---|
 | 169 |  N CODE,DESC,OUT,DIR,DIRUT,DTOUT,DUOUT,X,Y
 | 
|---|
 | 170 |  W !!,"You may enter a DSS Department as 'ABBC' (no suffix)."
 | 
|---|
 | 171 |  W !,"The code will be 'translated' into a description and displayed.",!!
 | 
|---|
 | 172 |  S OUT=0
 | 
|---|
 | 173 |  F  D  Q:OUT=1  Q:$D(DIRUT)
 | 
|---|
 | 174 |  .S DIR(0)="FA^4:4",DIR("A")="Enter a DSS Department code: " K X,Y
 | 
|---|
 | 175 |  .D ^DIR K DIR
 | 
|---|
 | 176 |  .Q:$D(DIRUT)  Q:(X="^")&(Y="^")
 | 
|---|
 | 177 |  .S CODE=Y D REVERSE(CODE,.DESC)
 | 
|---|
 | 178 |  .W !
 | 
|---|
 | 179 |  .W !?5,"Service ",?20,"<"_$E(CODE,1)_">  = "_$P(DESC,U,1)
 | 
|---|
 | 180 |  .W !?5,"Prod. Unit ",?20,"<"_$E(CODE,2,3)_"> = "_$P(DESC,U,2)
 | 
|---|
 | 181 |  .W !?5,"Division ",?20,"<"_$E(CODE,4)_">  = "_$P(DESC,U,3)
 | 
|---|
 | 182 |  .W !
 | 
|---|
 | 183 |  .S DIR(0)="YA",DIR("A")="Another one? ",DIR("B")="YES" K X,Y
 | 
|---|
 | 184 |  .D ^DIR K DIR
 | 
|---|
 | 185 |  .I Y=0 S OUT=1
 | 
|---|
 | 186 |  Q
 | 
|---|
 | 187 |  ;
 | 
|---|
 | 188 | REVERSE(ECXDEPT,ECXDESC) ;get dss dept code description
 | 
|---|
 | 189 |  ; input
 | 
|---|
 | 190 |  ; ECXDEPT = dss dept code as ABBCxxx; required
 | 
|---|
 | 191 |  ; output
 | 
|---|
 | 192 |  ; ECXDESC = code description; passed by reference
 | 
|---|
 | 193 |  ;           service_name^prod_unit_long_desc^division_name/station number
 | 
|---|
 | 194 |  ;           note: if suffix (xxx) is present, it is ignored because free text
 | 
|---|
 | 195 |  N SVC,PUNIT,DIV
 | 
|---|
 | 196 |  Q:$L(ECXDEPT)<4
 | 
|---|
 | 197 |  S SVC=$E(ECXDEPT,1),PUNIT=$E(ECXDEPT,2,3),DIV=$E(ECXDEPT,4)
 | 
|---|
 | 198 |  K X,ECXERR S X=$$FIND1^DIC(730,,"X",SVC,"C",,"ECXERR")
 | 
|---|
 | 199 |  S SVC=$S(X>0:$P(^ECC(730,X,0),U,1),X=0:"Not found",X="":"Error",1:"")
 | 
|---|
 | 200 |  K X,ECXERR S X=$$FIND1^DIC(729,,"X",PUNIT,"B",,"ECXERR")
 | 
|---|
 | 201 |  S PUNIT=$S(X>0:$P(^ECX(729,X,0),U,3),X=0:"Not found",X="":"Error",1:"")
 | 
|---|
 | 202 |  K X,ECXERR S X=$$FIND1^DIC(727.3,,"X",DIV,"C",,"ECXERR")
 | 
|---|
 | 203 |  S DIV=$S(X>0:$P(^DG(40.8,X,0),U,1)_"/"_$P(^(0),U,2),X=0:"Not found",X="":"Error",1:"")
 | 
|---|
 | 204 |  S ECXDESC=SVC_U_PUNIT_U_DIV
 | 
|---|
 | 205 |  Q
 | 
|---|