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

ICDSELPS.m

Go to the documentation of this file.
  1. ICDSELPS ;ALB/KUM - Select ICD PROCEDURE FROM A LIXICON UTILITY LIST ;12/07/2011
  1. ;;18.0;DRG Grouper;**64**;Oct 20, 2000;Build 103
  1. ;
  1. SEL(ICDSRL,X) ; Select from List
  1. ;
  1. ; Input
  1. ;
  1. ; X Length of list to display (default 5)
  1. ; .ICDSRL Local array passed by reference
  1. ;
  1. ; ICDSRL() Input Array from ICDSRCH^LEX10CS
  1. ;
  1. ; ICDSRL(0)=# found ^ Pruning Indicator
  1. ; ICDSRL(1,0)=Code ^ Code IEN ^ date
  1. ; ICDSRL(1,"IDL")=ICD-9/10 Description, Long
  1. ; ICDSRL(1,"IDL",1)=ICD-9/10 IEN ^ date
  1. ; ICDSRL(1,"IDS")=ICD-9/10 Description, Short
  1. ; ICDSRL(1,"IDS",1)=ICD-9/10 IEN ^ date
  1. ; ICDSRL(1,"LEX")=Lexicon Description
  1. ; ICDSRL(1,"LEX",1)=Expression IEN ^ date
  1. ; ICDSRL(1,"SYN",1)=Synonym #1
  1. ; ICDSRL(1,"SYN",m)=Synonym #m
  1. ; ...
  1. ;
  1. ; Output
  1. ;
  1. ; $$SEL Two Piece "^" delimited string same as
  1. ; Fileman's Y output variable
  1. ;
  1. ; 1 Lexicon IEN
  1. ; 2 Lexicon Term
  1. ;
  1. ; ICDSRL Local array passed by reference
  1. ;
  1. ; ICDSRL(0)=Code ^ Code IEN ^ date
  1. ; ICDSRL("IDL")=ICD-9/10 Description, Long
  1. ; ICDSRL("IDL",1)=ICD-9/10 IEN ^ date
  1. ; ICDSRL("IDS")=ICD-9/10 Description, Short
  1. ; ICDSRL("IDS",1)=ICD-9/10 IEN ^ date
  1. ; ICDSRL("LEX")=Lexicon Description
  1. ; ICDSRL("LEX",1)=Expression IEN ^ date
  1. ;
  1. ; or ^ on error
  1. ; or -1 for non-selection
  1. ;
  1. S X=+($G(X)) S:X'>0 X=5 S X=$$ASK(.ICDSRL,X)
  1. Q X
  1. ASK(ICDSRL,X) ; Ask for Selection
  1. K X N ICDSRLIT,ICDSRLL,ICDSRTOT S ICDSRLL=+($G(X)) S:ICDSRLL'>0 ICDSRLL=5
  1. S ICDSRLIT=0,ICDSRTOT=$O(ICDSRL(" "),-1) Q:+ICDSRTOT'>0 "^"
  1. K X S:+ICDSRTOT=1 X=$$ONE(ICDSRLL,.ICDSRL) S:+ICDSRTOT>1 X=$$MUL(.ICDSRL,ICDSRLL)
  1. Q X
  1. ONE(X,ICDSRL) ; One Entry Found
  1. Q:+($G(ICDSRLIT))>0 "^^" N DIR,DTOUT,ICDSRLC,ICDSRLEX,ICDSRLFI,ICDSRLIT,ICDSRLSO
  1. N ICDSRLSP,ICDSRLTX,Y
  1. S ICDSRLFI=$O(ICDSRL(0)) Q:+ICDSRLFI'>0 "^" S ICDSRLSP=$J(" ",25)
  1. S ICDSRLSO=$P(ICDSRL(1,0),"^",1),ICDSRLEX=$G(ICDSRL(1,"LEX"))
  1. S ICDSRLTX(1)=ICDSRLSO_$J(" ",(9-$L(ICDSRLSO)))_" "_ICDSRLEX
  1. D PR(.ICDSRLTX,64) S DIR("A",1)=" One code found for character "_($L($G(ICDPRC))+1)_".",DIR("A",2)=" "
  1. S DIR("A",3)=" "_$G(ICDSRLTX(1)),ICDSRLC=3 I $L($G(ICDSRLTX(2))) D
  1. . S ICDSRLC=ICDSRLC+1,DIR("A",ICDSRLC)=ICDSRLSP_$G(ICDSRLTX(2))
  1. S ICDSRLC=ICDSRLC+1,DIR("A",ICDSRLC)=" ",ICDSRLC=ICDSRLC+1
  1. S DIR("A")=" OK? (Yes/No) ",DIR("B")="Yes",DIR(0)="YAO" W !
  1. D ^DIR S:X["^^"!($D(DTOUT)) ICDSRLIT=1
  1. I X["^^"!(+($G(ICDSRLIT))>0) K ICDSRL Q "^^"
  1. S X=$S(+Y>0:$$X(1,.ICDSRL),1:-1)
  1. Q X
  1. MUL(ICDSRL,Y) ; Multiple Entries Found
  1. Q:+($G(ICDSRLIT))>0 "^^" N ICDSRLE,ICDSRLL,ICDSRMAX,ICDSRLSS,ICDSRLX,X
  1. S (ICDSRMAX,ICDSRLSS,ICDSRLIT)=0,ICDSRLL=+($G(Y)),U="^" S:+($G(ICDSRLL))'>0 ICDSRLL=5
  1. S ICDSRLX=$O(ICDSRL(" "),-1),ICDSRLSS=0
  1. G:+ICDSRLX=0 MULQ W ! W:+ICDSRLX>1 !," ",ICDSRLX," matches found for character ",$L($G(ICDPRC))+1,"."
  1. F ICDSRLE=1:1:ICDSRLX Q:((ICDSRLSS>0)&(ICDSRLSS<(ICDSRLE+1))) Q:ICDSRLIT D Q:ICDSRLIT
  1. . W:ICDSRLE#ICDSRLL=1 ! D MULW
  1. . S ICDSRMAX=ICDSRLE W:ICDSRLE#ICDSRLL=0 !
  1. . S:ICDSRLE#ICDSRLL=0 ICDSRLSS=$$MULS(ICDSRMAX,ICDSRLE,.ICDSRL) S:ICDSRLSS["^" ICDSRLIT=1
  1. I ICDSRLE#ICDSRLL'=0,+ICDSRLSS<=0 D
  1. . W ! S ICDSRLSS=$$MULS(ICDSRMAX,ICDSRLE,.ICDSRL) S:ICDSRLSS["^" ICDSRLIT=1
  1. G MULQ
  1. Q X
  1. MULW ; Write Multiple
  1. N ICDSRLEX,ICDSRLI,ICDSRLSO,ICDSRLT,ICDSRLTX S ICDSRLSO=$P(ICDSRL(+ICDSRLE,0),"^",1)
  1. S ICDSRLEX=$G(ICDSRL(+ICDSRLE,"LEX")),ICDSRLTX(1)=ICDSRLSO
  1. S ICDSRLTX(1)=ICDSRLTX(1)_$J(" ",(9-$L(ICDSRLSO)))_" "_ICDSRLEX
  1. D PR(.ICDSRLTX,63) W !,$J(ICDSRLE,5),". ",$G(ICDSRLTX(1))
  1. F ICDSRLI=2:1:5 S ICDSRLT=$G(ICDSRLTX(ICDSRLI)) W:$L(ICDSRLT) !,$J(" ",18),ICDSRLT
  1. Q
  1. MULS(X,Y,ICDSRL) ; Select from Multiple Entries
  1. N DIR,DIRB,DIROUT,DIRUT,DTOUT,DUOUT,ICDSRLFI,ICDSRHLP,ICDSRLAST,ICDSRMAX,ICDSRLS
  1. Q:+($G(ICDSRLIT))>0 "^^" S ICDSRMAX=+($G(X)),ICDSRLAST=+($G(Y))
  1. Q:ICDSRMAX=0 -1 S ICDSRLFI=$O(ICDSRL(0)) Q:+ICDSRLFI'>0 -1
  1. I +($O(ICDSRL(+ICDSRLAST)))>0 D
  1. . S DIR("A")=" Press <RETURN> for more, '^' to quit selection, or Select 1-"
  1. . S DIR("A")=DIR("A")_ICDSRMAX_": "
  1. I +($O(ICDSRL(+ICDSRLAST)))'>0 D
  1. . S DIR("A")=" Select 1-"_ICDSRMAX_": "
  1. S ICDSRHLP=" Answer must be from 1 to "
  1. S ICDSRHLP=ICDSRHLP_ICDSRMAX_", or <Return> to continue"
  1. S DIR("PRE")="S:X[""?"" X=""??"""
  1. S (DIR("?"),DIR("??"))="^D MULSH^ICDSELPS"
  1. S DIR(0)="NAO^1:"_ICDSRMAX_":0" D ^DIR
  1. I X["^^"!($D(DTOUT)) S ICDSRLIT=1,X="^^" Q "^^"
  1. K DIR Q:$D(DTOUT)!(X[U) "^"
  1. Q $S(+Y>0:+Y,1:"-1")
  1. MULSH ; Select from Multiple Entries Help
  1. I $L($G(ICDSRHLP)) W !,$G(ICDSRHLP) Q
  1. Q
  1. MULQ ; Quit Multiple Entries Selection
  1. Q:+($G(ICDSRLSS))'>0 -1 S X=-1 S:+($G(ICDSRLIT))'>0 X=$$X(+ICDSRLSS,.ICDSRL)
  1. Q X
  1. X(X,ICDSRL) ; Set X and Outpot Array
  1. N ICDSRLEX,ICDLEXFI,ICDSRLIEN,ICDSRLN,ICDSRLNC,ICDSRLNN,ICDSRLRN,ICDSRLS,ICDSRLSO
  1. S ICDSRLS=+($G(X))
  1. S ICDSRLSO=$P($G(ICDSRL(ICDSRLS,0)),"^",1)
  1. S ICDSRLEX=$G(ICDSRL(ICDSRLS,"LEX"))
  1. Q:'$L(ICDSRLEX) "^" S X=ICDSRLSO_"^"_ICDSRLEX
  1. Q X
  1. ;
  1. ; Miscellaneous
  1. CL ; Clear
  1. K ICDSRLIT
  1. Q
  1. PR(ICDSRL,X) ; Parse Array
  1. N DIW,DIWF,DIWI,DIWL,DIWR,DIWT,DIWTC,DIWX,ICDDN,ICDSRLC,ICDSRLI,ICDSRLL
  1. K ^UTILITY($J,"W") Q:'$D(ICDSRL) S ICDSRLL=+($G(X)) S:+ICDSRLL'>0 ICDSRLL=79
  1. S ICDSRLC=+($G(ICDSRL)) S:+($G(ICDSRLC))'>0 ICDSRLC=$O(ICDSRL(" "),-1) Q:+ICDSRLC'>0
  1. S DIWL=1,DIWF="C"_+ICDSRLL S ICDSRLI=0
  1. F S ICDSRLI=$O(ICDSRL(ICDSRLI)) Q:+ICDSRLI=0 S X=$G(ICDSRL(ICDSRLI)) D ^DIWP
  1. K ICDSRL S (ICDSRLC,ICDSRLI)=0
  1. F S ICDSRLI=$O(^UTILITY($J,"W",1,ICDSRLI)) Q:+ICDSRLI=0 D
  1. . S ICDSRL(ICDSRLI)=$$TM($G(^UTILITY($J,"W",1,ICDSRLI,0))," "),ICDSRLC=ICDSRLC+1
  1. S:$L(ICDSRLC) ICDSRL=ICDSRLC K ^UTILITY($J,"W")
  1. Q
  1. TM(X,Y) ; Trim Character Y - Default " "
  1. S X=$G(X) Q:X="" X S Y=$G(Y) S:'$L(Y) Y=" "
  1. F Q:$E(X,1)'=Y S X=$E(X,2,$L(X))
  1. F Q:$E(X,$L(X))'=Y S X=$E(X,1,($L(X)-1))
  1. Q X