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

BEHOENPC.m

Go to the documentation of this file.
  1. BEHOENPC ;MSC/IND/DKM - PCC Data Management ;19-Feb-2015 10:05;PLS
  1. ;;1.1;BEH COMPONENTS;**005003,005004,005005,005006,005007,005008,005009,005010,005011,005012**;Sep 18, 2007
  1. ;=================================================================
  1. ; RPC: Update PCC data
  1. ; DATA = Returned as 0 if successful
  1. ; PCC = Array of PCC data to process
  1. ; X,Y = Not used (but required)
  1. SAVE(DATA,PCC,X,Y) ;EP
  1. N IDX,TYP,CODE,VIEN,VCAT,VLOC,VDAT,VOLOC,ADD,DEL,VAL,DFN,PRV,FLD,DAT,COM,VMSR,PRIEN,RET
  1. S IDX=0,DATA=0,PRV=0,X=$G(X)
  1. F S IDX=$O(PCC(IDX)) Q:'IDX!DATA D
  1. .S VAL=PCC(IDX),TYP=$P(VAL,U),CODE=$P(VAL,U,2),ADD=TYP["+",DEL=TYP["-",TYP=$TR(TYP,"+-")
  1. .D LOOK("COM",.COM)
  1. .I TYP?1.3AN,$T(@TYP)'="" D @TYP
  1. Q
  1. ; Look ahead for modifiers
  1. ; TYP = modifier type
  1. ; ARY = array to receive data
  1. LOOK(TYP,ARY) ;
  1. K ARY
  1. N IDX2,CNT
  1. S IDX2=IDX
  1. F CNT=0:1 S IDX2=$O(PCC(IDX2)) Q:'IDX2 Q:$P(PCC(IDX2),U)'=TYP D
  1. .I CNT S ARY(CNT)=PCC(IDX2)
  1. .E S ARY=PCC(IDX2)
  1. .S IDX=IDX2
  1. Q
  1. SET(FLN,PC,CV) ;
  1. S PC=$P(VAL,U,PC),FLD(FLN)=$S($D(CV):$$SET^CIAU(PC,CV),$L(PC):PC,1:"@")
  1. Q
  1. ; Find an existing V file entry
  1. ; CRT = Scalar or array of additional criteria in (field|format|value) format
  1. FIND(FN,CODE,VIEN,CRT) ;
  1. N GBL,IEN,PC
  1. S GBL=$$ROOT^DILFD(FN,,1),IEN=0,PC=$S(FN=120.5:3,1:1)
  1. S:$L($G(CRT)) CRT(-1)=CRT
  1. F S IEN=+$O(@GBL@("AD",VIEN,IEN)) Q:'IEN Q:$P($G(@GBL@(IEN,0)),U,PC)=CODE&$$EVAL(.CRT)
  1. Q IEN
  1. ; Evaluate list of additional fields and values
  1. EVAL(ARY) ;
  1. N LP,RES,ITM,TYP,FLD
  1. S RES=1,LP=""
  1. F S LP=$O(CRT(LP)) Q:LP="" D Q:'RES
  1. .S ITM=CRT(LP),FLD=$P(ITM,"|"),TYP=$P(ITM,"|",2),TYP=$S($L(TYP):TYP,1:"E"),ITM=$P(ITM,"|",3,99)
  1. .I FLD=.001 S RES=IEN=ITM
  1. .E S RES=$$GET1^DIQ(FN,IEN,FLD,TYP)=ITM
  1. Q RES
  1. ; Store the data in the specified V file
  1. ; FN = Fractional portion of V file file #
  1. ; CF = Field # of comment field (0=none; defaults to 81101)
  1. ; CRT = Additional lookup criteria
  1. ; NEW = Returned as true if entry is new
  1. STORE(FN,CF,CRT,NEW) ;
  1. N BEHFLD,BEHERR,BEHIEN,IEN,DELX,BPRV
  1. S NEW=0
  1. S:'$G(VIEN) VIEN=$$FNDVIS^BEHOENCX(DFN,VDAT,VCAT,VLOC,1,,.VOLOC)
  1. I VIEN'>0 S:'DEL DATA=VIEN,VIEN="" G STXIT
  1. G:'$G(FN) STXIT
  1. I $$ISLOCKED^BEHOENCX(VIEN) S DATA="-1^The data associated with this visit may no longer be modified." Q
  1. S:FN<1 FN=9000010+FN
  1. S:'$D(CF) CF=81101
  1. I ADD S IEN="+1",NEW=1
  1. E S IEN=$$FIND(FN,CODE,VIEN,.CRT) I 'IEN G:DEL STXIT S IEN="+1",NEW=1
  1. S:'$D(FLD(.01)) FLD(.01)=$S(DEL:"@",1:CODE)
  1. S:DEL DELX=$$ROOT^DILFD(FN,,1),DELX=$S($L(DELX):$G(@DELX@(IEN,0)),1:"")
  1. S FLD(.02)=DFN
  1. I FN=120.5 D
  1. .S FLD(9000010)=VIEN
  1. E D
  1. .S FLD(.03)=VIEN
  1. .S:CF&$D(COM) FLD(CF)=$P(COM,U,3,999)
  1. .I '$D(FLD(1204)),VCAT'="E" S FLD(1204)=DUZ
  1. .S:'$D(FLD(1201))&$G(DAT) FLD(1201)=DAT
  1. .I NEW=1 S FLD(1216)=$$NOW^XLFDT,FLD(1217)=DUZ
  1. .S FLD(1218)=$$NOW^XLFDT,FLD(1219)=DUZ
  1. ;Modified 7/6/2012 for ehr 11
  1. I TYP="PRV"&($G(FLD(.04))="P") D
  1. .S BPRV="" F S BPRV=$O(^AUPNVPRV("AD",VIEN,BPRV)) Q:BPRV="" D
  1. ..Q:FLD(.01)=$P($G(^AUPNVPRV(BPRV,0)),U,1)
  1. ..I $P($G(^AUPNVPRV(BPRV,0)),U,4)="P" D
  1. ...N FLD S FLD(.04)="S"
  1. ...M BEHFLD(FN,BPRV_",")=FLD
  1. M BEHFLD(FN,IEN_",")=FLD
  1. K FLD
  1. D UPDATE^DIE("","BEHFLD","BEHIEN","BEHERR")
  1. S:$G(DIERR) DATA=-BEHERR("DIERR",1)_U_BEHERR("DIERR",1,"TEXT",1)
  1. S:$G(BEHIEN(1)) IEN=$G(BEHIEN(1))
  1. D VFEVT(FN,IEN,$S(DEL:2,1:'NEW),.DELX)
  1. STXIT Q:$Q $G(IEN)
  1. Q
  1. ; Fire V file update events
  1. ; FNUM = V File #
  1. ; VFIEN = V File IEN
  1. ; OPR = Operation (0 = add, 1 = edit, 2 = delete)
  1. VFEVT(FNUM,VFIEN,OPR,X) ;EP
  1. N ID,GBL,DFN,VIEN,DATA
  1. S GBL=$$ROOT^DILFD(FNUM,,1)
  1. Q:'$L(GBL)
  1. S ID=$P(GBL,"AUPNV",2)
  1. S:'$D(X) X=$G(@GBL@(VFIEN,0))
  1. S DFN=$P(X,U,2),VIEN=$P(X,U,3),DATA=VFIEN_U_$G(CIA("UID"))_U_OPR_U_$P(X,U)_U_VIEN
  1. I ID="AST" D
  1. .D:VIEN BRDCAST^CIANBEVT("VISIT."_VIEN_".POV",DATA)
  1. D:DFN BRDCAST^CIANBEVT("PCC."_DFN_"."_ID,DATA)
  1. D:VIEN BRDCAST^CIANBEVT("VISIT."_VIEN_"."_ID,DATA)
  1. D:VIEN VFMOD(VIEN)
  1. Q
  1. ; Update the visit modification date
  1. VFMOD(AUPNVSIT) ;
  1. N DIE,DA,DR,DIU,DIV
  1. D:DUZ("AG")="I" MOD^AUPNVSIT
  1. Q
  1. HDR ;; Visit string
  1. N X
  1. S X=$P(VAL,U,4),VLOC=+X,VDAT=$P(X,";",2),VCAT=$P(X,";",3),VIEN=$P(X,";",4)
  1. S:'(VDAT\1#100) VDAT=VDAT+1
  1. S:'(VDAT\100#100) VDAT=VDAT+100
  1. Q
  1. VST ;; Patient and encounter date
  1. N X
  1. S X=$P(VAL,U,3)
  1. I CODE="PT" S DFN=+X
  1. E I CODE="DT" S DAT=+X
  1. E I CODE="VC" S VCAT=X
  1. E I CODE="OL" S VOLOC=$S(X:X,1:$P(VAL,U,4))
  1. Q
  1. PRV ;; Provider
  1. ; PRV[1]^ien[2]^^^name[5]^primary/secondary flag[6]
  1. N BPRV
  1. S PRV=+CODE,ADD=0
  1. D:PRV>0 SET(.04,6,"1:P;0:S;:@"),STORE(.06)
  1. Q
  1. POV ;; Purpose of visit
  1. ;POV[1]^code[2]^^narrative[4]^^P/S[6]^^Add to problem list[8] ^ SNOMED CONC CT [9] ^ Provider text [10]
  1. N NAR,VAL1,SNO,DESC,X,PROB,CODE,TXT,FIVE
  1. ;IHS/MSC/MGH updated to use correct lookup
  1. ;S CODE=$$FIND1^DIC(80,,"X",CODE_" ","BA")
  1. ;MGH fix for adding SNOMED codes to POV
  1. S SNO=$P(VAL,U,9)
  1. S CODE=$P(VAL,U,2)
  1. ;IHS/MSC/MGH EHR patch 14 Change to using AUPN call to select current
  1. S X=$$CONC^AUPNSICD(SNO_"^^^1")
  1. ;S X=$$CONC^BSTSAPI(SNO_"^^^1")
  1. S DESC=$P(X,U,3)
  1. S FIVE=$P(X,U,5)
  1. ;IHS/MSC/MGH changed to accomodate special cases
  1. I +X S CODE=$P(FIVE,";",1)
  1. S $P(VAL,U,2)=CODE
  1. S $P(VAL,U,11)=DESC
  1. S TXT=$P(VAL,U,10)
  1. ;S CODE=$P(CODE,":",1)
  1. I $$AICD S CODE=$P($$CODEN^ICDEX(CODE,80),"~",1)
  1. E S CODE=+$$CODEN^ICDCODE(CODE,80)
  1. Q:CODE'>0
  1. ;S NAR=$$NARR($P(VAL,U,4))
  1. S $P(VAL,U,4)=$$NARR(TXT_"|"_DESC)
  1. S NAR=$P(VAL,U,4)
  1. S VAL1=$P(VAL,U,2)
  1. ;IHS/MSC/MGH add problem to problem list if its not already there
  1. S PROB=$$PROBLST^BEHOENP2(SNO,FIVE)
  1. S $P(VAL,U,12)=PROB
  1. D SET(.04,4),SET(.12,6,"1:P;0:S;:@"),SET(.08,7),SET(1101,9),SET(1102,11),SET(.16,12),STORE(.07)
  1. ;Add any additional ICD codes as POVs
  1. D ADDICD^BEHOENP2(.RET,.VAL,FIVE,PROB)
  1. Q
  1. CPT ;; CPT codes
  1. ;IHS/MSC/MGH fix for patch 9
  1. S CODE=$P(CODE,":",1)
  1. ;IHS/MSC/MGH HOTFIX make sure we have the IEN and not just the code
  1. S CODE=$$CODEN^ICPTCOD(CODE)
  1. S CODE=+$$CPT^ICPTCOD(CODE)
  1. D:CODE>0 SET(.16,7),STORE(.18)
  1. Q
  1. IMM ;; Immunizations
  1. ; TIMM[1]^Code[2]^Cat[3]^Nar[4]^Com[5]^Prv[6]^Series[7]^Reaction[8]^
  1. ; Contraindicated[9]^Refused[10]^LotNum[11]^Site[12]^Volume[13]^
  1. ; VISDate[14] ^ VFC Elig [15] ^ Admin notes [16]
  1. N REF,LOT,NEW,OFF
  1. ;MSC/MGH added offset for Vista/RPMS field conflicts
  1. ;MSC/MGH Patch 13 added VFC elig
  1. S OFF=$S($G(DUZ("AG"))="I":0,1:9999999)
  1. S REF=$P(VAL,U,10),LOT="",NEW=0
  1. I $G(VIEN),$P($G(^AUPNVSIT(VIEN,0)),U,7)'="E" S LOT=$P(VAL,U,11)
  1. I $L(REF) D STORE(),REFUSAL("IMMUNIZATION",REF) Q:REF'="@"
  1. D SET(.04,7),SET(.06,8),SET(.07,9),SET(.05,11),SET(.09+OFF,12)
  1. D SET(.11+OFF,13),SET(.12+OFF,14),SET(.14+OFF,15),SET(1+OFF,16)
  1. Q:$$STORE(.11,,,.NEW)'>0
  1. I NEW,LOT,$L($T(LOTDECR^BIRPC3)) D LOTDECR^BIRPC3(LOT)
  1. I $P(VAL,U,9),$L($T(SETCONT^BGOVIMM2)) D
  1. .N X
  1. .S X=$P(VAL,U,8),X=$S(X=12:1,X=6:3,X=7:5,X=9:4,1:10)
  1. .D SETCONT^BGOVIMM2(,DFN_U_CODE_U_X)
  1. Q
  1. SK ;; Skin tests
  1. ; SK[1]^Code[2]^Cat[3]^Nar[4]^Com[5]^Prv[6]^result[7]^reading[8]^
  1. ; d/t read[9]^d/t given[10]^read by[11]^refused[12]^site[13]^vol[14]
  1. N REF,GVN,DTR,DTG,TODAY,ERR,OFF,GTR
  1. ;MSC/MGH added offset for Vista/RPMS field conflicts
  1. S OFF=$S($G(DUZ("AG"))="I":0,1:9999999)
  1. S TODAY=$$DT^XLFDT()
  1. S DTR=$P($P(VAL,U,9),".")
  1. S GTR=$P(VAL,U,10)
  1. I (GTR>$$NOW^XLFDT)!(DTR>TODAY) S DATA="-1^You cannot enter dates in the future" Q
  1. I +DTR,GTR>DTR S DATA="-1^The skin test read date must be after the applied date" Q
  1. S REF=$P(VAL,U,12),GVN=$P(VAL,U,10)
  1. S:'$L(GVN) (GVN,$P(VAL,U,10))=$G(VDAT)
  1. I GVN,GVN\1'=(VDAT\1) N VDAT,VCAT,VLOC,VOLOC,VIEN D
  1. .S VDAT=GVN,VCAT="E",VLOC="" ; Force historical visit
  1. I $L(REF) D STORE(),REFUSAL("SKIN TEST",REF) Q:REF'="@"
  1. I $P(VAL,U,7)="N" D
  1. .I $P(VAL,U,8)=""!($P(VAL,U,8)="@") S $P(VAL,U,8)=0
  1. D SET(.04,7),SET(.05,8),SET(.06,9),SET(1201,10),SET(.08+OFF,11),SET(.09+OFF,13),SET(.11+OFF,14),STORE(.12)
  1. Q
  1. PED ;; Patient education
  1. ; PED[1]^Code[2]^Cat[3]^Nar[4]^Com[5]^Prv[6]^level of understanding[7]^
  1. ; refused[8]^elapsed[9]^setting[10]^goals[11]^outcome[12]^Readiness to learn[13]
  1. N REF
  1. S REF=$P(VAL,U,8)
  1. I "@"[REF,$P(VAL,U,7)=5 S REF="R"
  1. D:$L(REF) STORE(),REFUSAL("EDUCATION TOPICS",REF)
  1. S:'$P(VAL,U,6) $P(VAL,U,6)=DUZ ;Patch 003
  1. S $P(VAL,U,3)=$$PEDTOPIC($P(VAL,U,3)) ;Patch 004
  1. S:"@"'[REF $P(VAL,U,7)=5
  1. D SET(.12,3),SET(.05,6),SET(.06,7),SET(.08,9),SET(.07,10),SET(.13,11),SET(.14,12),SET(1102,13),STORE(.16,.11)
  1. Q
  1. HF ;; Health factors
  1. ; HF[1]^Code[2]^Cat[3]^Nar[4]^Com[5]^Prv[6]^level/severity[7]
  1. D SET(.01,2),SET(.04,7),STORE(.23)
  1. Q
  1. ASM ;; Asthma
  1. ; ASM[1]^Code[2]^Severity[3]^Asthma Control[4]
  1. S CODE=1
  1. D SET(.14,4),STORE(.41)
  1. Q
  1. XAM ;; Patient exams
  1. ; XAM[1]^Code[2]^Cat[3]^Nar[4]^Com[5]^Prv[6]^result[7]^refused[8]
  1. N REF
  1. S REF=$P(VAL,U,8)
  1. I $L(REF) D STORE(),REFUSAL("EXAM",REF) Q:REF'="@"
  1. D SET(.04,7),STORE(.13)
  1. Q
  1. TRT ;; Treatments
  1. ; TRT[1]^Code[2]^Cat[3]^Nar[4]^Com[5]^Prv[6]^Qty[7]
  1. D SET(.04,7),STORE(.15)
  1. Q
  1. MSR ;; Vital measurements (new format)
  1. ; MSR[1]^Code[2]^Cat[3]^Nar[4]^Com[5]^Prv[6]^Value[7]^Units[8]^
  1. ;VMSR IEN[9]^GMRV IEN[10]^When entered[11]^Taken date[12]^Entered by[13]^Qualfier[14]
  1. N GMRV,IEN,WHEN,XM,YM,Z,BEHDATA,TAKEN,ENTER,ENTERIEN,I,QUALNAME,QUALS,RESULT,NEW,QUALCT,SAVEDATA
  1. S ENTERIEN="",SAVEDATA=0
  1. S:'$D(VMSR) VMSR=$$GET^XPAR("ALL","BEHOVM USE VMSR")
  1. S XM=$P(VAL,U,7),YM=$P(VAL,U,8)
  1. I XM="" S DATA=0 Q
  1. ;OIT/MSC/MGH Delete is now marked as entered in error
  1. I DEL S BEHDATA=$P(VAL,U,9)_U_DUZ_U_4 D EIE^BEHOVM2(.RESULT,BEHDATA) I RESULT="OK" S DATA=0 Q
  1. ;OIT/MSC/MGH Edits are now a delete and make a new entry
  1. I 'ADD D
  1. .S BEHDATA=$P(VAL,U,9)_U_DUZ_U_4 D
  1. ..;IHS/MSC/MGH patch 13 line
  1. ..I $P(VAL,U,2)=$$VTYPE^BEHOVM("HT") S SAVEDATA=BEHDATA
  1. ..D EIE^BEHOVM2(.RESULT,BEHDATA)
  1. .I RESULT="OK" S DATA=0
  1. .E S DATA=1 ;RESULT
  1. .S ADD=1,$P(VAL,U,9)=0
  1. Q:DATA
  1. I 'DEL,$L(YM) D
  1. .S DATA=$$NORM^BEHOVM(CODE,.XM,.YM,VMSR)
  1. .S:'DATA $P(VAL,U,7)=XM,$P(VAL,U,8)=YM
  1. Q:DATA
  1. S GMRV=$P(VAL,U,10),IEN=$P(VAL,U,9)
  1. ;S:'WHEN WHEN=$$NOW^XLFDT() ;Patch 003
  1. S WHEN=$$NOW^XLFDT()
  1. S TAKEN=$P(VAL,U,12),TAKEN=$$CVTDATE^BGOUTL(TAKEN)
  1. I TAKEN="" S TAKEN=$P(VAL,U,11),TAKEN=$$CVTDATE^BGOUTL(TAKEN)
  1. ;IHS/MSC/MGH Change for EHR patch 9
  1. I TAKEN=""&(VCAT="E") S TAKEN=VDAT
  1. I TAKEN="" S TAKEN=WHEN
  1. S ENTERIEN=$P(VAL,U,13)
  1. I ENTERIEN="" S ENTERIEN=DUZ
  1. S $P(VAL,U,6)=DUZ ;Patch 003
  1. I VMSR D
  1. .D SET(.04,7),SET(1204,6)
  1. .D FIELD^DID(9000010.01,.07,"","DESCRIPTION","NEW")
  1. .S FLD(1201)=TAKEN,FLD(.08)=ENTERIEN
  1. .S FLD(.07)=WHEN
  1. .S IEN=$$STORE(.01,,$S(IEN:".001||"_IEN,1:""))
  1. .I GMRV,IEN!DEL D
  1. ..N BEHFLD
  1. ..S BEHFLD(120.5,GMRV_",",9999999)=$S(DEL:"@",1:IEN)
  1. ..D UPDATE^DIE("","BEHFLD")
  1. E D
  1. .D SET(1.2,7),SET(.06,6),SET(.03,2)
  1. .S TAKEN=$P(VAL,U,12),TAKEN=$$CVTDATE^BGOUTL(TAKEN)
  1. .I TAKEN="" S TAKEN=$P(VAL,U,11),TAKEN=$$CVTDATE^BGOUTL(TAKEN)
  1. .I TAKEN="" S TAKEN=$$NOW^XLFDT
  1. .S FLD(.01)=$S(DEL:"@",1:TAKEN),FLD(.04)=$$NOW^XLFDT,FLD(.05)=VLOC
  1. .S IEN=$$STORE(120.5,,$S(IEN:".001||"_IEN,1:""))
  1. I IEN&($P(VAL,U,14)'="") D
  1. .K QUAL
  1. .S QUALS=$P(VAL,U,14)
  1. .;IHS/MSC/MGH Update for qualifiers EHR 11
  1. .I $P($G(^AUTTMSR(CODE,0)),U,1)="O2" D PO2^BEHOVM2(.RESULT,IEN,QUALS) Q
  1. .S QUALCT=$L(QUALS,"~")
  1. .F I=1:1:QUALCT S QUALNAME=$P(QUALS,"~",I) D
  1. ..Q:QUALNAME=""
  1. ..S QUAL(QUALNAME)=""
  1. .D QUAL^BEHOVM2(.RESULT,IEN,.QUAL)
  1. ;IHS/MSC/MGH Patch 13 changed for storing BMI
  1. I 'DEL D BMICALC^BEHOVM5(IEN)
  1. ;I $P($G(^AUTTMSR(CODE,0)),U,1)="WT" D
  1. ;.D BMISAVE^BEHOVM4(.RET,DFN,XM,TAKEN,VIEN) ;Store the BMI based on wt
  1. ;I +SAVEDATA D DELBMIS^BEHOVM4($P(SAVEDATA,U,1),DFN)
  1. Q
  1. VIT ;; Vital measurements (old format)
  1. S TYP="MSR"
  1. S VAL="MSR^"_CODE_"^^^^"_$P(VAL,U,6)_U_$P(VAL,U,5)_U_$P(VAL,U,7)_U_$P(VAL,U,3)_U_$P(VAL,U,4)_U_$P(VAL,U,8)_U_$P(VAL,U,9)_U_$P(VAL,U,10)_U_$P(VAL,U,11)
  1. D MSR
  1. Q
  1. ; Store/update a refusal
  1. REFUSAL(TYPE,RSN) ;
  1. Q:'$L(RSN)!(VIEN'>0)
  1. S TYPE=$$FIND1^DIC(9999999.73,,"X",TYPE)
  1. Q:'TYPE
  1. N FDA,ERR,FNUM,IEN,OPR,DELX,IN,OUT,CT,HIS,X
  1. S FNUM=$P(^AUTTREFT(TYPE,0),U,2),OPR=1
  1. D REFUSAL^BEHOENP1(FNUM,CODE,VIEN,.IEN)
  1. I "@"[RSN Q:'IEN S TYPE="@",OPR=2,DELX=$G(^AUPNPREF(IEN,0))
  1. S:'IEN IEN="+1",OPR=0
  1. S FDA=$NA(FDA(9000022,IEN_","))
  1. S @FDA@(.01)=TYPE
  1. S @FDA@(.02)=DFN
  1. S @FDA@(.03)=^AUPNVSIT(VIEN,0)\1
  1. S @FDA@(.04)=$P(VAL,U,4)
  1. S @FDA@(.05)=FNUM
  1. S @FDA@(.06)=CODE
  1. S @FDA@(.08)=$$NOW^XLFDT
  1. ;IHS/MSC/MGH Patch 13 Added for reason
  1. I $L(RSN)>0 D
  1. .S CT=$$GET1^DIQ(9999999.102,RSN,.01)
  1. .S HIS=$$GET1^DIQ(9999999.102,RSN,.04,"I")
  1. .S @FDA@(.07)=HIS
  1. .K ARR
  1. .I CT'="" D
  1. ..S IN=CT_"^^^1^"
  1. ..S OUT="ARR"
  1. ..S @FDA@(1.01)=CT
  1. ..S X=$$CNCLKP^BSTSAPI(.OUT,.IN)
  1. ..I X>0 D
  1. ...S @FDA@(1.02)=ARR(1,"PRE","DSC")
  1. ;END patch 13 mod
  1. I $E(IEN)="+" D
  1. .S @FDA@(1216)=$$NOW^XLFDT
  1. .S @FDA@(1217)=DUZ
  1. S @FDA@(1218)=$$NOW^XLFDT
  1. S @FDA@(1219)=DUZ
  1. D UPDATE^DIE("","FDA","IEN","ERR")
  1. Q:$D(ERR("DIERR"))
  1. S:'OPR IEN=IEN(1)
  1. D REFEVT(IEN,OPR,.DELX)
  1. Q
  1. ; Broadcast a refusal event
  1. REFEVT(IEN,OPR,X) ;EP
  1. N DFN,TYPE
  1. S:'$D(X) X=$G(^AUPNPREF(IEN,0))
  1. S DFN=$P(X,U,2)
  1. Q:'DFN
  1. S TYPE=$P($G(^AUTTREFT(+X,0)),U)
  1. D BRDCAST^CIANBEVT("REFUSAL."_DFN_"."_TYPE,IEN_U_$G(CIA("UID"))_U_OPR)
  1. Q
  1. ; Lookup and optionally add narrative
  1. ; Returns pointer to PROVIDER NARRATIVE file
  1. NARR(DESCT) ;
  1. N IEN,TRC,NARR,FDA,TXT
  1. Q:'$L(DESCT) ""
  1. ;S DESCT=$$STRPNAR(DESCT) ;P14
  1. S TXT=$E(DESCT,1,160),TRC=$E(DESCT,1,30)
  1. ;S TXT="|"_DESCT
  1. F IEN=0:0 S IEN=$O(^AUTNPOV("B",TRC,IEN)) Q:'IEN Q:$P($G(^AUTNPOV(IEN,0)),U)=TXT
  1. Q:IEN IEN
  1. S FDA(9999999.27,"+1,",.01)=TXT
  1. D UPDATE^DIE("E","FDA","IEN","ERR")
  1. Q $G(IEN(1))
  1. UPPER(X) ; Convert lower case X to UPPER CASE
  1. Q $TR(X,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ")
  1. ; Lookup Education Topic and return pointer if text passed
  1. PEDTOPIC(TOP) ;EP
  1. Q:TOP=+TOP TOP
  1. N TIEN
  1. S TIEN=$$FIND1^DIC(9001002.5,,"X",TOP)
  1. Q $S(TIEN>0:+TIEN,1:"")
  1. ;Strip out leading punctuation characters from Provider Narrative text
  1. STRPNAR(NARR) ;EP-
  1. N LP,C,FLG
  1. F LP=1:1:$L(NARR) S C=$E(NARR,LP) I '(C?1P) S FLG=1 Q
  1. Q $S($G(FLG):$E(NARR,LP,$L(NARR)),1:"")
  1. AICD() ;EP
  1. Q $S($$VERSION^XPDUTL("AICD")<"4.0":0,1:1)