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

ECPRVUTL.m

Go to the documentation of this file.
ECPRVUTL ;ALB/JAP - Provider Selection with Person Class ;7 Aug 97
 ;;2.0; EVENT CAPTURE ;**5**;8 May 96
 ;
PROV(ECDT,ECPROVS) ;get providers - new providers function
 ;
 ;this function is duplicated in PROV^ECMUTL
 ;
 ;select provider(s) with active person class
 ;no updating of file #721 record is done here
 ;
 ;   input
 ;   ECDT    = date/time of procedure (required)
 ;   ECPROVS = local array, passed by reference (required)
 ;    
 ;   output
 ;   ECU(1)  = provider #1 (mandatory) ien^provider #1 name^person class
 ;   ECU(2)  = provider #2 (optional) ien^provider #2 name^person class
 ;   ECU(3)  = provider #3 (optional) ien^provider #3 name^person class
 ;
 ;   returns
 ;       0 ==> provider selection successful; at least
 ;             provider #1 selected.
 ;       1 ==> selection unsuccessful or user timed-out
 ;       2 ==> selection unsuccessful or user entered "^"
 ;
 N ECU,ECU2,ECU3,ECDA
 D GET("",ECDT,.ECU,.ECU2,.ECU3,.ECOUT)
 S ECPROVS(1)=ECU,ECPROVS(2)=ECU2,ECPROVS(3)=ECU3
 Q ECOUT
 ;
GET(ECDA,ECDT,ECU,ECU2,ECU3,ECOUT) ;get providers with person class
 ;
 ;select provider(s) with active person class
 ;no updating of file #721 record is done here
 ;
 ;   input
 ;   ECDA = ien of pertinent record in file #721 (required)
 ;          but may be null
 ;   ECDT = date/time of procedure (required)
 ;          internal FM format;
 ;          if null defaults to DT
 ;   (ECU,ECU2,ECU3) = any (required; pass by reference);
 ;                     will be reset
 ;   ECOUT = (required; pass by reference)
 ;
 ;   output
 ;   ECU   = provider #1 ien in file #200^provider name^person class OR
 ;           provider #1 ien in file #200^provider name^null OR
 ;           null^null^null (if provider not determined)
 ;           (provider #1 cannot be deleted; required field)
 ;   ECU2  = provider #2 ien in file #200^provider name^person class  OR
 ;           provider #1 ien in file #200^provider name^null OR
 ;           null^null^null (if provider not determined) OR
 ;           @^null^null (if provider deleted)
 ;   ECU3  = (same format as provider #2)
 ;   ECOUT = 0 if selection successful  OR
 ;           1 if user times out; selection unsuccessful
 ;           2 if user up-arrows out; selection unsuccessful
 ;
 ;   Note: If user up-arrows out or times out, then
 ;         ECU,ECU2,ECU3 set back to value at entry.
 ;
 N ECUTN,DA,DIR,DIRUT,DTOUT,DUOUT,X,Y,ECDATA,ECUN,ECUN2,ECUN3,ECUC,ECUC2,ECUC3,OLDP
 S ECOUT=0,(ECU,ECU2,ECU3)="",(ECUN,ECUN2,ECUN3)="",(ECUC,ECUC2,ECUC3)="",ECDATA="" F JJ=1:1:3 S OLDP(JJ)="^^"
 ;if using an existing record in file #721, pick-up some basic data
 I +ECDA>0 D
 .S DA=ECDA,ECDATA=$G(^ECH(ECDA,0)),ECDT=$P(ECDATA,"^",3)
 .S ECU=$P(ECDATA,"^",11),ECU2=$P(ECDATA,"^",15),ECU3=$P(ECDATA,"^",17)
 .S $P(OLDP(1),"^")=ECU,$P(OLDP(2),"^")=ECU2,$P(OLDP(3),"^")=ECU3
 I ECDT="" S ECDT=DT
 ;allow user to select new or update existing provider(s)
 D PV
 I +ECOUT D  Q
 .S ECU=OLDP(1)
 .S ECU2=OLDP(2)
 .S ECU3=OLDP(3)
 I '+ECOUT D
 .S ECU=ECU_"^"_ECUN_"^"_ECUC
 .S ECU2=ECU2_"^"_ECUN2_"^"_ECUC2
 .S ECU3=ECU3_"^"_ECUN3_"^"_ECUC3
 ;make sure no duplicates exist
 I +ECU D
 .I +ECU=+ECU2 S ECU2="@^^"
 .I +ECU=+ECU3 S ECU3="@^^"
 I +ECU2 D
 .I +ECU2=+ECU3 S ECU3="@^^"
 ;if an existing 2nd provider is deleted, fill-in using 3rd provider
 I $E(ECU2,1)="@",+ECU3 S ECU2=ECU3,ECU3="@^^"
 ;make sure info is complete for each provider
 I +ECU>0 D COMP(.ECU,ECDT)
 I +ECU2>0 D COMP(.ECU2,ECDT)
 I +ECU3>0 D COMP(.ECU3,ECDT)
 Q
 ;
 ;if ecu,ecu2,ecu3 are already defined (i.e., not null), then y(0),y(0,0) won't be
 ;returned from DIR call;
PV ;1st provider - required
 ;if 1st provider exists, it can't be deleted; but may be over-written
 K Y,DIR S DIR(0)="721,10",DIR("A")="Provider" D ^DIR K DIR I Y D
 .S ECUN=$G(Y(0,0)) I ECUN="" S ECUN=$$DICLK(ECU)
 .S ECUC=$$CLASS(+Y,ECDT)
 S:$D(DTOUT) ECOUT=1 S:$D(DUOUT) ECOUT=2
 Q:$G(ECOUT)
 I +$G(ECUC)<0 S ECUC="" G PV
 S ECU=+Y
 ;
PV2 ;2nd provider - optional
 ;if 2nd provider exists, it may be deleted or over-written
 K Y,DIR S DIR(0)="721,15",DIR("A")="Provider #2" D ^DIR K DIR I Y D
 .Q:+Y=+ECU
 .S ECUN2=$G(Y(0,0)) I ECUN2="" S ECUN2=$$DICLK(ECU2)
 .S ECUC2=$$CLASS(+Y,ECDT)
 S:$D(DTOUT) ECOUT=1 S:$D(DUOUT) ECOUT=2
 Q:$G(ECOUT)
 I 'Y,X="@",+ECU2 S ECU2="@",ECUN2="" W !,?5,"Provider #2 will be deleted..." I +ECU3 G PV3
 Q:ECU2="@"
 I +Y=+ECU W $C(7),!!,?15,"But that's Provider #1... Try again.",! G PV2
 I +$G(ECUC2)<0 S ECUC2="" G PV2
 S ECU2=$S(+Y>0:+Y,1:"")
 Q:ECU2=""
 ;
PV3 ;3rd provider - optional
 ;if 3rd provider exists, it may be deleted or over-written
 K Y,DIR S DIR(0)="721,17",DIR("A")="Provider #3" D ^DIR K DIR I Y D
 .Q:+Y=+ECU  Q:+Y=+ECU2
 .S ECUN3=$G(Y(0,0)) I ECUN3="" S ECUN3=$$DICLK(ECU3)
 .S ECUC3=$$CLASS(+Y,ECDT)
 S:$D(DTOUT) ECOUT=1 S:$D(DUOUT) ECOUT=2
 Q:$G(ECOUT)
 I 'Y,X="@",+ECU3 S ECU3="@",ECUN3="" W !,?5,"Provider #3 will be deleted..."
 Q:ECU3="@"
 I +Y=+ECU W $C(7),!!,?15,"But that's Provider #1... Try again.",! G PV3
 I +Y=+ECU2 W $C(7),!!,?15,"But that's Provider #2... Try again.",! G PV3
 I +$G(ECUC3)<0 S ECUC3="" G PV3
 S ECU3=$S(+Y>0:+Y,1:"")
 Q
 ;
CLASS(ECUX,ECDTX) ;get person class - display
 ;   input
 ;   ECUX=ien in file #200 (required)
 ;   ECDTX=date/time of procedure (required)
 ;   output
 ;   ECUTN= -1 if no person class
 ;          or
 ;          -2 if no active person class
 ;          or
 ;          ien in file #8932.1^occupation^specialty^subspecialty^effective date^expiration date^va code
 N ECUTN,ECDATE,Y
 S Y=ECDTX D DD^%DT S ECDATE=Y
 S ECUTN=$$GET^XUA4A72(ECUX,ECDTX)
 I +ECUTN>0 D
 .W !?5,"Occupation:   ",$P(ECUTN,"^",2)
 .I $P(ECUTN,"^",3)]"" W !?5,"Specialty:    ",$P(ECUTN,"^",3)
 .I $P(ECUTN,"^",4)]"" W !?5,"Subspecialty: ",$P(ECUTN,"^",4)
 .W !
 E  D CMSG
 Q ECUTN
 ;
CMSG ;inactive person class msgs
 I +ECUTN=-1 D
 .W !!?10,"Only Providers with an active Person Class may"
 .W !?10,"be selected."
 I +ECUTN=-2 D
 .W !!?10,"This Provider does not have an active Person Class"
 .W !?10,"for the date of "_$P(ECDATE,"@",1)_"."
 W !!?10,"Please check your provider selection and try again.",!
 Q
 ;
DICLK(ECUX)   ;use DIC lookup if editing existing provider in file #721
 ;   input
 ;   ECUX=ien in file #200 (required)
 ;   output
 ;   Y(0,0); i.e., name
 N DIC,X
 S X=ECUX,DIC="^VA(200,",DIC(0)="NZ"
 D ^DIC
 Q $G(Y(0,0))
 ;
COMP(ECUX,ECDTX) ;check & complete the provider return variables
 ;or get user/provider name and person class info
 ;   input
 ;   ECUX=ien in file #200^name^person class ien^occupation^specialty^subspecialty^etc.
 ;        (required) 
 ;        but pieces 3,4,5 may be null;
 ;        passed by reference
 ;   ECDTX=pertinent date; internal FM format (required)
 ;         but may be null
 ;   output
 ;   ECUX=ien in file #200^name^compress person class info
 N ECSPEC,E1,E2,E3,ECUTN,X,Y
 ;get provider name, if not there;
 I '$G(ECDTX) S ECDTX=""
 I $P(ECUX,"^",2)="" D
 .S $P(ECUX,"^",2)=$$DICLK(+ECUX)
 .S ECUTN=$$GET^XUA4A72(+ECUX,ECDTX) I +ECUTN<0 S ECUTN=""
 .S $P(ECUX,"^",3)=ECUTN
 ;compress the person class information into 1 piece
 ;if specialty and subspecialty are defined, use that;
 ;otherwise use occupation plus specialty (if defined)
 I +$P(ECUX,"^",3)=0 S ECUX=$P(ECUX,"^",1,2)_"^"_"(Person Class undefined.)" Q
 S E1=$P(ECUX,"^",4),E2=$P(ECUX,"^",5),E3=$P(ECUX,"^",6)
 I $L(E3)>0 D
 .S ECSPEC=$E(E2,1,18)_"/"_$E(E3,1,40)
 .S ECUX=$P(ECUX,"^",1,2)_"^"_ECSPEC
 E  D
 .I $L(E2)>0 S ECSPEC=$E(E1,1,18)_"/"_$E(E2,1,40)
 .I $L(E2)=0 S ECSPEC=E1
 .S ECUX=$P(ECUX,"^",1,2)_"^"_ECSPEC
 Q