| 1 | WVLRLINK ;HIOFO/FT-LAB-WOMEN'S HEALTH LINK  ;9/29/04  14:34
 | 
|---|
| 2 |  ;;1.0;WOMEN'S HEALTH;**6,10,16**;Sep 30, 1998
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ; This routine uses the following IAs:
 | 
|---|
| 5 |  ; #10035 - ^DPT references     (supported)
 | 
|---|
| 6 |  ; #10063 - ^%ZTLOAD            (supported)
 | 
|---|
| 7 |  ; #10070 - ^XMD                (supported)
 | 
|---|
| 8 |  ; #10103 - ^XLFDT              (supported)
 | 
|---|
| 9 |  ;
 | 
|---|
| 10 | CREATE(DFN,LRDFN,LRI,LRA,LRSS) ;
 | 
|---|
| 11 |  ; Add lab test to WH file (#790.08).
 | 
|---|
| 12 |  ; Called by REPORT RELEASE DATE/TIME field in:
 | 
|---|
| 13 |  ; a) File 63, Field 63.08,.11
 | 
|---|
| 14 |  ; b) File 63, Field 63.09,.11
 | 
|---|
| 15 |  ; Input: DFN    = PATIENT DFN
 | 
|---|
| 16 |  ;        LRDFN  = FILE 63 IEN (+^DPT(DFN,"LR"))
 | 
|---|
| 17 |  ;        LRI    = INVERSE DATE/TIME OF TEST
 | 
|---|
| 18 |  ;        LRA    = ZERO NODE OF THE CY or SP ENTRY
 | 
|---|
| 19 |  ;        LRSS   = File 63 subscript (e.g., CY or SP)
 | 
|---|
| 20 |  ;
 | 
|---|
| 21 |  Q:($G(DFN)']"")!($G(LRDFN)']"")!($G(LRI)']"")!($G(LRA)']"")!($G(LRSS)']"")
 | 
|---|
| 22 |  Q:'$D(^WV(790.02,DUZ(2)))  ;no site parameter entry
 | 
|---|
| 23 |  Q:'$P($G(^WV(790.02,+$G(DUZ(2)),0)),U,24)  ;lab link is NO or null
 | 
|---|
| 24 |  N ZTDESC,ZTDTH,ZTIO,ZTRTN,ZTSAVE
 | 
|---|
| 25 |  S ZTRTN="CREATEQ^WVLRLINK",ZTDESC="WV CREATE FILE 790.08 ENTRY"
 | 
|---|
| 26 |  S ZTSAVE("DFN")="",ZTSAVE("LRDFN")="",ZTSAVE("LRI")="",ZTSAVE("LRA")=""
 | 
|---|
| 27 |  S ZTSAVE("LRSS")="",ZTIO=""
 | 
|---|
| 28 |  S ZTDTH=$$HADD^XLFDT($H,"","","",120) ;time delay if MOVE entry point
 | 
|---|
| 29 |  ; is called to delete a bogus entry first so check of lab accession
 | 
|---|
| 30 |  ; x-ref doesn't fail.
 | 
|---|
| 31 |  D ^%ZTLOAD
 | 
|---|
| 32 |  Q
 | 
|---|
| 33 | CREATEQ ; Called from CREATE above
 | 
|---|
| 34 |  ; WVLOC   = WARD/CLINIC/LOCATION (FILE #44)
 | 
|---|
| 35 |  ; WVDATE  = DATE OF THE PROCEDURE (FM date/time)
 | 
|---|
| 36 |  ;   WVDR  = DR STRING
 | 
|---|
| 37 |  ; WVPROV  = ORDERING PROVIDER (FILE #200)
 | 
|---|
| 38 |  ; WVLABAN = LAB ACCESSION # (e.g., CY 99 1)
 | 
|---|
| 39 |  N WVDATE,WVDR,WVLABAN,WVLABAN0,WVLOC,WVPROV
 | 
|---|
| 40 |  Q:$P($G(^DPT(DFN,0)),U,2)'="F"  ;not female
 | 
|---|
| 41 |  Q:'$$VNVEC()  ;vet/non-vet/eligibility code check
 | 
|---|
| 42 |  S WVDATE=$P(LRA,U,1) ;date/time specimen taken
 | 
|---|
| 43 |  S WVLABAN=$P(LRA,U,6) ;lab accession#
 | 
|---|
| 44 |  S WVLOC=$P(LRA,U,8) ;patient location
 | 
|---|
| 45 |  I WVLOC]"" S WVLOC=$$HL(WVLOC) ;convert location to File 44 pointer
 | 
|---|
| 46 |  S WVPROV=$P(LRA,U,7) ;requesting provider
 | 
|---|
| 47 |  ; Quit if this lab test has already been sent to FILE 790.1.
 | 
|---|
| 48 |  Q:$D(^WV(790.1,"F",WVLABAN))
 | 
|---|
| 49 |  I LRSS'="CY",LRSS'="SP" Q  ;not cytology or surgical pathology
 | 
|---|
| 50 |  ; ===============================================================
 | 
|---|
| 51 |  ; Check SNOMED codes and determine if lab test is a pap smear and
 | 
|---|
| 52 |  ; can be automatically created in FILE 790.1.
 | 
|---|
| 53 |  I $$SNOMED^WVSNOMED() D  Q
 | 
|---|
| 54 |  .D ADD^WVSNOMED
 | 
|---|
| 55 |  .Q
 | 
|---|
| 56 |  ; ===============================================================
 | 
|---|
| 57 |  S WVDR=".02////"_DFN
 | 
|---|
| 58 |  S:WVPROV]"" WVDR=WVDR_";.07////"_WVPROV
 | 
|---|
| 59 |  S WVDR=WVDR_";.1////"_$G(DUZ(2))
 | 
|---|
| 60 |  S:WVLOC]"" WVDR=WVDR_";.11////"_WVLOC
 | 
|---|
| 61 |  S WVDR=WVDR_";.12////"_WVDATE
 | 
|---|
| 62 |  S WVDR=WVDR_";.18////.5;.19////"_DT_";.34////"_$G(DUZ(2))
 | 
|---|
| 63 |  S WVDR=WVDR_";2.18////"_LRDFN_";2.19////"_LRI_";2.2////"_LRSS
 | 
|---|
| 64 |  S X=WVLABAN,Y=0
 | 
|---|
| 65 |  K DD,DO
 | 
|---|
| 66 |  N DIC,DLAYGO
 | 
|---|
| 67 |  S DIC("DR")=WVDR,DIC="^WV(790.08,",DIC(0)="ML",DLAYGO=790.08
 | 
|---|
| 68 |  D FILE^DICN
 | 
|---|
| 69 |  Q:Y<1  ;FILE 790.08 entry was not created
 | 
|---|
| 70 |  D MAIL^WVLABWP(DFN,WVLABAN,WVPROV,LRSS) ;patient, lab accession #, provider/requestor, lab subscript (CY or SP)
 | 
|---|
| 71 |  Q
 | 
|---|
| 72 | EXIT ;EP
 | 
|---|
| 73 |  K I,N,X
 | 
|---|
| 74 |  I $D(ZTQUEUED) S ZTREQ="@"
 | 
|---|
| 75 |  Q
 | 
|---|
| 76 | DELETE(DFN,LRDFN,LRI,LRA,LRSS) ;
 | 
|---|
| 77 |  ; Modify WH to reflect change in lab report status (no longer released).
 | 
|---|
| 78 |  ; Called by REPORT RELEASE DATE/TIME field xref in:
 | 
|---|
| 79 |  ; a) File 63, Field 63.08,.11
 | 
|---|
| 80 |  ; b) File 63, Field 63.09,.11
 | 
|---|
| 81 |  Q:'$D(DFN)!('$D(LRDFN))!('$D(LRI))!('$D(LRA))!('$D(LRSS))
 | 
|---|
| 82 |  Q:'$D(^WV(790.02,DUZ(2)))  ;no site parameter entry
 | 
|---|
| 83 |  Q:'$P($G(^WV(790.02,+$G(DUZ(2)),0)),U,24)  ;lab link is NO or null
 | 
|---|
| 84 |  N ZTDESC,ZTDTH,ZTIO,ZTRTN,ZTSAVE
 | 
|---|
| 85 |  S ZTRTN="DELETEQ^WVLRLINK",ZTDESC="WV Change in Lab Rpt Status"
 | 
|---|
| 86 |  S ZTSAVE("DFN")="",ZTSAVE("LRDFN")="",ZTSAVE("LRI")="",ZTSAVE("LRA")=""
 | 
|---|
| 87 |  S ZTSAVE("LRSS")=""
 | 
|---|
| 88 |  S ZTIO="",ZTDTH=$H
 | 
|---|
| 89 |  D ^%ZTLOAD
 | 
|---|
| 90 |  Q
 | 
|---|
| 91 | DELETEQ ; Called from DELETE above.
 | 
|---|
| 92 |  N WVIEN,WVDATE,WVCMGR,WVLABAN,WVLOOP,WVMSG,WVNODE,WVPN ;,WVPROV
 | 
|---|
| 93 |  N XMDUZ,XMSUB,XMTEXT,XMY ;send mail message to case manager
 | 
|---|
| 94 |  S WVLABAN=$P(LRA,U,6) ;lab accession#
 | 
|---|
| 95 |  Q:WVLABAN=""
 | 
|---|
| 96 |  S WVIEN=$O(^WV(790.08,"B",WVLABAN,0))
 | 
|---|
| 97 |  I WVIEN D DELETE^WVLABADD(WVIEN) Q  ;delete, not yet addressed
 | 
|---|
| 98 |  Q:'$D(^WV(790.1,"F",WVLABAN))  ;never entered in WH procedure file
 | 
|---|
| 99 |  ; Next look up lab test in WH procedure file and send warning message
 | 
|---|
| 100 |  ; to WH case manager.
 | 
|---|
| 101 |  S WVIEN=$O(^WV(790.1,"F",WVLABAN,0))
 | 
|---|
| 102 |  Q:'$D(^WV(790.1,WVIEN,0))
 | 
|---|
| 103 |  D RADMOD^WVPROC(WVIEN) ;update procedure status to "open"
 | 
|---|
| 104 |  S WVCMGR=+$$GET1^DIQ(790,DFN,.1,"I") ;get case manager
 | 
|---|
| 105 |  S:WVCMGR XMY(WVCMGR)=""
 | 
|---|
| 106 |  ; if no case manager, then get default case manager(s)
 | 
|---|
| 107 |  I 'WVCMGR S WVLOOP=0 F  S WVLOOP=$O(^WV(790.02,WVLOOP)) Q:'WVLOOP  D
 | 
|---|
| 108 |  .S WVCMGR=$$GET1^DIQ(790.02,WVLOOP,.02,"I")
 | 
|---|
| 109 |  .S:WVCMGR XMY(WVCMGR)=""
 | 
|---|
| 110 |  .Q
 | 
|---|
| 111 |  Q:$O(XMY(0))'>0  ;no case manager(s)
 | 
|---|
| 112 |  ;S:WVPROV XMY(WVPROV)=""
 | 
|---|
| 113 |  S WVNODE=$G(^WV(790.1,+WVIEN,0))
 | 
|---|
| 114 |  S WVPN=$E($P(WVNODE,U,1),1,2),WVPN=$$PN(WVPN)
 | 
|---|
| 115 |  S XMDUZ=.5 ;message sender
 | 
|---|
| 116 |  S XMSUB="Lab Report for WH patient is UNVERIFIED"
 | 
|---|
| 117 |  S WVMSG(1)="        Patient: "_$P($G(^DPT(DFN,0)),U,1)_" (SSN: "_$$SSN^WVUTL1(DFN)_")"
 | 
|---|
| 118 |  S WVMSG(2)=" WH Accession #: "_$P(WVNODE,U,1)_"  Procedure Type: "_$S(WVPN]"":WVPN,1:"Unknown")
 | 
|---|
| 119 |  S WVMSG(3)="Lab Accession #: "_WVLABAN
 | 
|---|
| 120 |  S WVMSG(4)=" "
 | 
|---|
| 121 |  S WVMSG(5)="NOTE: This lab test has been UNVERIFIED in the LAB package."
 | 
|---|
| 122 |  S WVMSG(6)=" "
 | 
|---|
| 123 |  S WVMSG(7)="The status of the associated WH procedure has been changed to 'open',"
 | 
|---|
| 124 |  S WVMSG(8)="You may wish to contact Lab Service to find out the reason for the change."
 | 
|---|
| 125 |  S WVMSG(9)="Please use the 'Edit a Procedure' option in the WOMEN'S HEALTH package"
 | 
|---|
| 126 |  S WVMSG(10)="to modify/close this procedure."
 | 
|---|
| 127 |  S XMTEXT="WVMSG("
 | 
|---|
| 128 |  D ^XMD
 | 
|---|
| 129 |  I $D(ZTQUEUED) S ZTREQ="@"
 | 
|---|
| 130 |  Q
 | 
|---|
| 131 | HL(WVLOC) ; Get Hospital Location file (#44) pointer
 | 
|---|
| 132 |  N WVARRAY,WVERR
 | 
|---|
| 133 |  D FIND^DIC(44,"","","X",WVLOC,"","C","","","WVARRAY","WVERR")
 | 
|---|
| 134 |  I +$G(WVARRAY("DILIST",0))=1 Q +WVARRAY("DILIST",2,1)
 | 
|---|
| 135 |  Q ""
 | 
|---|
| 136 | PN(X) ; Get procedure name
 | 
|---|
| 137 |  I X="" Q ""
 | 
|---|
| 138 |  S X=$O(^WV(790.2,"D",X,0)) ;look at abbreviation x-ref
 | 
|---|
| 139 |  I 'X Q ""
 | 
|---|
| 140 |  S X=$P($G(^WV(790.2,+X,0)),U,1)
 | 
|---|
| 141 |  Q X
 | 
|---|
| 142 |  ;
 | 
|---|
| 143 | MOVE(DFN,LRDFN,LRI,LRA,LRSS) ; Called from Lab package when a lab accession is
 | 
|---|
| 144 |  ; moved from one patient to another because the test was originally
 | 
|---|
| 145 |  ; associated to the wrong patient.
 | 
|---|
| 146 |  Q:'$D(DFN)!('$D(LRDFN))!('$D(LRI))!('$D(LRA))!('$D(LRSS))
 | 
|---|
| 147 |  N ZTDESC,ZTDTH,ZTIO,ZTRTN,ZTSAVE
 | 
|---|
| 148 |  S ZTRTN="MOVEQ^WVLRLINK",ZTDESC="WV Lab Accession moved to another patient"
 | 
|---|
| 149 |  S ZTSAVE("DFN")="",ZTSAVE("LRDFN")="",ZTSAVE("LRI")="",ZTSAVE("LRA")=""
 | 
|---|
| 150 |  S ZTSAVE("LRSS")="",ZTIO="",ZTDTH=$H
 | 
|---|
| 151 |  D ^%ZTLOAD
 | 
|---|
| 152 |  Q
 | 
|---|
| 153 | MOVEQ ; Called from MOVE above
 | 
|---|
| 154 |  N DA,DIE,DR
 | 
|---|
| 155 |  N WVACCN,WVCMGR,WVDFN,WVIEN,WVLABAN,WVLOOP,WVNIEN,WVNODE,WVPIEN,WVPN,WVRD
 | 
|---|
| 156 |  S WVLABAN=$P(LRA,U,6) ;lab accession#
 | 
|---|
| 157 |  Q:WVLABAN=""
 | 
|---|
| 158 |  S WVIEN=$O(^WV(790.08,"B",WVLABAN,0)) ;check WV LAB TESTS first
 | 
|---|
| 159 |  I WVIEN D  Q  ;fix/delete File 790.8 entry, not a file (790.1) entry
 | 
|---|
| 160 |  .D DELETE^WVLABADD(WVIEN)
 | 
|---|
| 161 |  .Q
 | 
|---|
| 162 |  ;
 | 
|---|
| 163 |  S WVPIEN=$O(^WV(790.1,"F",WVLABAN,0)) ;check WH Procedure file
 | 
|---|
| 164 |  Q:'WVPIEN  ;lab test was not converted into a WH procedure
 | 
|---|
| 165 |  S WVNODE=$G(^WV(790.1,WVPIEN,0))
 | 
|---|
| 166 |  S WVACCN=$P(WVNODE,U,1) ;WH accession#
 | 
|---|
| 167 |  S WVDFN=+$P(WVNODE,U,2) ;DFN for existing patient
 | 
|---|
| 168 |  Q:WVACCN=""
 | 
|---|
| 169 |  S WVRD=$$RDC("Error/disregard")
 | 
|---|
| 170 |  ; delete links to lab test entry so wrong lab report doesn't display
 | 
|---|
| 171 |  S DIE="^WV(790.1,",DA=WVPIEN,DR=".05////"_WVRD_";2.17///@;2.18///@;2.19///@;2.2///@"
 | 
|---|
| 172 |  ; include amended comment?
 | 
|---|
| 173 |  D ^DIE
 | 
|---|
| 174 |  S WVNIEN=$O(^WV(790.4,"C",WVACCN,0)) ;notification for that procedure?
 | 
|---|
| 175 |  ; Send a mail message to case manager about patient change
 | 
|---|
| 176 |  D MOVE^WVLABWP(WVDFN,WVNODE,WVNIEN)
 | 
|---|
| 177 |  I $D(ZTQUEUED) S ZTREQ="@"
 | 
|---|
| 178 |  Q
 | 
|---|
| 179 | RDC(WVRD) ; Return ien of Result/Diagnosis code
 | 
|---|
| 180 |  ; input text of result/diagnois
 | 
|---|
| 181 |  I WVRD="" Q ""
 | 
|---|
| 182 |  Q +$O(^WV(790.31,"B",WVRD,0))
 | 
|---|
| 183 |  ;
 | 
|---|
| 184 | VNVEC() ; Veteran/Non-Veteran/Eligibility Code check
 | 
|---|
| 185 |  ; DFN must be defined
 | 
|---|
| 186 |  ; Returns 1 - veteran
 | 
|---|
| 187 |  ;             include all non-vets flag set to YES
 | 
|---|
| 188 |  ;             non-vet patient's eligibility code is on list to track 
 | 
|---|
| 189 |  N WVALL,WVLOOP,X,Y
 | 
|---|
| 190 |  I $E($$VET^WVUTL1A(DFN))="Y" Q 1  ;veteran
 | 
|---|
| 191 |  S WVALL=$P($G(^WV(790.02,DUZ(2),0)),U,26) ;include all non-vets
 | 
|---|
| 192 |  I WVALL=1!(WVALL="") Q 1  ;1=YES
 | 
|---|
| 193 |  S WVLOOP=+$$ELIG^WVUTL9(DFN) ;internal^external elig code
 | 
|---|
| 194 |  I 'WVLOOP Q 0  ;no eligibility code
 | 
|---|
| 195 |  I $D(^WV(790.02,DUZ(2),6,WVLOOP)) Q 1  ;code is on list to be tracked
 | 
|---|
| 196 |  Q 0
 | 
|---|
| 197 |  ;
 | 
|---|