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

BADEHL3.m

Go to the documentation of this file.
  1. BADEHL3 ;IHS/MSC/MGH/VAC - Dentrix HL7 inbound interface ;01-Oct-2010
  1. ;;1.0;DENTAL/EDR INTERFACE;**1,3,4,5**;FEB 22, 2010;Build 23
  1. ;; Modified - IHS/MSC/AMF - 11/23/10 - More descriptive alert messages
  1. ;; Modified - IHS/MSC/AMF 10/2010 fix for hospital location FT1-16,2
  1. ;; Modified - GDIT/KJH Patch 3 - Comment out incorrect call to tag ACK pending further review
  1. ;; Modified - IHS/OIT/GAB 05/2015 fix for ICD10 Implementation **4**
  1. ;; Modified - IHS/OIT/GAB **5** 12/2015 Process POV from Dentrix (v8.0.5 or later)
  1. ; Return array of message data
  1. ; Input: MIEN - IEN to HLO MESSAGES and HLO MESSAGE BODY files
  1. ; Output: DATA
  1. ; HLMSTATE
  1. PARSE(DATA,MIEN,HLMSTATE) ;EP
  1. N SEG,CNT
  1. Q:'$$STARTMSG^HLOPRS(.HLMSTATE,MIEN)
  1. M DATA("HDR")=HLMSTATE("HDR")
  1. S CNT=0
  1. F Q:'$$NEXTSEG^HLOPRS(.HLMSTATE,.SEG) D
  1. .S CNT=CNT+1
  1. .M DATA(CNT)=SEG
  1. Q
  1. ; Process incoming DFT message
  1. PROC ;EP
  1. ;todo- check APP ACK TYPE
  1. N DATA,ARY,SEGPID,SEGPV1,SEGFT1,ERR,RET,DFN,NAME,NOPV1,APTIME,LOC,OUT,PNAME,POV,PROV,PROVFN,PROVLN,PROVMN,SCODE
  1. N DRG,DCODE,DCODEQ,PVDIEN,DSPNUM,BADIN,APCDALVR,APCDTNOV,APCDVSIT,SEGIEN,SEGRXD,SURGDES,TCODE,TYPE,VTYPE
  1. N APCDPAT,APCDTNOU,APCDTOS,APCDTSUR,APCDTFEE,APCDTCDT,APCDTPRV,APCDTEPR,APCDTPNT,APCDTEXK,APCDTSC,APCDTOPR,PARLOC
  1. N HLNAME,HFNAME,LNAME,NAME,DOB,HLDOB,BADERR,BADEWARN,X,Y,IEN,ASUFAC,ASUFAC2,CCODE,CODEIEN,DESC,VTIME,EXKEY,HOSLOC,MOD
  1. N PRVNPI,NOOPSITE
  1. S BADERR=""
  1. S (APCDTOPR,APCDTPNT)=""
  1. Q:'$G(HLMSGIEN)
  1. D PARSE(.DATA,HLMSGIEN,.HLMSTATE)
  1. PID ;Get the PID segment and find the correct patient
  1. S SEGIEN=$$FSEGIEN(.DATA,"PID")
  1. I 'SEGIEN D ACK(HLMSGIEN,"","Missing PID segment.") Q ;IHS/MSC/AMF 11/23/10 More descriptive alert
  1. M SEGPID=DATA(SEGIEN)
  1. S DFN=$$GET^HLOPRS(.SEGPID,2)
  1. I DFN="" D ACK(HLMSGIEN,DFN,"Missing DFN in PID:") Q ;IHS/MSC/AMF 11/23/10 More descriptive alert
  1. ; Get the ASUFAC number
  1. N ASUFAC,HFCN,FAC
  1. S X=$$GET^HLOPRS(.SEGPID,3)
  1. I X="" D ACK(HLMSGIEN,DFN,"Missing ASUFAC in PID:") Q ;IHS/MSC/AMF 11/23/10 More descriptive alert
  1. S ASUFAC=$E(X,1,6)
  1. S IEN=$$HRCNF^BADEUTIL(X)
  1. ; Added new capture of ASUFAC IHS/MSC/VAC 8/2010
  1. I IEN="" D ACK(HLMSGIEN,DFN,"Missing HRCN in PID:") Q ;IHS/MSC/AMF 11/23/10 More descriptive alert
  1. ; Check if patient has been merged
  1. S DFN=$$MRGTODFN^BADEUTIL(DFN)
  1. I '$D(^DPT(DFN)) D ACK(HLMSGIEN,DFN,"Patient DFN: "_DFN_" not in RPMS.") Q ;IHS/MSC/AMF 11/23/10 More descriptive alert
  1. S (APCDPAT,BADIN("PAT"))=DFN
  1. ; Match on birth dates and last names
  1. S HLNAME=$$GET^HLOPRS(.SEGPID,5,1)
  1. S HFNAME=$$GET^HLOPRS(.SEGPID,5,2)
  1. S HLDOB=$$GET^HLOPRS(.SEGPID,7)
  1. I $L(HLDOB)>8 S HLDOB=$E(HLDOB,1,8)
  1. S DOB=$$GET1^DIQ(2,DFN,.03,"I")
  1. S DOB=$$HLDATE^HLFNC(DOB,"DT")
  1. S NAME=$$GET1^DIQ(2,DFN,.01),LNAME=$P(NAME,",",1)
  1. ; I LNAME'=HLNAME S BADERR=" Last names for "_DFN_" do not match in message"
  1. ; I DOB'=HLDOB S BADERR=" Birth dates for "_DFN_" do not match in message"
  1. ; I BADERR'="" D ACK(BADERR) Q
  1. PV1 ;Get the PV1 segment and get enough data to create the visit
  1. S NOPV1=0
  1. S SEGIEN=$$FSEGIEN(.DATA,"PV1")
  1. I 'SEGIEN S NOPV1=1
  1. E M SEGRXD=DATA(SEGIEN)
  1. FT1 ;Get the FT1 segment
  1. S SEGIEN=$$FSEGIEN(.DATA,"FT1")
  1. I 'SEGIEN D ACK(HLMSGIEN,DFN,"Missing FT1 segment:") Q ;IHS/MSC/AMF 11/23/10 More descriptive alert
  1. M SEGFT1=DATA(SEGIEN)
  1. ;Get the date/time of visit
  1. S X=$$GET^HLOPRS(.SEGFT1,4)
  1. I X="" D ACK(HLMSGIEN,DFN,"Missing visit date in FT1:") Q ;IHS/MSC/AMF 11/23/10 More descriptive alert
  1. ; If no time on this visit, check the parameter to see if a default time exists
  1. I $L(X)=8 D
  1. .S VTIME=$$GET^XPAR("ALL","BADE EDR DEFAULT TIME")
  1. .S:VTIME="" VTIME=1138 ;IHS/MSC/AMF 10/2010 Change in default visit time
  1. .S X=X_VTIME
  1. S Y=$$FMDATE^HLFNC(X)
  1. I $P(Y,".")>$$DT^XLFDT S BADERR=" " D ACK(HLMSGIEN,DFN,"Future visit date not allowed:") Q ;IHS/MSC/AMF 11/23/10 More descriptive alert
  1. S VISDT=$P(Y,".") ;/IHS/OIT/GAB TO CHECK FOR ICD10 DATE **4**
  1. S BADIN("VISIT DATE")=Y
  1. D DD^%DT S APCDTCDT=Y ;External format
  1. ;This field determines if its new (0), update (2) or delete (1)
  1. S DESC=$$GET^HLOPRS(.SEGFT1,9)
  1. S APCDTEXK=$$GET^HLOPRS(.SEGFT1,2) ;Special code
  1. I APCDTEXK="" D ACK(HLMSGIEN,DFN,"Missing Dentrix ID in FT1:") Q ;IHS/MSC/AMF 11/23/10 More descriptive alert
  1. ;First, check to see if this code is already in the V dental file
  1. S EXKEY="" S EXKEY=$O(^AUPNVDEN("AXK",APCDTEXK,EXKEY))
  1. I EXKEY'="" D
  1. .I DESC=0 S BADERR=" Unique id "_APCDTEXK_" already exists " Q
  1. .;If transaction description is to delete, must find existing entry
  1. .I DESC=1 D DEL^BADEHL4 Q
  1. .;If transcaction description is to update, must find existing entry
  1. .I DESC=2 D UPD^BADEHL4 Q
  1. I EXKEY="" D
  1. .I DESC=1 S BADERR="Can't delete Dentrix ID "_APCDTEXK_" doesn't exist:" Q ;IHS/MSC/AMF 10/2010 eliminate jump out of loop
  1. .I DESC=2 S BADERR="Can't update Dentrix ID "_APCDTEXK_" doesn't exist:" Q ;IHS/MSC/AMF 10/2010 eliminate jump out of loop
  1. .I DESC=0 D NEW
  1. I $L(BADERR) D ACK(HLMSGIEN,DFN,BADERR) Q ;IHS/MSC/AMF 11/23/10 More descriptive alert
  1. Q
  1. NEW ;Create a new dental procedure
  1. N DUSER
  1. S APCDTNOV=1
  1. S TYPE=$$GET^HLOPRS(.SEGFT1,6)
  1. S TCODE=$$GET^HLOPRS(.SEGFT1,7)
  1. I TCODE="" D ACK(HLMSGIEN,DFN,"Missing ADA code in FT1:") Q ;IHS/MSC/AMF 11/23/10 More descriptive alert
  1. I $E(TCODE,1,1)="D" S SCODE=$E(TCODE,2,$L(TCODE))
  1. E S SCODE=TCODE
  1. S CODEIEN="" S CODEIEN=$O(^AUTTADA("B",SCODE,CODEIEN))
  1. I CODEIEN="" D ACK(HLMSGIEN,DFN,"ADA code "_TCODE_" not in RPMS:") Q ;IHS/MSC/AMF 11/23/10 More descriptive alert
  1. S NOOPSITE=$$GET1^DIQ(9999999.31,CODEIEN,.09,"I")="n"
  1. ;Charge amount
  1. S APCDTFEE=$$GET^HLOPRS(.SEGFT1,11)
  1. ; ----- IHS/MSC/AMF 10/2010 fix for FT1-16,2
  1. ;Find the location and clinic location
  1. S ASUFAC2=$$GET^HLOPRS(.SEGFT1,16,1)
  1. S HOSLOC=$$GET^HLOPRS(.SEGFT1,16,2)
  1. I $L(ASUFAC2) I HOSLOC="" S ASUFAC=ASUFAC2
  1. ;
  1. S BADEWARN=""
  1. S HOSLOC2=0 I $L(HOSLOC) S HOSLOC2=1
  1. I +HOSLOC2=1 D
  1. .S PARLOC=+$O(^SC("B",HOSLOC,"")) I 'PARLOC S BADEWARN="Warning: Clinic "_HOSLOC_" is not valid ",HOSLOC="" Q
  1. .S LOC=+$P($G(^SC(PARLOC,0)),U,4) I LOC="" S BADEWARN="Warning: Location not found for Clinic "_HOSLOC,HOSLOC=""
  1. I +HOSLOC2=0 D
  1. .S LOC=$O(^AUTTLOC("C",ASUFAC,"")) I '$L(LOC) S BADERR="No location associated with ASUFAC "_ASUFAC Q
  1. .S PARLOC=+$$GET^XPAR("DIV.`"_LOC_"^SYS","BADE EDR DEFAULT CLINIC") I 'PARLOC S BADERR=" There is no default clinic for this location "_ASUFAC Q
  1. .S LOCA=+$P($G(^SC(PARLOC,0)),U,4) I LOCA'=LOC S BADERR="Location, this ASUFAC, and the DEFAULT CLINIC is incorrect "_ASUFAC Q
  1. I $L(BADERR) D ACK(HLMSGIEN,DFN,BADERR) Q ;IHS/MSC/AMF 11/23/10 More descriptive alert
  1. I $L(BADEWARN) D ACK(HLMSGIEN,DFN,BADEWARN) ;IHS/MSC/AMF 11/23/10 More descriptive alert
  1. ; ----- end IHS/MSC/AMF 10/2010 fix for FT1-16,2
  1. ;
  1. I LOC>0 D
  1. .S DUZ(2)=LOC ;SAC Exemption requested
  1. .S DUSER=$$DUSER^BADEUTIL(LOC)
  1. .S:DUSER DUZ=DUSER
  1. S POV=$$GET^HLOPRS(.SEGFT1,19)
  1. ;Provider ID
  1. S PROV=+$$GET^HLOPRS(.SEGFT1,20,1)
  1. ;S PROV="" S PROV=+$O(^VA(200,"ANPI",PRVNPI,PROV))
  1. I 'PROV D ACK(HLMSGIEN,DFN,"Missing provider in FT1:") Q ;IHS/MSC/AMF 11/23/10 More descriptive alert
  1. S BADIN("PROVIDER")=PROV
  1. S PNAME=$P($G(^VA(200,PROV,0)),U,1)
  1. S PROVLN=$$GET^HLOPRS(.SEGFT1,20,2)
  1. S PROVFN=$$GET^HLOPRS(.SEGFT1,20,3)
  1. S PROVMN=$$GET^HLOPRS(.SEGFT1,20,4)
  1. S MOD=$$GET^HLOPRS(.SEGFT1,26,1) ;Operative Site Code (may contain text)
  1. S SURGDES=$$GET^HLOPRS(.SEGFT1,26,2) ;Operative Site Descriptive Text
  1. S APCDTOS=$S(NOOPSITE:"",1:$$GETTOS^BADEHL4(MOD,SURGDES))
  1. I 'NOOPSITE,'APCDTOS S BADERR=" Message lacks a valid ADA Code. Mod/Surg:"_MOD_"/"_SURGDES D ACK(HLMSGIEN,DFN,BADERR) Q
  1. S APCDTSUR=$$GET^HLOPRS(.SEGFT1,26,4) ;Surface Code
  1. D VISIT
  1. Q
  1. VISIT ;Create the visit
  1. S BADIN("PAT")=DFN
  1. S BADIN("TIME RANGE")=0 ; Try for exact match
  1. S BADIN("SRV CAT")="A" ; Ambulatory
  1. S BADIN("VISIT TYPE")=$S($P($G(^APCCCTRL(DUZ(2),0)),U,4)]"":$P(^(0),U,4),1:"I")
  1. S CCODE="" S CCODE=$O(^DIC(40.7,"C",56,CCODE)) ;Stop Code
  1. S BADIN("CLINIC CODE")=CCODE
  1. S BADIN("HOS LOC")=PARLOC ;
  1. S BADIN("SITE")=DUZ(2)
  1. S BADIN("USR")=DUZ
  1. S BADIN("APCDOPT")=$$GETOPT()
  1. S BADIN("NEVER ADD")=1
  1. S FVST=$$FNDVST(.BADIN)
  1. I 'FVST D
  1. .S FVST=$$MAKEVST(.BADIN) ; FAILED TO FIND MATCH
  1. .S VTYPE="NEW"
  1. E D
  1. .S VTYPE="ADD"
  1. I 'FVST S BADERR=" Unable to create visit for message "
  1. I BADERR'="" D ACK(HLMSGIEN,DFN,BADERR) Q
  1. S APCDVSIT=FVST
  1. ;Add the data to the dental file
  1. ;Deletion type to existing visit
  1. ;IHS/MGH/MGH added parameter to PRV call for patch 1
  1. I VTYPE="NEW" D POV,PRV("P"),DENT
  1. ; I VTYPE="ADD" D CHECKPRV,DENT /IHS/OIT/GAB **5** CHANGED TO BELOW LINE
  1. I VTYPE="ADD" D POV,CHECKPRV,DENT
  1. N MSHMSG,MSA
  1. ;07/18/2013 - KJH - Following line was originally not called because "AL" was never set.
  1. ; - Line became active after a fix to the adapter but calls ACK with wrong number of parameters.
  1. ; - Comment out to restore original functionality until the code can be reviewed further.
  1. ;I DATA("HDR","APP ACK TYPE")="AL" D ACK(BADERR)
  1. Q
  1. ACK(HLMSGIEN,DFN,BADERR) ;Send acknowledgement IHS/MSC/AMF 11/23/10 More descriptive alert
  1. N STR
  1. I BADERR'="" D
  1. .S STR="" I $L(DFN) S STR=$E($P($G(^DPT(DFN,0)),U,1),1,15)_" ["_DFN_"]"
  1. .S BADERR="Msg: "_HLMSGIEN_" "_BADERR_" "_STR
  1. .D NOTIF(HLMSGIEN,BADERR)
  1. ; End IHS/MSC/AMF 11/23/10
  1. N PARMS,ACK,ERR
  1. I BADERR="" S PARMS("ACK CODE")="AA",MSHMSG="Transaction successful"
  1. I BADERR'="" S PARMS("ACK CODE")="AR",MSHMSG=BADERR
  1. S:PARMS("ACK CODE")'="AA" PARMS("ERROR MESSAGE")=BADERR
  1. I '$$ACK^HLOAPI2(.HLMSTATE,.PARMS,.ACK,.ERR) D NOTIF(HLMSGIEN,ERR) Q
  1. ; Comment out following line to not send ACK's to Dentrix IHS/MSC/VAC 8/2010
  1. ;I '$$SENDACK^HLOAPI2(.ACK,.ERR) D NOTIF(HLMSGIEN,ERR) Q
  1. Q
  1. POV ;Store the POV
  1. N APCDALVR,CODE
  1. S APCDALVR("APCDPAT")=DFN
  1. S APCDALVR("APCDVSIT")=APCDVSIT
  1. S APCDALVR("APCDTNQ")="DENTAL/ORAL HEALTH VISIT"
  1. S APCDALVR("APCDOVRR")=1
  1. ;S APCDALVR("APCDTPOV")="V72.2" ;/IHS/OIT/GAB REMOVE FOR ICD10
  1. ;/IHS/OIT/GAB 4.2015 ADDED NEXT LINE -TO SEE WHICH CODING SYSTEM TO USE
  1. ;If 1 USE ICD9, 30 USE ICD10 **4**
  1. S I=$$IMP^BADEHL3(VISDT)
  1. ;I I=30 S APCDALVR("APCDTPOV")="ZZZ.999" ;/IHS/OIT/GAB **5** REMOVED & ADD NEXT 6 LINES
  1. I I=30 D
  1. .D GETPOV^BADEUTIL
  1. .I NOPOV=1 D
  1. ..S POV="ZZZ.999"
  1. ..I '$$HASPOV^BADEUTIL(APCDVSIT,POV) S APCDALVR("APCDTPOV")="ZZZ.999" S APCDALVR("APCDTEXK")=APCDTEXK S APCDALVR("APCDATMP")="[APCDALVR 9000010.07 (ADD)]" D EN^APCDALVR
  1. E D
  1. .S APCDALVR("APCDTPOV")="V72.2",POV="V72.2"
  1. .I '$$HASPOV^BADEUTIL(APCDVSIT,POV) S APCDALVR("APCDATMP")="[APCDALVR 9000010.07 (ADD)]" D EN^APCDALVR ; **5** historical visits use ICD9
  1. ;S APCDALVR("APCDATMP")="[APCDALVR 9000010.07 (ADD)]" D EN^APCDALVR
  1. K APCDOVRR,APCDALVR("APCDOVRR")
  1. Q
  1. CHECKPRV ;Check to see if the provider in the message is already on this visit
  1. ;If not, add the provider
  1. N VPRV,MATCH,PRVIEN,PRIM ;IHS/MSC/MGH 7/2010 new var PRIM for patch 1
  1. S PRIM="P"
  1. S MATCH=0
  1. S VPRV="" F S VPRV=$O(^AUPNVPRV("AD",APCDVSIT,VPRV)) Q:VPRV="" D
  1. .S PRVIEN=$P($G(^AUPNVPRV(VPRV,0)),U,1)
  1. .;IHS/MSC/MGH 7/2010 Check for primary provider patch 1
  1. .I $P($G(^AUPNVPRV(VPRV,0)),U,4)="P" S PRIM="S"
  1. .I PROV=PRVIEN S MATCH=1
  1. I MATCH=0 D PRV(PRIM) ;patch 1 parameter added
  1. Q
  1. PRV(PRIMARY) ;Store the provider patch 1 added parameter
  1. N APCDALVR
  1. S APCDALVR("APCDVSIT")=APCDVSIT
  1. S APCDALVR("APCDPAT")=DFN
  1. S APCDALVR("APCDTPRO")="`"_PROV
  1. S APCDALVR("APCDTPS")=PRIMARY
  1. I DESC=0 S APCDALVR("APCDATMP")="[APCDALVR 9000010.06 (ADD)]" D EN^APCDALVR
  1. I DESC=2 S APCDALVR("APCDATMP")="[APCDALVR 9000010.06 (ADD)]" D EN^APCDALVR
  1. Q
  1. DENT ;Store the procedure
  1. N APCDALVR
  1. S APCDALVR("APCDACS")=""
  1. S APCDALVR("APCDTSC")="`"_CODEIEN
  1. S APCDALVR("APCDPAT")=DFN
  1. S APCDALVR("APCDVSIT")=APCDVSIT
  1. S APCDALVR("AUPNTALK")=""
  1. S APCDALVR("APCDANE")=""
  1. S APCDALVR("APCDTNOU")=1
  1. S APCDALVR("APCDTSUR")=APCDTSUR
  1. S APCDALVR("APCDTFEE")=APCDTFEE
  1. S APCDALVR("APCDTCDT")=APCDTCDT
  1. S APCDALVR("APCDTCLN")="DENTAL"
  1. S APCDALVR("APCDTEPR")=PNAME
  1. S APCDALVR("APCDTPRV")=PNAME
  1. S:APCDTOS APCDALVR("APCDTOS")="`"_APCDTOS
  1. S APCDALVR("APCDLOC")="`"_LOC
  1. S APCDALVR("APCDTEXK")=APCDTEXK
  1. I DESC=0 S APCDALVR("APCDATMP")="[APCDALVR 9000010.05 (ADD)]"
  1. I DESC=2 S APCDALVR("APCDATMP")="[APCDALVR 9000010.05 (ADD)]"
  1. D EN^APCDALVR
  1. ;IHS/FJE patch 1 added alert notification if VDENT is not added in PCC
  1. D:$D(APCDAFLG) ACK(HLMSGIEN,DFN,"Unable to create Dental Procedure entry in PCC")
  1. K APCDAFLG
  1. Q
  1. ; Return IEN to particular segment
  1. FSEGIEN(SRC,SEG) ;Segment item
  1. N LP,RES
  1. S (LP,RES)=0
  1. F S LP=$O(SRC(LP)) Q:'LP D Q:RES
  1. .I $G(SRC(LP,"SEGMENT TYPE"))=SEG S RES=LP
  1. Q RES
  1. ;Notification on errors
  1. NOTIF(MSGIEN,MSG) ;Send a alert to a mail group
  1. N XQA,XQAID,XQDATA,XQAMSG
  1. S XQAMSG="Msg: "_MSGIEN_" "_$G(MSG) ;IHS/MSC/AMF 11/23/10 More descriptive alert
  1. S XQAID="ADEN,"_DFN_","_50
  1. S XQDATA="Message Number="_MSGIEN
  1. S XQA("G.RPMS DENTAL")=""
  1. D SETUP^XQALERT
  1. Q
  1. ; Return Option IEN used to Create
  1. GETOPT() ; EP IHS/MSC/MGH patch 1
  1. N RET
  1. S RET=$$FIND1^DIC(19,,"O","BADE EDR MAIN MENU")
  1. Q $S(RET:RET,1:"")
  1. ; Return whether an existing visit can be used or need to create one.
  1. OPT(IEN) ;Check to see if the option n the visit matches the dental option
  1. N MATCH,OPT
  1. S MATCH=0
  1. S OPT=$$GETOPT()
  1. I $P($G(^AUPNVSIT(IEN,0)),U,24)=OPT S MATCH=1
  1. Q MATCH
  1. ; end IHS/MSC/MGH patch 1
  1. FNDVST(CRIT) ;EP
  1. N IEN,EFLG,OUT,RET
  1. S RET=0
  1. D GETVISIT^BSDAPI4(.CRIT,.OUT)
  1. Q:'OUT(0) 0 ; No visits were found
  1. S IEN=0,EFLG=0
  1. F S IEN=$O(OUT(IEN)) Q:'IEN D Q:EFLG
  1. .I OUT(IEN)="ADD" D
  1. ..N X
  1. ..S X="CIANBEVT" X ^%ZOSF("TEST") I $T D BRDCAST^CIANBEVT("PCC."_DFN_".VST",IEN)
  1. .;IHS/MSC/MGH patch 1 added to check option
  1. .I $$OPT(IEN) S EFLG=1,RET=IEN Q
  1. ;IHS/MSC/MGH patch 1 added to check option
  1. Q $S(RET:RET,OUT(0)=1:$O(OUT(0)),1:0)
  1. ;
  1. MAKEVST(CRIT) ;EP
  1. N RET,OUT
  1. K CRIT("NEVER ADD")
  1. S CRIT("FORCE ADD")=1
  1. D GETVISIT^BSDAPI4(.CRIT,.OUT)
  1. Q:'OUT(0) OUT(0)
  1. S RET=+$O(OUT(0))
  1. I OUT(RET)="ADD" D
  1. .N X
  1. .S X="CIANBEVT" X ^%ZOSF("TEST") I $T D BRDCAST^CIANBEVT("PCC."_DFN_".VST",RET)
  1. Q RET
  1. ;
  1. IMP(D) ; which coding system should be used
  1. ;IHS/OIT/GAB ADDED THIS FUNCTION FOR ICD10 **4**
  1. ;RETURN IEN of entry in ^ICDS
  1. ;1 = ICD9 30 = ICD10
  1. ;
  1. I $G(D)="" S D=DT
  1. NEW X,Y,IMPDT
  1. I '$O(^ICDS("F",80,0)) Q 1
  1. S Y=""
  1. S X=0 F S X=$O(^ICDS("F",80,X)) Q:X'=+X D
  1. .I $P(^ICDS(X,0),U,4)="" Q ;NO IMPLEMENTATION DATE
  1. .S IMPDT=$P(^ICDS(X,0),U,4)
  1. ;Compare the visit date to ensure it should use ICD10
  1. I D>(IMPDT-1) S Y=30
  1. E S Y=1
  1. Q Y