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

APCUADDK.m

Go to the documentation of this file.
APCUADDK ; ADD KEYWORDS TO "OTHER KEYWORDS" FIELD IN ^ICD0/9 ; [ 07/29/86  5:07 PM ]
 W !!,*7,"APCUADDK CANNOT BE ENTERED AT THE TOP -- USE DX OR OP",!!
 Q
DX S GBL="^ICD9"
 G INIT
OP S GBL="^ICD0"
INIT S BB=$C(7),U="^",FN="9999999.21",OLDCODE=""
 S NWS=^DD("KWIC")_"IN^OF^AN^IS^AS^AT^IF^IT^ON^OR^BY^"
 W "- - - Add keywords to ",$P(@GBL@(0),U,1)," ""OTHER KEYWORDS"" field - - -",!!
MAINLP F Q=0:0 R "Code: ",CODE Q:CODE=""  S:CODE=" " CODE=OLDCODE S OLDCODE=CODE D GCODE
 W !
 K CODE,NCODE,BB,FN,U,GBL,SEQNT,CNT,DFN,CDFN,L,NW,WT,WD,WC,WF,WSAVE,WS,W,NWS,Q
 W !,"B y e . . .",!
 Q
 ;
GCODE ; GOT CODE
 D CHKCODE I CODE="" W BB," -- Invalid ICD code format",! Q
 S CDFN=""
 I $D(@GBL@("B",CODE)) S CDFN=$O(^(CODE,"")) W "  ",@GBL@(CDFN,1),! S NCODE=CODE D GETKWD,SET Q
 S NCODE=$O(@GBL@("B",CODE))
 I $E(NCODE,1,$L(CODE))'=CODE S CODE="" W BB," -- Code does not exist and has no more specific descendents.",! Q
 W !," Code does not exist as entered, but has descendents."
 R !," Do you wish to add keywords to the more specific subcodes? Y// ",A,!
 Q:"Yy"'[$E(A_"Y")
 D GETKWD
 S NCODE=CODE
 I CODE'=+CODE D NONCON Q
 D CANONIC
 Q
 ;
NONCON D SETLOOP I (+$P(CODE,".",1))=($P(CODE,".",1)) S NCODE=CODE_"001" D SETLOOP
 Q
 ;
CANONIC D SETLOOP S NCODE=CODE_" " D SETLOOP
 Q
 ;
SETLOOP F Q=0:0 S NCODE=$O(@GBL@("B",NCODE)) Q:NCODE=""  Q:$E(NCODE,1,$L(CODE))'=CODE  D SET
 Q
 ;
GETKWD ; GET WORD STRING AND BUILD WORD TABLE
 K WT S WT=0
 R "Keywords: ",L,! Q:L=""
 I L="?" D LIST G GETKWD
 S WT=0 F NW=1:1 S WD=$P(L," ",NW) Q:WD=""  I NWS'[("^"_WD_"^")  S WT=WT+1,WT(WD)=""
 Q
 ;
LIST ; LIST KEYWORDS FOR CODE
 Q:'CDFN  Q:'$D(@GBL@(CDFN,FN,"B"))
 S WD=0 F L=0:0 S WD=$O(@GBL@(CDFN,FN,"B",WD)) Q:WD=""  W WD,!
 Q
 ;
SET ; SET WORDS IN WORD TABLE INTO ^ICD0/9 UNDER 'NCODE'
 S DFN=$O(@GBL@("B",NCODE,""))
 L @GBL@(DFN,FN)
 S:'$D(@GBL@(DFN,FN,0)) ^(0)="^80.999999921A^0^0"
 S CNT=$P(@GBL@(DFN,FN,0),U,4)
 S WD="" F W=1:1 S WD=$O(WT(WD)) Q:WD=""  D DECIDE
 S $P(@GBL@(DFN,FN,0),U,4)=CNT
 L
 W:$X'=0 !
 Q
 ;
DECIDE ; DECIDE WHETHER TO SET OR KILL
 S WSAVE=WD
 I $E(WD)="@" S WD=$E(WD,2,255) D KILLWD S WD=WSAVE Q
 D SETWD S WD=WSAVE Q
 ;
KILLWD ; KILL WORD IN ^ICD0/9
 I '$D(@GBL@(DFN,FN,"B",WD)) W BB," -- '",WD,"' not in ",NCODE,! Q
 S SEQNT="" F Q=0:0 S SEQNT=$O(@GBL@(DFN,FN,"B",WD,SEQNT)) Q:SEQNT=""  S CNT=CNT-1 W "." K @GBL@(DFN,FN,"B",WD,SEQNT),@GBL@(DFN,FN,SEQNT,0) S XCODE="K @GBL@(""C"",WD,DFN,SEQNT)" D TOKNDX
 Q
 ;
SETWD ; SET WORD INTO ^ICD0/9
 Q:$D(@GBL@(DFN,FN,"B",WD))
 D GETSEQ
 S CNT=CNT+1
 S @GBL@(DFN,FN,SEQNT,0)=WD
 S @GBL@(DFN,FN,"B",WD,SEQNT)=""
 S XCODE="S @GBL@(""C"",WD,DFN,SEQNT)="""""
 D TOKNDX
 Q
 ;
TOKNDX ; BREAK WORD INTO TOKENS AND INDEX
REMQT S I=$F(WD,"'") I I>0 S WD=$E(WD,1,I-2)_$E(WD,I,255) G REMQT
 I '$F(WD,"-") X XCODE Q
 S WS=WD,WC=""
 F I=1:1 S WF=$P(WD,"-",I) Q:WF=""  Q:$L(WF)>2  S WC=WC_WF
 S:WF'="" WC=WD
 F I=1:1 S WD=$P(WC,"-",I) Q:WD=""  X XCODE
 S WD=WS
 Q
 ;
GETSEQ ; GET NEXT AVAIILABLE SUB-DFN
 F SEQNT=1:1 Q:'$D(@GBL@(DFN,FN,SEQNT))
 Q
 ;
CHKCODE ; CHECK FORMAT OF CODE
 G:GBL="^ICD0" OPCODE
DXCODE S:CODE?3N!(CODE?1U1N.N) CODE=CODE_"."
 Q:(CODE?1"V"2N1".")!(CODE?1"V"2N1"."1N)!(CODE?1"V"2N1"."2N)
 Q:(CODE?1"E"3N1".")!(CODE?1"E"3N1"."1N)!(CODE?1"E"3N1"."2N)
 Q:(CODE?3N1".")!(CODE?3N1"."1N)!(CODE?3N1"."2N)
 S CODE=""
 Q
OPCODE S:CODE?2N CODE=CODE_"."
 Q:(CODE?2N1".")!(CODE?2N1"."1N)!(CODE?2N1"."2N)
 S CODE=""
 Q