| 1 | TIUEDI3 ; SLC/MAM - Additional Edit Code ;4/19/05
 | 
|---|
| 2 |  ;;1.0;TEXT INTEGRATION UTILITIES;**100,113,184**;Jun 20, 1997
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 | GETRECNW(DFN,TIU,TIUTYP1,TIUNEW,TIUDPRM,TIUINQ,PERSON,EDIT) ; New GETREC.
 | 
|---|
| 5 |  ;  Code rewritten from the old GETREC^TIUEDI1.
 | 
|---|
| 6 |  ;  GETREC^TIUEDI1 now calls this code.
 | 
|---|
| 7 |  ;  New parameters: Left out TIUCREAT since we always used it as 1.
 | 
|---|
| 8 |  ;                  Added PERSON and EDIT. 
 | 
|---|
| 9 |  ;  Can be called directly, or via GETREC^TIUEDI1 for
 | 
|---|
| 10 |  ;backward compatibility. GETREC^TIUEDI1 uses OLD parameters.
 | 
|---|
| 11 |  ;  There are 3 functional differences between GETRECNW and the old 
 | 
|---|
| 12 |  ;GETREC: First, GETRECNW no longer does RETRY since there should no 
 | 
|---|
| 13 |  ;longer be editable entries with no time in the visit field.
 | 
|---|
| 14 |  ;Second, if user when creating new docmt is asked if user wants
 | 
|---|
| 15 |  ;to edit existing docmt instead, and user says no, and user
 | 
|---|
| 16 |  ;cannot create a new docmt, then user is no longer given the
 | 
|---|
| 17 |  ;existing record to addend.  User must use a separate addend action.
 | 
|---|
| 18 |  ;Third, because code is restructured, code no longer quits before
 | 
|---|
| 19 |  ;creating a new docmt if GETRECNW is called with DUOUT, etc defined.
 | 
|---|
| 20 |  ;So quit before calling GETRECNW if DUOUT, etc.
 | 
|---|
| 21 |  ; Returns document record DA, where DA is:
 | 
|---|
| 22 |  ;   new docmt for user to continue entering, or
 | 
|---|
| 23 |  ;   existing docmt for user to edit or addend.
 | 
|---|
| 24 |  ; If called by upload, DA is:
 | 
|---|
| 25 |  ;   new docmt to continue entering, or
 | 
|---|
| 26 |  ;   existing docmt for text replacement or addendum.
 | 
|---|
| 27 |  ;
 | 
|---|
| 28 |  ; Call with:
 | 
|---|
| 29 |  ; DFN, TIU array, TIUTYP1 are REQUIRED.
 | 
|---|
| 30 |  ;    [DFN] --> Patient IFN.
 | 
|---|
| 31 |  ;    [TIU] --> Visit info array
 | 
|---|
| 32 |  ;              References TIU("VSTR") = LOC;VDT;VTYP
 | 
|---|
| 33 |  ;                         TIU("VISIT") = Visit File IFN
 | 
|---|
| 34 |  ;                         TIU("LOC")
 | 
|---|
| 35 |  ;                         TIU("VLOC")
 | 
|---|
| 36 |  ;                         TIU("STOP") = mark to defer workload
 | 
|---|
| 37 |  ; [TIUTYP1] --> Title info variable of form:
 | 
|---|
| 38 |  ;              TIUTYP1 = 1^title DA^title Name, where the 1
 | 
|---|
| 39 |  ;              is just style to imitate XQORNOD
 | 
|---|
| 40 |  ; [TIUNEW] --> flag, passed back with
 | 
|---|
| 41 |  ;              TIUNEW = 1 if returned docmt is new
 | 
|---|
| 42 |  ;              TIUNEW = 0 if returned docmt already existed,
 | 
|---|
| 43 |  ;              timeout, etc
 | 
|---|
| 44 |  ;
 | 
|---|
| 45 |  ;[TIUDPRM] --> Docmt param array where
 | 
|---|
| 46 |  ;              $P($G(TIUDPRM(0)),U,10), = 1 if
 | 
|---|
| 47 |  ;              more than ONE record/visit is allowed.
 | 
|---|
| 48 |  ;              If TIUDPRM not received, don't worry about
 | 
|---|
| 49 |  ;              creating multiple documents
 | 
|---|
| 50 |  ; [TIUINQ] --> Ask user flag, where
 | 
|---|
| 51 |  ;              TIUINQ = 1: ask re edit/addend existing docmt
 | 
|---|
| 52 |  ;              (Interactive List Manager options, TRY docmt def)
 | 
|---|
| 53 |  ;              TIUINQ = 0: don't ask (Upload & GUI options)
 | 
|---|
| 54 |  ; [PERSON] --> IFN of person asking to edit/create docmt,
 | 
|---|
| 55 |  ;              or for upload, = author of document
 | 
|---|
| 56 |  ;              If not received, assumed to be DUZ.
 | 
|---|
| 57 |  ;   [EDIT] --> flag, passed back with EDIT = 1 if returned
 | 
|---|
| 58 |  ;              PREEXISTING docmt can be edited by PERSON. If
 | 
|---|
| 59 |  ;              preexisting docmt returned and 'EDIT, then
 | 
|---|
| 60 |  ;              docmt cannot be edited by person.
 | 
|---|
| 61 |  N TIUVSTR,MULTOK,DA,TLFULL,XISONE
 | 
|---|
| 62 |  N EDABLEDA,YESDOIT ;10/3/00
 | 
|---|
| 63 |  N TIUTYPDA,TIUTYPNM
 | 
|---|
| 64 |  I '$G(PERSON) S PERSON=DUZ
 | 
|---|
| 65 |  S TIUVSTR=TIU("VSTR")
 | 
|---|
| 66 |  ; -- If just testing a document definition (TRY) rather than
 | 
|---|
| 67 |  ;    doing a real note, skip inquiry into existing notes: --
 | 
|---|
| 68 |  I +$G(NOSAVE) S DA=$$CREATREC(DFN,.TIU,TIUTYP1),TIUNEW=1 G GETNWX
 | 
|---|
| 69 |  ; --  MULTOK: More than ONE record/visit is OK (param permits,
 | 
|---|
| 70 |  ;             or didn't care enough to send the parameter)
 | 
|---|
| 71 |  ;     TLFULL: Only 1 docmt allowed, and it
 | 
|---|
| 72 |  ;                already exists on this title/pt/vst --
 | 
|---|
| 73 |  I '$D(TIUDPRM(0)) S MULTOK=1
 | 
|---|
| 74 |  E  S MULTOK=+$P(TIUDPRM(0),U,10)
 | 
|---|
| 75 |  S (TIUNEW,EDIT,DA,TLFULL,EDABLEDA)=0
 | 
|---|
| 76 |  S TIUTYPDA=$P(TIUTYP1,U,2),TIUTYPNM=$P(TIUTYP1,U,3)
 | 
|---|
| 77 |  S XISONE=$$EXIST(DFN,TIUTYPDA,TIUVSTR)
 | 
|---|
| 78 |  I 'MULTOK,XISONE S TLFULL=1
 | 
|---|
| 79 |  ; -- Find existing editable docmts for patient, title, & visit:--
 | 
|---|
| 80 |  S EDABLEDA=+$$EXIST(DFN,TIUTYPDA,TIUVSTR,1,PERSON)
 | 
|---|
| 81 |  ; -- If there are NO such docmts,
 | 
|---|
| 82 |  ;    then create new if title not full,
 | 
|---|
| 83 |  ;    or return existing [NONeditable] for addendum [if user wants]: --
 | 
|---|
| 84 |  I 'EDABLEDA D  G GETNWX
 | 
|---|
| 85 |  . I 'TLFULL S DA=$$CREATREC(DFN,.TIU,TIUTYP1),TIUNEW=1 Q
 | 
|---|
| 86 |  . I +$G(TIUINQ) D  Q
 | 
|---|
| 87 |  . . W !!,"There is already a ",TIUTYPNM,".",!
 | 
|---|
| 88 |  . . W "Only ONE record of this type per Visit is allowed...",!
 | 
|---|
| 89 |  . . S YESDOIT=+$$READ^TIUU("Y"," Would you like to addend the existing record","NO")
 | 
|---|
| 90 |  . . I YESDOIT S DA=XISONE
 | 
|---|
| 91 |  . I '+$G(TIUINQ) S DA=XISONE
 | 
|---|
| 92 |  . Q
 | 
|---|
| 93 |  ; -- If there ARE such docmts, then
 | 
|---|
| 94 |  ;      If title is full, return existing docmt for edit.
 | 
|---|
| 95 |  ;      If title is NOT full, return existing docmt for edit,
 | 
|---|
| 96 |  ;        or ask user.
 | 
|---|
| 97 |  I EDABLEDA D  G GETNWX
 | 
|---|
| 98 |  . I TLFULL D:+$G(TIUINQ)  S DA=EDABLEDA,EDIT=1 Q
 | 
|---|
| 99 |  . . W !!,"There is already a ",TIUTYPNM," which you may edit."
 | 
|---|
| 100 |  . . W !,"Only ONE record of this type per Visit is allowed...",!
 | 
|---|
| 101 |  . . W "Opening the existing record"
 | 
|---|
| 102 |  . . S TIUCHNG("EXIST")=1
 | 
|---|
| 103 |  . I 'TLFULL D  Q
 | 
|---|
| 104 |  . . I '+$G(TIUINQ) S DA=EDABLEDA,EDIT=1 Q
 | 
|---|
| 105 |  . . W !!,"There is already a ",TIUTYPNM," which you may edit."
 | 
|---|
| 106 |  . . S YESDOIT=+$$INQUIRE ; "Create new anyway?"
 | 
|---|
| 107 |  . . I $D(DUOUT)!$D(DTOUT)!$D(DIROUT) Q
 | 
|---|
| 108 |  . . I YESDOIT S DA=$$CREATREC(DFN,.TIU,TIUTYP1),TIUNEW=1 Q
 | 
|---|
| 109 |  . . W !!,"Okay, I'll open the existing record then!"
 | 
|---|
| 110 |  . . S DA=EDABLEDA,EDIT=1,TIUCHNG("EXIST")=1
 | 
|---|
| 111 | GETNWX ;
 | 
|---|
| 112 |  I TIUNEW,'DA S TIUNEW=0
 | 
|---|
| 113 |  Q +$G(DA)
 | 
|---|
| 114 |  ;
 | 
|---|
| 115 | EXIST(DFN,TIUTYPDA,TIUVSTR,REQEDIT,PERSON) ; If a docmt already
 | 
|---|
| 116 |  ;EXISTS for the given patient, title, and visit, then return it.
 | 
|---|
| 117 |  ; Ignore: - docmts of status deleted or retracted
 | 
|---|
| 118 |  ;         - all docmts if run across a docmt w/ requesting pkg
 | 
|---|
| 119 |  ;         - all docmts if Title is PRF Title
 | 
|---|
| 120 |  ;         - I REQEDIT, then also ignore docmts PERSON cannot edit.
 | 
|---|
| 121 |  ; If there are more than one, get the smallest DA.
 | 
|---|
| 122 |  ; Receives TIUVSTR = LOC;VDT;VTYP
 | 
|---|
| 123 |  ; Needs TIUTYPDA = title DA
 | 
|---|
| 124 |  ; REQEDIT & PERSON are optional
 | 
|---|
| 125 |  N REQUEST,DA,TIUI,STATUS,RETRY
 | 
|---|
| 126 |  S REQEDIT=+$G(REQEDIT)
 | 
|---|
| 127 |  I '$G(PERSON) S PERSON=DUZ
 | 
|---|
| 128 |  S (REQUEST,TIUI,DA)=0
 | 
|---|
| 129 |  I $$ISPFTTL^TIUPRFL(TIUTYPDA) G EXISTEX
 | 
|---|
| 130 | LOOP ; -- Find existing docmt for given patient, title, & visit:--
 | 
|---|
| 131 |  F  S TIUI=+$O(^TIU(8925,"APTLD",DFN,TIUTYPDA,TIUVSTR,TIUI)) Q:'TIUI  D  Q:REQUEST  Q:DA
 | 
|---|
| 132 |  . ; -- If TIUI doesn't exist, reject it and keep looking: --
 | 
|---|
| 133 |  . I '$D(^TIU(8925,TIUI,0)) D  Q
 | 
|---|
| 134 |  . . K ^TIU(8925,"APTLD",DFN,TIUTYPDA,TIUVSTR,TIUI)
 | 
|---|
| 135 |  . ; -- If TIUI has requesting package (e.g. Consults),
 | 
|---|
| 136 |  . ;    then reject it and quit looking: --
 | 
|---|
| 137 |  . I +$P($G(^TIU(8925,TIUI,14)),U,5) S REQUEST=1 Q  ; **22**
 | 
|---|
| 138 |  . ; -- If TIUI has status deleted or retracted, reject it
 | 
|---|
| 139 |  . ;    and keep looking: TIU*1*61 --
 | 
|---|
| 140 |  . S STATUS=+$P($G(^TIU(8925,TIUI,0)),U,5)
 | 
|---|
| 141 |  . I STATUS=14!(STATUS=15) Q
 | 
|---|
| 142 |  . ; -- If OK so far, and record not required to be editable,
 | 
|---|
| 143 |  . ;then grab existing record and stop looking: --
 | 
|---|
| 144 |  . I 'REQEDIT S DA=TIUI Q
 | 
|---|
| 145 |  . ; -- If REQEDIT & PERSON can edit existing record,
 | 
|---|
| 146 |  . ;    then grab it and stop looking: --
 | 
|---|
| 147 |  . N CANEDIT S CANEDIT=+$$CANDO^TIULP(TIUI,"EDIT RECORD",PERSON)
 | 
|---|
| 148 |  . I +CANEDIT>0 S DA=TIUI
 | 
|---|
| 149 |  ; -- If record not required to be editable & still haven't
 | 
|---|
| 150 |  ;    found a record, check for records with no visit time: --
 | 
|---|
| 151 |  ;    (Early anomaly with DSs at Boston)
 | 
|---|
| 152 |  I +DA'>0,($P(TIUVSTR,";",3)="H"),(+$G(RETRY)'>0) D  G LOOP
 | 
|---|
| 153 |  . S RETRY=1,$P(TIUVSTR,";",2)=$P($P(TIUVSTR,";",2),".")
 | 
|---|
| 154 | EXISTEX ;
 | 
|---|
| 155 |  Q +$G(DA)
 | 
|---|
| 156 |  ;
 | 
|---|
| 157 | CREATREC(DFN,TIU,TIUTYP1) ; Create document record - Returns DA
 | 
|---|
| 158 |  ; Receives array TIU as in GETRECNW
 | 
|---|
| 159 |  ; Needs var TIUTYP1 as in GETRECNW
 | 
|---|
| 160 |  N DIC,DLAYGO,X,Y,TIUFPRIV,TIUVTYP,RETRY,TIUVSTR,TIUVISIT,DA
 | 
|---|
| 161 |  N TIUTYPDA,TIUTYPNM
 | 
|---|
| 162 |  S TIUTYPDA=$P(TIUTYP1,U,2),TIUTYPNM=$P(TIUTYP1,U,3)
 | 
|---|
| 163 |  S TIUVSTR=TIU("VSTR")
 | 
|---|
| 164 |  S DA=0,TIUFPRIV=1
 | 
|---|
| 165 |  S (DIC,DLAYGO)=8925,DIC(0)="FL"
 | 
|---|
| 166 |  S X=""""_"`"_TIUTYPDA_"""" D ^DIC
 | 
|---|
| 167 |  I +Y'>0 W !,TIUTYPNM," record could not be created.",! G CREXIT
 | 
|---|
| 168 |  ; -- Stuff patient, visit, parent doc type, status,
 | 
|---|
| 169 |  ;    visit type, hosp loc, visit loc, division: --
 | 
|---|
| 170 |  S DA=+Y
 | 
|---|
| 171 |  N DIE,DR S DIE=8925
 | 
|---|
| 172 |  S TIUVTYP=$P($G(TIUVSTR),";",3)
 | 
|---|
| 173 |  S TIUVISIT=$S(+$G(TIU("VISIT")):+$G(TIU("VISIT")),1:"")
 | 
|---|
| 174 |  S DR=".02////"_DFN_";.03////"_TIUVISIT_";.04////"_$$DOCCLASS^TIULC1(+$P(Y,U,2))_";.05///"_$$UP^XLFSTR($$STATUS^TIULC(DA))_";.13////"_TIUVTYP_";1205////"_$P($G(TIU("LOC")),U)_";1211////"_$P($G(TIU("VLOC")),U)_";1212////"_$P($G(TIU("INST")),U)
 | 
|---|
| 175 |  D ^DIE
 | 
|---|
| 176 |  ; -- [Mark record for deferred crediting of stop code (fld #.11)]: --
 | 
|---|
| 177 |  I +$G(TIU("STOP")) D DEFER^TIUVSIT(DA,+$G(TIU("STOP")))
 | 
|---|
| 178 | CREXIT Q +$G(DA)
 | 
|---|
| 179 |  ;
 | 
|---|
| 180 | INQUIRE() ; Ask user whether to create a new note anyway
 | 
|---|
| 181 |  N TIUY,TIUPRMT
 | 
|---|
| 182 |  S TIUY=0,TIUPRMT="Do you want to create a new record anyway"
 | 
|---|
| 183 |  S TIUY=+$$READ^TIUU("Y",TIUPRMT,"NO")
 | 
|---|
| 184 |  Q TIUY
 | 
|---|
| 185 |  ;
 | 
|---|