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

VENPCC1H.m

Go to the documentation of this file.
  1. VENPCC1H ; IHS/OIT/GIS - MORE ENCOUNTER FORM DATA MINING ;
  1. ;;2.6;PCC+;;NOV 12, 2007
  1. ; PATCHED BY GIS 12/9/04 TO ADD RX PROVIDER. CLEANED UP RX CODE
  1. ;
  1. ; PROCESS PROBLEMS AND MED FOR VER 2.5
  1. ;
  1. DX(PRV,DFN) ; EP-GET PREFERRED DIAGNOSES
  1. NEW DIEN,GENERIC,ICD,IIEN,NAME,PTYPE,TOT,VAR,VAR1,X,%,INDX
  1. S PTYPE=$$CLASS(DFN) I PTYPE="" S STOP=1 Q
  1. S INDX=PRV_"."_PTYPE
  1. I '$D(^VEN(7.1,"AG",INDX)) S INDX=$$CP^VENPCCU(+$G(DEPTIEN))_"."_PTYPE
  1. I '$D(^VEN(7.1,"AG",INDX)) S INDX=$$GP^VENPCCU_"."_PTYPE
  1. S DIEN=0 F TOT=1:1:60 S DIEN=$O(^VEN(7.1,"AG",INDX,DIEN)) Q:'DIEN D
  1. . S X=$G(^VEN(7.1,DIEN,0)),ICD=$P(X,U,2),NAME=$P(X,U,3) I '$L(NAME) Q
  1. . S NAME=$TR(NAME,$C(34),""),NAME=$E(NAME,1,27)
  1. . S VAR="d"_TOT,VAR1=VAR_"c"
  1. . S @TMP@(1,VAR)=NAME,@TMP@(1,VAR1)=ICD
  1. . Q
  1. K @TMP@(0)
  1. Q
  1. ;
  1. PROB(DFN) ; EP-GET ACTIVE PROBLEMS
  1. I $G(DEFEF),$G(DEPTIEN),$P($G(^VEN(7.41,DEFEF,5)),U,17),$L($T(PROB^VENPCC1K)) D PROB^VENPCC1K(DFN,DEPTIEN) Q ; ALTERNATE PROBLEM LOOKUP
  1. NEW %,ICD,ICD9,IIEN,NARR,NIEN,PIEN,STAT,STOP,TOT,TYPE,VAR,VAR1,X,FVFLAG,MAXNARR,MAX
  1. S TOT=0,PIEN=999999999,MAXNARR=$$MAXNARR^VENPCCU(+$G(DEFEF))
  1. S MAX=$P($G(^VEN(7.41,DEFEF,1)),U) I 'MAX S MAX=20 ; MAX # PROBS DISPLAYED ; PATCHED BY GIS/OIT 10/15/05 ; PCC+ 2.5 PATCH 1
  1. F S PIEN=$O(^AUPNPROB("AC",DFN,PIEN),-1) Q:'PIEN D I $G(STOP) Q
  1. . S X=$G(^AUPNPROB(PIEN,0)),NIEN=$P(X,U,5),IIEN=+X,STAT=$P(X,U,12),TYPE=$P(X,4,U)
  1. . I NIEN,IIEN,STAT="A",TYPE=""
  1. . E Q
  1. . S NARR=$G(^AUTNPOV(NIEN,0)),ICD=$P($G(^ICD9(IIEN,0)),U),ICD9(IIEN)="" ; MARK THE ICD
  1. . S %="" I $P($G(^VEN(7.41,DEFEF,2)),U,12) S %=$P($G(^AUPNPROB(PIEN,0)),U,13) ; DATE OF ONSET REQUESTED
  1. . I % S NARR=NARR_" (Onset: "_$$FMTE^XLFDT(%,"1D")_")" ; APPEND DATE OF ONSET
  1. . S TOT=TOT+1 I TOT=MAX S STOP=1
  1. . S VAR="p"_TOT,VAR1=VAR_"c"
  1. . S @TMP@(1,VAR)=$E(NARR,1,MAXNARR),@TMP@(1,VAR1)=ICD
  1. . Q
  1. I $P($G(^VEN(7.41,DEFEF,2)),U,13) Q ; OPTION TO DISPLAY ONLY PROBLEMS - NO POVS
  1. POV ; ADD POVS TO THE LIST
  1. I TOT>(MAX-3) Q
  1. S TOT=TOT+1,%="",$P(%,"-",15)="",%=%_"POVs"_%
  1. S @TMP@(1,("p"_TOT))=$E(%,1,40),@TMP@(1,"p"_TOT_"c")=$E(%,1,8) ; INSERT THE POV DIVIDER LINE
  1. F S PIEN=$O(^AUPNVPOV("AC",DFN,PIEN),-1) Q:'PIEN D I $G(STOP) Q ; GET MOST RECENT POVS UP TO MAX #
  1. . S X=$G(^AUPNVPOV(PIEN,0)),NIEN=$P(X,U,4),IIEN=+X
  1. . I $D(ICD9(IIEN)) Q ; DONT ADD POV IF ITS ALREADY IN THE LIST!
  1. . S ICD9(IIEN)=""
  1. . S NARR=$G(^AUTNPOV(+$G(NIEN),0))
  1. . S ICD=$$FVICD^VENPCCU(PIEN) ; GET ICD CODE OR BLOCK ICD CODE OF A "FOREIGN" VISIT
  1. . I '$L(NARR) S NARR=$P($G(^ICD9(IIEN,0)),U,3) I '$L(NARR) S NARR="<missing narrative>"
  1. . S TOT=TOT+1 I TOT=MAX S STOP=1
  1. . S VAR="p"_TOT,VAR1=VAR_"c"
  1. . S @TMP@(1,VAR)=$E(NARR,1,MAXNARR),@TMP@(1,VAR1)=ICD
  1. . Q
  1. I '$G(HDR25) Q ; CHECK TO SEE IF EXTENDED HEADER FILE IS IN USE
  1. D POV^VENPCC1K(DFN) ; GET 30 MOST RECENT POVS
  1. D CSPOV^VENPCC1K(DFN,DEPTIEN) ; GET 30 MOST RECENT CLINIC-SPECIFIC POVS
  1. D MH^VENPCC1K(DFN) ; GER 15 MOST RECENT MENTAL HEALTH POVS
  1. Q
  1. ;
  1. MED(PRV,DFN) ; EP-GET RECENT MEDS
  1. N DATE,DAYS,DCD,EXT,MED,MIEN,QTY,RIEN,SIG,STOP,TOT,VAR,VIEN,SCAT,NTRX
  1. N X,X1,X2,REM,IDT,MAX,PER,STAT,REF,RED,EXP,CHM,Y,Z0,Z1
  1. N MAXNAME,MAXSIG,MAXREM,MAXRX,RXHDR,%,RXIEN,CHMFLG,SORT,CNT,STG,PASS1,RXSORT,CKCM
  1. K @TMP@(0)
  1. RXVAR ; SET GLOBAL RX VARIABLES
  1. S (IDT,TOT)=0
  1. S CFIGIEN=$$CFG^VENPCCU
  1. S MAX=$P($G(^VEN(7.41,+$G(DEFEF),2)),U,4) I 'MAX S MAX=15 ; MAX # OF RXS ALLOWED (UP TO 60) ; PATCHED BY GIS/OIT 10/15/05 ; PCC+ 2.5 PATCH 1
  1. S X=$G(^VEN(7.41,DEFEF,14))
  1. S MAXRX=$P(X,U) I 'MAXRX S MAXRX=150 ; MAX LENGTH OF COMPLETE RX
  1. S MAXNAME=$P(X,U,2) I 'MAXNAME S MAXNAME=30 ; MAX LENGTH OF DRUG NAME
  1. S MAXSIG=$P(X,U,3) I 'MAXSIG S MAXSIG=30 ; MAX LENGTH OF SIG
  1. S MAXREM=$P(X,U,4) I 'MAXREM S MAXREM=49 ; MAX LENGTH OF REMARK
  1. S RXSORT=+$P($G(^VEN(7.41,DEFEF,14)),U,5) ; SHOULD THE Rx LIST BE SORTED?
  1. S RXHDR="PRESCRIPTIONS" ; DYNAMIC RX HEADER FLAG
  1. S CKCM=0,X=$P($G(^VEN(7.41,DEFEF,2)),U,7)
  1. I X S CKCM=1 ; FORM-SPECIFIC CHRONIC MED FILTER IS ACTIVE
  1. I $P($G(^VEN(7.41,DEFEF,2)),U,7)="",$P($G(^VEN(7.5,CFIGIEN,0)),U,16),X'=0 S CKCM=1 ; GLOBAL CHRONIC MED FLAG ; PATCHED BY GIS/OIT 6/5/05 ; PCC+ 2.5 PATCH 5
  1. I CKCM S RXHDR=RXHDR_" (Chronic meds only)",RXSORT=0 ; NO SORTING NECESSARY
  1. I $P(X,U,8) S RXHDR="ACTIVE "_RXHDR
  1. I $G(HDR25) S @TMP@(1,"mh")=RXHDR
  1. MLOOP K STOP F Q:$G(STOP) S IDT=$O(^AUPNVMED("AA",DFN,IDT)) Q:'IDT S MIEN=0 F Q:$G(STOP) S MIEN=$O(^AUPNVMED("AA",DFN,IDT,MIEN)) Q:'MIEN D ; PATCHED 2/12/07 BY GIS FOR PCC+2.6
  1. . S X=$G(^AUPNVMED(MIEN,0)),RIEN=+X,NTRX=$P(X,U,4)
  1. . I $P($G(^VEN(7.41,+$G(DEFEF),2)),U,9),$D(@TMP@(0,RIEN)) Q ; REDUNDANT MED CHECKS
  1. . S DCD=$P(X,U,8) I DCD Q ; QUIT IF MED HAS BEEN DICONTINUED
  1. . S VIEN=$P(X,U,3),SIG=$P(X,U,5),QTY=$P(X,U,6),DAYS=$P(X,U,7),REM=""
  1. . S %=$G(^AUPNVSIT(+VIEN,0)) I '$L(%) Q
  1. . S DATE=$P(%,U) I 'DATE Q
  1. . S SCAT=$P(%,U,7)
  1. . S MED=$P($G(^PSDRUG(+RIEN,0)),U)
  1. . I $L(NTRX) S MED=NTRX ; NON-TABLE NAME OF DRUG
  1. . I '$L(MED) Q
  1. . I SCAT="E" S MED=MED_" (ORx)" ; OUTSIDE RX
  1. . I DATE,$L(MED) S Y=DATE\1 X ^DD("DD") S EXT=Y
  1. . I '$L($G(EXT)) Q ; EXT DATE MUST EXIST
  1. . ; AT THIS POINT EXT,MED,QTY,SIG AND REM HAVE BEEN SET
  1. . I DAYS S PER=75,%=$P($G(^VEN(7.41,+$G(DEFEF),2)),U,6) S:% PER=% S X1=DT,X2=DATE\1 D ^%DTC I X>(DAYS+PER) Q ; ELIMINATE EXPIRED MEDS
  1. . I 'DAYS S X1=DT,X2=-180 D C^%DTC I X>DATE Q ; IF DAYS ARE NOT SPECIFIED, DONT SHOW RX IF OVER 180 DAYS OLD
  1. . I $P($G(^VEN(7.5,CFIGIEN,0)),U,19),$L($T(SIG^PSOHELP)) S SIG=$$SIG(SIG) I 1 ; EXPANDED SIG
  1. . E I $D(^DD(52,10,9.2)) S X=SIG X ^DD(52,10,9.2) I $G(SIG)="" S SIG=X ; BKWRD COMPAT
  1. . S CHMFLG=0 ; SETS CHRONIC MED STATUS TO DEFAULT VALUE OF "0"
  1. RXCK . S RXIEN=+$O(^PSRX("APCC",MIEN,0)) ; CHECKS TO SEE IF RX FILE IS POPULATED
  1. . I 'RXIEN G ADD ; IF RX FILE NOT POPULATED, BYPASS SPECIAL STUFF AND ADD RX TO THE ARRAY
  1. . ; PATCHED BY GIS/OIT 03/15/06 ; PCC+ 2.5 PATCH 4
  1. . I $P($G(^VEN(7.41,+$G(DEFEF),2)),U,8),$P($G(^PSRX(RXIEN,"STA")),U)>2 Q ; FAILED ACTIVE MED FILTER, SO QUIT
  1. . I $D(^PS(55,DFN,"P","CP",RXIEN)) S CHMFLG=1 G NEWREM ; ALREADY A CRONIC MED - NO CHECK NEEDED
  1. . I CKCM Q ; NOT A CHRONIC MED. FAILED CHRONIC MED FILTER, SO QUIT
  1. NEWREM . S REM=$$REM(RXIEN) ; GET REMARKS
  1. . S SIG=$$REFILL(SIG,RXIEN) ; ADD REFILL INFO TO SIG
  1. ADD . ; ADD RX INFO TO ARRAY
  1. . S TOT=TOT+1
  1. . S @TMP@(0,RIEN)=""
  1. . I 'RXSORT S CHMFLG=0 ; IF NOT SORTING, LUMP EVERYTHING TOGETHER UNDER THE "0" NODE
  1. MAXMSG . I TOT>MAX S STOP=1,PASS1(0,TOT)="More meds on Health Summary!" Q ; WARNING MSG THAT NOT ALL MEDS WILL BE DISPLAYED
  1. SORT . S PASS1(CHMFLG,TOT)=$G(EXT)_"|"_$G(MED)_"|"_$G(QTY)_"|"_$G(SIG)_"|"_$G(REM)
  1. . Q
  1. RXLIST ; FINAL PASS: CREATE THE (SORTED) MAIL MERGE NODES
  1. I RXSORT D ; SORT HEADERS
  1. . I '$D(PASS1(1)),'$D(PASS1(0)) S PASS1(1,.5)=" NO CURRENT MEDICATIONS" Q
  1. . S PASS1(1,.5)=$S($D(PASS1(1)):"",1:"NO")_" CHRONIC MEDICATIONS"
  1. . S PASS1(1,999999)=$S($D(PASS1(0)):"",1:"NO")_" INCIDENTAL MEDICATIONS" ; SORT SUB-HEADERS
  1. . Q
  1. S TOT=0
  1. F SORT=1,0 S CNT=0 F S CNT=$O(PASS1(SORT,CNT)) Q:'CNT D
  1. . S STG=$G(PASS1(SORT,CNT)) I '$L(STG) Q
  1. . S TOT=TOT+1
  1. . S MED=$P(STG,"|",2) S QTY=$P(STG,"|",3) S SIG=$P(STG,"|",4) S REM=$P(STG,"|",5)
  1. . S EXT=$P(STG,"|",1) I STG'["|" S EXT=""
  1. . I $P($G(^VEN(7.41,+$G(DEFEF),0)),U,11) D CLASSIC Q ; FORMAT AS A CLASSIC MED LIST
  1. REVLIST . ; REVISED MED LIST USED IN VER 2 AND LATER
  1. . I STG'["|" S %=STG
  1. . E S %=EXT_" "_$E(MED,1,MAXNAME)_" "_$S(QTY:"#",1:"")_QTY_" "_$E(SIG,1,MAXSIG)_" "_$E(REM,1,MAXREM)
  1. . S @TMP@(1,("md"_TOT))=% ; NEW Rx LIST FORMATTING: STORE ENTIRE Rx IN md NODE
  1. . S @TMP@(1,("mm"_TOT))="",@TMP@(1,("mq"_TOT))="",@TMP@(1,("ms"_TOT))="",@TMP@(1,("mr"_TOT))=""
  1. . Q
  1. K @TMP@(0)
  1. Q
  1. ;
  1. CLASSIC ; EP-LEGACY Rx LIST FORMATTING
  1. I STG'["|" S SIG=STG
  1. S @TMP@(1,("md"_TOT))=EXT
  1. S @TMP@(1,("mm"_TOT))=$E(MED,1,MAXNAME)
  1. S @TMP@(1,("mq"_TOT))=$S(QTY:"#",1:"")_QTY
  1. S @TMP@(1,("ms"_TOT))=$E(SIG,1,MAXSIG)
  1. S @TMP@(1,("mr"_TOT))=$E(REM,1,MAXREM)
  1. Q
  1. ;
  1. SIG(SIG) ; EP-GET EXPANDED SIG
  1. N X,INS1
  1. I $G(SIG)="" Q ""
  1. S X=SIG
  1. D SIG^PSOHELP
  1. I $L($G(INS1))'>1 S INS1=SIG
  1. Q $G(INS1)
  1. ;
  1. REFILL(SIG,RXIEN) ; EP-APPEND REFILL INFO TO SIG
  1. N REF,X
  1. S REF=$P($G(^PSRX(RXIEN,0)),U,9) I '$L(REF) Q SIG
  1. S X=0 F S X=$O(^PSRX(RXIEN,1,X)) Q:'X S REF=REF-1 ; COMPUTE REMAINING REFILS BASED ON RX DATA
  1. S SIG=SIG_" ("_REF_" refill"_$S(REF=1:"",1:"s")_" left)" ; APPEND THE SIG
  1. Q SIG
  1. ;
  1. REM(RXIEN) ; EP-GET INFO FROM PRESCRIPTION FILE: REMARKS, ISSUE DATE AND PRESCRIBING PROVIDER
  1. N REM,RXP,X,TXT,MODE,ISDT,Y,DFLG
  1. S REM=""
  1. I '$P($G(^VEN(7.41,DEFEF,0)),U,12) S REM=$P($G(^PSRX(RXIEN,3)),U,7) ; GET REMINDER NOTE
  1. S DFLG=$P($G(^VEN(7.41,DEFEF,2)),U,11) I DFLG D ; ISSUE DATE REQUESTED
  1. . S %=$P($G(^PSRX(RXIEN,0)),U,13) I '% Q
  1. . S ISDT=$$FMTE^XLFDT(%,2)
  1. . I DFLG=1 S EXT=$G(EXT)_" (Issued: "_ISDT_")" Q ; APPEND ISSUE DATE
  1. . S EXT="Issued: "_ISDT
  1. . Q
  1. I $P($G(^VEN(7.41,DEFEF,14)),U,9),$P($G(^PSRX(RXIEN,"STA")),U)>2 S REM=REM_" - "_$$GET1^DIQ(52,(RXIEN_","),100)
  1. S MODE=$P($G(^VEN(7.41,DEFEF,0)),U,14) I 'MODE Q $E(REM,1,MAXREM) ; PROVIDER INFO NOT REQUESTED, SO QUIT NOW
  1. S RXP=$P($G(^PSRX(+$G(RXIEN),0)),U,4) I 'RXP Q ""
  1. S RXP=$$PRV^VENPCCU(RXP) I 'RXP Q "" ; COVERT FILE 6 IEN TO FILE 200 IEN IF NECESSARY
  1. S X=$G(^VA(200,+RXP,0)) I '$L(X) Q ""
  1. S TXT=$S(MODE=1:$P(X,U,2),1:$P(X,U)) ; CHOOSE BETWEEN INITIALS AND THE FULL NAME
  1. I '$L(TXT),MODE=1,$L($P(X,U)) S TXT=$E($P(X,",",2))_$E(X) ; CREATE INITIALS ON THE FLY
  1. I $L(TXT) S TXT=" ["_TXT_"]"
  1. S REM=$E(REM,1,(MAXREM-3)-$L(TXT))_TXT
  1. Q REM
  1. ;
  1. CLASS(DFN) ; EP-GIVEN A DFN, RETURN THE PATIENT CLASS FOR USER PREFERENCES
  1. N AGE,SEX,DOB,X,Y
  1. S X=$P($G(^DPT(DFN,0)),U,2,3),DOB=$P(X,U,2),SEX=$P(X,U)
  1. I DOB,$L(SEX)
  1. E Q ""
  1. S AGE=(DT-DOB)\10000
  1. I AGE<2 Q 1
  1. I AGE<12 Q 2
  1. S Y=(SEX="F")
  1. I AGE<18 Q (3+Y)
  1. I AGE<65 Q (5+Y)
  1. Q (7+Y)
  1. ;