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

BGOVPOV.m

Go to the documentation of this file.
  1. BGOVPOV ; IHS/BAO/TMD - Visit POV maintenance ;09-Nov-2017 14:39;PLS
  1. ;;1.1;BGO COMPONENTS;**1,3,4,5,6,7,10,11,12,13,14,19,20,23**;Mar 20, 2007;Build 1
  1. ; Check for note signed by provider
  1. ; Patch 6 added check for asthma DX
  1. ; Patch 7 added bulletin for first time diagnosis
  1. ; Patch 13 added changes to store SNOMED into POV
  1. ; Patch 14 added changes for ICD-10 implementation
  1. ; Patch 20 added laterality data
  1. ; Patch 23 added fracture data
  1. CKSIGNBY(RET,VIEN) ;EP
  1. N X
  1. S VIEN=+VIEN
  1. Q:'VIEN
  1. S RET=$$PRIPRV^BGOUTL(VIEN)
  1. Q:RET<0
  1. S RET=+RET
  1. I RET'=DUZ S RET=$$ERR^BGOUTL(1089) Q
  1. S RET="",X=0
  1. F S X=$O(^TIU(8925,"V",VIEN,X)) Q:'X D Q:RET
  1. .S:$P($G(^TIU(8925,X,15)),U,2)=DUZ RET=X
  1. S:'RET RET=$$ERR^BGOUTL(1090)
  1. Q
  1. ; Lookup ICD code
  1. ; INP = ICD code ^ Reference Date
  1. ; RET = Null if not found or ICD IEN^ICD Text
  1. GETICD(RET,INP) ;EP
  1. N IEN,ICD,CDT
  1. S RET="",ICD=$P(INP,U),CDT=$P(INP,U,2)
  1. ;IHS/MSC/MSC Patch 12 changes
  1. S IEN=$P($$ICDDX^ICDEX(ICD,CDT,"","E"),U,2)
  1. S:IEN>0 RET=+IEN_U_$P(IEN,U,4)
  1. Q
  1. ; Return ICD code given ICD IEN
  1. ; INP = ICD IEN ^ Reference Date
  1. ; RET = Null if not found or ICD Code^ICD Text
  1. GETCODE(RET,INP) ;EP
  1. N ICDIEN,CDT
  1. S ICDIEN=$P(INP,U),CDT=$P(INP,U,2)
  1. ;Patch 12 changes
  1. S RET=$$ICDDX^ICDEX(ICDIEN,CDT,"","I")
  1. S RET=$S(RET<0:"",1:$P(RET,U,2)_U_$P(RET,U,4))
  1. E S RET=""
  1. Q
  1. ; Set primary/secondary for a POV
  1. ; INP = VPOV IEN ^ Primary/Secondary (P/S)
  1. ; For patch 13 changes made to store or unstore the primary DX SNOMED code
  1. SETPRI(RET,INP,NOEVT) ;EP
  1. N PRI,VFIEN,VIEN,FDA,X
  1. S VFIEN=+INP
  1. I 'VFIEN S RET=$$ERR^BGOUTL(1008) Q
  1. S PRI=$P(INP,U,2)
  1. I '$D(^AUPNVPOV(VFIEN,0)) S RET=$$ERR^BGOUTL(1091) Q
  1. S VIEN=$P(^AUPNVPOV(VFIEN,0),U,3)
  1. S FDA($$FNUM,VFIEN_",",.12)=PRI
  1. I PRI="P" D
  1. .S FDA($$FNUM,VFIEN_",",1103)=63161005 ;Set required code
  1. .S X=0
  1. .F S X=$O(^AUPNVPOV("AD",VIEN,X)) Q:'X D:X'=VFIEN
  1. ..I $P($G(^AUPNVPOV(X,0)),U,12)="P" D
  1. ...S FDA($$FNUM,X_",",.12)="S"
  1. ...S FDA($$FNUM,X_",",1103)="@"
  1. E D
  1. .S FDA($$FNUM,VFIEN_",",1103)="@"
  1. S RET=$$UPDATE^BGOUTL(.FDA)
  1. Q:RET
  1. ;I $$FIXVPOVS^BGOVPOV1(VIEN,.VFIEN) ; Fix VPOV sequencing
  1. D:'$G(NOEVT) VFEVT^BGOUTL2($$FNUM,VFIEN,1)
  1. S RET=VFIEN
  1. Q
  1. ; Returns POV for current visit context
  1. TIUSTR() N X,Y
  1. S X=$$GETVAR^CIANBUTL("ENCOUNTER.ID.ALTERNATEVISITID",,"CONTEXT.ENCOUNTER")
  1. I X="" Q " "
  1. S X=$$VSTR2VIS^BEHOENCX(DFN,X)
  1. I X<1 Q " "
  1. D GET(.X,X_"^^1")
  1. S Y=$G(@X@(1))
  1. K @X
  1. Q $S(Y<0:"",1:Y)
  1. ; Returns POV for current visit context in multi-line format
  1. TIUML(RET) ;EP
  1. N X,I,CNT
  1. S X=$$GETVAR^CIANBUTL("ENCOUNTER.ID.ALTERNATEVISITID",,"CONTEXT.ENCOUNTER")
  1. I X="" Q " "
  1. S X=$$VSTR2VIS^BEHOENCX(DFN,X)
  1. I X<1 Q " "
  1. D GET(.X,X_"^^2")
  1. K @RET
  1. S (I,CNT)=0
  1. F S I=$O(@X@(I)) Q:'I D
  1. .S CNT=CNT+1
  1. .S @RET@(CNT,0)=@X@(I)
  1. S:'CNT @RET@(1,0)="No Diagnosis."
  1. K @X
  1. Q "~@"_$NA(@RET)
  1. ; Get VPOVs associated with a visit
  1. ; INP=Visit IEN ^ VPOV IEN (optional) ^ Format (0-detailed,1-tiu string,2-multi-line)
  1. ; Removed ICD name for Patch 12. This data is view only now
  1. ;Return array
  1. ;IEN [1] ^ Visit date [2] ^ Facility [3] ^ Facility Name [4] ^ ICD code [5] ^ Episodicity [6]
  1. ;^ Provider Narrative [7] ^ Mod [8] ^ Onset [9]
  1. ;^ Stage [10] ^Revisit [11] ^ Cause [12]^ Injury date [13] ^ External cause [14]
  1. ;^ Place of injury [15] ^Primary [16] ^Provider [17] ^ Visit IEN [18]
  1. ;^ Locked [19] ^ Asthma Cont [20] ^ SNOMED CT [21] ^ Provider Text [22] ^ qualifiers [23]
  1. ;^ Problem [24] ^ Ecode [25] ^ ICD Name [26] ^ ICD IEN [27] ^ Norm/Abn [28] ^ Laterality [29]
  1. GET(RET,INP) ;EP
  1. N CNT,REC,VIEN,VPOVIEN,FORMAT,IEN,PRV,PNAR,POV,ICD,ICDNAME,VDATE,DFN,CT,CT2,DESC
  1. N STAGE,MOD,CAUSE,REVISIT,PRIM,ONSET,IDT,IPL,ICAU,FNUM,OFF,ASTHMA,CONTROL,LINE,LST,LAT,LATEXT
  1. N SMDATA,SMCNCPCT,SMCNCP,SNOMEDCT,SNOMEDTX,PROVTEXT,QUAL,PROB,EPIS,ICCODE,ICCIEN,ICDDATA,NORM,FRAC,FRACTXT
  1. ;MSC/MGH - 07/08/09 - Offset created to support VistA and RPMS
  1. S OFF=$S($G(DUZ("AG"))="I":0,1:9999999)
  1. S LATEXT=""
  1. S RET=$$TMPGBL^BGOUTL
  1. S FNUM=$$FNUM
  1. S VIEN=+INP
  1. S VPOVIEN=$P(INP,U,2)
  1. S FORMAT=+$P(INP,U,3)
  1. S (CNT,IEN)=0
  1. F S IEN=$O(^AUPNVPOV("AD",VIEN,IEN)) Q:'IEN D
  1. .I VPOVIEN,VPOVIEN'=IEN Q
  1. .S REC=$G(^AUPNVPOV(IEN,0))
  1. .Q:REC=""
  1. .S PRV=$P($G(^AUPNVPOV(IEN,12)),U,4)
  1. .S:PRV PRV=$P($G(^VA(200,PRV,0)),U)
  1. .S PNAR=$$GET1^DIQ(9000010.07,IEN,.04)
  1. .Q:PNAR=""
  1. .;S PNAR=$P(REC,U,4)
  1. .S VDATE=$$FMTDATE^BGOUTL($P($G(^AUPNVSIT(VIEN,0)),U))
  1. .I FORMAT=1 D
  1. ..S:$L(PNAR) CNT=CNT+1,@RET@(1)=$S(CNT=1:"",1:@RET@(1)_"; ")_PNAR
  1. .E I FORMAT=2 D
  1. ..S:$L(PNAR) CNT=CNT+1,@RET@(CNT)=CNT_") "_PNAR_":"
  1. .E D
  1. ..S POV=+REC
  1. ..;IHS/MSC/MGH Patch 12 changes
  1. ..S ICDDATA=$$ICDDX^ICDEX(POV,VDATE,"","I")
  1. ..S ICD=$P(ICDDATA,U,2),ICDNAME=$P(ICDDATA,U,4)
  1. ..Q:ICD=""
  1. ..S F=$P($G(^AUPNVSIT(VIEN,0)),U,6),DFN=$P($G(^AUPNVSIT(VIEN,0)),U,5)
  1. ..I F S FAC=$P($G(^AUTTLOC(F,0)),U,10),FACNAM=$P($G(^(0)),U)
  1. ..E S (FAC,FACNAM)=""
  1. ..S:FACNAM FACNAM=$P($G(^DIC(4,FACNAM,0)),U)
  1. ..S STAGE=$P(REC,U,5)
  1. ..S MOD=$$EXTERNAL^DILFD(FNUM,.06,,$P(REC,U,6))
  1. ..S CAUSE=$$EXTERNAL^DILFD(FNUM,.07,,$P(REC,U,7))
  1. ..S REVISIT=$$EXTERNAL^DILFD(FNUM,.08,,$P(REC,U,8))
  1. ..S PRIM=$P(REC,U,12)
  1. ..S PRIM=$$EXTERNAL^DILFD(FNUM,.12,,$S($L(PRIM):PRIM,1:"S"))
  1. ..I DUZ("AG")="I" S ONSET=$$FMTDATE^BGOUTL($P(REC,U,17))
  1. ..E S ONSET=$$FMTDATE^BGOUTL($P($G(^AUPNVPOV(IEN,9999999)),U,17))
  1. ..S IDT=$$FMTDATE^BGOUTL($P(REC,U,13))
  1. ..S IPL=$P(REC,U,11)
  1. ..S IPL=$$EXTERNAL^DILFD(FNUM,.11,,IPL)_"~"_IPL
  1. ..S ICCIEN=$P(REC,U,9)
  1. ..S (ICCODE,ICAU)=""
  1. ..;IHS/MSC/MGH Patch 12
  1. ..S:ICCIEN ICAU=$P($$ICDDX^ICDEX(ICCIEN,VDATE,"","I"),U,4),ICCODE=$P($$ICDDX^ICDEX(ICCIEN,VDATE,"","I"),U,2)
  1. ..;CHECK FOR ASTHMA DX PATCH 10 check for entry only on this visit
  1. ..S CONTROL=""
  1. ..;MSC/DKA Patch 13 - Add SNOMED CT and Provider Text
  1. ..S SMDATA=$G(^AUPNVPOV(IEN,11)),SMCNCPCT=$P(SMDATA,U,1)
  1. ..S SMCNCP=$$CONC^BSTSAPI(SMCNCPCT_"^^^1")
  1. ..S SNOMEDCT=$P(SMCNCP,U,3),SNOMEDTX=$P(SMCNCP,U,4)
  1. ..;S PROVTEXT=$P($P(SNOMEDCT,U,4),"|",2)
  1. ..S PROVTEXT=$P(PNAR,"|",2)
  1. ..;IHS/MSC/MGH Add in SNOMED code for asthma check
  1. ..I DUZ("AG")="I" D
  1. ...S ASTHMA=$$CHECK^BGOASLK(ICD,SNOMEDCT)
  1. ...I ASTHMA=1 D
  1. ....S LEVEL=$$ACONTROL^BGOASLK(DFN,VIEN)
  1. ....;Patch 20 return both IEN and control
  1. ....S CONTROL=$P(LEVEL,U,2)_";"_$P(LEVEL,U)
  1. ....I LEVEL="" S CONTROL=";NONE RECORDED"
  1. ..S QUAL=$$GETQUAL^BGOVPOV1(IEN)
  1. ..S EPIS=$P(QUAL,U,2),QUAL=$P(QUAL,U,1)
  1. ..S PROB=$P(REC,U,16)
  1. ..S NORM=$$GET1^DIQ(9000010.07,IEN,.29,"I") ;P18
  1. ..I NORM'="" D
  1. ...D GETLST^XPAR(.LST,"ALL","BGO NORMAL/ABNORMAL")
  1. ...F I=1:1:LST D
  1. ....S ITEM=$P(LST(I),";",3)
  1. ....I ITEM=NORM S NORM=NORM_";"_$P($P(LST(I),U,2),";",1)
  1. ..;IHS/MSC/MGH return laterality
  1. ..S LAT=$$GET1^DIQ(9000010.07,IEN,1104) ;p20
  1. ..I LAT'="" D
  1. ...S LATEXT=$$CVPARM^BSTSMAP1("LAT",$P(LAT,"|",2))
  1. ..;IHS/MSC/MGH return fracture data
  1. ..S FRAC=$$GET1^DIQ(9000010.07,IEN,1106,"I") ;p23
  1. ..S FRACTXT=$$CVPARM^BSTSMAP1("HEAL",FRAC)
  1. ..;S CNT=CNT+1,@RET@(CNT)=IEN_U_VDATE_U_FAC_U_FACNAM_U_ICD_U_U_PNAR_U_MOD_U_ONSET_U_STAGE_U_REVISIT_U_CAUSE_U_IDT_U_ICAU_U_IPL_U_PRIM_U_PRV_U_VIEN_U_$$ISLOCKED^BEHOENCX(VIEN)_U_CONTROL
  1. ..S LINE=IEN_U_VDATE_U_FAC_U_FACNAM_U_ICD_U_EPIS_U_PNAR_U_MOD_U_ONSET_U_STAGE_U_REVISIT_U_CAUSE_U_IDT_U_ICAU
  1. ..S LINE=LINE_U_IPL_U_PRIM_U_PRV_U_VIEN_U_$$ISLOCKED^BEHOENCX(VIEN)_U_CONTROL_U_SNOMEDTX_U_PROVTEXT_U_QUAL_U_PROB_U_ICCODE_U_ICDNAME_U_POV_U_NORM_U_LATEXT_U_FRACTXT_"|"_FRAC
  1. ..S CNT=CNT+1,@RET@(CNT)=LINE
  1. Q
  1. ; Delete a VPOV entry
  1. DEL(RET,VPOV,PROB) ;EP
  1. N IEN,VIEN,FDA,OKAY,ERR
  1. I $G(PROB) D
  1. .S VIEN=$P($G(^AUPNVPOV(VPOV,0)),U,3)
  1. .Q:'+VIEN
  1. .S IEN="" S IEN=$O(^AUPNPROB(PROB,14,"B",VIEN,IEN)) Q:'+IEN D
  1. ..S FDA(9000011.14,IEN_","_PROB_",",.01)="@"
  1. ..D UPDATE^DIE("","FDA","OKAY","ERR")
  1. D VFDEL^BGOUTL2(.RET,$$FNUM,VPOV)
  1. Q
  1. ; Checks validity of ICD code
  1. ; ICDIEN = ICD IEN
  1. ; ACTDT = Active Date
  1. ; Returns null if valid or -n^error text if not
  1. CHKICD(ICDIEN,ACTDT) ;EP
  1. N RET,X
  1. S RET=""
  1. S ACTDT=$G(ACTDT,DT)
  1. ;IHS/MSC/MGH Patch 12
  1. S X=$$ICDDX^ICDEX(ICDIEN,ACTDT,"","I")
  1. I X<0 S RET=$$ERR^BGOUTL(1092)
  1. E I '$P(X,U,10) S RET=$$ERR^BGOUTL(1093)
  1. I RET'="" Q RET
  1. I $P(X,U,11)'="",$P(X,U,11)'=$P(^DPT(DFN,0),U,2) S RET=$$ERR^BGOUTL(1095)
  1. E S RET=""
  1. Q RET
  1. ;
  1. CHRTREVW(RET,VIEN) ;EP
  1. N VCODE,SNO,X,DESC,TXT,IMP,VDTE,FAC,PICD
  1. S RET=0
  1. S VDTE=$P($G(^AUPNVSIT(VIEN,0)),U,1)
  1. S VCODE=$$GET^XPAR("ALL","BGO POV DEFAULT CHART",1,"E") ;P6
  1. S FAC=$$GET1^DIQ(9000010,VIEN,.06,"I")
  1. ;P14 Changes added for ICD-10 conversion
  1. I $$AICD^BGOUTL2 D
  1. .S IMP=$$IMP^ICDEX("10D",DT)
  1. .I IMP<VDTE&(VCODE["V") S VCODE="Z02.9"
  1. .;I VCODE="" D
  1. .;.I IMP<VDTE S VCODE="Z02.9"
  1. .;.E S VCODE="V68.9"
  1. E I VCODE="" S VCODE="V68.9"
  1. S SNO=107728002
  1. S X=$$CONC^BSTSAPI(SNO_"^^^1")
  1. Q:X=""
  1. S DESC=$P(X,U,3)
  1. S PICD=$P(X,U,5)
  1. S TXT="CHART REVIEW"
  1. D TELECHRT(.RET,VIEN,"C",VCODE,TXT,SNO,DESC,FAC,PICD)
  1. Q
  1. ;
  1. TELEPHON(RET,VIEN) ;EP
  1. N VCODE,SNO,X,DESC,TXT,VDTE,PICD
  1. S RET=0
  1. S VDTE=$P($G(^AUPNVSIT(VIEN,0)),U,1)
  1. S VCODE=$$GET^XPAR("ALL","BGO POV DEFAULT TELEPHONE",1,"E") ;P6
  1. S FAC=$$GET1^DIQ(9000010,VIEN,.06,"I")
  1. ;Changes added for ICD-10 conversion
  1. I $$AICD^BGOUTL2 D
  1. .S IMP=$$IMP^ICDEX("10D",DT)
  1. .I IMP<VDTE&(VCODE["V") S VCODE="Z71.9"
  1. E I VCODE="" S VCODE="V65.9"
  1. S SNO=185317003
  1. S X=$$CONC^BSTSAPI(SNO_"^^^1")
  1. Q:X=""
  1. S DESC=$P(X,U,3)
  1. S PICD=$P(X,U,5)
  1. S TXT="TELEPHONE CALL"
  1. D TELECHRT(.RET,VIEN,"T",VCODE,TXT,SNO,DESC,FAC,PICD)
  1. Q
  1. TELECHRT(RET,VIEN,VCAT,VCODE,TXT,SNO,DESC,FAC,PICD) ;
  1. N DFN,X,DEL,SPROB,PROB,SPEC,PROBSTAT
  1. Q:$$ISLOCKED^BEHOENCX(VIEN)
  1. S SPEC=1
  1. S X=$G(^AUPNVSIT(+VIEN,0))
  1. S DFN=$P(X,U,5)
  1. Q:'DFN
  1. Q:$P(X,U,7)'=VCAT
  1. I '$D(^AUPNVPOV("AD",VIEN)) D
  1. .;Next, see if this already exists as a problem on the patients list
  1. .S MATCH=0,SPROB=""
  1. .S PROB="" F S PROB=$O(^AUPNPROB("APCT",DFN,SNO,PROB)) Q:PROB=""!(MATCH=1) D
  1. ..S DEL=$$GET1^DIQ(9000011,PROB,2.02)
  1. ..I DEL="" S MATCH=1,SPROB=PROB
  1. .S PROBSTAT=$$GET1^DIQ(9000011,SPROB,.12,"I")
  1. .I PROBSTAT'="R" D UPSTAT^BGOPROB2(SPROB,"R") ;P20
  1. .I 'SPROB S SPROB=$$ADDPROB^BGOCPTP3(DFN,SNO,DESC,VCODE,FAC,SPEC,"Routine/Admin")
  1. .D SET(.RET,U_VIEN_U_SPROB_U_DFN_U_TXT_U_DESC_U_SNO_U_VCODE,"","","",SPEC)
  1. Q
  1. ; Add/Edit VPOV data
  1. ; INP = VPOV IEN [1] ^ Visit IEN [2] ^ Problem IEN [3] ^ Patient IEN [4] ^ Prov Text [5] ^ Descriptive CT [6] ^
  1. ; SNOMED CT [7] ^ ICD code [8] ^ Primary/Secondary [9] ^ Provider IEN [10]^ asthma control [11] ^ norm/abn [12] ^ laterality [13] ^ fracture [14]
  1. ; QUAL = Q[1] ^ TYPE [2] ^IEN (If edit) [3] ^ SNOMED [4] ^ BY [5] ^ WHEN [6] ^DEL [7]
  1. ; INJ = Cause DX[1] ^ Injury Code [2] ^ Injury Place [3] ^ First/Revisit [4] ^ Injury Dt [5] ^ Onset Date [6]
  1. ; NORM = normal/abnormal codes
  1. ; SPEC = Special cases
  1. SET(RET,INP,QUAL,INJ,NORM,SPEC) ;EP
  1. N VIEN,FNUM,OFF,VFIEN,PRIEN,RET2,ADD,ADDICD,ADDIEN,DFN,DUP,FIVE,FRAC
  1. S RET="",FNUM=$$FNUM,RET2="",DUP="",FIVE=""
  1. S SPEC=$G(SPEC)
  1. S INJ=$G(INJ)
  1. S QUAL=$G(QUAL)
  1. S NORM=$G(NORM)
  1. S VIEN=$P(INP,U,2)
  1. ;MSC/MGH - 07/08/09 - Offset to support VistA and RPMS
  1. S OFF=$S($G(DUZ("AG"))="I":0,1:9999999)
  1. S VFIEN=+INP
  1. S PRIEN=$P(INP,U,3)
  1. S DFN=$P(INP,U,4)
  1. ;Check to see if it was missed
  1. N X,Y,MATCH
  1. S MATCH=0
  1. ;IHS/MSC/MGH changed for edits now since ICD can change
  1. ;I +VFIEN S SPEC=1
  1. I 'VFIEN D
  1. .Q:PRIEN=""
  1. .S X="" F S X=$O(^AUPNVPOV("AD",VIEN,X)) Q:X=""!(MATCH=1) D
  1. ..S Y=$P($G(^AUPNVPOV(X,0)),U,16)
  1. ..I Y=PRIEN S VFIEN=X,MATCH=1
  1. D SET2^BGOVPOV2(.RET,INP,QUAL,INJ,VFIEN,.DUP,.FIVE,SPEC,NORM) ;Set the main ICD as POV
  1. ;Check for additional ICDs
  1. D ADDICD^BGOVPOV2(.RET,INP,QUAL,INJ,VFIEN,.DUP,.FIVE,SPEC)
  1. ;Add updated/reviewed data
  1. D UPREV^BGOVPOV1(.RET2,DFN,VIEN)
  1. Q
  1. ; Check validity of an ICD9 code
  1. ; INP = ICD IEN ^ Patient IEN ^ Visit Date ^ SNOMED ^ Laterality
  1. ; .RET = Returned as -1^Reason if not valid or null if valid
  1. CHECK(RET,INP) ;EP
  1. ;Patch 11 changed input to fileman date
  1. N DFN,ICDIEN,VDT,X,ANSWER,PVIEN,ITEM,ITEM2,SNO,LAT,ITEM3
  1. S ANSWER=""
  1. S RET=""
  1. S ICDIEN=+INP
  1. Q:'ICDIEN
  1. S DFN=$P(INP,U,2)
  1. S VDT=$P(INP,U,3)
  1. S SNO=$P(INP,U,4)
  1. S LAT=$P(INP,U,5)
  1. I VDT["/" D DT^DILF("T",VDT,.ANSWER)
  1. I ANSWER'=-1 S VDT=ANSWER
  1. S RET=$$CHKICD(ICDIEN,VDT)
  1. I RET="" D
  1. .S PVIEN="" F S PVIEN=$O(^AUPNVPOV("AD",VIEN,PVIEN)) Q:PVIEN="" D
  1. ..S ITEM=$P($G(^AUPNVPOV(PVIEN,0)),U,1)
  1. ..;I ITEM=ICDIEN S RET="-1^ICD already used in this visit"
  1. ..S ITEM2=$P($G(^AUPNVPOV(PVIEN,11)),U,1)
  1. ..S ITEM3=$P($G(^AUPNVPOV(PVIEN,11)),U,4)
  1. ..I SNO]"",ITEM2=SNO,ITEM=ICDIEN,ITEM3=LAT S RET="-99^SNOMED/Laterality code already used in this visit"
  1. Q
  1. ; Return recent POV's by patient or by visit
  1. ; INP = Patient IEN ^ Max Records ^ Visit IEN
  1. ; RET returned as a list of records in the format:
  1. ; Visit Date [1] ^ Facility ID [2] ^ Facility Name [3] ^ ICD Code [4] ^ ICD Text [5] ^
  1. ; Provider Narrative [6] ^ V POV IEN [7] ^ Visit IEN [8] ^ ICD IEN [9] ^ Visit Locked [10] ^
  1. ; Onset Date [11] ^ Asthma Control [12] ^ SNOMED CT [13]
  1. RECENT(RET,INP) ;EP
  1. N DFN,CNT,VIEN,MAX,VPOV,VDT
  1. S RET=$$TMPGBL^BGOUTL
  1. S DFN=$P(INP,U)
  1. S MAX=$P(INP,U,2)
  1. S:'MAX MAX=9999
  1. S VIEN=$P(INP,U,3)
  1. S CNT=0
  1. D RECBYVIS:VIEN,RECBYPAT:'VIEN
  1. Q
  1. ; VPOV's by patient
  1. RECBYPAT S VDT=0
  1. F S VDT=$O(^AUPNVPOV("AA",DFN,VDT)) Q:'VDT D Q:CNT'<MAX
  1. .S VPOV=0
  1. .F S VPOV=$O(^AUPNVPOV("AA",DFN,VDT,VPOV)) Q:'VPOV D RECBUILD Q:CNT'<MAX
  1. Q
  1. ; VPOV's by visit
  1. RECBYVIS S VPOV=0
  1. F S VPOV=$O(^AUPNVPOV("AD",VIEN,VPOV)) Q:'VPOV D RECBUILD
  1. Q
  1. RECBUILD N REC,POV,ICD,ICDNAME,VIEN,F,FAC,FACNAM,VSIT,VDATE,PNAR,ONSET,CONTROL,SNOMED,DESCT,FRAC,FRACTXT
  1. S REC=$G(^AUPNVPOV(VPOV,0))
  1. S POV=+REC
  1. Q:'POV
  1. S VIEN=$P(REC,U,3)
  1. Q:'VIEN
  1. S VSIT=$G(^AUPNVSIT(VIEN,0))
  1. S F=$P(VSIT,U,6)
  1. I F S FAC=$P($G(^AUTTLOC(F,0)),U,10),FACNAM=$P($G(^(0)),U)
  1. E S (FAC,FACNAM)=""
  1. S:FACNAM FACNAM=$P($G(^DIC(4,FACNAM,0)),U)
  1. S VDATE=$$FMTDATE^BGOUTL(+VSIT)
  1. ;Patch 12
  1. S ICD=$P($$ICDDX^ICDEX(POV,VDATE,"","I"),U,2)
  1. S ICDNAME=$P($$ICDDX^ICDEX(POV,VDATE,"","I"),U,4)
  1. Q:ICDNAME=""
  1. ;end patch 12 changes
  1. S PNAR=$$GET1^DIQ(9000010.07,VPOV,.04)
  1. Q:PNAR=""
  1. S SNOMED=$$GET1^DIQ(9000010.07,VPOV,1101)
  1. S DESCT=$$GET1^DIQ(9000010.07,VPOV,1102)
  1. S ONSET=$$FMTDATE^BGOUTL($P(REC,U,17))
  1. ;CHECK FOR ASTHMA DX PATCH 10 check for entry only on this visit
  1. S CONTROL=""
  1. I DUZ("AG")="I" D
  1. .S ASTHMA=$$CHECK^BGOASLK(ICD,DESCT)
  1. .I ASTHMA=1 S CONTROL=$P($$ACONTROL^BGOASLK(DFN,VIEN),U) I CONTROL="" S CONTROL="NONE RECORDED"
  1. ;Patch 23
  1. S FRAC=$$GET1^DIQ(9000010.07,VPOV,1106,"I")
  1. S FRACTXT=$$CVPARM^BSTSMAP1("HEAL",FRAC)
  1. S CNT=CNT+1
  1. S @RET@(CNT)=VDATE_U_FAC_U_FACNAM_U_ICD_U_ICDNAME_U_PNAR_U_VPOV_U_VIEN_U_POV_U_$$ISLOCKED^BEHOENCX(VIEN)_U_ONSET_U_CONTROL_U_SNOMED_U_FRACTXT
  1. Q
  1. ; Return V File #
  1. FNUM() Q 9000010.07