| [613] | 1 | ORRCTIU ; SLC/JER - TIU data for CM ; 7/18/05 10:38
 | 
|---|
 | 2 |  ;;1.0;CARE MANAGEMENT;**2**;Jul 15, 2003
 | 
|---|
 | 3 |  ;
 | 
|---|
 | 4 |  ; This routine invokes IAs: 2322,2323,2834,2937,2944,2960,4175,4733
 | 
|---|
 | 5 |  ;
 | 
|---|
 | 6 | GETPTUNS(ORRCY,AUDUZ) ; Get pts w/documents that need user's signature
 | 
|---|
 | 7 |  ; Returns @ORRCY@(DFN,"DOC:"_TIUDA)=""
 | 
|---|
 | 8 |  ; [from ORRCDPT]
 | 
|---|
 | 9 |  N TITLE,GVN,ORT,TIUDA,ORDFN,ITR,ORRCASIG
 | 
|---|
 | 10 |  S TITLE=0,GVN=$NA(^TIU(8925,"AAU")),ORRCY=$NA(^TMP($J,"ORRCTIU")) K @ORRCY
 | 
|---|
 | 11 |  F  S TITLE=$O(@GVN@(AUDUZ,TITLE)) Q:+TITLE'>0  D
 | 
|---|
 | 12 |  . S ORT=0 F  S ORT=$O(@GVN@(AUDUZ,TITLE,5,ORT)) Q:+ORT'>0  D
 | 
|---|
 | 13 |  .. S TIUDA=0
 | 
|---|
 | 14 |  .. F  S TIUDA=$O(@GVN@(AUDUZ,TITLE,5,ORT,TIUDA)) Q:+TIUDA'>0  D
 | 
|---|
 | 15 |  ... S ORDFN=$P($G(^TIU(8925,TIUDA,0)),U,2) Q:+ORDFN'>0
 | 
|---|
 | 16 |  ... I $D(^TMP($J,"ORRCLST")),'$D(^TMP($J,"ORRCY",ORDFN)) Q  ;not on list
 | 
|---|
 | 17 |  ... I '+$$CANDO^TIULP(TIUDA,"SIGNATURE",AUDUZ) Q  ; user may not sign
 | 
|---|
 | 18 |  ... S @ORRCY@(ORDFN,"DOC:"_TIUDA)=""
 | 
|---|
 | 19 |  S TITLE=0,GVN=$NA(^TIU(8925,"ASUP"))
 | 
|---|
 | 20 |  F  S TITLE=$O(@GVN@(AUDUZ,TITLE)) Q:+TITLE'>0  D
 | 
|---|
 | 21 |  . N STATUS F STATUS=5,6 D
 | 
|---|
 | 22 |  .. S ORT=0 F  S ORT=$O(@GVN@(AUDUZ,TITLE,STATUS,ORT)) Q:+ORT'>0  D
 | 
|---|
 | 23 |  ... S TIUDA=0
 | 
|---|
 | 24 |  ... F  S TIUDA=$O(@GVN@(AUDUZ,TITLE,STATUS,ORT,TIUDA)) Q:+TIUDA'>0  D
 | 
|---|
 | 25 |  .... S ORDFN=$P($G(^TIU(8925,TIUDA,0)),U,2) Q:+ORDFN'>0
 | 
|---|
 | 26 |  .... I $D(^TMP($J,"ORRCLST")),'$D(^TMP($J,"ORRCY",ORDFN)) Q  ;not on list
 | 
|---|
 | 27 |  .... I '+$$CANDO^TIULP(TIUDA,$S(STATUS=5:"SIGNATURE",1:"COSIGNATURE"),AUDUZ) Q  ; user may not Sign/Cosign
 | 
|---|
 | 28 |  .... S @ORRCY@(ORDFN,"DOC:"_TIUDA)=""
 | 
|---|
 | 29 |  ; capture addl signer docs 
 | 
|---|
 | 30 |  K ^TMP("TIUSIGN",$J),^TMP("ORRCASIG",$J)
 | 
|---|
 | 31 |  S ORRCASIG="",ITR=0
 | 
|---|
 | 32 |  D NEEDSIG^TIULX(.ORRCASIG,AUDUZ)
 | 
|---|
 | 33 |  Q:'$D(@ORRCASIG)
 | 
|---|
 | 34 |  M ^TMP("ORRCASIG",$J)=@ORRCASIG
 | 
|---|
 | 35 |  F  S ITR=$O(^TMP("ORRCASIG",$J,ITR)) Q:'ITR  D
 | 
|---|
 | 36 |  . S TIUDA=^TMP("ORRCASIG",$J,ITR)
 | 
|---|
 | 37 |  . S ORDFN=$P($G(^TIU(8925,TIUDA,0)),U,2) Q:+ORDFN'>0
 | 
|---|
 | 38 |  . I $D(^TMP($J,"ORRCLST")),'$D(^TMP($J,"ORRCY",ORDFN)) Q  ;not on list?
 | 
|---|
 | 39 |  . I '+$$CANDO^TIULP(TIUDA,"SIGNATURE",AUDUZ) Q  ; user may not sign
 | 
|---|
 | 40 |  . S @ORRCY@(ORDFN,"DOC:"_TIUDA)=""
 | 
|---|
 | 41 |  K ^TMP("TIUSIGN",$J),^TMP("ORRCASIG",$J)
 | 
|---|
 | 42 |  Q
 | 
|---|
 | 43 |  ;
 | 
|---|
 | 44 | LISTUNS(ORY,ORUSR,ORPAT) ; -- Get list of unsigned documents for ORPAT by ORUSR
 | 
|---|
 | 45 |  ; 
 | 
|---|
 | 46 |  Q
 | 
|---|
 | 47 |  ;
 | 
|---|
 | 48 | TEXT(ORY,DOC) ; -- Return text of DOCs in
 | 
|---|
 | 49 |  ; @ORY@(#) = Item=ID^Title^Date IN HL7 format
 | 
|---|
 | 50 |  ;          = Text=line of document text
 | 
|---|
 | 51 |  N ORN,ORI,ORRCY,TIUDA,TIUY,TIUI,TIUX
 | 
|---|
 | 52 |  S ORN=0,ORY=$NA(^TMP($J,"ORRCDOC")) K @ORY
 | 
|---|
 | 53 |  S ORI="" F  S ORI=$O(DOC(ORI)) Q:ORI=""  D
 | 
|---|
 | 54 |  . S TIUDA=+$P(DOC(ORI),":",2) D TGET^TIUSRVR1(.ORRCY,TIUDA)
 | 
|---|
 | 55 |  . M TIUY=ORRCY
 | 
|---|
 | 56 |  . S TIUX=$$RESOLVE^TIUSRVLO(TIUDA)
 | 
|---|
 | 57 |  . S ORN=ORN+1,@ORY@(ORN)="Item=DOC:"_TIUDA_U_$P(TIUX,U)_U_$P($$FMTHL7^XLFDT($P(TIUX,U,2)),"-")_U_$$REQENC(TIUDA)
 | 
|---|
 | 58 |  . S TIUI=0 F  S TIUI=$O(@TIUY@(TIUI)) Q:TIUI<1  S ORN=ORN+1,@ORY@(ORN)="Text="_@TIUY@(TIUI)
 | 
|---|
 | 59 |  Q
 | 
|---|
 | 60 |  ;
 | 
|---|
 | 61 | REQENC(TIUDA)   ; -- Determine whether encounter data is needed
 | 
|---|
 | 62 |  N ORRD0,ORRD12,ORSVC,ORRY,ORRDP,ORRCSA,ORASK,ORRPRIMD,DATANEED,ORROPT,LST,ORRPRIME,ORRCLST,ORRCDP,ORRCASK
 | 
|---|
 | 63 |  S ORRD0=$G(^TIU(8925,TIUDA,0)),ORRD12=$G(^(12)),ORRY="false"
 | 
|---|
 | 64 |  S (ORROPT,DATANEED)=0
 | 
|---|
 | 65 |  ; Load existing encounter info
 | 
|---|
 | 66 |  D PCE4NOTE^ORWPCE3(.ORRCLST,TIUDA,+$P(ORRD0,U,2))
 | 
|---|
 | 67 |  ; identify primary provider
 | 
|---|
 | 68 |  S ORRPRIMD=$$GETPRIMD(TIUDA,ORRD12,.ORRCLST)
 | 
|---|
 | 69 |  M LST=ORRCLST
 | 
|---|
 | 70 |  ; determine whether "Data Needed"
 | 
|---|
 | 71 |  ; 1. if encdt > today quit false
 | 
|---|
 | 72 |  I +$P(ORRD0,U,7)>(DT_".235959") G CHKASK
 | 
|---|
 | 73 |  ; 2. if service category '= "A", "I", or "T" quit false
 | 
|---|
 | 74 |  S ORSVC=$P(ORRD0,U,13)
 | 
|---|
 | 75 |  I '$S(ORSVC="A":1,ORSVC="I":1,ORSVC="T":1,1:0) G CHKASK
 | 
|---|
 | 76 |  S ORROPT=1
 | 
|---|
 | 77 |  ; if TIU doc param SUPPRESS DX/CPT ON ENTRY is true, quit false
 | 
|---|
 | 78 |  D DOCPRM^TIULC1(+ORRD0,.ORRCDP)
 | 
|---|
 | 79 |  M ORRDP=ORRCDP
 | 
|---|
 | 80 |  I +$P(ORRDP(0),U,14) G CHKASK
 | 
|---|
 | 81 |  ; if stand-alone visit, quit true
 | 
|---|
 | 82 |  D HASVISIT^ORWPCE(.ORRCSA,TIUDA,+$P(ORRD0,U,2),+$P(ORRD12,U,11),+$P(ORRD0,U,7))
 | 
|---|
 | 83 |  I ORRCSA<1 S DATANEED=1 G CHKASK
 | 
|---|
 | 84 |  ; if TIU doc param ASK DX/CPT ON ALL OPT VISITS is true, quit true
 | 
|---|
 | 85 |  I +$P(ORRDP(0),U,16) S DATANEED=1 G CHKASK
 | 
|---|
 | 86 | CHKASK I +DATANEED S DATANEED=$$CHKPCE(TIUDA,.ORRCLST,$P(ORRD0,U,2),$P(ORRD12,U,11))
 | 
|---|
 | 87 |  M LST=ORRCLST
 | 
|---|
 | 88 |  D ASKPCE^ORWPCE2(.ORRCASK,DUZ,+$P(ORRD12,U,11))
 | 
|---|
 | 89 |  M ORASK=ORRCASK
 | 
|---|
 | 90 |  ; if Never or Disable, quit false
 | 
|---|
 | 91 |  I $S(ORASK=6:1,ORASK=7:1,1:0) S ORRY="false" G REQENCX
 | 
|---|
 | 92 |  ; if Always, quit true
 | 
|---|
 | 93 |  I ORASK=5 S ORRY="true" G REQENCX
 | 
|---|
 | 94 |  ; if Data Needed, quit true
 | 
|---|
 | 95 |  I ORASK=3,+DATANEED S ORRY="true" G REQENCX
 | 
|---|
 | 96 |  ; if Outpatient, quit true
 | 
|---|
 | 97 |  I ORASK=4,+ORROPT S ORRY="true" G REQENCX
 | 
|---|
 | 98 |  ; If we don't know who the primary encounter provider is, and we need to know, we
 | 
|---|
 | 99 |  ; must go to the chart to sign the note - so we treat it the same as if they are primary
 | 
|---|
 | 100 |  I ORRPRIMD=0 S ORRPRIME=1
 | 
|---|
 | 101 |  E  S ORRPRIME=+(DUZ=ORRPRIMD)
 | 
|---|
 | 102 |  ; if Primary/Data Needed, quit true
 | 
|---|
 | 103 |  I ORASK=0,ORRPRIME,+DATANEED S ORRY="true" G REQENCX
 | 
|---|
 | 104 |  ; if Primary/Outpatient, quit true
 | 
|---|
 | 105 |  I ORASK=1,ORRPRIME,+ORROPT S ORRY="true" G REQENCX
 | 
|---|
 | 106 |  ; if Primary Always, quit true
 | 
|---|
 | 107 |  I ORASK=2,ORRPRIME S ORRY="true" G REQENCX
 | 
|---|
 | 108 | REQENCX Q ORRY
 | 
|---|
 | 109 |  ;
 | 
|---|
 | 110 | CHKPCE(TIUDA,LST,PTNT,LOC)    ; Look for existing PCE data
 | 
|---|
 | 111 |  N ENCDT,ORI,CPT,COUNT,MAX,ICD,CODE,SUB,EXPNEED,EXP,RESULT,SCREQ,DOCPARM
 | 
|---|
 | 112 |  N ORRCSREQ,ORRCDOCP
 | 
|---|
 | 113 |  S (CPT,ICD,ORI,EXPNEED,EXP,RESULT,COUNT)=0
 | 
|---|
 | 114 |  S MAX=2
 | 
|---|
 | 115 |  S ENCDT=$P($P(LST(1),U,4),";",2)
 | 
|---|
 | 116 |  D SCSEL^ORWPCE(.ORRCSREQ,PTNT,ENCDT,LOC,"")
 | 
|---|
 | 117 |  M SCREQ=ORRCSREQ
 | 
|---|
 | 118 |  D DOCPARM^TIUSRVP1(.ORRCDOCP,TIUDA,0)
 | 
|---|
 | 119 |  M DOCPARM=ORRCDOCP
 | 
|---|
 | 120 |  I +$P(DOCPARM(0),U,15)=1 S EXPNEED=1,MAX=8
 | 
|---|
 | 121 |  F  S ORI=$O(LST(ORI)) Q:+ORI'>0  D  Q:(COUNT'<MAX)
 | 
|---|
 | 122 |  . S CODE=$P(LST(ORI),U)
 | 
|---|
 | 123 |  . I CODE="POV",'ICD S ICD=1,COUNT=COUNT+1
 | 
|---|
 | 124 |  . I CODE="CPT",'CPT S CPT=1,COUNT=COUNT+1
 | 
|---|
 | 125 |  . I EXPNEED,CODE="VST" D
 | 
|---|
 | 126 |  . . N VAL,IDX
 | 
|---|
 | 127 |  . . S SUB=$P(LST(ORI),U,2),VAL=$P(LST(ORI),U,3)
 | 
|---|
 | 128 |  . . S IDX=$S(SUB="SC":1,SUB="AO":2,SUB="IR":3,SUB="EC":4,SUB="MST":5,SUB="HNC":6,1:0)
 | 
|---|
 | 129 |  . . I IDX>0 S COUNT=COUNT+1 I VAL'="" S $P(SCREQ,";",IDX)=0
 | 
|---|
 | 130 |  I 'ICD Q 1
 | 
|---|
 | 131 |  I 'CPT Q 1
 | 
|---|
 | 132 |  F ORI=1:1:6 D  Q:RESULT=1
 | 
|---|
 | 133 |  . I $P($P(SCREQ,";",ORI),U,1) S RESULT=1
 | 
|---|
 | 134 |  Q RESULT
 | 
|---|
 | 135 | GETPRIMD(TIUDA,ORRD12,LST)    ; Get the Primary Provider
 | 
|---|
 | 136 |  N ORRY,ORI,ORMDEF,TIUSPRM,ORRCSPRM
 | 
|---|
 | 137 |  S (ORI,ORRY)=0
 | 
|---|
 | 138 |  D SITEPARM^TIUSRVP1(.ORRCSPRM) M TIUSPRM=ORRCSPRM
 | 
|---|
 | 139 |  ; 1. Check for the provider in the encounter, if it exists.
 | 
|---|
 | 140 |  F  S ORI=$O(LST(ORI)) Q:+ORI'>0  D  Q:+ORRY
 | 
|---|
 | 141 |  . I $P(LST(ORI),U)="PRV",+$P(LST(ORI),U,6) S ORRY=$P(LST(ORI),U,2)
 | 
|---|
 | 142 |  ; 2. check for the default primary as specified in TIU
 | 
|---|
 | 143 |  I 'ORRY D  ;DEFDOC^TIUSRVP1(.ORMDEF,$P(ORRD12,U,11),DUZ,$P(ORRD0,U,7),TIUDA) S ORRY=+ORMDEF
 | 
|---|
 | 144 |  . I +$P(TIUSPRM,U,8)=1 S ORRY=$$DFLTDOC^TIUPXAPI($P(ORRD12,U,11)) I +ORRY'=DUZ S ORRY=0
 | 
|---|
 | 145 |  Q ORRY
 | 
|---|
 | 146 | SIGN(ORY,LIST) ; -- Apply signature to documents in LIST(#)=DOC:##
 | 
|---|
 | 147 |  ; RPC = ORRC UNSIGNED DOCS SIGN
 | 
|---|
 | 148 |  Q
 | 
|---|