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

ECUERPC.m

Go to the documentation of this file.
  1. ECUERPC ;ALB/JAM - Event Capture Data Entry Broker Utilities ;1/25/18 12:38
  1. ;;2.0;EVENT CAPTURE;**25,32,33,46,47,59,72,95,114,126,129,131,139**;8 May 96;Build 7
  1. ;
  1. ; Reference to $$SINFO^ICDEX supported by ICR #5747
  1. ; Reference to $$ICDDX^ICDEX supported by ICR5747
  1. ;
  1. USRUNT(RESULTS,ECARY) ;
  1. ;This broker call returns an array of DSS units for a user & location
  1. ; RPC: EC GETUSRDSSUNIT
  1. ;INPUTS ECARY - Contains the following delimited elements
  1. ; 1. ECL - Location IEN (if define gives User's DSS
  1. ; units for a location)
  1. ; 2. ECDUZ - New Person IEN (if define gives list of
  1. ; DSS Units available to user)
  1. ; 3. ECSUMUSR - Indicates which report is requesting this
  1. ; list. (optional)
  1. ; 4. ECDUST - Indicates DSS unit status requested (A)ctive
  1. ; (I)nactive or (B)oth. (optional)
  1. ;
  1. ;OUTPUTS RESULTS - Array of DSS Units. Data pieces as follows:-
  1. ; PIECE - Description
  1. ; 1 IEN of file 724
  1. ; 2 Name of DSS Unit
  1. ; 3 Send to PCE Flag
  1. ; 4 Data Entry Date/Time Default
  1. N ECL,ECDUZ,CNT,STR,DPT,IEN,ECSUMUSR,ECDUST ;139
  1. D SETENV^ECUMRPC
  1. S ECL=$P(ECARY,U),ECDUZ=$P(ECARY,U,2) I ECL="",ECDUZ="" Q
  1. S ECSUMUSR=$P(ECARY,U,3),ECDUST=$P(ECARY,U,4) S:ECDUST="" ECDUST="B" ;139
  1. K ^TMP($J,"ECUSRUNT") S (DPT,CNT)=0
  1. I ECL'="",ECDUZ="" S ECDUZ=$G(DUZ,U) I ECDUZ="" Q
  1. I $G(ECSUMUSR)="ECSUM" D ECSUM S RESULTS=$NA(^TMP($J,"ECUSRUNT")) Q ;139 Add special branch for the ECSUM report
  1. I $D(^XUSEC("ECALLU",ECDUZ)) S DPT="" D
  1. .I ECL="" S ^TMP($J,"ECUSRUNT",CNT+1)="ALL^ALL" Q
  1. .I ECL="ALL" S ECL=""
  1. .F S DPT=$O(^ECD("B",DPT)) Q:DPT="" S IEN=0 D
  1. ..F S IEN=$O(^ECD("B",DPT,IEN)) Q:'IEN D UNTCHK
  1. E D
  1. .I ECL="ALL" S ECL=""
  1. .F S DPT=$O(^VA(200,ECDUZ,"EC",DPT)) Q:'DPT S IEN=DPT D UNTCHK
  1. S RESULTS=$NA(^TMP($J,"ECUSRUNT"))
  1. Q
  1. UNTCHK ;Check if DSS unit exist as event code screen and if active
  1. N DSSF,DFD
  1. ;I '$D(^ECJ("AP",ECL,IEN))!($P($G(^ECD(IEN,0)),U,6)) Q
  1. I ECL'="",'$D(^ECJ("AP",ECL,IEN)) Q
  1. I ($P($G(^ECD(IEN,0)),U,6))!('$P($G(^ECD(IEN,0)),U,8)) Q
  1. ;Check if event code screens associated with DSS unit are active
  1. I ECL'="",'$$ECSCHK(ECL,IEN) Q
  1. S DSSF=$P(^ECD(IEN,0),"^",14) S:DSSF="" DSSF="N"
  1. S DFD=$S($P(^ECD(IEN,0),"^",12)="N":"N",1:"X") ; added by VMP
  1. S CNT=CNT+1,STR=IEN_"^"_$P(^ECD(IEN,0),"^")_U_DSSF_"^"_DFD
  1. S ^TMP($J,"ECUSRUNT",CNT)=STR
  1. Q
  1. ECSCHK(ECL,ECIEN) ;Check if any event code screens associated with DSS unit are active; EC*129
  1. N ECAT,ECPRX,ECS,ECNODE,ECFLG
  1. S ECAT="",ECFLG=0
  1. F S ECAT=$O(^ECJ("AP",ECL,ECIEN,ECAT)) Q:ECAT="" D Q:ECFLG
  1. .S ECPRX="" F S ECPRX=$O(^ECJ("AP",ECL,ECIEN,ECAT,ECPRX)) Q:ECPRX="" D Q:ECFLG
  1. ..S ECS=0 F S ECS=$O(^ECJ("AP",ECL,ECIEN,ECAT,ECPRX,ECS)) Q:'ECS D Q:ECFLG
  1. ...S ECNODE=$G(^ECJ(ECS,0)) I $P(ECNODE,"^",2)="" S ECFLG=1
  1. Q ECFLG
  1. ;
  1. ECSUM ;139 Section added to allow for sorting DSS units by status
  1. N DSSIEN,DSSNAME,NODE,STAT,DSSF,DFO,STR
  1. S DSSNAME="" F S DSSNAME=$O(^ECD("B",DSSNAME)) Q:DSSNAME="" S DSSIEN=0 F S DSSIEN=$O(^ECD("B",DSSNAME,DSSIEN)) Q:'+DSSIEN D
  1. .S NODE=$G(^ECD(DSSIEN,0)) Q:NODE=""
  1. .I '$P(NODE,U,8) Q ;DSS Unit not for use in Event Capture
  1. .S STAT=$S($P(NODE,U,6):"I",1:"A") ;DSS Unit status
  1. .I ECDUST'="B",STAT'=ECDUST Q ;If not getting both active and inactive units, quit if unit status isn't what we're looking for
  1. .I ECL'="ALL",'$D(^ECJ("AP",ECL,DSSIEN)) Q ;For all locations, no need to check for event code screens. For single location, DSS unit must have at least one event code screen
  1. .S DSSF=$P(NODE,U,14) S:DSSF="" DSSF="N" ;Send to PCE setting
  1. .S DFD=$S($P(NODE,U,12)="N":"N",1:"X") ;Unit's default date/time setting
  1. .S CNT=CNT+1,STR=DSSIEN_U_$P(NODE,U)_U_DSSF_U_DFD
  1. .S ^TMP($J,"ECUSRUNT",CNT)=STR
  1. Q
  1. ;
  1. CAT(RESULTS,ECARY) ;
  1. ;This broker entry point returns an array of categories for an Event
  1. ;Code screen based on location and DSS unit.
  1. ; RPC: EC GETECSCATS
  1. ;INPUTS ECARY - Contains the following values separated by "^"
  1. ; ECL - Location IEN
  1. ; ECD - DSS Unit IEN
  1. ; ECCSTA-Active or inactive category
  1. ; A-ctive (default), I-nactive, B-oth
  1. ;
  1. ;OUTPUTS RESULTS - Array of categories. Data pieces as follows:-
  1. ; PIECE - Description
  1. ; 1 - Category IEN
  1. ; 2 - Category description
  1. ;
  1. N ECL,ECD,ECC,CNT,DATA,ECCSTA
  1. D SETENV^ECUMRPC
  1. S ECL=$P(ECARY,U),ECD=$P(ECARY,U,2) I (ECL="")!(ECD="") Q
  1. S ECCSTA=$P(ECARY,U,3)
  1. K ^TMP($J,"ECSCATS")
  1. D CATS^ECHECK1
  1. M ^TMP($J,"ECSCATS")=ECC
  1. S RESULTS=$NA(^TMP($J,"ECSCATS"))
  1. Q
  1. PROC(RESULTS,ECARY) ;
  1. ;This broker entry point returns an array of procedures for an Event
  1. ;Code screen (file #720.3) based on location, DSS unit, and Category
  1. ; RPC: EC GETECSPROCS
  1. ;INPUTS ECARY - Contains the following values separated by "^"
  1. ; ECL - Location IEN
  1. ; ECD - DSS Unit IEN
  1. ; ECC - Category IEN
  1. ; ECDT - Procedure Date
  1. ;
  1. ;OUTPUTS RESULTS - Array of procedures. Data pieces as follows:-
  1. ; PIECE - Description
  1. ; 1 - EC National Number SPACE Procedure Name SPACE
  1. ; - [Synonym]
  1. ; 2 - Procedure Code
  1. ; 3 - CPT Code
  1. ; 4 - Default volume (1 if no default volume)
  1. ; 5 - Event code screen IEN
  1. ;
  1. N ECL,ECD,ECC,CNT,DATA,STR,ECCPT,PX,NAME,NUM ;126
  1. D SETENV^ECUMRPC
  1. S ECL=$P(ECARY,U),ECD=$P(ECARY,U,2),ECC=$P(ECARY,U,3)
  1. I (ECL="")!(ECD="") Q
  1. S:$P($G(^ECD(ECD,0)),U,11)=0 ECC="" S:ECC="" ECC=0 ;131
  1. S ECDT=$P(ECARY,U,4)
  1. K ^TMP($J,"ECPRO")
  1. D PROS^ECHECK1
  1. S CNT=1,NAME="" F S NAME=$O(^TMP("ECPRO",$J,"N2",NAME)) Q:NAME="" S NUM=$O(^TMP("ECPRO",$J,"N2",NAME,0)) D ;126
  1. .S DATA=^TMP("ECPRO",$J,NUM),PX=$P(DATA,U) ;126
  1. .S ECCPT=$S(PX["EC":$P($G(^EC(725,+PX,0)),"^",5),1:+PX)
  1. .S STR=$P(DATA,U,5)_" "_$P(DATA,U,4)_" ["_$P(DATA,U,3)_"]"_U_PX
  1. .S STR=STR_U_ECCPT_U_$S($P(DATA,U,6):+$P(DATA,U,6),1:1)_U_$P(DATA,U,2)
  1. .S ^TMP($J,"ECPRO",CNT)=STR,CNT=CNT+1 ;126
  1. S RESULTS=$NA(^TMP($J,"ECPRO"))
  1. K ^TMP("ECPRO",$J)
  1. Q
  1. ECPXMOD(RESULTS,ECARY) ;
  1. ;Broker call returns modifier entries for a CPT Procedure
  1. ; RPC: EC GETPXMODIFIER
  1. ;INPUTS ECARY - Contains the following values separated by "^"
  1. ; ECCPT - CPT code ien (file #81)
  1. ; ECDT - Procedure date and time (fileman format)
  1. ;
  1. ;OUTPUTS RESULTS - Array of procedure modifiers
  1. ; 2-character modifier^modifer name^modifier ien #81.3
  1. ;
  1. N CNT,SUB,ECCPT,ECDT,DATA,ECMOD
  1. D SETENV^ECUMRPC
  1. S ECCPT=$P(ECARY,U),ECDT=$P(ECARY,U,2) I ECDT="" D NOW^%DTC S ECDT=%
  1. I ECCPT="" Q
  1. K ^TMP($J,"ECPXMODS") S (SUB,CNT)=0
  1. S DATA=$$CODM^ICPTCOD(ECCPT,"ECMOD","",ECDT) I +DATA<0 Q
  1. F S SUB=$O(ECMOD(SUB)) Q:SUB="" I $P(ECMOD(SUB),U,2)'="" D
  1. . I +$$MODP^ICPTMOD(ECCPT,$P(ECMOD(SUB),U,2),"I",ECDT)>0 D
  1. . . S CNT=CNT+1,^TMP($J,"ECPXMODS",CNT)=SUB_U_ECMOD(SUB)
  1. S RESULTS=$NA(^TMP($J,"ECPXMODS"))
  1. Q
  1. PRVDER(RESULTS,ECARY) ;
  1. ;remove this rpc before release;JAM 6/4/01
  1. ;This broker entry point returns an array of valid providers
  1. ; RPC: EC GETPROVIDER
  1. ;INPUTS ECARY - Contains the following subscripted elements
  1. ; ECDT - Procedure date
  1. ;
  1. ;OUTPUTS RESULTS - Array of providers. Data pieces as follows:-
  1. ; PIECE - Description
  1. ; IEN of file 200^Provider Name^occupation^specialty^
  1. ; subspecialty
  1. ;
  1. N IEN,CNT,ECUTN,KEY,USR
  1. D SETENV^ECUMRPC
  1. S ECDT=$P($G(ECARY),U),ECDT=$S(ECDT="":DT,1:ECDT)
  1. K ^TMP($J,"ECPRVDRS") S CNT=0
  1. F KEY="PROVIDER" S IEN=0 D
  1. .F S IEN=$O(^XUSEC(KEY,IEN)) Q:'IEN S USR=$G(^VA(200,IEN,0)) D:USR'=""
  1. ..S ECUTN=$$GET^XUA4A72(IEN,ECDT) I +ECUTN'>0 Q
  1. ..S CNT=CNT+1,^TMP($J,"ECPRVDRS",CNT)=IEN_U_$P(USR,U)_U_$P(ECUTN,2,4)
  1. S RESULTS=$NA(^TMP($J,"ECPRVDRS"))
  1. Q
  1. ;
  1. ELIG(RESULTS,ECARY) ;
  1. ;
  1. ;Broker call returns a list of patient eligibilities
  1. ; RPC: EC GETPATELIG
  1. ;INPUTS ECARY - Contains the following subscripted elements
  1. ; DFN - Patient ien (file #2)
  1. ;
  1. ;OUTPUTS RESULTS - Array of eligibilities
  1. ; primary/secondary elig flag^elig ien^elig description
  1. ;
  1. N CNT,SUB,DFN,VAEL
  1. D SETENV^ECUMRPC
  1. S DFN=$P(ECARY,U) I DFN="" Q
  1. K ^TMP($J,"ECPATELIG")
  1. D ELIG^VADPT I $G(VAEL(1))="" Q
  1. S ^TMP($J,"ECPATELIG",1)="1^"_VAEL(1),SUB=0,CNT=1
  1. F S SUB=$O(VAEL(1,SUB)) Q:SUB="" D
  1. . S CNT=CNT+1,^TMP($J,"ECPATELIG",CNT)="0^"_VAEL(1,SUB)
  1. S RESULTS=$NA(^TMP($J,"ECPATELIG"))
  1. Q
  1. PRDEFS(RESULTS,ECARY) ;
  1. ;This broker entry point returns the defaults for procedure data entry
  1. ; RPC: EC GETPRODEFS
  1. ;INPUTS ECARY - Contains the following values separated by "^"
  1. ; ECL - Location IEN
  1. ; ECD - DSS Unit IEN
  1. ; ECC - Category IEN
  1. ;
  1. ;OUTPUTS RESULTS - Data pieces as follows:-
  1. ; PIECE - Description
  1. ; 1 - Associated Clinic IEN
  1. ; 2 - Associated Clinic
  1. ; 3 - Medical Specialty IEN
  1. ; 4 - Medical Specialty
  1. ;
  1. N ECL,ECD,ECC,ECP,IEN,ASC,ASCNM,MEDSP,MEDSPNM,ECCH
  1. D SETENV^ECUMRPC
  1. S ECL=$P(ECARY,U),ECD=$P(ECARY,U,2),ECC=$P(ECARY,U,3),ECP=$P(ECARY,U,4)
  1. S:ECC="" ECC=0 I (ECL="")!(ECD="") Q
  1. S (ASCNM,MEDSPNM)="",ECCH=ECL_"-"_ECD_"-"_ECC_"-"_ECP
  1. I '$D(^ECJ("B",ECCH)) Q
  1. S IEN=$O(^ECJ("B",ECCH,0)) I IEN="" Q
  1. S ASC=$P($G(^ECJ(IEN,"PRO")),U,4) I ASC D
  1. .S ASCNM=$$GET1^DIQ(44,ASC,.01,"I")
  1. S MEDSP=$P($G(^ECD(ECD,0)),U,3) I MEDSP D
  1. .S MEDSPNM=$$GET1^DIQ(723,MEDSP,.01,"I")
  1. S RESULTS=ASC_U_ASCNM_U_MEDSP_U_MEDSPNM
  1. Q
  1. PATPROC(RESULTS,ECARY) ;
  1. ;
  1. ;Broker call returns the entries from EVENT CAPTURE PATIENT FILE #721
  1. ;
  1. ;RPC: EC GETPATPROCS
  1. ;
  1. ;INPUTS ECARY - Contains the following values separated by "^"
  1. ; ECLOC - Location ien
  1. ; ECPAT - Patient DFN ien
  1. ; ECUNT - DSS unit ien
  1. ; ECSD - Start Date
  1. ; ECED - End Date
  1. ;
  1. ;OUTPUTS RESULTS - Array of Event Capture Patient entries contain
  1. ; 721 IEN^Procedure date/time^Category^Procedure^Volume^
  1. ; Provider^ordering section^associated clinic^
  1. ; (ICD Coding system) primary dx code primary dx code description
  1. ; ^Provider IEN
  1. ;
  1. N IEN,CNT,ECCS,ECV,ECLOC,ECUNT,ECPAT,PX,NODE,DATA,PDT,PDX,PND,PDXD,CAT,ECI
  1. N ORS,PRV,PRO,PROV,ECU
  1. D SETENV^ECUMRPC ;set environment variables for RPC broker
  1. S ECV="ECLOC^ECPAT^ECUNT^ECSD^ECED"
  1. D PARSE(ECV,ECARY) I (ECLOC="")!(ECPAT="")!(ECUNT="") Q
  1. K ^TMP($J,"ECPATPX")
  1. S ECSD=$G(ECSD,DT),ECED=$G(ECED,DT)
  1. S %DT="X" F ECI="ECSD","ECED" S X=@ECI D ^%DT S @ECI=Y
  1. K X,Y
  1. S ECSD=$S(ECSD=-1:DT,1:ECSD)-.0001,ECED=$S(ECED=-1:DT,1:ECED)+.9999
  1. Q:ECED'>ECSD S PDT=ECSD,CNT=0
  1. F S PDT=$O(^ECH("ADT",ECLOC,ECPAT,ECUNT,PDT)) Q:'PDT!(PDT>ECED) D
  1. . S IEN=0 F S IEN=$O(^ECH("ADT",ECLOC,ECPAT,ECUNT,PDT,IEN)) Q:'IEN D
  1. . . S NODE=$G(^ECH(IEN,0)),PND=$G(^ECH(IEN,"P")),PX=$P(NODE,U,9)
  1. . . Q:NODE="" S (PRV,CAT,ORS,ASC,PDXD)="",PDX=$P(PND,U,2)
  1. . . I PX["EC" D
  1. . . . S PRO=$G(^EC(725,$P(PX,";"),0)),PX=$P(PRO,U,2)_" "_$P(PRO,U)
  1. . . E S PRO=$$CPT^ICPTCOD($P(PX,";"),PDT) S PX=$P(PRO,U,2)_" "_$P(PRO,U,3)
  1. . . S:$P(NODE,U,8) CAT=$$GET1^DIQ(726,$P(NODE,U,8),.01,"I")
  1. . . K PROV S ECU=$$GETPPRV^ECPRVMUT(IEN,.PROV),PRV=$S(ECU:"UNKNOWN",1:$P(PROV,"^",2)),ECU=$S('ECU:+PROV,1:"")
  1. . . S:$P(NODE,U,12) ORS=$$GET1^DIQ(723,$P(NODE,U,12),.01,"I")
  1. . . S:$P(NODE,U,19) ASC=$$GET1^DIQ(44,$P(NODE,U,19),.01,"I")
  1. . . I PDX D
  1. . . . ; ICD10 Changes
  1. . . . S ECCS=$$SINFO^ICDEX("DIAG",PDT) ; Supported by ICR 5747
  1. . . . S PDXD=$$ICDDX^ICDEX(PDX,PDT,+ECCS,"I") ; Supported by ICR 5747
  1. . . . S ECCS=$P(ECCS,U,2),ECCS=" ("_$P(ECCS,"-",1)_$P(ECCS,"-",2)_")"
  1. . . . S PDXD=$P(PDXD,U,2)_" "_$P(PDXD,U,4)_ECCS
  1. . . S DATA=$P(NODE,U)_U_$$FMTE^XLFDT($P(NODE,U,3),"2F")_U_CAT_U_PX
  1. . . S DATA=DATA_U_$P(NODE,U,10)_U_PRV_U_ORS_U_ASC_U_PDXD_U_ECU
  1. . . S CNT=CNT+1,^TMP($J,"ECPATPX",CNT)=DATA
  1. S RESULTS=$NA(^TMP($J,"ECPATPX"))
  1. Q
  1. PARSE(ECV,ECARY) ;Parse Variable
  1. N I
  1. F I=1:1:$L(ECARY,U) S @$P(ECV,U,I)=$P(ECARY,U,I)
  1. Q