2009-12-04 00:11:15 -05:00
|
|
|
ECXUTL5 ;ALB/JRC - Utilities for DSS Extracts ; 01/18/07 9:04am
|
|
|
|
;;3.0;DSS EXTRACTS;**71,84,92,103**;Dec 22, 1997;Build 1
|
|
|
|
;
|
|
|
|
REPEAT(CHAR,TIMES) ;REPEAT A STRING
|
|
|
|
;INPUT : CHAR - Character to repeat
|
|
|
|
; TIMES - Number of times to repeat CHAR
|
|
|
|
;OUTPUT : s - String of CHAR that is TIMES long
|
|
|
|
; "" - Error (bad input)
|
|
|
|
;
|
|
|
|
;CHECK INPUT
|
|
|
|
Q:($G(CHAR)="") ""
|
|
|
|
Q:((+$G(TIMES))=0) ""
|
|
|
|
;RETURN STRING
|
|
|
|
Q $TR($J("",TIMES)," ",CHAR)
|
|
|
|
INSERT(INSTR,OUTSTR,COLUMN,LENGTH) ;INSERT A STRING INTO ANOTHER
|
|
|
|
;INPUT : INSTR - String to insert
|
|
|
|
; OUTSTR - String to insert into
|
|
|
|
; COLUMN - Where to begin insertion (defaults to end of OUTSTR)
|
|
|
|
; LENGTH - Number of characters to clear from OUTSTR
|
|
|
|
; (defaults to length of INSTR)
|
|
|
|
;OUTPUT : s - INSTR will be placed into OUTSTR starting at COLUMN
|
|
|
|
; using LENGTH characters
|
|
|
|
; "" - Error (bad input)
|
|
|
|
;
|
|
|
|
;NOTE : This module is based on $$SETSTR^VALM1
|
|
|
|
;
|
|
|
|
;CHECK INPUT
|
|
|
|
Q:('$D(INSTR)) ""
|
|
|
|
Q:('$D(OUTSTR)) ""
|
|
|
|
S:('$D(COLUMN)) COLUMN=$L(OUTSTR)+1
|
|
|
|
S:('$D(LENGTH)) LENGTH=$L(INSTR)
|
|
|
|
;DECLARE VARIABLES
|
|
|
|
N FRONT,END
|
|
|
|
S FRONT=$E((OUTSTR_$J("",COLUMN-1)),1,(COLUMN-1))
|
|
|
|
S END=$E(OUTSTR,(COLUMN+LENGTH),$L(OUTSTR))
|
|
|
|
;INSERT STRING
|
|
|
|
Q FRONT_$E((INSTR_$J("",LENGTH)),1,LENGTH)_END
|
|
|
|
TYPE(DFN) ;Determine patient type DBIA #2511
|
|
|
|
; input
|
|
|
|
; DFN = patient ien
|
|
|
|
;
|
|
|
|
; output
|
|
|
|
; ECXPTYPE = patient type external value from fle 391
|
|
|
|
;
|
|
|
|
; AC = ACTIVE DUTY MI = MILITARY RETIREE
|
|
|
|
; AL = ALLIED VETERAN NO = NON-VETERAN (OTHER)
|
|
|
|
; CO = COLLATERAL NS = NSC VETERAN
|
|
|
|
; EM = EMPLOYEE SC = SC VETERAN
|
|
|
|
; IN = INELIGIBLE TR = TRICARE
|
|
|
|
; return value 0 if no data found, 1 if data found
|
|
|
|
;
|
|
|
|
N TYPE,ECXPTYPE
|
|
|
|
;Check input
|
|
|
|
Q:'$D(DFN) ""
|
|
|
|
S (TYPE,ECXPTYPE)=""
|
|
|
|
S TYPE=$G(^DPT(DFN,"TYPE"))
|
|
|
|
I 'TYPE Q ECXPTYPE
|
|
|
|
S ECXPTYPE=$P($G(^DG(391,TYPE,0)),U,1)
|
|
|
|
S ECXPTYPE=$E(ECXPTYPE,1,2)
|
|
|
|
Q ECXPTYPE
|
|
|
|
CVEDT(DFN,DATE) ;Determine patient CV status DBIA #4156
|
|
|
|
; input
|
|
|
|
; DFN = patient ien
|
|
|
|
;
|
|
|
|
; output
|
|
|
|
; ECXCVE = combat veteran status eligibility
|
|
|
|
; ECXCVEDT = combat veteran eligibility end date
|
|
|
|
; ECXCVENC = combat veteran encounter
|
|
|
|
;Initialize variables
|
|
|
|
N CVSTAT
|
|
|
|
S (CVSTAT,ECXCVE,ECXCVEDT,ECXCVENC)=""
|
|
|
|
;Check input
|
|
|
|
Q:'$D(DFN) 0
|
|
|
|
;Call CV API
|
|
|
|
S CVSTAT=$$CVEDT^DGCV(DFN,DATE)
|
|
|
|
I CVSTAT<1 Q 0
|
|
|
|
;Veteran been given CV eligibility
|
|
|
|
S ECXCVE=$S($P(CVSTAT,U,3)=1:"Y",$P(CVSTAT,U,3)=0:"E",1:"")
|
|
|
|
;Save CV eligibility end date and convert from FM to HL7 format
|
|
|
|
S ECXCVEDT=$P(CVSTAT,U,2)
|
|
|
|
S ECXCVEDT=$$FMTHL7^XLFDT(ECXCVEDT)
|
|
|
|
;Is the veteran eligible for CV in the date of encounter
|
|
|
|
S ECXCVENC=$S($P(CVSTAT,U,3)=1:"Y",1:"")
|
|
|
|
Q 1
|
|
|
|
NPRF ;National patient record flags DBIA #3860
|
|
|
|
N ECXARR,FLG
|
|
|
|
S ECXNPRFI="",CNT=$$GETACT^DGPFAPI(ECXDFN,"ECXARR"),FLG=""
|
|
|
|
I 'CNT Q
|
|
|
|
F I=1:1:CNT D Q:FLG
|
|
|
|
.I ECXARR(I,"CATEGORY")["NATIONAL" S ECXNPRFI="Y",FLG=1
|
|
|
|
Q
|
|
|
|
RXPTST(K) ;Rx patient status DBIA #2511
|
|
|
|
N ECXDIC,STAT
|
|
|
|
S (ECXDIC,STAT)=""
|
|
|
|
;Check input
|
|
|
|
Q:'$D(K) STAT
|
|
|
|
S DA=K,DIC="^PS(53,",DIQ(0)="I",DIQ="ECXDIC",DR="6"
|
|
|
|
D EN^DIQ1
|
|
|
|
S STAT=$G(ECXDIC(53,K,6,"I"))
|
|
|
|
S STAT=$S(STAT=1:"SC",STAT=2:"AA",STAT=3:"OTH",STAT=4:"INP",STAT=5:"NON",1:"")
|
|
|
|
Q STAT
|
|
|
|
NONVAP(K) ;Non-va prescriber DBIA #10060
|
|
|
|
N ECXDIC,NONVAP
|
|
|
|
S (ECXDIC,NONVAP)=""
|
|
|
|
Q:'$D(K) NONVAP
|
|
|
|
S DA=K,DIC="^VA(200,",DIQ(0)="I",DIQ="ECXDIC",DR="53.91"
|
|
|
|
D EN^DIQ1
|
|
|
|
S NONVAP=$G(ECXDIC(200,K,53.91,"I"))
|
|
|
|
I NONVAP S NONVAP="Y"
|
|
|
|
Q NONVAP
|
|
|
|
DOIVPO(K,L) ;Add destination for outpatient ivp orders
|
|
|
|
; Input K - DFN
|
|
|
|
; L - Order # from Pharmacy Patient File (#55)
|
|
|
|
;
|
|
|
|
; Output ordering stop code
|
|
|
|
;
|
|
|
|
N ECXDIC,ECXDICA,ECXDICB,DOIVPO,CLINIC,SCODE,DIC,DIQ,DR,DA
|
|
|
|
S (ECXDIC,ECXDICA,ECXDICB,DOIVPO,CLINIC,SCODE)=""
|
|
|
|
;Check input
|
|
|
|
Q:'K!'(L) SCODE
|
|
|
|
;Check treating specialty
|
|
|
|
S SCODE=$$TSSC($G(ECXTS)) I SCODE>0 Q SCODE
|
|
|
|
;Go to pharmacy patient file (#55) and return value of field (#136)
|
|
|
|
S DIC=55,DIQ(0)="I",DIQ="ECXDIC",DR="100",DR(55.01)="136",DA=K,DA(55.01)=L
|
|
|
|
D EN^DIQ1
|
|
|
|
S CLINIC=$G(ECXDIC(55.01,L,136,"I"))
|
|
|
|
I 'CLINIC Q SCODE
|
|
|
|
;Get stop code pointer to file 40.7 from file 44
|
|
|
|
S DIC="^SC(",DIQ(0)="I",DIQ="ECXDICA",DR="8",DA=CLINIC D EN^DIQ1
|
|
|
|
S SCODE=ECXDICA(44,CLINIC,8,"I")
|
|
|
|
;Get stop code external value
|
|
|
|
S DIC="^DIC(40.7,",DIQ(0)="E",DIQ="ECXDICB",DR="1",DA=SCODE D EN^DIQ1
|
|
|
|
S SCODE=$G(ECXDICB(40.7,SCODE,1,"E"))
|
|
|
|
Q SCODE
|
|
|
|
;
|
|
|
|
DOUDO(K,L) ;Add destination for outpatient udp orders
|
|
|
|
; Input K - DFN
|
|
|
|
; L - Order # from Pharmacy Patient File (#55)
|
|
|
|
;
|
|
|
|
; Output ordering stop code
|
|
|
|
;
|
|
|
|
N ECXDIC,ECXDICA,ECXDICB,DOIVPO,CLINIC,SCODE,DIC,DIQ,DR,DA
|
|
|
|
S (ECXDIC,ECXDICA,ECXDICB,DOIVPO,CLINIC,SCODE)=""
|
|
|
|
;Check treating specialty
|
|
|
|
S SCODE=$$TSSC($G(ECXTS)) I SCODE>0 Q SCODE
|
|
|
|
;Check input
|
|
|
|
Q:'K!'(L) SCODE
|
|
|
|
S DIC=55,DIQ(0)="I",DIQ="ECXDIC",DR="62",DR(55.06)="130",DA=K,DA(55.06)=L
|
|
|
|
D EN^DIQ1
|
|
|
|
S CLINIC=$G(ECXDIC(55.06,L,130,"I"))
|
|
|
|
I 'CLINIC Q SCODE
|
|
|
|
;Get stop code pointer to file 40.7 from file 44
|
|
|
|
S DIC="^SC(",DIQ(0)="I",DIQ="ECXDICA",DR="8",DA=CLINIC D EN^DIQ1
|
|
|
|
S SCODE=ECXDICA(44,CLINIC,8,"I")
|
|
|
|
;Get stop code external value
|
|
|
|
S DIC="^DIC(40.7,",DIQ(0)="E",DIQ="ECXDICB",DR="1",DA=SCODE D EN^DIQ1
|
|
|
|
S SCODE=$G(ECXDICB(40.7,SCODE,1,"E"))
|
|
|
|
Q SCODE
|
|
|
|
;
|
|
|
|
PHAAPI(DRUG) ;Call Pharmacy drug file API dbia 4483
|
|
|
|
; Input: drug file (#50) ien
|
|
|
|
;
|
|
|
|
; Output: generic name ^ classification ^ ndc ^ dea hand
|
|
|
|
; ^ ndf file entry # ^ psndf va product entry ^
|
|
|
|
; price per disp unit ^ dispense unit
|
|
|
|
;
|
|
|
|
;Initialize variables and scratch global
|
|
|
|
N NAME,CLASS,NDC,INV,NDF,P1,P3,PPDU,UNIT,ARRAY,DATA
|
|
|
|
S (NAME,CLASS,NDC,INV,NDF,P1,P3,PPDU,ARRAY,DATA)=""
|
|
|
|
S ARRAY="^TMP($J,""ECXLIST"")"
|
|
|
|
K @ARRAY
|
|
|
|
D DATA^PSS50(DRUG,,,,,"ECXLIST")
|
|
|
|
I @ARRAY@(0)'>0 Q "^^^^^^"
|
|
|
|
S NAME=@ARRAY@(DRUG,.01),CLASS=@ARRAY@(DRUG,2),NDC=@ARRAY@(DRUG,31)
|
|
|
|
S INV=@ARRAY@(DRUG,3),P1=$P(@ARRAY@(DRUG,20),U),P3=$P(@ARRAY@(DRUG,22),U),PPDU=@ARRAY@(DRUG,16),UNIT=@ARRAY@(DRUG,14.5)
|
|
|
|
K @ARRAY
|
|
|
|
Q NAME_U_CLASS_U_NDC_U_INV_U_P1_U_P3_U_PPDU_U_UNIT
|
|
|
|
;
|
|
|
|
TSSC(X) ;Check treating specialty (ts) and if ts equals any of the following
|
|
|
|
;18,23,24,36,41,65,94 then assign predefined code and return value
|
|
|
|
;
|
|
|
|
; Input: treating specialty
|
|
|
|
; Output: Ordering stop code
|
|
|
|
;
|
|
|
|
S CODE=$S(X=18:293,X=23:295,X=24:290,X=36:294,X=41:296,X=65:291,X=94:292,1:"")
|
|
|
|
Q CODE
|
|
|
|
;
|
|
|
|
PSJ59P5(X) ;Get iv room division
|
|
|
|
; Input X - iv room ien
|
|
|
|
;
|
|
|
|
; Output - field .02 division
|
|
|
|
;Init variables
|
|
|
|
N DIV S DIV=""
|
|
|
|
;Check input
|
|
|
|
I 'X Q DIV
|
|
|
|
D ALL^PSJ59P5(X,,"ECXDIV")
|
|
|
|
S DIV=$P($G(^TMP($J,"ECXDIV",X,.02)),U)
|
|
|
|
K ^TMP($J,"ECXDIV")
|
|
|
|
Q DIV
|
|
|
|
;
|
|
|
|
SCRX(IEN) ;Service connected prescription
|
|
|
|
;Init variables
|
|
|
|
N DIC,DR,DA,ECXDIQ
|
|
|
|
;Check input
|
|
|
|
I '$G(IEN) Q ""
|
|
|
|
S DIC=52,DR="116",DA=IEN,DIQ="ECXDIQ"
|
|
|
|
D DIQ^PSODI(DIC,DIC,DR,DA,DIQ)
|
|
|
|
Q $S($G(ECXDIQ(52,DA,116))="YES":"Y",$G(ECXDIQ(52,DA,116))="NO":"N",1:"")
|