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

BEDDPOV.m

Go to the documentation of this file.
  1. BEDDPOV ;GDIT/HS/BEE-BEDD Utility Routine 4 ; 08 Nov 2011 12:00 PM
  1. ;;2.0;BEDD DASHBOARD;;Jun 04, 2014;Build 13
  1. ;
  1. Q
  1. ;
  1. DXLKP(VALUE,APCDD,SEX,FILTER) ;EP - Lookup to File 80 (DX)
  1. ;
  1. ;Input parameters
  1. ; VALUE - The text string to look up
  1. ; APCDD - The date to search on
  1. ; SEX - The patient sex (optional)
  1. ; FILTER - 0 - No Cause of Injury, 1 - Only Cause of Injury, 2 - All codes (Default 0)
  1. ;
  1. ;Error Trapping
  1. NEW $ESTACK,$ETRAP S $ETRAP="D ERR^BEDDPOV D UNWIND^%ZTER" ; SAC 2009 2.2.3.17
  1. ;
  1. NEW I,BEDDLEX,LEX
  1. ;
  1. ;Make sure needed values are defined
  1. S X="S:$G(U)="""" U=""""" X X
  1. S X="S:$G(DT)="""" DT=$$DT^XLFDT" X X
  1. ;
  1. S SEX=$G(SEX)
  1. S:$G(FILTER)="" FILTER=0
  1. ;
  1. ;Reset scratch global
  1. K ^TMP("BEDDDX",$J)
  1. ;
  1. ;AICD and Lexicon ICD-10 have been installed. Use them for lookups
  1. D LEX(VALUE,APCDD,SEX,.BEDDLEX,FILTER)
  1. ;
  1. ;Place returned information in scratch global
  1. S I="" F S I=$O(BEDDLEX(I)) Q:I="" S ^TMP("BEDDDX",$J,I)=BEDDLEX(I)
  1. ;
  1. Q
  1. ;
  1. LEX(BEDDTXT,APCDD,SEX,BEDDLEX,FILTER) ;EP - Perform Lexicon lookup
  1. ;
  1. ;This call was adapted from APCDAPOV
  1. ;Input parameters
  1. ; BEDDTXT - The text string to look up
  1. ; APCDD - The date to search on
  1. ; SEX - The patient sex
  1. ; FILTER - 0 - No Cause of Injury, 1 - Only Cause of Injury, 2 - All codes (Default 0)
  1. ;
  1. ;Return informaton
  1. ; BEDDLEX - Array of matches
  1. ; Format: BEDDLEX("LIST",#)=IEN^CODE^CODE DESCRIPTION
  1. ;
  1. NEW APCDIMP,DIC,I,ICDV,LEX,X,RET
  1. ;
  1. ;Quit if no search string
  1. I $G(BEDDTXT)="" Q
  1. ;
  1. ;Convert text to uppercase
  1. S BEDDTXT=$$UPPER^BEDDUTID(BEDDTXT)
  1. ;
  1. ;Make sure initial variables are set
  1. S:$G(U)="" U="^"
  1. S:$G(DT)="" DT=$$DT^XLFDT
  1. S:$G(APCDD)="" APCDD=DT
  1. S:$G(FILTER)="" FILTER=0
  1. ;
  1. ;Retrieve the codeset in place
  1. S APCDIMP=$$IMP^AUPNSICD(APCDD)
  1. ;
  1. ;Handle uncoded diagnosis entry
  1. ;
  1. ;Look up .9999 code (or switch to ZZZ.999 if ICD-10)
  1. I BEDDTXT=".9999",FILTER'=1 D G XITL
  1. . NEW %
  1. . S %=$$ICDDX^AUPNVUTL($S(APCDIMP=1:".9999",1:"ZZZ.999"),,"E")
  1. . S BEDDLEX(1)=$P(%,U,1,2)_U_$P(%,U,4)
  1. ;
  1. ;Look for ICD-10 Uncoded diagnosis code
  1. I APCDIMP=30,((BEDDTXT="ZZZ.999")!($E(BEDDTXT,1,4)="ZZZ.")),FILTER'=1 D G XITL
  1. . NEW %
  1. . S %=$$ICDDX^AUPNVUTL($S(APCDIMP=1:".9999",1:"ZZZ.999"),,"E")
  1. . S BEDDLEX(1)=$P(%,U,1,2)_U_$P(%,U,4)
  1. ;
  1. ;Look up Uncoded term
  1. I (($E(BEDDTXT,1,7)="UNCODED")!(BEDDTXT["UNCODED D")),FILTER'=1 D G XITL
  1. . NEW %
  1. . S %=$$ICDDX^AUPNVUTL($S(APCDIMP=1:".9999",1:"ZZZ.999"),,"E")
  1. . S BEDDLEX(1)=$P(%,U,1,2)_U_$P(%,U,4)
  1. ;
  1. ;Not an uncoded diagnosis, call the Lexicon
  1. D LEX^AMERUTIL(BEDDTXT,100,FILTER,$P(APCDD,"."),SEX,.RET)
  1. ;
  1. ;I APCDIMP=1 D ICD9(BEDDTXT,$P(APCDD,"."),.LEX)
  1. ;I APCDIMP=30 D ICD10(BEDDTXT,$P(APCDD,"."),.LEX)
  1. ;
  1. ;Loop through results and format
  1. S I=0 F S I=$O(RET(I)) Q:I="" D
  1. . NEW ND,IEN,CODE,DESC
  1. . S ND=$G(RET(I))
  1. . S IEN=$P(ND,U)
  1. . S CODE=$P(ND,U,2)
  1. . S DESC=$P(ND,U,3)
  1. . ;S DESC=$P(ND,U,2)
  1. . ;S CODE=$P($P(DESC,"ICD-9-CM ",2),")")
  1. . ;S DESC=$E($P(DESC," (ICD-9-CM"),1,159)
  1. . S BEDDLEX(I)=IEN_U_CODE_U_DESC
  1. . K RET(I)
  1. ;
  1. XITL Q
  1. ;
  1. ICD9(XTEXT,APCDDATE,LEX) ;Perform Lexicon ICD9 lookup
  1. Q
  1. ;
  1. ICD10(XTEXT,APCDDATE,LEX) ;Perform Lexicon ICD10 lookup
  1. ;
  1. NEW DIC
  1. K ^TMP("LEXSCH"),^TMP("LEXFND"),LEX("LIST")
  1. D CONFIG^LEXSET("10D","10D",APCDDATE)
  1. S DIC("S")="I $$ICDONE1^APCDAPOV(+Y,LEXVDT)"
  1. D LOOK^LEXA(XTEXT,"10D",10,"10D",APCDDATE)
  1. Q
  1. ;
  1. XIT K Y,X,DO,D,DD,DIPGM,APCDTPCC
  1. Q
  1. ;
  1. ICD(ICDIEN,VDT) ;Return ICD information
  1. ;
  1. ;Input:
  1. ; ICDIEN - Pointer to file 80
  1. ; VDT - Date to search on
  1. ;
  1. ;Output:
  1. ; Standard AICD ICD data string return
  1. ;
  1. NEW ICDINFO,X
  1. ;
  1. ;Make sure needed values are defined
  1. S X="S:$G(U)="""" U=""""" X X
  1. S X="S:$G(DT)="""" DT=$$DT^XLFDT" X X
  1. ;
  1. S:$G(VDT)="" VDT=DT
  1. I $$AICD^AMERUTIL() S ICDINFO=$$ICDDX^ICDEX(ICDIEN,VDT)
  1. E S ICDINFO=$$ICDDX^ICDCODE(ICDIEN,VDT)
  1. ;
  1. Q ICDINFO
  1. ;
  1. ERR ;EP - Capture the error
  1. D ^%ZTER
  1. Q
  1. ;
  1. LIST(VIEN,DUZ,DXLIST) ;EP - Return list of V POV entries on file for visit
  1. ;
  1. ;Input variables
  1. ; VIEN - Visit IEN
  1. ; DUZ - User IEN
  1. ;
  1. ;Output array
  1. ; DXLIST - DXLIST(#)= [1] V POV IEN [2] Code [3] Code Description [4] P/S [5] Prov Narrative [6] Injury (Yes/No)
  1. ;
  1. ;Verify visit
  1. I $G(VIEN)="" Q
  1. ;
  1. NEW AMERPOV,POV,STS
  1. ;
  1. ;Make sure initial variables are set
  1. S X="S:$G(U)="""" U=""^""" X X
  1. S X="S:$G(DT)="""" DT=$$DT^XLFDT" X X
  1. ;
  1. ;Define DUZ variable
  1. I $G(DUZ)="" S STS="Missing DUZ" G XSAVE
  1. D DUZ^XUP(DUZ)
  1. ;
  1. ;Retrieve V POV entries
  1. S STS=$$POV^AMERUTIL("",VIEN,.AMERPOV)
  1. ;
  1. ;Format for BEDD
  1. S POV="" F S POV=$O(AMERPOV(POV)) Q:POV="" D
  1. . NEW VPOVIEN,ICDIEN,CODE,DESC,PS,NARR,N
  1. . S N=AMERPOV(POV)
  1. . S DXLIST(POV)=$P(N,U,6)_U_$P(N,U)_U_$P(N,U,5)_U_$P(N,U,2)_U_$P(N,U,3)_U_$P(N,U,7)
  1. ;
  1. Q
  1. ;
  1. GETDX(VPOV) ;EP - Retrieve V POV information for a particular entry
  1. ;
  1. NEW RESULT,CODE,PS,NARR,DESC,VIEN,VDATE,ICDINFO,CODEIEN,INJ
  1. ;
  1. ;Check for VPOV entry
  1. I $G(VPOV)="" Q ""
  1. ;
  1. ;Make sure initial variables are set
  1. S X="S:$G(U)="""" U=""^""" X X
  1. S X="S:$G(DT)="""" DT=$$DT^XLFDT" X X
  1. ;
  1. ;Get the visit IEN and visit date
  1. S VIEN=$$GET1^DIQ(9000010.07,VPOV_",",".03","I") Q:VIEN="" ""
  1. S VDATE=$P($$GET1^DIQ(9000010,VIEN_",",.01,"I"),".")
  1. ;
  1. S RESULT=""
  1. ;
  1. S CODEIEN=$$GET1^DIQ(9000010.07,VPOV_",",".01","I") Q:CODEIEN="" ;Code IEN
  1. S CODE=$$GET1^DIQ(9000010.07,VPOV_",",".01","E") Q:CODE="" "" ;Code
  1. S PS=$$GET1^DIQ(9000010.07,VPOV_",",".12","I") ;Primary/Secondary
  1. S NARR=$$GET1^DIQ(9000010.07,VPOV_",",".04","E") Q:NARR="" ;Provider Narrative
  1. ;
  1. ;Get whether an injury - Flag if injury date or cause of injury
  1. S INJ="No"
  1. I $$GET1^DIQ(9000010.07,VPOV_",",.13,"I") S INJ="Yes"
  1. E I $$GET1^DIQ(9000010.07,VPOV_",",.09,"I") S INJ="Yes"
  1. ;
  1. ;Code Description
  1. I $$AICD^AMERUTIL() S ICDINFO=$$ICDDX^ICDEX(CODEIEN,VDATE)
  1. E S ICDINFO=$$ICDDX^ICDCODE(CODEIEN,VDATE)
  1. S DESC=$P(ICDINFO,U,4) S:$E(DESC,1)="*" DESC=$E(DESC,2,9999)
  1. ;
  1. ;Return the results
  1. S RESULT=VPOV_U_CODE_U_DESC_U_PS_U_NARR_U_CODEIEN_U_INJ
  1. ;
  1. Q RESULT
  1. ;
  1. DEL(VPOVIEN,DUZ) ;Delete a POV entry
  1. ;
  1. NEW VPOVUPD,ERROR,AUPNVSIT
  1. ;
  1. I $G(VPOVIEN)="" Q 0
  1. ;
  1. ;Make sure initial variables are set
  1. S X="S:$G(U)="""" U=""^""" X X
  1. S X="S:$G(DT)="""" DT=$$DT^XLFDT" X X
  1. ;
  1. ;Define DUZ variable
  1. I $G(DUZ)="" S STS="Missing DUZ" G XSAVE
  1. D DUZ^XUP(DUZ)
  1. ;
  1. ;Get the visit IEN
  1. S AUPNVSIT=$$GET1^DIQ(9000010.07,VPOVIEN,".03","I")
  1. ;
  1. S VPOVUPD(9000010.07,VPOVIEN_",",.01)="@"
  1. D FILE^DIE("","VPOVUPD","ERROR")
  1. ;
  1. ;Flag that visit was updated
  1. D MOD^AUPNVSIT
  1. ;
  1. I $D(ERROR) Q 0
  1. Q 1
  1. ;
  1. SAVE(VPOVIEN,ICDIEN,PNARR,PS,CODE,INJ,VIEN,DUZ,DFN) ;Add/Update POV entry
  1. ;
  1. NEW STS,IN,X,APCDALVR,APCDPAT,APCDLOOK,APCDVSIT,APCDDATE,APCDTYPE,APCDCAT,APCDLOC,APCDCLN,PROV
  1. NEW APCDTDI,APCDTCD,APCDTPA,POVUPD,ERROR,ICD,AUPNVSIT,INJURY
  1. ;
  1. ;Make sure initial variables are set
  1. S X="S:$G(U)="""" U=""^""" X X
  1. S X="S:$G(DT)="""" DT=$$DT^XLFDT" X X
  1. ;
  1. ;Define DUZ variable
  1. I $G(DUZ)="" S STS="Missing DUZ" G XSAVE
  1. D DUZ^XUP(DUZ)
  1. ;
  1. ;Reset STS
  1. S STS=0
  1. ;
  1. ;Get the provider narrative IEN
  1. S PNARR=$$FNDNARR(PNARR)
  1. ;
  1. ;Get primary provider
  1. S PROV=""
  1. I $G(VIEN)>0 D
  1. . NEW IEN
  1. . ;
  1. . ;Loop through the list and find the primary provider
  1. . S IEN=0 F S IEN=$O(^AUPNVPRV("AD",VIEN,IEN)) Q:IEN="" D Q:+PROV
  1. .. NEW PS
  1. .. S PS=$$GET1^DIQ(9000010.06,IEN_",",.04,"I") Q:PS'="P"
  1. .. ;
  1. .. ;Get the primary provider
  1. .. S PROV=$$GET1^DIQ(9000010.06,IEN_",",.01,"I")
  1. . ;
  1. . ;If there isn't one yet, use DUZ
  1. . S:PROV="" PROV=$G(DUZ)
  1. ;
  1. ;Retrieve the Injury information
  1. I $G(INJ)="YES" D
  1. . NEW INJPL
  1. . ;
  1. . ;Retrieve injury information
  1. . D INJURY^BEDDINJ(VIEN,.INJURY)
  1. . S:$G(INJURY("INDAT"))]"" APCDTDI=$P(INJURY("INDAT"),".")
  1. . S:$G(INJURY("ICIEN"))]"" APCDTCD=INJURY("ICIEN")
  1. . S INJPL=""
  1. . S:$G(INJURY("INSET"))]"" INJPL=INJURY("INSET")
  1. . ;
  1. . ;Injury place
  1. . I INJPL]"" S INJPL=$$GET1^DIQ(9009083,INJPL_",",.01,"E")
  1. . ;
  1. . ;Valid PCC values
  1. . ;A:HOME-INSIDE;B:HOME-OUTSIDE;C:FARM;D:SCHOOL;E:INDUSTRIAL PREMISES;F:RECREATIONAL AREA;
  1. . ;G:STREET/HIGHWAY;H:PUBLIC BUILDING;I:RESIDENT INSTITUTION;J:HUNTING/FISHING;K:OTHER;L:UNKNOWN
  1. . S APCDTPA="L"
  1. . I INJPL["HIGHWAY" S APCDTPA="G"
  1. . E I INJPL["HOME" S APCDTPA="A"
  1. . E I INJPL["INDUSTRIAL" S APCDTPA="E"
  1. . E I INJPL["MINE" S APCDTPA="K"
  1. . E I INJPL["OTHER" S APCDTPA="K"
  1. . E I INJPL["PUBLIC" S APCDTPA="H"
  1. . E I INJPL["FARM" S APCDTPA="C"
  1. . E I INJPL["RECREATION" S APCDTPA="F"
  1. . E I INJPL["RESIDENT" S APCDTPA="I"
  1. . E I INJPL["UNSPECIFIED" S APCDTPA="L"
  1. . E I INJPL["SCHOOL" S APCDTPA="D"
  1. . E I INJPL["HUNTING" S APCDTPA="J"
  1. . E I INJPL["FISHING" S APCDTPA="J"
  1. ;
  1. ;Location
  1. S APCDLOC=$$GET1^DIQ(9000010,VIEN_",",.06,"I")
  1. ;
  1. ;Process Adds
  1. I +VPOVIEN=0 D
  1. . ;
  1. . NEW APCDALVR
  1. . ;
  1. . ;Set Patient
  1. . S APCDALVR("APCDPAT")=DFN ;Patient DFN
  1. . ;
  1. . ;Define Visit IEN
  1. . S APCDALVR("APCDVSIT")=VIEN ;Visit IEN
  1. . ;
  1. . ;Define External ICD code
  1. . S APCDALVR("APCDTPOV")=CODE
  1. . ;
  1. . ;Location
  1. . S APCDALVR("APCDLOC")=$S(APCDLOC'="":APCDLOC,1:DUZ(2))
  1. . ;
  1. . ;Determine which template to use
  1. . S APCDALVR("APCDATMP")="[APCDALVR 9000010.07 (ADD)]"
  1. . ;
  1. . ;Make the add call
  1. . D ^APCDALVR
  1. . ;
  1. . ;If success get V Pointer
  1. . I '$D(APCDALVR("APCDAFLG")) S VPOVIEN=$G(APCDALVR("APCDADFN"))
  1. . I $D(APCDALVR("APCDAFLG")) S STS=-1
  1. ;
  1. ;Now perform edits (add in extra fields for adds)
  1. S POVUPD(9000010.07,+VPOVIEN_",",.12)=$S(PS="YES":"P",1:"S") ;Primary/Secondary
  1. S POVUPD(9000010.07,+VPOVIEN_",",.04)=$S($G(PNARR)]"":PNARR,1:"@") ;Prov Narrative
  1. S POVUPD(9000010.07,+VPOVIEN_",",.13)=$S($G(APCDTDI)]"":APCDTDI,1:"@") ;Date of Injury
  1. S POVUPD(9000010.07,+VPOVIEN_",",.09)=$S($G(APCDTCD)]"":APCDTCD,1:"@") ;Cause of Injury
  1. S POVUPD(9000010.07,+VPOVIEN_",",.11)=$S($G(APCDTPA)]"":APCDTPA,1:"@") ;Injury Setting
  1. S POVUPD(9000010.07,+VPOVIEN_",",.01)=ICDIEN ;Code
  1. D FILE^DIE("","POVUPD","ERROR")
  1. ;
  1. ;Flag Visit update
  1. S AUPNVSIT=VIEN D MOD^AUPNVSIT
  1. ;
  1. XSAVE Q STS
  1. ;
  1. FNDNARR(NARR,CREATE) ;File narrative and return IEN
  1. N IEN,FDA,TRC,RET
  1. Q:'$L(NARR) ""
  1. S IEN=0,TRC=$E(NARR,1,30),NARR=$E(NARR,1,160),CREATE=$G(CREATE,1)
  1. F S IEN=$O(^AUTNPOV("B",TRC,IEN)) Q:'IEN Q:$P($G(^AUTNPOV(IEN,0)),U)=NARR
  1. Q:IEN!'CREATE IEN
  1. S FDA(9999999.27,"+1,",.01)=NARR
  1. S RET=$$UPDATE^BGOUTL(.FDA,"E",.IEN)
  1. Q $S(RET:RET,1:IEN(1))
  1. ;
  1. GETPOV(VIEN) ;Return POV information for visit
  1. ;
  1. I $G(VIEN)="" Q 0
  1. ;
  1. NEW POV,PRMCNT,DXCNT,CNT
  1. ;
  1. ;
  1. ;Make sure needed values are defined
  1. S X="S:$G(U)="""" U=""""" X X
  1. S X="S:$G(DT)="""" DT=$$DT^XLFDT" X X
  1. ;
  1. ;Reset values
  1. S (PRMCNT,DXCNT)=0
  1. ;
  1. ;Get POV information
  1. D POV^AMERUTIL("",VIEN,.POV)
  1. ;
  1. S CNT="" F S CNT=$O(POV(CNT)) Q:CNT="" D
  1. . S DXCNT=DXCNT+1 ;Total Dx entries
  1. . I $P(POV(CNT),"^",2)="P" S PRMCNT=PRMCNT+1 ;Total Primary Entries
  1. ;
  1. Q DXCNT_"^"_PRMCNT