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

BLRCHGPL.m

Go to the documentation of this file.
  1. BLRCHGPL ; IHS/OIT/MKK - CHANGE PROVIDER AND/OR LOCATION UTILITY ; 07/22/2005 8:05 AM ]
  1. ;;5.2;LR;**1020,1021,1022**;September 20, 2007
  1. ;;
  1. ; Some code cloned from SINGLE^LRWRKLST and then modified
  1. MAIN ; EP
  1. ; Temp vars -- discard after routine completes
  1. NEW LRDFN,LRSS,LRAA,LRAD,LRAN,LRIDT,LRAAS
  1. NEW LRODT,LRSN,BLRLOGDA
  1. NEW LRACC,LREND,LRSTOP,LRTSE,LRUNC,LRURG
  1. NEW PROVSTR,LOCSTR,CCN,EDD
  1. NEW PROVGET,LOCGET
  1. NEW NPN,OPN,FDA,STR,ERRS
  1. NEW OLN,ON,NLN,NLNMN
  1. NEW ESIGNODE
  1. ;
  1. S ESIGNODE=9009027 ; Node in the ^LR global where E-Sig data resides
  1. ;
  1. ; Setup array so that info can be gotten quickly
  1. D PEP^BLRCHGPW
  1. ;
  1. ; Setup standard parameters
  1. D URG^LRX
  1. ;
  1. ; Loop unil done
  1. F D Q:LREND!LRSTOP
  1. . W !!
  1. . S (LREND,LRUNC,LRSTOP,LRTSE,CCN)=0
  1. . S LRACC=""
  1. . D ^LRWU4 ; Get Lab Data from Accession number
  1. . I LRAN<1 S LREND=1 Q ; If nothing, then set END flag & Quit
  1. . ;
  1. . I '$D(^LRO(68,LRAA,1,LRAD,1,LRAN,0)) D Q ; Make sure Accession exists
  1. .. W !,"Doesn't exist."
  1. .. D BLRGPGR^BLRGMENU() ; Press "Return" routine
  1. . ;
  1. . ; ----- BEGIN IHS/OIT/MKK MODIFICATION - Patch 1022
  1. . ; If order came from OERR, don't allow change
  1. . NEW LRSP
  1. . S LRSN=+$G(^LRO(68,LRAA,1,LRAD,1,LRAN,.1)) ; Order Number
  1. . S LRODT=+$P($G(^LRO(68,LRAA,1,LRAD,1,LRAN,0)),"^",4) ; Order Date
  1. . S LRSP=+$O(^LRO(69,"C",LRSN,LRODT,""))
  1. . I +$P($G(^LRO(69,LRODT,1,LRSP,0)),"^",11)>0 D Q
  1. .. W !,"Accession is tied to an OERR order. This order cannot be modified.",!
  1. .. D BLRGPGR^BLRGMENU() ; Press "Return" routine
  1. . ; ----- END IHS/OIT/MKK -- MODIFICATION 1022
  1. . ;
  1. . ; Initialization
  1. . K BLRLOGDA
  1. . S LRDFN=$P($G(^LRO(68,LRAA,1,LRAD,1,LRAN,0)),"^",1)
  1. . S LRSS=$P($G(^LRO(68,LRAA,0)),"^",2)
  1. . ;
  1. . D CHNGPROV ; Change Provider?
  1. . I LREND Q ; Quit if END flag set
  1. . D CHNGLOC ; Change Location?
  1. . ;
  1. . ; If all OK, then send changes to PCC via BLR Linker
  1. . ; I 'LREND&($D(BLRLOGDA)) D TOP^BLRQUE(BLRLOGDA,0)
  1. . ; ----- BEGIN IHS/OIT/MKK -- MODIFICATION 1022
  1. . ; All the BLRTXLOG transaction numbers are in the BLRLOGDA array --
  1. . ; have to send over notice about all of them.
  1. . I 'LREND&($D(BLRLOGDA)) D
  1. .. S BLRLOGDA=""
  1. .. F S BLRLOGDA=$O(BLRLOGDA(BLRLOGDA)) Q:BLRLOGDA="" D
  1. ... D TOP^BLRQUE(BLRLOGDA,0)
  1. . ; ----- END IHS/OIT/MKK -- MODIFICATION 1022
  1. ;
  1. Q
  1. ;
  1. ; Change Provider? -- Get provider cloned and modified from P^LRWU1
  1. CHNGPROV ;
  1. S LRIDT=$P($G(^LRO(68,LRAA,1,LRAD,1,LRAN,3)),"^",5)
  1. S OPN=$$GETPHY ; Provider in Lab Data File -- default
  1. ;
  1. ; If Provider not in Lab Data File, get from Order Entry File
  1. I OPN="" D
  1. . S ON=+$G(^LRO(68,LRAA,1,LRAD,1,LRAN,.1)) ; Order Number
  1. . S LRODT=$P($G(^LRO(68,LRAA,1,LRAD,1,LRAN,0)),"^",4) ; Order Date
  1. . S LRSN=$O(^LRO(69,"C",ON,LRODT,"")) ; Order Sequence Number
  1. . S OPN=$P($G(^LRO(69,LRODT,1,LRSN,0)),"^",6) ; Prov from Order Entry
  1. ;
  1. D ^XBFMK ; Clear Fileman Variables
  1. S DIC("B")=OPN ; Default is current Provider
  1. S DIC="^VA(200,"
  1. S DIC(0)="AMNEQ"
  1. S DIC("S")="I $D(^VA(200,""AK.PROVIDER"",$P(^(0),U))),$$ACTIVE^BLRUTIL2(Y)"
  1. S DIC("A")="PROVIDER: "
  1. S D="AK.PROVIDER"
  1. S DIC("W")="Q"
  1. D ^DIC K DIC
  1. I Y<0 Q ; If Quit or nothing, exit
  1. ;
  1. S NPN=+Y
  1. I OPN=NPN Q ; If "Old" = "New" don't bother, just quit
  1. ;
  1. ; Change the provider in 4 Different files -- quit if LREND=1 (END Flag)
  1. Q:$$SETPLAB ; (1) Lab Data File
  1. Q:$$SETPACC ; (2) Accession File
  1. Q:$$SETPORD ; (3) Order File
  1. ; Q:$$SETPTXLG ; (4) IHS Lab Transaction Log (BLRTXLOG)
  1. ; ----- BEGIN IHS/OIT/MKK -- MODIFICATION 1022
  1. ; Took out code from BLRCHGPL and put into BLRCHGPW because
  1. ; BLRCHGPL got too large
  1. Q:$$SETPTXLG^BLRCHGPW ; (4) IHS Lab Transaction Log (BLRTXLOG)
  1. ; ----- END IHS/OIT/MKK -- MODIFICATION 1022
  1. ;
  1. W !?5,"Provider Change filed",!
  1. ;
  1. ; Create Audit entry
  1. D SETINDX("PHY",LRAA,LRAD,LRAN,OPN,NPN)
  1. Q
  1. ;
  1. GETPHY() ;
  1. Q @$G(PROVGET(LRSS)) ; Return Provider location in file
  1. ;
  1. ; Change Provider in Lab Data file.
  1. SETPLAB() ;
  1. NEW SUBFILE
  1. D ^XBFMK
  1. K DIE,ERRS,FDA,IENS
  1. S IENS=LRIDT_","_LRDFN_","
  1. S SUBFILE=$S(LRSS="CH":63.04,LRSS="MI":63.05,LRSS="BB":63.01)
  1. S FDA(SUBFILE,IENS,$G(PROVGET(LRSS,0)))=NPN
  1. D FILE^DIE("K","FDA","ERRS")
  1. ;
  1. I $D(ERRS("DIERR"))>0 D BADSTUFF^BLRCHGER("SETPLAB") Q LREND
  1. I $D(ERRS("DIERR"))<1 S LREND=0
  1. ;
  1. ; D ESIGCHNG ; E-SIG Changes
  1. ; ----- BEGIN IHS/OIT/MKK -- MODIFICATION - 1022
  1. ; Moved the ESIGCHNG routine from BLRCHGPL to BLRCHGPW because
  1. ; BLRCHGPL was getting too large
  1. D ESIGCHNG^BLRCHGPW
  1. ; ----- END IHS/OIT/MKK -- MODIFICATION - 1022
  1. ;
  1. Q LREND
  1. ;
  1. ; Change Provider in Accession file.
  1. SETPACC() ;
  1. D ^XBFMK
  1. K DIE,FDA,ERRS,IENS
  1. S IENS=LRAN_","_LRAD_","_LRAA_","
  1. S FDA(68.02,IENS,$G(PROVGET("ACCESSION","PROV")))=NPN
  1. D FILE^DIE("K","FDA","ERRS")
  1. ;
  1. I $D(ERRS("DIERR"))>0 D BADSTUFF^BLRCHGER("SETPACC") Q LREND
  1. I $D(ERRS("DIERR"))<1 S LREND=0
  1. ;
  1. Q LREND
  1. ;
  1. ; Change Provider in Order Entry File
  1. SETPORD() ;
  1. ; Order file
  1. NEW DONE
  1. ;
  1. S ON=+$G(^LRO(68,LRAA,1,LRAD,1,LRAN,.1)) ; Order Number
  1. S LRODT=$P($G(^LRO(68,LRAA,1,LRAD,1,LRAN,0)),"^",4) ; Order Date
  1. ;
  1. S (DONE,LRSN)=""
  1. F S LRSN=$O(^LRO(69,"C",ON,LRODT,LRSN)) Q:LRSN=""!(DONE="D") D
  1. . S LRDFN=$P($G(^LRO(69,LRODT,1,LRSN,0)),"^",1)
  1. . S LRTEST=0
  1. . F S LRTEST=$O(^LRO(69,LRODT,1,LRSN,2,LRTEST)) Q:LRTEST=""!(LRTEST'?.N)!(DONE="D") D
  1. .. S TSTSTR=(^LRO(69,LRODT,1,LRSN,2,LRTEST,0))
  1. .. I $P(TSTSTR,"^",3)'=LRODT Q ; If Date doesn't match, skip
  1. .. I $P(TSTSTR,"^",4)'=LRAA Q ; If Accession Area doesn't match, skip
  1. .. I $P(TSTSTR,"^",5)'=LRAN Q ; If Accession Number doesn't match, skip
  1. .. ;
  1. .. ; Accession Matches -- Change Provider
  1. .. S DONE="D" ; No matter what, quit after this
  1. .. D ^XBFMK
  1. .. K DIE,FDA,ERRS,IENS
  1. .. S IENS=LRSN_","_LRODT_","
  1. .. S FDA(69.01,IENS,$G(PROVGET("ORDER ENTRY")))=NPN
  1. .. D FILE^DIE("K","FDA","ERRS")
  1. .. ;
  1. .. I $D(ERRS("DIERR"))>0 D BADSTUFF^BLRCHGER("SETPORD")
  1. .. I $D(ERRS("DIERR"))<1 S LREND=0
  1. .. ;
  1. .. ; Check to see if Provider REALLY changed
  1. .. I $P($G(^LRO(69,LRODT,1,LRSN,0)),"^",6)'=NPN D Q
  1. ... W !!!,?5,$TR($J("",45)," ","*"),!!
  1. ... W ?5,$$CJ^XLFSTR("PROVIDER NOT CHANGED IN ORDER FILE",45),!!
  1. ... W ?5,"Old Provider IEN:",OPN
  1. ... W ?35,"New Prov IEN:",NPN
  1. ... W ?5,$TR($J("",45)," ","*"),!!
  1. ... S LREND=1
  1. .. ;
  1. .. ; Now, have to change X-Ref since FileMan isn't
  1. .. NEW PTPTR,PATNAME
  1. .. S PTPTR=$P($G(^LR(LRDFN,0)),"^",3)
  1. .. I $G(PTPTR)="" Q
  1. .. ;
  1. .. S PATNAME=$P($G(^DPT(PTPTR,0)),"^",1) ; Patient Name
  1. .. I $G(PATNAME)="" Q
  1. .. ;
  1. .. NEW OPNAME ; "Old" Provider Name"
  1. .. S OPNAME=$P($G(^VA(200,OPN,0)),"^",1)
  1. .. I $D(^LRO(69,LRODT,1,"AP",OPNAME))<1 Q
  1. .. ;
  1. .. NEW IEN,OKNOW,TODT,TON
  1. .. S (IEN,OKNOW)=""
  1. .. I $D(^LRO(69,LRODT,1,"AP",OPNAME,PATNAME,ON))<1 Q
  1. .. ;
  1. .. NEW NPNAME
  1. .. S NPNAME=$P($G(^VA(200,NPN,0)),"^",1)
  1. .. S STR="^LRO(69,"_LRODT_",1,AP,"_OPNAME_","_PATNAME_","_ON_")"
  1. .. K @STR
  1. .. S ^LRO(69,LRODT,1,"AP",NPNAME,PATNAME,ON)=""
  1. ;
  1. Q LREND
  1. ;
  1. ; Populate new global
  1. SETINDX(WOT,LRAA,LRAD,LRAN,OLD,NEW) ;
  1. NEW SUBNODE,DICT0,DICT1
  1. NEW ACCNDX,ACCSTR,ACCNXT
  1. ;
  1. S DICT0="90475.2"
  1. ;
  1. I WOT["PHY" S SUBNODE=1
  1. I WOT["LOC" S SUBNODE=2
  1. S DICT1="90475.2"_SUBNODE
  1. ;
  1. S ACCSTR=$G(^LRO(68,LRAA,1,LRAD,1,LRAN,.2))
  1. ;
  1. D ^XBFMK
  1. K ERRS,FDA,IENS,DIE
  1. S FDA(DICT0,"?+1,",.01)=ACCSTR ; Find the Accession node, or create it.
  1. S FDA(DICT1,"+2,?+1,",.01)=OLD
  1. S FDA(DICT1,"+2,?+1,",1)=NEW
  1. S FDA(DICT1,"+2,?+1,",2)=$E($$NOW^XLFDT(),1,12)
  1. S FDA(DICT1,"+2,?+1,",3)=$G(DUZ)
  1. D UPDATE^DIE(,"FDA",,"ERRS")
  1. I $D(ERRS("DIERR"))>0 D Q
  1. . D BADSTUFF^BLRCHGER("SETINDX")
  1. ;
  1. Q
  1. ;
  1. ; Change Location? -- Get location cloned and modified from ASK^LRWU
  1. CHNGLOC ;
  1. S OLN=$P($G(^LRO(68,LRAA,1,LRAD,1,LRAN,0)),"^",13)
  1. ;
  1. D ^XBFMK
  1. S DIC("B")=OLN
  1. S DIC("A")="PATIENT LOCATION:"
  1. ; S DIC=44
  1. S DIC="^SC("
  1. S DIC(0)="AMNEQ"
  1. D ^DIC K DIC
  1. I +Y<0 Q
  1. ;
  1. S NLN=+Y
  1. I OLN=NLN Q ; If "Old" = "New" don't bother, just quit
  1. ;
  1. S NLNMN=$P($G(^SC(NLN,0)),"^",2) ; "New" Hospital Location Mnemonic
  1. ;
  1. ; Change the location in 4 Different files -- quit if LREND=1 (END Flag)
  1. Q:$$SETLLAB ; (1) Lab Data File
  1. Q:$$SETLACC ; (2) Accession File
  1. Q:$$SETLORD ; (3) Order File
  1. Q:$$SETLTXLG ; (4) IHS Lab Transaction Log (BLRTXLOG)
  1. ;
  1. W !?5,"Location Change filed",!
  1. ;
  1. ; Create Audit entry
  1. D SETINDX("LOC",LRAA,LRAD,LRAN,OLN,NLN)
  1. ;
  1. Q
  1. ;
  1. ; Lab Data file.
  1. SETLLAB() ;
  1. NEW SUBFILE
  1. S SUBFILE=$S(LRSS="CH":63.04,LRSS="MI":63.05,LRSS="BB":63.01)
  1. D ^XBFMK
  1. K ERRS,FDA,IENS
  1. S IENS=LRIDT_","_LRDFN_","
  1. I $G(LOCGET(LRSS,0))'="" D
  1. . S FDA(SUBFILE,IENS,$G(LOCGET(LRSS,0)))=NLN_";SC("
  1. I $G(LOCGET(LRSS,1))'="" D
  1. . S FDA(SUBFILE,IENS,$G(LOCGET(LRSS,1)))=NLNMN
  1. D FILE^DIE("K","FDA","ERRS")
  1. ;
  1. I $D(ERRS("DIERR"))>0 D BADSTUFF^BLRCHGER("SETLLAB")
  1. I $D(ERRS("DIERR"))<1 S LREND=0
  1. ;
  1. ;
  1. Q LREND
  1. ;
  1. ; Accession file.
  1. SETLACC() ;
  1. D ^XBFMK
  1. K DIE,ERRS,FDA,IENS
  1. S IENS=LRAN_","_LRAD_","_LRAA_","
  1. S FDA(68.02,IENS,$G(LOCGET("ACCESSION","ORDL")))=NLN
  1. S FDA(68.02,IENS,$G(LOCGET("ACCESSION","RPTL")))=NLNMN
  1. D FILE^DIE("K","FDA","ERRS")
  1. ;
  1. I $D(ERRS("DIERR"))>0 D BADSTUFF^BLRCHGER("SETLACC")
  1. I $D(ERRS("DIERR"))<1 S LREND=0
  1. ;
  1. Q LREND
  1. ;
  1. ; Order file
  1. SETLORD() ;
  1. NEW DONE
  1. ;
  1. S ON=+$G(^LRO(68,LRAA,1,LRAD,1,LRAN,.1)) ; Order Number
  1. S LRODT=$P($G(^LRO(68,LRAA,1,LRAD,1,LRAN,0)),"^",4) ; Order Date
  1. ;
  1. S (DONE,LRSN)=""
  1. F S LRSN=$O(^LRO(69,"C",ON,LRODT,LRSN)) Q:LRSN=""!(DONE="D") D
  1. . S LRTEST=0
  1. . F S LRTEST=$O(^LRO(69,LRODT,1,LRSN,2,LRTEST)) Q:LRTEST=""!(LRTEST'?.N)!(DONE="D") D
  1. .. S TSTSTR=(^LRO(69,LRODT,1,LRSN,2,LRTEST,0))
  1. .. I $P(TSTSTR,"^",3)'=LRODT Q ; If Date doesn't match, skip
  1. .. I $P(TSTSTR,"^",4)'=LRAA Q ; If Accession Area doesn't match, skip
  1. .. I $P(TSTSTR,"^",5)'=LRAN Q ; If Accession Number doesn't match, skip
  1. .. ;
  1. .. ; Accession Matches -- Change Location
  1. .. ;
  1. .. S DONE="D" ; No matter what, quit after this
  1. .. D ^XBFMK
  1. .. K ERRS,FDA,IENS,DIE
  1. .. S IENS=LRSN_","_LRODT_","
  1. .. S FDA(69.01,IENS,$G(LOCGET("ORDER ENTRY","ORDL")))=NLN
  1. .. S FDA(69.01,IENS,$G(LOCGET("ORDER ENTRY","RPTL")))=NLNMN
  1. .. D FILE^DIE("K","FDA","ERRS")
  1. .. ;
  1. .. I $D(ERRS("DIERR"))>0 D BADSTUFF^BLRCHGER("SETLORD - 1")
  1. .. ;
  1. .. I $D(ERRS("DIERR"))<1 S LREND=0
  1. ;
  1. Q LREND
  1. ;
  1. ; IHS Lab Transaction Log
  1. SETLTXLG() ;
  1. NEW BLRSN
  1. S ON=+$G(^LRO(68,LRAA,1,LRAD,1,LRAN,.1)) ; Order Number
  1. S BLRSN=$O(^BLRTXLOG("C",ON,""))
  1. I BLRSN="" D Q LREND
  1. . D BADJUJU^BLRCHGER("SETLTXLG",$G(^LRO(68,LRAA,1,LRAD,1,LRAN,.2)),ON)
  1. ;
  1. S DICT0="9009022"
  1. ;
  1. D ^XBFMK
  1. K ERRS,FDA,IENS,DIE
  1. S IENS=BLRSN_","
  1. S FDA(DICT0,IENS,1106)=NLN
  1. D FILE^DIE("K","FDA","ERRS")
  1. ;
  1. I $D(ERRS("DIERR"))>0 D
  1. . W !!
  1. . W "BLRSN:",BLRSN,!
  1. . W " IENS:",IENS,!
  1. . W " NPN:",NPN,!
  1. . W " ON:",ON,!
  1. . D BADSTUFF^BLRCHGER("SETLTXLG")
  1. ;
  1. I $D(ERRS("DIERR"))<1 D
  1. . S LREND=0
  1. . S BLRLOGDA=BLRSN
  1. ;
  1. Q LREND
  1. ;
  1. PROVREPT ; EP - Provider Report
  1. D ^XBFMK
  1. S L="",DIC=90475.2,FLDS="[LAB PROV CHNG]",BY="[LAB PROV CHNG ACC SRT]",FR=""
  1. S DHD="PROVIDER CHANGED AFTER ORDER FINALIZED"
  1. D EN1^DIP
  1. D BLRGPGR^BLRGMENU() ; Press Return
  1. Q
  1. ;
  1. LOCREPT ; EP - Location Report
  1. D ^XBFMK
  1. S L="",DIC=90475.2,FLDS="[LAB LOC CHNG]",BY="[LAB LOC CHNG ACC SRT]",FR=""
  1. S DHD="LOCATION CHANGED AFTER ORDER FINALIZED"
  1. D EN1^DIP
  1. D BLRGPGR^BLRGMENU()
  1. Q
  1. ;
  1. BOTHREPT ; EP - Provider and/or Location Report (Combined)
  1. D ^XBFMK
  1. S L="",DIC=90475.2,FLDS="[LAB PROV LOC BOTH]",BY="ACCESSION",FR=""
  1. S DHD="PROVIDER AND/OR LOCATION CHANGED AFTER ORDER FINALIZED"
  1. D EN1^DIP
  1. D BLRGPGR^BLRGMENU()
  1. Q