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

BCDMFLDS.m

Go to the documentation of this file.
  1. BCDMFLDS ; ILC/ABQ/JLG - CDMP FIELD DEFINITIONS ;JUL 16, 2008 3:19 PM
  1. ;;1.0;IHS CHRONIC DISEASE MANAGEMENT;;JUN 29, 2010
  1. ;
  1. TYPE() ;DIABETES TYPE FOR PATIENT
  1. ;Can use "AA" X-ref on V POV (AUPNVPOV) which is of the form ^AUPNVPOV("AA",DFN,inverse date,DA)
  1. K BCDMTYPE
  1. S DFN=INDA
  1. S BCDMIVD=0
  1. F S BCDMIVD=$O(^AUPNVPOV("AA",DFN,BCDMIVD)) Q:'BCDMIVD D Q:$D(BCDMTYPE)
  1. .S DA=0
  1. .F S DA=$O(^AUPNVPOV("AA",DFN,BCDMIVD,DA)) Q:'DA D Q:$D(BCDMTYPE)
  1. ..S BCDMICD=$P(^ICD9(+^AUPNVPOV(DA,0),0),U,1)
  1. ..Q:$P(BCDMICD,".",1)'=250
  1. ..S BCDMTYPE=$P(BCDMICD,".",2)#2
  1. ..I BCDMTYPE=0 S BCDMTYPE=2
  1. S BCDMOUT="Diabetes type "
  1. Q:'$D(BCDMTYPE) "N/A"
  1. Q BCDMTYPE
  1. ;
  1. ONSET() ;DIABETES ONSET DATE
  1. N BCDMONDT
  1. S BCDMONDT=""
  1. S DFN=INDA
  1. S DA=0
  1. F S DA=$O(^AUPNPROB("AC",DFN,DA)) Q:'DA D Q:$D(BCDMONDT)
  1. .S BCDMICD=$P(^ICD9(+^AUPNPROB(DA,0),0),U,1)
  1. .Q:$P(BCDMICD,".",1)'=250
  1. .S IENS=DA_","
  1. .S BCDMONDT=$$GET1^DIQ(9000011,IENS,.13,"I")
  1. .S BCDMONDT=$$CNVFMHL7(BCDMONDT)
  1. Q BCDMONDT
  1. ;
  1. ASPIRIN() ;On Aspirin?
  1. K BCDMASP
  1. S BCDMDFN=INDA
  1. S PHARPAT=$O(^PS(55,"B",BCDMDFN,0))
  1. I 'PHARPAT S BCDMASP="N" Q BCDMASP
  1. S D1=0
  1. F S D1=$O(^PS(55,PHARPAT,"P",D1)) Q:'D1 D
  1. .S IENS=D1_","_PHARPAT_","
  1. .D GETS^DIQ(55.03,IENS,".01;1","","BCDMASP")
  1. .S IENS2=$G(BCDMASP(55.03,IENS,.01))_","
  1. .Q:$G(IENS2)=""
  1. .S STATUS=$$GET1^DIQ(52,IENS2,100)
  1. .Q:STATUS'="ACTIVE"
  1. .Q:BCDMASP(55.03,IENS,1)'["ASPIRIN"
  1. .S BCDMASP="Y"
  1. I '($D(BCDMASP)#2) S BCDMASP="N"
  1. Q $G(BCDMASP)
  1. ;
  1. NOTE() ;Patient note/returns area,location,tribal membership
  1. S BCDMDFN=INDA
  1. S IENS=BCDMDFN_","
  1. S TRIBE=$$GET1^DIQ(9000001,IENS,1108)
  1. S IENS=DUZ(2)_","
  1. D GETS^DIQ(9999999.06,IENS,".01;.04","","BCDML")
  1. Q $G(BCDML(9999999.06,IENS,.04))_","_$G(BCDML(9999999.06,IENS,.01))_","_TRIBE
  1. ;
  1. VSITPROV() ;PROVIDER ID FOR ATTENDING OR PRIMARY PROVIDER OF VISIT
  1. ;The value of the visit ien will be provided by the program that calls GIS.
  1. ;It looks like that each call to the GIS API will have to have just one visit.
  1. N PRVIEN,BCDMAT
  1. S BCDMVIEN=INDA
  1. S BCDMVPEN=0
  1. F S BCDMVPEN=$O(^AUPNVPRV("AD",BCDMVIEN,BCDMVPEN)) Q:'BCDMVPEN D Q:BCDMAT
  1. .S Y=^AUPNVPRV(BCDMVPEN,0)
  1. .;Quit if provider not attending, operating, or primary. Only one should meet criterion
  1. .S BCDMAT=$S($P(Y,U,5)="A":1,$P(Y,U,5)="O":1,$P(Y,U,4)="P":1,1:0) ;Need to check logic against real data
  1. .Q:'BCDMAT
  1. .S PRVIEN=$P(Y,U,1)
  1. I '$D(PRVIEN) Q "^UNKNOWN"
  1. S NAME=$P(^VA(200,PRVIEN,0),U,1)
  1. S LNAME=$P(NAME,",",1)
  1. S FNAME=$P($P(NAME,",",2)," ",1)
  1. S MI=$P($P(NAME,",",2)," ",2)
  1. S DEANUM=$P($G(^VA(200,PRVIEN,"P")),U,2)
  1. Q DEANUM_U_LNAME_U_FNAME_U_MI
  1. ;
  1. LABCODE ;Loinc code and lab name
  1. ;Field 1103 of the V LAB file is a pointer to file 61 the same as the site/specimen field of file 60.
  1. ;Should make it possible to track down the right loinc code.
  1. ;Will assume that if and only if there are results will the lab be transmitted. This should rule out panels.
  1. ;INA will have the ien of VISIT.
  1. N CNTR,FILE,GLOB,GLB,BCDMIEN,IENS,LABIEN,LABNAME,REFRLO,REFRHI,SITEIEN,LOINC,VISIEN,CMMNT1
  1. S CNTR=0
  1. S VISIEN=INA("VISIEN")
  1. F FILE=9000010.09,9000010.24,9000010.25 D
  1. .S GLOB=$S(FILE=9000010.09:"^AUPNVLAB",FILE=9000010.24:"^AUPNVPTH",FILE=9000010.25:"^AUPNVMIC",1:"")
  1. .S BCDMIEN=0
  1. .F S BCDMIEN=$O(@GLOB@("AD",VISIEN,BCDMIEN)) Q:'BCDMIEN D
  1. ..S IENS=BCDMIEN_","
  1. ..S RESULT=$$GET1^DIQ(FILE,IENS,.04)
  1. ..I RESULT="" Q
  1. ..;Get 1 comment line
  1. ..S CMMNT1=""
  1. ..S D1=$O(@GLOB@(BCDMIEN,21,0))
  1. ..I D1 S CMMNT1=$G(@GLOB@(BCDMIEN,21,D1,0))
  1. ..S CNTR=CNTR+1
  1. ..S INDA("LAB1",CNTR)=""
  1. ..S INA("BCDMRSLT",CNTR)=RESULT_$S(CMMNT1]"":U_CMMNT1,1:"")
  1. ..S LABIEN=$$GET1^DIQ(FILE,IENS,.01,"I")
  1. ..S LABNAME=$$GET1^DIQ(FILE,IENS,.01,"E")
  1. ..S INA("BCDMUNIT",CNTR)=$$GET1^DIQ(FILE,IENS,1101,"E")
  1. ..S REFRLO=$$GET1^DIQ(FILE,IENS,1104,"E")
  1. ..S REFRHI=$$GET1^DIQ(FILE,IENS,1105,"E")
  1. ..S INA("BCDMREFR",CNTR)=REFRLO_" - "_REFRHI
  1. ..S INA("BCDMDATE",CNTR)=$$GET1^DIQ(FILE,IENS,1201,"E")
  1. ..I INA("BCDMDATE",CNTR)="" S INA("BCDMDATE",CNTR)=$$GET1^DIQ(9000010,VISIEN_",",.01,"E")
  1. ..S SITEIEN=$$GET1^DIQ(FILE,IENS,1103,"I")
  1. ..S INA("BCDMABFLG",CNTR)=$$GET1^DIQ(FILE,IENS,.05,"E")
  1. ..S IENS=SITEIEN_","_LABIEN_","
  1. ..S LOINC=$$GET1^DIQ(60.01,IENS,95.3)
  1. ..S INA("BCDMLABN",CNTR)=LOINC_U_LABNAME_U_"99IHS"
  1. ..S GLB=$P(GLOB,U,2)
  1. ..S INA("BCDMLABID",CNTR)=GLB_"-"_BCDMIEN
  1. Q
  1. ;
  1. ALIAS ;
  1. N CNTR,BCDMIEN
  1. S CNTR=0
  1. S BCDMIEN=0
  1. F S BCDMIEN=$O(^DPT(DFN,.01,BCDMIEN)) Q:'BCDMIEN D
  1. .S INA("BCDMALIAS",1)=$G(INA("BCDMALIAS",1))_$$PN^INHUT($P(^DPT(DFN,.01,BCDMIEN,0),U),U)_"~"
  1. Q
  1. ;
  1. NAME(NAME) ; Add suffix to name
  1. N SUFFIX,LNAME,MORE,FNAME,MNAME
  1. S LNAME=$P(NAME,",",1)
  1. S MORE=$P(NAME,",",2)
  1. S FNAME=$P(MORE," ",1)
  1. S MNAME=$P(MORE," ",2)
  1. S SUFFIX=$P(NAME,",",3)
  1. I SUFFIX="" S SUFFIX=$P(MORE," ",3)
  1. S NAME=LNAME_U_FNAME_U_MNAME_U_SUFFIX
  1. Q NAME
  1. ;
  1. PATRXID(ID) ;Add Rx number to asufac Code
  1. S RXNUM=$$RXNUM(INDA)
  1. Q ID_RXNUM
  1. ;
  1. RXNUM(IEN) ;
  1. S RXNUM=$P($G(^AUPNVMED(IEN,11)),U,2)
  1. I RXNUM]"" Q RXNUM
  1. E D
  1. .S RXIEN=$O(^PSRX("APCC",IEN,0))
  1. .S RXNUM=$$GET1^DIQ(52,RXIEN_",",.01,"E")
  1. I RXNUM]"" Q RXNUM
  1. Q "UNK"
  1. ;
  1. MED(MED) ;NDC CODE AND MEDICATION NAME
  1. ;<NDC code>^<drug name>^<99IHS>^^<non table drug name>^<99IHS>
  1. I $P(^AUPNVMED(INDA,0),U,4)]"" D
  1. .S NTDRUG=$P(^AUPNVMED(INDA,0),U,4)
  1. .S MED=""
  1. .S NDC=""
  1. E D
  1. .S NTDRUG=""
  1. .S DRUGIEN=+^AUPNVMED(INDA,0)
  1. .S IEN2=0
  1. .F S IEN2=$O(^PSDRUG(DRUGIEN,1,IEN2)) Q:'IEN2 D Q:+NDC
  1. ..S NDC=$P(^PSDRUG(DRUGIEN,1,IEN2,0),U,2)
  1. .I $G(NDC)="" S NDC=$P($G(^PSDRUG(DRUGIEN,2)),U,4)
  1. Q NDC_U_MED_U_"99IHS"_U_U_NTDRUG_U_"99IHS"
  1. ;
  1. REFILLS() ;NUMBER OF REFILLS REMAINING
  1. N NUMREFL
  1. D REFILVAR
  1. I +$G(NUMREFL)=0 Q ""
  1. ;Assumption is made that only actual refills are stored in refills multiple below.
  1. S D1=0
  1. F S D1=$O(^PSRX(RXIEN,1,D1)) Q:'D1 D
  1. .Q:'$D(^PSRX(RXIEN,1,D1,0))
  1. .Q:$P(^PSRX(RXIEN,1,D1,0),U,14) ;Returned to stock
  1. .Q:'$P(^PSRX(RXIEN,1,D1,0),U,19) ;Dispensed date
  1. .S NUMREFL=NUMREFL-1
  1. Q NUMREFL
  1. ;
  1. REFILVAR ; Get refill variables
  1. S IEN=INDA
  1. S RXNUM=$$RXNUM(IEN)
  1. Q:'RXNUM
  1. S RXIEN=$O(^PSRX("B",RXNUM,""))
  1. S NUMREFL=$P(^PSRX(RXIEN,0),U,9)
  1. S INA("RXD3",INDA)=$$GET1^DIQ(52,RXIEN,1,"I") ;get rx date
  1. Q
  1. ISSUE(NDA) ;-- return issue date
  1. N BCDMDT,BCDMRX
  1. S BCDMRX=$O(^PSRX("APCC",NDA,0))
  1. I '$G(BCDMRX) Q ""
  1. S BCDMDT=$$GET1^DIQ(52,BCDMRX,1,"I")
  1. Q $G(BCDMDT)
  1. ;
  1. RXDATE() ;-- get the refill date
  1. S IEN=INDA
  1. S RXNUM=$$RXNUM(IEN)
  1. I 'RXNUM Q ""
  1. S RXIEN=$O(^PSRX("B",RXNUM,""))
  1. S NUMREFL=$P(^PSRX(RXIEN,0),U,9)
  1. Q $$CNVFMHL7($$GET1^DIQ(52,RXIEN,1)) ;get rx date
  1. ;
  1. LASTRFDT(RXDT) ;Add last refill date to Rx Date
  1. N NUMREFL
  1. D REFILVAR
  1. S RXDT=$$CNVFMHL7(RXDT)
  1. I +$G(NUMREFL)=0 Q RXDT
  1. S D1=0
  1. F S D1=$O(^PSRX(RXIEN,1,D1)) Q:'D1 D
  1. .Q:'$D(^PSRX(RXIEN,1,D1,0))
  1. .Q:$P(^PSRX(RXIEN,1,D1,0),U,14) ;Returned to stock
  1. .Q:'$P(^PSRX(RXIEN,1,D1,0),U,19) ;Dispensed date
  1. .S TMP=$P(^PSRX(RXIEN,1,D1,0),U,19)
  1. .S TMP=$$CNVFMHL7(TMP)
  1. .I $E(TMP,1,8)'<$E(RXDT,1,8) Q
  1. .S RFDISPDT=TMP
  1. I $G(RFDISPDT) Q RXDT_U_RFDISPDT
  1. E Q RXDT
  1. ;
  1. CNVFMHL7(XDT) ;Convert fileman date/time to HL7 format
  1. Q $$TIMEIO^INHUT10(XDT,"","","")
  1. ;
  1. OBX5MED(IN) ;-- return the OBX -5 string
  1. D REFILVAR
  1. N QTY,PTID,SIG,REM
  1. S QTY=$$GET1^DIQ(9000010.14,IN,.06)
  1. S PTID=$G(INA("ASUFAC",IN))_IN
  1. S SIG=$$GET1^DIQ(9000010.14,IN,.05)
  1. S REM=$$REFILLS()
  1. S STR="RXD"_U_QTY_U_SIG_U_REM_U_PTID
  1. Q STR
  1. ;
  1. PROCDATE ;Non lab CPT codes
  1. ;Go through (1)Visit, (2)Patient Ed, (2)V CPT, (2)V Radiology, (3)V Procedure, & (4)V Dental
  1. N CNTR,IENS,EVM,CPTIEN,FILE,BCDMIEN,GLOB,FLD,DAT,VISIEN
  1. S CNTR=0
  1. S VISIEN=INA("VISIEN")
  1. S IENS=VISIEN_","
  1. D GETS^DIQ(9000010,IENS,".01;.17","EI","EVM","ERRMSG")
  1. I EVM(9000010,IENS,.17,"I")]"" D
  1. .S CNTR=CNTR+1
  1. .S INDA("CPT1",CNTR)=""
  1. .S INA("BCDMCPTDT",CNTR)=EVM(9000010,IENS,.01,"E")
  1. .S CPTIEN=EVM(9000010,IENS,.17,"I")
  1. .S FILE=9000010
  1. .S BCDMIEN=VISIEN
  1. .D CPTFILE
  1. ;Do the 3 that are alike together
  1. F FILE=9000010.16,9000010.18,9000010.22 D
  1. .S GLOB=$S(FILE=9000010.16:"^AUPNVPED",FILE=9000010.18:"^AUPNVCPT",FILE=9000010.22:"^AUPNVRAD",1:"")
  1. .S BCDMIEN=0
  1. .F S BCDMIEN=$O(@GLOB@("AD",VISIEN,BCDMIEN)) Q:'BCDMIEN D
  1. ..S IENS=BCDMIEN_","
  1. ..S CNTR=CNTR+1
  1. ..S INDA("CPT1",CNTR)=""
  1. ..S INA("BCDMCPTDT",CNTR)=$$GET1^DIQ(FILE,IENS,1201,"E")
  1. ..I INA("BCDMCPTDT",CNTR)="" S INA("BCDMCPTDT",CNTR)=$$GET1^DIQ(9000010,VISIEN_",",.01,"E")
  1. ..S FLD=$S(FILE=9000010.16:.09,FILE=9000010.18:.01,FILE=9000010.22:.019,1:0)
  1. ..S CPTIEN=$$GET1^DIQ(FILE,IENS,FLD,"I")
  1. ..D CPTFILE
  1. S BCDMIEN=0
  1. F S BCDMIEN=$O(^AUPNVPRC("AD",VISIEN,BCDMIEN)) Q:'BCDMIEN D
  1. .S IENS=BCDMIEN_","
  1. .D GETS^DIQ(9000010.08,IENS,".06:.16","IE","DAT","ERRMSG")
  1. .Q:DAT(9000010.08,IENS,.16,"I")=""
  1. .S CNTR=CNTR+1
  1. .S INDA("CPT1",CNTR)=""
  1. .S INA("BCDMCPTDT",CNTR)=DAT(9000010.08,IENS,.06,"E")
  1. .S CPTIEN=DAT(9000010.08,IENS,.16,"I")
  1. .S FILE=9000010.08
  1. .D CPTFILE
  1. S BCDMIEN=0
  1. F S BCDMIEN=$O(^AUPNVDEN("AD",VISIEN,BCDMIEN)) Q:'BCDMIEN D
  1. .S IENS=BCDMIEN_","
  1. .D GETS^DIQ(9000010.05,IENS,".01;1201","IE","DAT","ERRMSG")
  1. .S CNTR=CNTR+1
  1. .S INDA("CPT1",CNTR)=""
  1. .S INA("BCDMCPTDT",CNTR)=DAT(9000010.05,IENS,1201,"E")
  1. .I INA("BCDMCPTDT",CNTR)="" S INA("BCDMCPTDT",CNTR)=$$GET1^DIQ(9000010,VISIEN_",",.01,"E")
  1. .;Note: these are not CPT codes in this case. They are ADA codes
  1. .S INA("BCDMCPT",CNTR)=DAT(9000010.05,IENS,.01,"E")
  1. .S IENS2=DAT(9000010.05,IENS,.01,"I")_","
  1. .S INA("BCDMCPTNM",CNTR)=$$GET1^DIQ(9999999.31,IENS2,.02,"E")
  1. .S INA("BCDMCPTID",CNTR)=9000010.05_"-"_BCDMIEN
  1. Q
  1. ;
  1. CPTFILE ;
  1. I 'CPTIEN D Q
  1. .K INDA("CPT1",CNTR)
  1. .S CNTR=CNTR-1
  1. S INA("BCDMCPT",CNTR)=$$GET1^DIQ(81,CPTIEN_",",.01,"E")
  1. S INA("BCDMCPTNM",CNTR)=$$GET1^DIQ(81,CPTIEN_",",2,"E")
  1. S INA("BCDMCPTID",CNTR)=FILE_"-"_BCDMIEN
  1. Q
  1. ;
  1. VITLOBX(BCDMTYP,BCDMSEQ) ;Vitals Seg OBX
  1. ;BCDMTYP is the TYPE of measurement
  1. ;BCDMSEQ corresponds to the OBX-3, OBX-4, & OBX-5
  1. N RESULT
  1. S RESULT=""
  1. S VIEN=INDA
  1. S BCDMIEN=0
  1. F S BCDMIEN=$O(^AUPNVMSR("AD",VIEN,BCDMIEN)) Q:'BCDMIEN D Q:RESULT]""
  1. .S IENS=BCDMIEN_","
  1. .I BCDMTYP'=$$GET1^DIQ(9000010.01,IENS,.01) S RESULT="" Q
  1. .;.01 field of V Measurement is TYPE.
  1. .I BCDMSEQ=4 S RESULT=BCDMTYP Q
  1. .I BCDMSEQ=3 D Q
  1. ..S BCDMTIEN=$O(^AUTTMSR("B",BCDMTYP,0))
  1. ..S BCDMTNAM=$P(^AUTTMSR(BCDMTIEN,0),U,2)
  1. ..S RESULT=BCDMTYP_U_BCDMTNAM_U_"99IHS"
  1. .I BCDMSEQ=5 S RESULT=$$GET1^DIQ(9000010.01,IENS,.04) ;value of the measurement
  1. I RESULT="",BCDMSEQ=3 S RESULT=BCDMTYP_U_U_"99IHS"
  1. Q RESULT
  1. ;
  1. DX ;Diagnosis codes
  1. N VISIEN,IENS,X,CNTR,IEN
  1. S DFN=$O(INDA(2,0))
  1. S CNTR=0
  1. S VISIEN=INA("VISIEN")
  1. S IENS=DFN_","
  1. S X=$$GET1^DIQ(9000001,IENS,1114,"I")
  1. I X]"" D
  1. .D DX2
  1. .S INA("BCDMDXDT",CNTR)=$$GET1^DIQ(2,DFN_",",.351,"I")
  1. .S INA("BCDMDXID",CNTR)=9000001_"-"_DFN
  1. S IEN=$O(^AUPNVINP("AD",VISIEN,0))
  1. I IEN D
  1. .S IENS=IEN_","
  1. .S X=$$GET1^DIQ(9000010.02,IENS,.12,"I")
  1. .Q:X=""
  1. .D DX2
  1. .S INA("BCDMDXDT",CNTR)=$$GET1^DIQ(9000010,VISIEN_",",.01,"I")
  1. .S INA("BCDMDXID",CNTR)=9000010.02_"-"_IEN
  1. S IEN=$O(^AUPNVCHS("AD",VISIEN,0))
  1. I IEN D
  1. .S IENS=IEN_","
  1. .S X=$$GET1^DIQ(9000010.03,IENS,.09,"I")
  1. .Q:X=""
  1. .D DX2
  1. .S INA("BCDMDXDT",CNTR)=$$GET1^DIQ(9000010,VISIEN_",",.01,"I")
  1. .S INA("BCDMDXID",CNTR)=9000010.03_"-"_IEN
  1. S BCDM=0
  1. F S BCDM=$O(^AUPNVPOV("AD",VISIEN,BCDM)) Q:'BCDM D
  1. .S IENS=BCDM_","
  1. .S X=$$GET1^DIQ(9000010.07,IENS,.01,"I")
  1. .Q:X=""
  1. .D DX2
  1. .S INA("BCDMDXDT",CNTR)=$$GET1^DIQ(9000010.07,BCDM_",",1201,"I")
  1. .I INA("BCDMDXDT",CNTR)="" S INA("BCDMDXDT",CNTR)=$$GET1^DIQ(9000010,VISIEN_",",.01,"I")
  1. .S INA("BCDMDXID",CNTR)=9000010.07_"-"_BCDM
  1. Q
  1. ;
  1. DX2 ;
  1. S CNTR=CNTR+1
  1. S IENS=X_","
  1. D GETS^DIQ(80,IENS,".01:3","E","DXDATA","ERRMSG")
  1. S INDA("DX1",CNTR)=""
  1. S INA("BCDMDX",CNTR)=DXDATA(80,IENS,.01,"E")
  1. S INA("BCDMDXNM",CNTR)=DXDATA(80,IENS,3,"E")
  1. Q
  1. ;
  1. ADMTYPE(INDA) ;
  1. S IEN=$O(^AUPNVINP("AD",INDA,0))
  1. S IENS=IEN_","
  1. S X=$$GET1^DIQ(9000010.02,IENS,.07,"E")
  1. Q X
  1. ;
  1. SERVCAT(X) ;Transform serv cat into I and O
  1. S X=$E(X,1)
  1. Q $S((X="A")!(X="D"):"O",X="H":"I",1:X)