| 1 | PSXDODB ;BIR/HTW-HL7 Message Conversion ;25 Jul 2002  10:02 PM
 | 
|---|
| 2 |  ;;2.0;CMOP;**38,45**;11 Apr 97
 | 
|---|
| 3 |  ; This routine loads a Businessware-converted 2.1 message into a mailman message
 | 
|---|
| 4 | EN(PATH,FNAME) ; needs directory & file name
 | 
|---|
| 5 |  ; force an error in the next line
 | 
|---|
| 6 |  I $L(PATH),$L(FNAME) I 1
 | 
|---|
| 7 |  E  S PSXERR="0^BAD PATH OR FILENAME" G ERRMSG
 | 
|---|
| 8 |  K ^TMP($J,"PSXDOD")
 | 
|---|
| 9 |  S GBL="^TMP("_$J_",""PSXDOD"",1)"
 | 
|---|
| 10 |  S Y=$$FTG^%ZISH(PATH,FNAME,GBL,3)
 | 
|---|
| 11 |  I Y'>0 S PSXERR="9^"_PATH_U_FNAME_U_" DID NOT LOAD" G ERRMSG
 | 
|---|
| 12 |  I $D(^TMP($J,"PSXDOD"))'>1 S PSXERR="9^"_PATH_U_FNAME_U_" DID NOT LOAD" G ERRMSG
 | 
|---|
| 13 | EN1 ;
 | 
|---|
| 14 |  S PSXERR=""
 | 
|---|
| 15 |  D EN^PSXDODB1 ;returns PSXERR="" if file is OK ; otherwise it sends negative ack, mail message, copies to pending
 | 
|---|
| 16 |  G:PSXERR'="" EXIT
 | 
|---|
| 17 |  S GL="^TMP($J,""PSXDOD"")" ; for global indirection
 | 
|---|
| 18 |  ; Work through translated 2.1 file and add 1 prefix to site ids
 | 
|---|
| 19 |  ; correct Patient name. provider name, remove BTS segment
 | 
|---|
| 20 |  F Z=0:0 S Z=$O(^TMP($J,"PSXDOD",Z)) Q:$G(Z)'>0  S G="^TMP($J,""PSXDOD"""_","_Z_")" D
 | 
|---|
| 21 |  .I $G(@G)["BTS|" S @G=^TMP($J,"PSXDOD",Z+1) K ^TMP($J,"PSXDOD",Z+1) ;remove BTS segment if found
 | 
|---|
| 22 |  .I $G(@G)["$END" S $P(@G,"^",3)=("1"_$P(@G,"^",3)) Q 
 | 
|---|
| 23 |  .I $G(@G)["$XMIT" S SITE="1"_$P(@G,"^",5),$P(@G,"^",5)=SITE,$P(@G,"^",11)=SITE,BATNM=$P(@G,"^",2),FACNM=$P(@G,"^",3),BATID=SITE_BATNM,XX=$P(@G,U,6),$P(@G,U,6)=$$FMDATE^HLFNC(XX),XM=$G(@G)
 | 
|---|
| 24 |  .;I $G(@G)["NTE|1" S $P(@G,"|",4)=1_$P(@G,"|",4),$P(@G,"\S\",3)=SITE,NTE1=$G(@G)
 | 
|---|
| 25 |  .I $G(@G)["NTE|1" S $P(@G,"|",4)=1_$P(@G,"|",4),F1=$P(@G,"\F\",1),$P(F1,"\S\",3)=SITE,$P(@G,"\F\",1)=F1,NTE1=$G(@G)
 | 
|---|
| 26 |  .I $G(@G)["RX1" S $P(@G,"|",2)=1_$P(@G,"|",2)
 | 
|---|
| 27 |  .;I $G(@G)["ZX1" S $P(@G,"|",3)=SITE
 | 
|---|
| 28 |  .I $G(@G)["ZX1|" S $P(@G,"|",3)=1_$P(@G,"|",3) D
 | 
|---|
| 29 |  ..S PRVNM=$P(@G,"|",7) Q:PRVNM'[" ,"
 | 
|---|
| 30 |  ..S PRVNML=$P(PRVNM," ,"),PRVNMF=$P(PRVNM," ,",2),PRVNM=PRVNML_", "_PRVNMF
 | 
|---|
| 31 |  ..S $P(@G,"|",7)=PRVNM
 | 
|---|
| 32 |  ..K PRVNM,PRVNML,PRVNMF
 | 
|---|
| 33 |  .;remore 2nd and following "^" in patient name
 | 
|---|
| 34 |  .I $G(@G)["PID|" D
 | 
|---|
| 35 |  .. S PTNM=$P(@G,"|",6),PTNML=$P(PTNM,"^"),PTNMF=$P(PTNM,"^",2,99),PTNMF=$TR(PTNMF,"^"," ")
 | 
|---|
| 36 |  .. S PTNM=PTNML_"^"_PTNMF,$P(@G,"|",6)=PTNM
 | 
|---|
| 37 |  .. K PTNM,PTNML,PTNMF
 | 
|---|
| 38 |  ;
 | 
|---|
| 39 | EN2 ;entry for processing file into Vista Messages
 | 
|---|
| 40 |  S (LNCNT,MCNT,LMSGLOC,ORDCNT)=0 ;line count, message line count, last $$MSG location, order count
 | 
|---|
| 41 |  ; 
 | 
|---|
| 42 |  ;D HEADER^PSXDODH1 ; build $$XMIT & NTE|1 and set into Message    
 | 
|---|
| 43 |  S XMSUB="DOD CMOP "_SITE_"-"_BATNM_" from "_FACNM,XMDUZ=.5
 | 
|---|
| 44 | XMZ D XMZ^XMA2 G:XMZ'>0 XMZ
 | 
|---|
| 45 |  S M="^XMB(3.9,XMZ,2)" ; variable reference to MailMan message for construction
 | 
|---|
| 46 |  S @M@(1,0)=XM
 | 
|---|
| 47 |  S @M@(2,0)=NTE1,MCNT=2
 | 
|---|
| 48 |  S LNNUM=3 F  S LNNUM=$O(@GL@(LNNUM)) Q:LNNUM'>0  S LN=@GL@(LNNUM),@M@(MCNT,0)=LN,MCNT=MCNT+1
 | 
|---|
| 49 |  S ^XMB(3.9,XMZ,2,0)="^^"_MCNT_U_MCNT_U_DT
 | 
|---|
| 50 |  S XMY("S.PSXX CMOP SERVER")="" ;****testing comment out
 | 
|---|
| 51 |  ;S XMY(DUZ)="" H 1 ;****TESTING S.PSXX
 | 
|---|
| 52 |  D ENT1^XMD
 | 
|---|
| 53 |  D EXIT
 | 
|---|
| 54 |  Q
 | 
|---|
| 55 | PIECE(REC,DLM,XX) ;
 | 
|---|
| 56 |  ; Set variable V = piece P of REC using delimiter DLM
 | 
|---|
| 57 |  N V,P S V=$P(XX,U),P=$P(XX,U,2),@V=$P(REC,DLM,P)
 | 
|---|
| 58 |  Q
 | 
|---|
| 59 | PUT(REC,DLM,XX) ;
 | 
|---|
| 60 |  ; Set Variable V into piece P of REC using delimiter DLM
 | 
|---|
| 61 |  N V,P S V=$P(XX,U),P=$P(XX,U,2)
 | 
|---|
| 62 |  S $P(REC,DLM,P)=$G(@V)
 | 
|---|
| 63 |  Q
 | 
|---|
| 64 | GETELM(STR,PIECES,SEPS) ;
 | 
|---|
| 65 |  ; uses STRing and
 | 
|---|
| 66 |  ; returns value of the element located by path of pieces and separators
 | 
|---|
| 67 |  ; ex: 1st address line = $$getelm(ORC,"22,1","|,^")
 | 
|---|
| 68 |  ; or                   = $$getelm(XMIT,"4,2,1","|,\F\,\S|")
 | 
|---|
| 69 |  N P,S,PI,V,I S V=STR
 | 
|---|
| 70 |  F I=1:1 S PI=$P(PIECES,",",I) Q:PI=""  S P=I,P(I)=PI,S(I)=$P(SEPS,",",I)
 | 
|---|
| 71 |  F I=1:1:P S V=$P(V,S(I),P(I))
 | 
|---|
| 72 |  Q V
 | 
|---|
| 73 | ERRMSG ;
 | 
|---|
| 74 | MSGSEQER ;send error message to folks & DOD
 | 
|---|
| 75 |  ;W !,"error ",PSXERR
 | 
|---|
| 76 |  S DIRHOLD=$$GET1^DIQ(554,1,23)
 | 
|---|
| 77 |  S Y=$$GTF^%ZISH($NA(^TMP($J,"PSXDOD",1)),3,DIRHOLD,FNAME)
 | 
|---|
| 78 |  S XMSUB="DOD CMOP Safty "_FNAME
 | 
|---|
| 79 |  ;S XMY(DUZ)="" ;****TESTING
 | 
|---|
| 80 |  S XMY("G.PSXX CMOP MANAGERS")=""
 | 
|---|
| 81 |  S XMTEXT="PSXTXT("
 | 
|---|
| 82 |  S PSXTXT(1,0)="DOD CMOP HL7 Conversion to  VA CMOP HL7 experienced an error"
 | 
|---|
| 83 |  S PSXTXT(2,0)=$G(PSXERR)
 | 
|---|
| 84 |  S PSXTXT(3,0)="FILE: "_FNAME
 | 
|---|
| 85 |  S PSXTXT(4,0)="A copy of the file has been placed in the hold directory "_DIRHOLD
 | 
|---|
| 86 |  D ^XMD
 | 
|---|
| 87 |  I $E(IOST)="C" W ! F I=1:1:4 W !,PSXTXT(I,0) I I=4 H 3
 | 
|---|
| 88 |  K PSXTXT,DIRHOLD
 | 
|---|
| 89 |  Q
 | 
|---|
| 90 | EXIT ;
 | 
|---|
| 91 |  K BATIDB,BATIDM,BHS,BTS,DLM,DODORD,END,FHS,FNAME,G,GBL,I,J,JJ,LL,LINE,LMSGLOC
 | 
|---|
| 92 |  K LN,LNCNT,LNNUM,LSEG,M,MCNT,MSH,NTE1,NTE2,NTE3,NTE4,NTE7,ORC,ORDCNT,ORDCNTB
 | 
|---|
| 93 |  K P,P1,P2,P3,PATH,PI,PID,PNAME,PSXERR,PSXTXT,PTCNT,PTCNTB,REC,RX1,RXE,RXID1,RXIDC,RXIDE
 | 
|---|
| 94 |  K S,S1,S2,S3,SEG,SEGSEQ,SEPS,STR,STR0,V,VALUE,XM,XX,Y,YY,ZR1,ZX1
 | 
|---|
| 95 |  K ADDRESS,BATDTM,BATID,BATIDB,BATIDM,BATNM,DIVISION,DIVNM,DIVNUM,EXPDT,FACNM,FNAME2,FNAME3,ISSDT
 | 
|---|
| 96 |  K LSTRFLDT,MAILID,NTE1ADD,NTE1DIV,NTE1LOC,PID0,PIECE,PRVPHY,PSXF,RFLDT,RXCNT,RXDATES,RXNUM,RXZNUM
 | 
|---|
| 97 |  K SIG,SITEID,START,TRANDTS,XMZ
 | 
|---|
| 98 |  K ^TMP($J,"PSXDOD"),PSXTXT
 | 
|---|
| 99 |  Q
 | 
|---|
| 100 | LOADTMP ; load data into ^TMP
 | 
|---|
| 101 |  K ^TMP($J,"PSXDOD")
 | 
|---|
| 102 |  F I=1:1 S X=$G(^XMB(3.9,125829,2,I,0)) Q:X=""  S ^TMP($J,"PSXDOD",I)=X
 | 
|---|
| 103 |  Q
 | 
|---|
| 104 | CLEARFLS(XX,EXT) ;
 | 
|---|
| 105 | LOOP K PSXF,PSXL
 | 
|---|
| 106 |  S PATH=$$GET1^DIQ(554,1,XX),PSXF(EXT)=""
 | 
|---|
| 107 |  S Y=$$LIST^%ZISH(PATH,"PSXF","PSXL")
 | 
|---|
| 108 |  W !,"path ",PATH,!,"files ",EXT
 | 
|---|
| 109 |  Q:$D(PSXL)'>1
 | 
|---|
| 110 |  S FILE="" F I=0:0 S FILE=$O(PSXL(FILE)) Q:FILE=""  W !,FILE S I=I+1
 | 
|---|
| 111 |  Q:I'>0
 | 
|---|
| 112 |  K DIR S DIR(0)="Y",DIR("A")="DELETE FILES ?? ",DIR("B")="N" D ^DIR K DIR Q:Y'>0
 | 
|---|
| 113 |  W $$DEL^%ZISH(PATH,"PSXL")
 | 
|---|
| 114 |  G LOOP
 | 
|---|
| 115 |  Q
 | 
|---|