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

LR7OAPKM.m

Go to the documentation of this file.
  1. LR7OAPKM ;DSS/FHS - INBOUND CPRS MESSAGE HANDLER ;May 13, 2022@10:40:38
  1. ;;5.2;LAB SERVICE;**462,553**;Sep 27, 1994;Build 21
  1. Q
  1. AP1(MSG,LRAP1) ;Entry point to store CPRS AP orders messages
  1. ; CALL FROM LR7OF0
  1. ;In put
  1. ; MSG=CPRS HL7 ORDER MESSAGE ARRAY
  1. ; ^XTMP("LRAP1",1,IEN.01)=ORIFN^LRDFN
  1. ; ^XTMP("LRAP1",1,IEN.02)="AP1"|ORIFN||TEST SUBSCRIPT|||AP Screen IEN_"-"_TEST NAME
  1. ; MERGE MSG INTO ^XTMP("LRAP1",1,IEN,1...) USED FOR TROBLE SHOOTING
  1. ; +AP Screen IEN pointer to ^LAB(69.71
  1. ;
  1. ;TASKAP1^LR7OAPKM Stores the CPRS order message data into ^LRO(69,
  1. ;
  1. N LRCNT
  1. L +^XTMP("LRAP1"):DILOCKTM
  1. D:'$G(^XTMP("LRAP1",0)) SETUP0 ;Setup ^XTMP("LRAP1")
  1. S LRCNT=+$G(^XTMP("LRAP1",1,0))+1,$P(^XTMP("LRAP1",1,0),U)=LRCNT
  1. L -^XTMP("LRAP1")
  1. S ^XTMP("LRAP1",1,LRCNT,.01)=$G(ORIFN)_U_$G(LRDFN)
  1. S ^XTMP("LRAP1",1,LRCNT,.02)=LRAP1
  1. S ^XTMP("LRAP1","B",+$G(ORIFN),LRCNT)=$$FMTE^XLFDT($$NOW^XLFDT,2)
  1. S ^XTMP("LRAP1","C",+$G(LRDFN),LRCNT)=$$FMTE^XLFDT($$NOW^XLFDT,2)
  1. M ^XTMP("LRAP1",1,LRCNT)=MSG
  1. D AP1LOAD
  1. S $P(^XTMP("LRAP1",0),U)=$$FMADD^XLFDT(DT,180)
  1. Q
  1. ;
  1. AP1LOAD ;Call ZTLOAD with LRCNT value
  1. N ZTIO,ZTRTN,ZTDTH,ZTDESC,ZTSAVE
  1. S ZTSAVE("ORIFN")="",ZTSAVE("LRAP1")="",ZTSAVE("DUZ*")=""
  1. S ZTSAVE("LRCNT")="",ZTIO="",ZTDTH=$H,ZTDESC="LR PROCESS CPRS AP ORDER MESSAGE"
  1. S ZTRTN="TASKAP1^LR7OAPKM"
  1. D ^%ZTLOAD
  1. Q
  1. TASKAP1 ;Entry point for TASK
  1. ;Pass LRCNT from ^XTMP("LRAP1",
  1. ;
  1. K ^TMP("LRAOE",$J)
  1. N DATA,IEN,IENX,IENXX,ID,FDA,LRCOM,LRCOL,LRCOLROOT,LRDFN,LRFIELD,LRFILE
  1. N LRDFN,LRGLOB,LRHEAD,LRDUZ
  1. N LRID,LRJ,LRODT,LRORD,LRQS,LRREF,LRSAMP,LRSCR
  1. N LRSN,LRSP,LRSPCOM,LRSPDATA,LRSPROOT,LRXSS,LRTXT,VAL,X,Y,LRSPCOMROOT,TMP
  1. S:$G(LRCNT) $P(^XTMP("LRAP1",1,0),U,2)=LRCNT
  1. S ORIFN=$P(LRAP1,"|",2),LRXSS=$P(LRAP1,"|",4),LRSCR=$P(LRAP1,"|",7),LRJ=$J
  1. I LRSCR'="" S LRSCR=$O(^LAB(69.71,"B",LRSCR,0))
  1. M LRDUZ=DUZ
  1. S LRREF=$$GET1^DIQ(100,ORIFN_",",33,"I","","ERR")
  1. S LRORD=+LRREF,LRODT=$P(LRREF,";",2),LRSN=$P(LRREF,";",3)
  1. D GETSPEC(ORIFN,.LRSPDATA)
  1. D APSP69(LRODT,LRSN,.LRSPDATA)
  1. S VAL=$$ID(ORIFN)
  1. Q:'$G(VAL)
  1. D LOADIAG(LRODT,LRSN,.TMP)
  1. ;
  1. S:$G(LRCNT) $P(^XTMP("LRAP1",1,0),U,3)=LRCNT
  1. ;
  1. ;
  1. PURGE ;Purge old entries - keep the last 300 entries in the file
  1. ;^XTMP("LRAP1",1,0)=NEXT MESSAGE#*MESSAGE # BEING PROCESSED^LAST MESSAGE PROCESSED
  1. ; If there are no errors - all three fields should be the same.
  1. ;^XTMP("LRAP1",1,IEN,.01)=ORIFN^LRDFN
  1. N IEN,VAL
  1. S IEN=+($P($G(^XTMP("LRAP1",1,0)),U,3)-300) I IEN>1 D
  1. . F IEN=IEN:1:(LRCNT-300) I $G(^XTMP("LRAP1",1,IEN,.01)) S VAL=^(.01) D
  1. . . K ^XTMP("LRAP1","B",+VAL,IEN)
  1. . . K ^XTMP("LRAP1","C",$P(VAL,U,2),IEN)
  1. . . K ^XTMP("LRAP1",1,IEN)
  1. K ORIFN,LRAP1,LRCNT
  1. S:$D(ZTQUEUED) ZTREQ="@"
  1. Q
  1. GETSPEC(ORIFN,RET) ;Retrieve Spec Description/Specimen/Sample
  1. ;IN = CPRS ORIFN # ^OR(100,ORIFN
  1. ;RET = Return array ID
  1. ;OUT = RET(INSTANCE,"NAME")=VALUE
  1. ;
  1. N IEN,LRX,INST,VAL,VAL1,X,Y
  1. S (VAL,RET)="",INST=1
  1. I '$G(^OR(100,ORIFN,.1,1,0)) S RET=0 Q RET
  1. ;Specimen Description
  1. S IEN=0 F S IEN=$O(^OR(100,ORIFN,4.5,"ID","SPECDESC",IEN)) Q:IEN<1 D
  1. . S VAL=^OR(100,ORIFN,4.5,IEN,0),INST=$P(VAL,U,3),VAL1=^(1)
  1. . S LRX(INST,"DES")=VAL1
  1. S IEN(1)=0 F S IEN(1)=$O(^OR(100,ORIFN,4.5,"ID","SPECIMEN",IEN(1))) Q:IEN(1)<1 D
  1. . S VAL=^OR(100,ORIFN,4.5,IEN(1),0),INST=$P(VAL,U,3),VAL(1)=^(1)
  1. . S LRX(INST,"SPEC")=VAL(1)
  1. S IEN(2)=0 F S IEN(2)=$O(^OR(100,ORIFN,4.5,"ID","SAMPLE",IEN(2))) Q:IEN(2)<1 D
  1. . S VAL=^OR(100,ORIFN,4.5,IEN(2),0),INST=$P(VAL,U,3),VAL1=^(1)
  1. . S LRX(INST,"SAM")=VAL1
  1. M RET=LRX
  1. Q
  1. ZAPLOOK(LRAOE) ; Pointer Lookup into a multiple
  1. K DIC,DA,Y,X
  1. S DIC="^LAB(69.71,"_LRAOE_",4,",DA=LRAOE,DA(1)=21661
  1. S DIC(0)="AQEZNM" D ^DIC
  1. Q
  1. DD ;Get the Data Dictionary values
  1. S LRTXT="" F S LRTXT=$O(LRID(LRTXT)) Q:LRTXT="" D
  1. . S IENX=$O(^LAB(69.71,LRSCR,4,"B",LRTXT,0))
  1. . S LRID(LRTXT)=^LAB(69.71,LRSCR,4,IENX,0)
  1. Q
  1. ID(ORIFN) ;This is the entry point to extract CPRS user response for at CPRS AP Window
  1. ;INPUT ORIFN=Pointer to ^OR(100,ORIFN
  1. ; LRSCR=Pointer to ^LAB(69.71,LRSCR
  1. ;OUTPUT TMP("??"
  1. ;Return 1 if valid
  1. ; 0^error text
  1. ;
  1. K IEN,IENX,ID,XXY,LRID,TMP
  1. I '$G(^OR(100,ORIFN,0)) Q 0_"^File 100 entry does not exist"
  1. ;I '$D(^LAB(69.71,LRSCR,0)) Q 0_"^File 69.71,"_LRSCR_" entry does not exist"
  1. S ID=$O(^OR(100,ORIFN,4.5,"ID","CLINHX",0))
  1. I ID M TMP("CL")=^OR(100,ORIFN,4.5,ID,2) K TMP("CL",0)
  1. S ID=$O(^OR(100,ORIFN,4.5,"ID","OPFIND",0))
  1. I ID M TMP("OP")=^OR(100,ORIFN,4.5,ID,2) K TMP("OP",0)
  1. S ID=$O(^OR(100,ORIFN,4.5,"ID","POSTOPDX",0))
  1. I ID M TMP("PO")=^OR(100,ORIFN,4.5,ID,2) K TMP("PO",0)
  1. S ID=$O(^OR(100,ORIFN,4.5,"ID","PREOPDX",0))
  1. I ID M TMP("PR")=^OR(100,ORIFN,4.5,ID,2) K TMP("PR",0)
  1. S ID=$O(^OR(100,ORIFN,4.5,"ID","SPCSUBMIT",0))
  1. I ID S TMP("SUB")=^OR(100,ORIFN,4.5,ID,1)
  1. S ID=$O(^OR(100,ORIFN,4.5,"ID","SURGPROV",0))
  1. I ID S TMP("SURG")=^OR(100,ORIFN,4.5,ID,1)
  1. S ID=$O(^OR(100,ORIFN,4.5,"ID","SURGCASE",0))
  1. I ID S TMP("SURGCASE")=^OR(100,ORIFN,4.5,ID,1)
  1. Q 1
  1. ;
  1. ORITEM(ORIFN) ;Return the ^LAB(60,IEN orderable item for an CPRS Order
  1. ;
  1. N IEN,VAL,RET,ANS,X,Y
  1. S:ORIFN="" ORIFN=1582
  1. S IEN="1,"_ORIFN_",",RET=0
  1. S VAL=$$GET1^DIQ(100.001,IEN,.01,"I",.ANS,"ERR")
  1. I VAL="" Q RET
  1. I '$D(^ORD(101.43,VAL,"LR")) Q 0
  1. K ERR S VAL(2)=$$GET1^DIQ(101.43,VAL_",",".01","I",.ANS,"ERR")
  1. S RET=$O(^LAB(60,"B",VAL(2),0))
  1. Q +$G(RET)
  1. ;
  1. APSP69(LRODT,LRSN,LRSPDATA) ;Load AOE Specimen/Sample into ^LRO(69,DT,1,LRSN,
  1. ; INPUT SPDATA(X)=LRSP^LRCOL
  1. ;
  1. 69 ; Load LRAPDATA(INSTANCE,"NAME") into ^LRO(69,LRODT,1,LRSN
  1. ;
  1. N FDA,IEN,IENX,ERR,ERR1,ERR2,WPIEN68,NODE,ANS,ANSY,LRSP,LRCOL
  1. N LRJ,LRNODE
  1. ;
  1. ;S LRREF=$$GET1^DIQ(100,ORIFN_",",33,"I","","ERR")
  1. ;S LRORD=+LRREF,LRODT=$P(LRREF,";",2),LRSN=$P(LRREF,";",3)
  1. S IEN="+1,1,"_LRSN_","_LRODT_",",LRJ=$J
  1. S IENX=0 F S IENX=$O(LRSPDATA(IENX)) Q:IENX<1 D
  1. . S LRSPCOM=LRSPDATA(IENX,"DES")
  1. . S LRSP=LRSPDATA(IENX,"SPEC")
  1. . S LRSAMP=LRSPDATA(IENX,"SAM")
  1. . K FDA,ERR1,ANS
  1. . S FDA(2,69.221661,IEN,.01)=LRSPCOM ;Specimen Description
  1. . S FDA(2,69.221661,IEN,.06)=LRSP ;Specimen ^LAB(61,LRSP
  1. . S FDA(2,69.221661,IEN,.07)=LRSAMP ; Collection Sample ^LAB(62,LRCOL
  1. . D UPDATE^DIE("KS","FDA(2)","","ERR1")
  1. . I $D(ERR1) W !,IENX_" &&&"
  1. Q
  1. ;
  1. LOOK(LRTST,LRSPEC,RET) ;Find CPRS SCREEN pointer
  1. ; CALLED FROM ORMBLDLR
  1. ; LROUT(TEST,AP)=CPRS Screen #
  1. ;AP = Pointer to ^LAB(69.71
  1. ;LRTST=POINTER TO ^LAB(60,
  1. ;LRSPEC= POINTER TO ^LAB(61, Only required for non-panel test
  1. ;RET = values returned in the variable. If not pasted values return in the VAL(#) Array
  1. ;OUTPUT
  1. ;Look at the test level defined CPRS Screen first
  1. ;If no test level defined CPRS Screen -
  1. ; then look at the test-specimen level assigned CPRS Screen.
  1. ;RET(AP#)="" Where AP# = Pointer to ^LAB(69.71 file
  1. ;RET="" If no AOE screens defined (null result)
  1. N IEN,IENX,VAL
  1. K RET S RET="",(IENX,IEN)=0,VAL=""
  1. I '$D(^LAB(60,+$G(LRTST),0)) S RET="" Q 0
  1. ;Look for panel test CPRS Screen
  1. I $P(^LAB(60,+$G(LRTST),0),U,5)="" D M RET=VAL Q IENX
  1. . F S IEN=$O(^LAB(60,"AV1",+$G(LRTST),IEN)) Q:IEN<1 D
  1. . . S VAL(IEN)=$P(^LAB(69.71,IEN,0),U),IENX=1
  1. ;Look in the specimen mulitple
  1. I '$G(IENX) F S IEN=$O(^LAB(60,+$G(LRTST),1,+$G(LRSPEC),21661,"B",IEN)) Q:IEN<1 D
  1. . S VAL(IEN)=$P(^LAB(69.71,IEN,0),U),IENX=1
  1. M RET=VAL
  1. Q IENX
  1. ;
  1. ;
  1. LOADIAG(LRODT,LRSN,LRDATA) ;Load CPRS Dialog into ^LRO(69
  1. K ERR,FDA
  1. S IEN=LRSN_","_LRODT_","
  1. I $O(TMP("CL",0)) D WP^DIE(69.01,IEN,21661.813,"","TMP(""CL"")","ERR") ;CLINICHX
  1. I $O(TMP("PR",0)) D WP^DIE(69.01,IEN,21661.814,"","TMP(""PR"")","ERR") ;PRE-OPERATIVE
  1. I $O(TMP("OP",0)) D WP^DIE(69.01,IEN,21661.815,"","TMP(""OP"")","ERR") ;OPERATIVE FINDSSSSS
  1. I $O(TMP("PO",0)) D WP^DIE(69.01,IEN,21661.816,"","TMP(""PO"")","ERR") ;POST-OP
  1. S:$G(TMP("SUB"))'="" FDA(2,69.01,IEN,21661.811)=TMP("SUB") ;SUBMITTER
  1. S FDA(2,69.01,IEN,21661.71)="["_LRXSS_"]" ;Accession Ares subscript
  1. S FDA(2,69.01,IEN,21661.72)=LRSCR ;CPRS Screen IEN pointer
  1. I $G(TMP("SURG")) S FDA(2,69.01,IEN,21661.73)=TMP("SURG") ;SURGEON/PROVIDER
  1. ;I $G(TMP("SURGCASE")) S FDA(2,69.01,IEN,21661.74)=TMP("SURGCASE") ;SURGERY CASE #
  1. D UPDATE^DIE("KS","FDA(2)","","ERR")
  1. Q
  1. ;
  1. DIAG(LRORD,LRSN) ;Retrieve CPRS ORDER DIAGNOSIS DATA FROM ^LRO(69,LRODT,1,LRSN
  1. ;IN = CPRS ORIFN # ^OR(100,ORIFN
  1. ;RET = Return array ID
  1. ;OUT = RET Array
  1. ;
  1. BH ;
  1. K ANS,X,Y,ERR,FIL,FLD
  1. S RET="",FIL=69.01,FLD=21661.813,IEN=LRSN_","_LRORD_","
  1. S X=$$GET1^DIQ(69.01,IEN,21661.813,"Z","TMP(""CL"")","ERR") ;BRIEF CLINICAL HISTORY
  1. ;
  1. PO S X=$$GET1^DIQ(69.01,IEN,21661.814,"Z","TMP(""PR"")","ERR") ; PREOPERATIVE DIAGNOSIS
  1. ;
  1. OF S X=$$GET1^DIQ(69.01,IEN,21661.815,"Z","TMP(""OP"")","ERR") ; OPERATIVE FINGINGS
  1. ;
  1. PD S X=$$GET1^DIQ(69.01,IEN,21661.816,"Z","TMP(""PO"")","ERR") ; POSTOPERATIVE DIAGNOSIS
  1. ;
  1. W !!
  1. Q
  1. ORDATA(ORIFN,LRVAL) ;Get data from CPRS Dialog fields
  1. K ANS,X,Y,ERR,FIL,FLD
  1. S LRVAL="",FIL=100.045,FLD=2
  1. F VAL=9:1:12 S IEN=VAL_","_ORIFN_"," D
  1. . S X=$$GET1^DIQ(100.045,IEN,FLD,"","ANS("_VAL_")","ERR")
  1. M LRVAL=ANS
  1. Q
  1. FILDIA(LRODT,LRSN,FLD,ARRAY) ;File CPRS AP Dialog into ^LRO(69,LRODT,1,LRSN
  1. K ANS,X,Y,ERR,IEN,FDA
  1. S IEN=LRSN_","_LRODT_","
  1. S FIL=69.01 S:'$G(FLD) FLD=21661.813
  1. D WP^DIE(FIL,IEN,FLD,"ARRAY","ERR")
  1. Q
  1. TESTAP1 ;
  1. ;Load LRAP1 data ^LRO(69,3151201,1,1,0)
  1. D ^XUP S LRCNT=7,LRAP1="AP1|2827||CY|||124",ORIFN=2827
  1. K ^TMP("LRAP1",$J)
  1. Q
  1. ASKORDER ;
  1. N DIR,DIRUT
  1. W !!
  1. S DIR("A")="Order Number: ",DIR(0)="FOA"
  1. S DIR("?",1)="Enter a whole number for the order number."
  1. S DIR("?")="Enter '^' to Exit."
  1. D ^DIR I $D(DIRUT) W !!,"OUT",!
  1. I Y="" Q
  1. W !,Y S LRORD=Y
  1. S LRODT=+$O(^LRO(69,"C",LRORD,0))
  1. S LRSN=+$O(^LRO(69,"C",LRORD,LRODT,0))
  1. I 'LRSN W !!,"INVALID ORDER NUMBER" G ASKORDER
  1. I $D(^LRO(69,LRODT,1,LRSN,0)) S LRDFN=+^(0)
  1. D PT^LRX
  1. W @IOF D ORDER^LROS
  1. Q
  1. SETUP0 ;
  1. Q:$G(^XTMP("LRAP1",0))
  1. S ^XTMP("LRAP1",0)=$$FMADD^XLFDT(DT+180)_U_DT_U_"CPRS AP ORDER MESSAGE LOG"
  1. S ^XTMP("LRAP1",1,0)=10
  1. Q