PXRRPECS ;ISL/PKR - Build a list of Person Class entries. ;12/11/96
;;1.0;PCE PATIENT CARE ENCOUNTER;**12**;Aug 12, 1996
;
;=======================================================================
PCLASS ;Build a list of person classes.
N BELL,IC,INDENT,JC,NOCC,NS,NSPEC,NSUB,OCC,OCCIEN,PCLASS
N SELECT,SOCC,SOCCW,SPEC,SPECIEN,SSPEC,SSPECW,SUB,SSUB,TEMP,WC,X,Y
;We will need a DBIA for reading the Person Class file.
;Build a list of the OCCUPATION entries in the Person Class file.
S IC=0
F S IC=$O(^USC(8932.1,IC)) Q:+IC=0 D
. S TEMP=$P(^USC(8932.1,IC,0),U,1)
. I $L(TEMP)>0 S OCC($$UPPRCASE^PXRRPECU(TEMP))=TEMP
;
;Count the number of Occupation entries.
S NOCC=0
S IC=""
F S IC=$O(OCC(IC)) Q:IC="" D
. S NOCC=NOCC+1
;
S BELL=$C(7)
;Set the wildcard to be *.
S WC="*"
;NS is NOT SPECIFIED.
S NS="NOT SPECIFIED"
S INDENT=3
S NCL=0
K PXRRPECL
MPROMPT W !,"Select PERSON CLASS (OCCUPATION, SPECIALTY, SUBSPECIALTY)"
K DTOUT,DUOUT
W !
NPCLASS ;
I NCL'<1 W !!,"Select another PERSON CLASS OCCUPATION"
;Select an occupation.
NOCC S DIR(0)="FAOU^1:60"
S DIR("?")="^D OCCHLP^PXRRPECS"
S DIR("??")="^D LISTA^PXRRPECU(.OCC)"
S DIR("A")=" Select OCCUPATION (enter "_WC_" for all, return to end selection): "
W !
D ^DIR
K DIR
I $D(DIROUT) S DTOUT=1
I $D(DTOUT)!$D(DUOUT) Q
S SOCC=$$FDME^PXRRPECU(Y,.OCC)
I SOCC=-1 W " ??",BELL G NOCC
I ($P(SOCC,U,1)="")&(NCL=0) D G MPROMPT
. W !,"You must select a person class!"
I $P(SOCC,U,1)="" Q
I $P(SOCC,U,1)=WC S SOCCW=1
E S SOCCW=0
;
;Build a list of iens for SOCC (Selected OCCupation).
K OCCIEN
K SPEC
I ('SOCCW) D
. S TEMP=$E($P(SOCC,U,2),1,30)
. S IC=0
. F S IC=$O(^USC(8932.1,"B",TEMP,IC)) Q:+IC=0 D
.. S OCCIEN(IC)=""
;
;Build a list of specialties valid for SOCC.
S IC=0
F S IC=$O(OCCIEN(IC)) Q:+IC=0 D
. S TEMP=$P(^USC(8932.1,IC,0),U,2)
. I TEMP="" S TEMP=NS
. S SPEC($$UPPRCASE^PXRRPECU(TEMP))=TEMP
;
;Special case for Occupation selected as wildcard.
I SOCCW D
. S IC=0
. F S IC=$O(^USC(8932.1,IC)) Q:+IC=0 D
.. S TEMP=$P(^USC(8932.1,IC,0),U,2)
.. I TEMP="" S TEMP=NS
.. S SPEC($$UPPRCASE^PXRRPECU(TEMP))=TEMP
;
;Count the number of Specialty entries compatible with the selected
;Occupation.
S NSPEC=0
S IC=0
F S IC=$O(SPEC(IC)) Q:IC="" D
. S NSPEC=NSPEC+1
;
I NSPEC=0 D G NPCLASS
. W !,"There are no specialties for:"
. W !,?INDENT,"OCCUPATION: ",$P(SOCC,U,1)
. S NCL=NCL+1
. S PXRRPECL(NCL)=$P(SOCC,U,2)_U_NS_U_NS
;
;Select a specialty.
S SSPEC=""
NSPEC I (NCL>0)&($L(SSPEC)>0) D VERIFY^PXRRPECU
S DIR(0)="FAOU^1:50"
S DIR("?")="^D SPECHLP^PXRRPECS"
S DIR("??")="^D LISTA^PXRRPECU(.SPEC)"
S DIR("A")=" Select SPECIALTY (enter "_WC_" for all, return to change OCCUPATION): "
W !!,"The currently selected OCCUPATION is:"
W !," ",$P(SOCC,U,2)
D ^DIR K DIR
I $D(DIROUT) S DTOUT=1
I $D(DTOUT) Q
I $D(DUOUT) G NOCC
I $L(Y)=0 G NPCLASS
S SSPEC=$$FDME^PXRRPECU(Y,.SPEC)
I $P(SSPEC,U,1)="" G NPCLASS
I SSPEC=-1 W " ??",BELL G NSPEC
I $P(SSPEC,U,1)=WC S SSPECW=1
E S SSPECW=0
;
;Build a list of iens for SSPEC (Selected SPECialty). Trim the OCCIEN
;list so it only contains entries valid for SOCC and SSPEC.
K SPECIEN
K SUB
S IC=0
F S IC=$O(OCCIEN(IC)) Q:+IC=0 D
. S SPECIEN(IC)=OCCIEN(IC)
;
;If SSPEC was selected as the wildcard then we don't need to do
;anything.
I ('SSPECW)&('SOCCW) D
. S TEMP=$P(SSPEC,U,2)
. S IC=0
. F S IC=$O(SPECIEN(IC)) Q:+IC=0 D
.. I $P(^USC(8932.1,IC,0),U,2)'=TEMP K SPECIEN(IC)
;
;Special case with SOCC=WC and SSPEC'=WC
I ('SSPECW)&(SOCCW) D
. S TEMP=$P(SSPEC,U,2)
. S IC=0
. F S IC=$O(^USC(8932.1,IC)) Q:+IC=0 D
.. I $P(^USC(8932.1,IC,0),U,2)=TEMP S SPECIEN(IC)=""
;
;Build a list of subspecialties valid for SOCC and SSPEC.
S IC=0
F S IC=$O(SPECIEN(IC)) Q:+IC=0 D
. S TEMP=$P(^USC(8932.1,IC,0),U,3)
. I TEMP="" S TEMP=NS
. S SUB($$UPPRCASE^PXRRPECU(TEMP))=TEMP
;
;Special case SOCC and SSPEC are wild.
I (SSPECW)&(SOCCW) D
. S IC=0
. F S IC=$O(^USC(8932.1,IC)) Q:+IC=0 D
.. S TEMP=$P(^USC(8932.1,IC,0),U,3)
.. I TEMP="" S TEMP=NS
.. S SUB($$UPPRCASE^PXRRPECU(TEMP))=TEMP
;
;Count the number of entries.
S NSUB=0
S IC=""
F S IC=$O(SUB(IC)) Q:IC="" D
. S NSUB=NSUB+1
;
I (NSUB=0)!((NSUB=1)&($D(SUB(NS)))) D G NSPEC
. W !,"There are no subspecialties for:"
. W !,?INDENT,"OCCUPATION: ",$P(SOCC,U,1)
. W !,?INDENT,"SPECIALTY: ",$P(SSPEC,U,1)
. S NCL=NCL+1
. S PXRRPECL(NCL)=$P(SOCC,U,2)_U_$P(SSPEC,U,2)_U_NS
;
;Select a subspecialty.
NSUB S DIR(0)="FAOU^1:50"
S DIR("?")="^D SUBHLP^PXRRPECS"
S DIR("??")="^D LISTA^PXRRPECU(.SUB)"
S DIR("A")=" Select SUBSPECIALTY (enter "_WC_" for all): "
D ^DIR K DIR
I $D(DIROUT) S DTOUT=1
I $D(DTOUT) Q
I $D(DUOUT) G NSPEC
I $L(Y)=0 S SSUB=NS_U_NS
E S SSUB=$$FDME^PXRRPECU(Y,.SUB)
I SSUB=-1 W " ??",BELL G NSUB
;
;Save the selections.
S TEMP=$L($P(SOCC,U,1))+$L($P(SSPEC,U,1))+$L($P(SSUB,U,1))
I TEMP=0 Q
I TEMP>0 D
. S NCL=NCL+1
. S PXRRPECL(NCL)=$P(SOCC,U,2)_U_$P(SSPEC,U,2)_U_$P(SSUB,U,2)
I $D(DUOUT) G PCLASS
I (NCL=0)&($D(DIRUT)!$D(DUOUT)) Q
I (NCL=0) W !,"You must select a PERSON CLASS!" G PCLASS
G NSPEC
;
;=======================================================================
OCCHLP ;Help for occupation input.
N PROMPT
W !!,"Answer with an OCCUPATION, note ",WC," matches all OCCUPATIONS"
S PROMPT="Do you want the entire "_NOCC_"-entry occupation list? "
I $$GETYORN^PXRRPECU(PROMPT) D LISTA^PXRRPECU(.OCC)
Q
;
;=======================================================================
SPECHLP ;Help for specialty input.
N PROMPT
W !!,"Answer with a SPECIALTY, note ",WC," matches all SPECIALTIES"
S PROMPT="Do you want the entire "_NSPEC_"-entry specialty list? "
I $$GETYORN^PXRRPECU(PROMPT) D LISTA^PXRRPECU(.SPEC)
Q
;
;=======================================================================
SUBHLP ;Help for subspecialty input.
N PROMPT
W !!,"Answer with a SUBSPECIALTY, note ",WC," matches all SUBSPECIALTIES"
S PROMPT="Do you want the entire "_NSUB_"-entry subspecialty list? "
I $$GETYORN^PXRRPECU(PROMPT) D LISTA^PXRRPECU(.SUB)
Q
;
PXRRPECS ;ISL/PKR - Build a list of Person Class entries. ;12/11/96
+1 ;;1.0;PCE PATIENT CARE ENCOUNTER;**12**;Aug 12, 1996
+2 ;
+3 ;=======================================================================
PCLASS ;Build a list of person classes.
+1 NEW BELL,IC,INDENT,JC,NOCC,NS,NSPEC,NSUB,OCC,OCCIEN,PCLASS
+2 NEW SELECT,SOCC,SOCCW,SPEC,SPECIEN,SSPEC,SSPECW,SUB,SSUB,TEMP,WC,X,Y
+3 ;We will need a DBIA for reading the Person Class file.
+4 ;Build a list of the OCCUPATION entries in the Person Class file.
+5 SET IC=0
+6 FOR
SET IC=$ORDER(^USC(8932.1,IC))
IF +IC=0
QUIT
Begin DoDot:1
+7 SET TEMP=$PIECE(^USC(8932.1,IC,0),U,1)
+8 IF $LENGTH(TEMP)>0
SET OCC($$UPPRCASE^PXRRPECU(TEMP))=TEMP
End DoDot:1
+9 ;
+10 ;Count the number of Occupation entries.
+11 SET NOCC=0
+12 SET IC=""
+13 FOR
SET IC=$ORDER(OCC(IC))
IF IC=""
QUIT
Begin DoDot:1
+14 SET NOCC=NOCC+1
End DoDot:1
+15 ;
+16 SET BELL=$CHAR(7)
+17 ;Set the wildcard to be *.
+18 SET WC="*"
+19 ;NS is NOT SPECIFIED.
+20 SET NS="NOT SPECIFIED"
+21 SET INDENT=3
+22 SET NCL=0
+23 KILL PXRRPECL
MPROMPT WRITE !,"Select PERSON CLASS (OCCUPATION, SPECIALTY, SUBSPECIALTY)"
+1 KILL DTOUT,DUOUT
+2 WRITE !
NPCLASS ;
+1 IF NCL'<1
WRITE !!,"Select another PERSON CLASS OCCUPATION"
+2 ;Select an occupation.
NOCC SET DIR(0)="FAOU^1:60"
+1 SET DIR("?")="^D OCCHLP^PXRRPECS"
+2 SET DIR("??")="^D LISTA^PXRRPECU(.OCC)"
+3 SET DIR("A")=" Select OCCUPATION (enter "_WC_" for all, return to end selection): "
+4 WRITE !
+5 DO ^DIR
+6 KILL DIR
+7 IF $DATA(DIROUT)
SET DTOUT=1
+8 IF $DATA(DTOUT)!$DATA(DUOUT)
QUIT
+9 SET SOCC=$$FDME^PXRRPECU(Y,.OCC)
+10 IF SOCC=-1
WRITE " ??",BELL
GOTO NOCC
+11 IF ($PIECE(SOCC,U,1)="")&(NCL=0)
Begin DoDot:1
+12 WRITE !,"You must select a person class!"
End DoDot:1
GOTO MPROMPT
+13 IF $PIECE(SOCC,U,1)=""
QUIT
+14 IF $PIECE(SOCC,U,1)=WC
SET SOCCW=1
+15 IF '$TEST
SET SOCCW=0
+16 ;
+17 ;Build a list of iens for SOCC (Selected OCCupation).
+18 KILL OCCIEN
+19 KILL SPEC
+20 IF ('SOCCW)
Begin DoDot:1
+21 SET TEMP=$EXTRACT($PIECE(SOCC,U,2),1,30)
+22 SET IC=0
+23 FOR
SET IC=$ORDER(^USC(8932.1,"B",TEMP,IC))
IF +IC=0
QUIT
Begin DoDot:2
+24 SET OCCIEN(IC)=""
End DoDot:2
End DoDot:1
+25 ;
+26 ;Build a list of specialties valid for SOCC.
+27 SET IC=0
+28 FOR
SET IC=$ORDER(OCCIEN(IC))
IF +IC=0
QUIT
Begin DoDot:1
+29 SET TEMP=$PIECE(^USC(8932.1,IC,0),U,2)
+30 IF TEMP=""
SET TEMP=NS
+31 SET SPEC($$UPPRCASE^PXRRPECU(TEMP))=TEMP
End DoDot:1
+32 ;
+33 ;Special case for Occupation selected as wildcard.
+34 IF SOCCW
Begin DoDot:1
+35 SET IC=0
+36 FOR
SET IC=$ORDER(^USC(8932.1,IC))
IF +IC=0
QUIT
Begin DoDot:2
+37 SET TEMP=$PIECE(^USC(8932.1,IC,0),U,2)
+38 IF TEMP=""
SET TEMP=NS
+39 SET SPEC($$UPPRCASE^PXRRPECU(TEMP))=TEMP
End DoDot:2
End DoDot:1
+40 ;
+41 ;Count the number of Specialty entries compatible with the selected
+42 ;Occupation.
+43 SET NSPEC=0
+44 SET IC=0
+45 FOR
SET IC=$ORDER(SPEC(IC))
IF IC=""
QUIT
Begin DoDot:1
+46 SET NSPEC=NSPEC+1
End DoDot:1
+47 ;
+48 IF NSPEC=0
Begin DoDot:1
+49 WRITE !,"There are no specialties for:"
+50 WRITE !,?INDENT,"OCCUPATION: ",$PIECE(SOCC,U,1)
+51 SET NCL=NCL+1
+52 SET PXRRPECL(NCL)=$PIECE(SOCC,U,2)_U_NS_U_NS
End DoDot:1
GOTO NPCLASS
+53 ;
+54 ;Select a specialty.
+55 SET SSPEC=""
NSPEC IF (NCL>0)&($LENGTH(SSPEC)>0)
DO VERIFY^PXRRPECU
+1 SET DIR(0)="FAOU^1:50"
+2 SET DIR("?")="^D SPECHLP^PXRRPECS"
+3 SET DIR("??")="^D LISTA^PXRRPECU(.SPEC)"
+4 SET DIR("A")=" Select SPECIALTY (enter "_WC_" for all, return to change OCCUPATION): "
+5 WRITE !!,"The currently selected OCCUPATION is:"
+6 WRITE !," ",$PIECE(SOCC,U,2)
+7 DO ^DIR
KILL DIR
+8 IF $DATA(DIROUT)
SET DTOUT=1
+9 IF $DATA(DTOUT)
QUIT
+10 IF $DATA(DUOUT)
GOTO NOCC
+11 IF $LENGTH(Y)=0
GOTO NPCLASS
+12 SET SSPEC=$$FDME^PXRRPECU(Y,.SPEC)
+13 IF $PIECE(SSPEC,U,1)=""
GOTO NPCLASS
+14 IF SSPEC=-1
WRITE " ??",BELL
GOTO NSPEC
+15 IF $PIECE(SSPEC,U,1)=WC
SET SSPECW=1
+16 IF '$TEST
SET SSPECW=0
+17 ;
+18 ;Build a list of iens for SSPEC (Selected SPECialty). Trim the OCCIEN
+19 ;list so it only contains entries valid for SOCC and SSPEC.
+20 KILL SPECIEN
+21 KILL SUB
+22 SET IC=0
+23 FOR
SET IC=$ORDER(OCCIEN(IC))
IF +IC=0
QUIT
Begin DoDot:1
+24 SET SPECIEN(IC)=OCCIEN(IC)
End DoDot:1
+25 ;
+26 ;If SSPEC was selected as the wildcard then we don't need to do
+27 ;anything.
+28 IF ('SSPECW)&('SOCCW)
Begin DoDot:1
+29 SET TEMP=$PIECE(SSPEC,U,2)
+30 SET IC=0
+31 FOR
SET IC=$ORDER(SPECIEN(IC))
IF +IC=0
QUIT
Begin DoDot:2
+32 IF $PIECE(^USC(8932.1,IC,0),U,2)'=TEMP
KILL SPECIEN(IC)
End DoDot:2
End DoDot:1
+33 ;
+34 ;Special case with SOCC=WC and SSPEC'=WC
+35 IF ('SSPECW)&(SOCCW)
Begin DoDot:1
+36 SET TEMP=$PIECE(SSPEC,U,2)
+37 SET IC=0
+38 FOR
SET IC=$ORDER(^USC(8932.1,IC))
IF +IC=0
QUIT
Begin DoDot:2
+39 IF $PIECE(^USC(8932.1,IC,0),U,2)=TEMP
SET SPECIEN(IC)=""
End DoDot:2
End DoDot:1
+40 ;
+41 ;Build a list of subspecialties valid for SOCC and SSPEC.
+42 SET IC=0
+43 FOR
SET IC=$ORDER(SPECIEN(IC))
IF +IC=0
QUIT
Begin DoDot:1
+44 SET TEMP=$PIECE(^USC(8932.1,IC,0),U,3)
+45 IF TEMP=""
SET TEMP=NS
+46 SET SUB($$UPPRCASE^PXRRPECU(TEMP))=TEMP
End DoDot:1
+47 ;
+48 ;Special case SOCC and SSPEC are wild.
+49 IF (SSPECW)&(SOCCW)
Begin DoDot:1
+50 SET IC=0
+51 FOR
SET IC=$ORDER(^USC(8932.1,IC))
IF +IC=0
QUIT
Begin DoDot:2
+52 SET TEMP=$PIECE(^USC(8932.1,IC,0),U,3)
+53 IF TEMP=""
SET TEMP=NS
+54 SET SUB($$UPPRCASE^PXRRPECU(TEMP))=TEMP
End DoDot:2
End DoDot:1
+55 ;
+56 ;Count the number of entries.
+57 SET NSUB=0
+58 SET IC=""
+59 FOR
SET IC=$ORDER(SUB(IC))
IF IC=""
QUIT
Begin DoDot:1
+60 SET NSUB=NSUB+1
End DoDot:1
+61 ;
+62 IF (NSUB=0)!((NSUB=1)&($DATA(SUB(NS))))
Begin DoDot:1
+63 WRITE !,"There are no subspecialties for:"
+64 WRITE !,?INDENT,"OCCUPATION: ",$PIECE(SOCC,U,1)
+65 WRITE !,?INDENT,"SPECIALTY: ",$PIECE(SSPEC,U,1)
+66 SET NCL=NCL+1
+67 SET PXRRPECL(NCL)=$PIECE(SOCC,U,2)_U_$PIECE(SSPEC,U,2)_U_NS
End DoDot:1
GOTO NSPEC
+68 ;
+69 ;Select a subspecialty.
NSUB SET DIR(0)="FAOU^1:50"
+1 SET DIR("?")="^D SUBHLP^PXRRPECS"
+2 SET DIR("??")="^D LISTA^PXRRPECU(.SUB)"
+3 SET DIR("A")=" Select SUBSPECIALTY (enter "_WC_" for all): "
+4 DO ^DIR
KILL DIR
+5 IF $DATA(DIROUT)
SET DTOUT=1
+6 IF $DATA(DTOUT)
QUIT
+7 IF $DATA(DUOUT)
GOTO NSPEC
+8 IF $LENGTH(Y)=0
SET SSUB=NS_U_NS
+9 IF '$TEST
SET SSUB=$$FDME^PXRRPECU(Y,.SUB)
+10 IF SSUB=-1
WRITE " ??",BELL
GOTO NSUB
+11 ;
+12 ;Save the selections.
+13 SET TEMP=$LENGTH($PIECE(SOCC,U,1))+$LENGTH($PIECE(SSPEC,U,1))+$LENGTH($PIECE(SSUB,U,1))
+14 IF TEMP=0
QUIT
+15 IF TEMP>0
Begin DoDot:1
+16 SET NCL=NCL+1
+17 SET PXRRPECL(NCL)=$PIECE(SOCC,U,2)_U_$PIECE(SSPEC,U,2)_U_$PIECE(SSUB,U,2)
End DoDot:1
+18 IF $DATA(DUOUT)
GOTO PCLASS
+19 IF (NCL=0)&($DATA(DIRUT)!$DATA(DUOUT))
QUIT
+20 IF (NCL=0)
WRITE !,"You must select a PERSON CLASS!"
GOTO PCLASS
+21 GOTO NSPEC
+22 ;
+23 ;=======================================================================
OCCHLP ;Help for occupation input.
+1 NEW PROMPT
+2 WRITE !!,"Answer with an OCCUPATION, note ",WC," matches all OCCUPATIONS"
+3 SET PROMPT="Do you want the entire "_NOCC_"-entry occupation list? "
+4 IF $$GETYORN^PXRRPECU(PROMPT)
DO LISTA^PXRRPECU(.OCC)
+5 QUIT
+6 ;
+7 ;=======================================================================
SPECHLP ;Help for specialty input.
+1 NEW PROMPT
+2 WRITE !!,"Answer with a SPECIALTY, note ",WC," matches all SPECIALTIES"
+3 SET PROMPT="Do you want the entire "_NSPEC_"-entry specialty list? "
+4 IF $$GETYORN^PXRRPECU(PROMPT)
DO LISTA^PXRRPECU(.SPEC)
+5 QUIT
+6 ;
+7 ;=======================================================================
SUBHLP ;Help for subspecialty input.
+1 NEW PROMPT
+2 WRITE !!,"Answer with a SUBSPECIALTY, note ",WC," matches all SUBSPECIALTIES"
+3 SET PROMPT="Do you want the entire "_NSUB_"-entry subspecialty list? "
+4 IF $$GETYORN^PXRRPECU(PROMPT)
DO LISTA^PXRRPECU(.SUB)
+5 QUIT
+6 ;