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

RORHL031.m

Go to the documentation of this file.
RORHL031 ;HOIFO/BH,SG - HL7 PHARMACY: UTILITIES ; 3/13/06 9:23am
 ;;1.5;CLINICAL CASE REGISTRIES;**1**;Feb 17, 2006;Build 24
 ;
 ; This routine uses the following IAs:
 ;
 ; #1878         EN^PSOORDER
 ; #4533         ARWS^PSS50 (supported)
 ; #4545         DATA^PSN50P68 (supported)
 ; #4820         RX^PSO52API (supported)
 ;
 Q
 ;
 ;***** OUTPATIENT PHARMACY RXE SEGMENT BUILDER
 ;
 ; RORIEN        IEN in the PRESCRIPTION file (#52)
 ;
 ; .RORRXE       Array with info (from OEL^PSOORRL)
 ;
 ; PTIEN         Patient IEN (DFN)
 ;
 ; The ^TMP("PSOR",$J) global node is used by this function.
 ;
 ; Return Values:
 ;       <0  Error Code
 ;        0  Ok
 ;       >0  Non-fatal error(s)
 ;
RXE(RORIEN,RORRXE,PTIEN) ;
 N BUF,CS,ERRCNT,IDGN,II,INDF,J,L,RC,RORCLIN,RORCMOP,RORISIG,RORLST,RORMREF,RORMSG,RORPRICE,RORSEG,RORSTAT,RORSTOP,RORTEST,RORTMP,RORTS,TMP
 S (ERRCNT,RC)=0
 D ECH^RORHL7(.CS)
 ;
 Q:$P($G(RORRXE(0)),U)="" 0
 ;
 K ^TMP("PSOR",$J)
 D EN^PSOORDER(,RORIEN)
 ;
 S BUF=$G(^TMP("PSOR",$J,RORIEN,0))
 S RORMREF=$P(BUF,U,8)            ; # of refills
 S RORPRICE=$P(BUF,U,10)          ; unit price of drugs
 ;
 S BUF=$G(^TMP("PSOR",$J,RORIEN,1))
 S RORSTAT=$P($P(BUF,U,5),";",1)  ; patient status (internal)
 S RORSTDE=$P($P(BUF,U,5),";",2)  ; patient status
 S RORCLIN=+$P(BUF,U,4)           ; clinic
 ;
 S (J,RORISIG)="",L=245
 F  S J=$O(^TMP("PSOR",$J,RORIEN,"SIG1",J))  Q:J=""  D  Q:L'>0
 . S BUF=$G(^TMP("PSOR",$J,RORIEN,"SIG1",J,0))
 . S RORISIG=RORISIG_" "_$E(BUF,1,L)
 . S L=L-$L(BUF)-1  S:L<-1 RORISIG=RORISIG_"..."
 S RORISIG=$$TRIM^XLFSTR(RORISIG)
 ;
 ;--- Get Stop Code
 S RORSTOP=$$STOPCODE^RORUTL18(+RORCLIN)
 S:RORSTOP'>0 RORSTOP=""
 ;
 S RORTMP=$$ALLOC^RORTMP(.RORTS)
 D RX^PSO52API(PTIEN,RORTS,RORIEN,,"C,R")
 ;--- Get last dispensed dates
 S II=0  K RORLST
 F  S II=$O(@RORTMP@(PTIEN,RORIEN,"RF",II))  Q:II'>0  D
 . S RORLST(II,10.1)=+$G(@RORTMP@(PTIEN,RORIEN,"RF",II,10.1))
 ;--- Load the CMOP list
 S II=0  K RORCMOP
 F  S II=$O(@RORTMP@(PTIEN,RORIEN,"C",II))  Q:II'>0  D
 . Q:+$G(@RORTMP@(PTIEN,RORIEN,"C",II,3))=3
 . S TMP=$G(@RORTMP@(PTIEN,RORIEN,"C",II,2))
 . S:TMP'="" RORCMOP("A2",TMP,II)=""
 ;--- Free the buffer
 D FREE^RORTMP(RORTMP)
 ;
 F RORINDEX="REF","PAR" D
 . S II=""
 . F  S II=$O(RORRXE(RORINDEX,II))  Q:II=""  D  Q:RC<0
 . . S RORTEST=$G(RORRXE(RORINDEX,II,0))  Q:RORTEST=""
 . . ;
 . . ;--- Initialize the segment
 . . K RORSEG  S RORSEG(0)="RXE"
 . . ;
 . . ;--- RXE-1 - Quantity/Timing
 . . S RORSEG(1)=""""""
 . . ;
 . . ;--- RXE-2 - Give Code
 . . S IDGN=+$P($G(RORRXE("DD",1,0)),U,3)  ; File #50 IEN
 . . I IDGN'>0  S IDGN=+$P($G(RORRXE("DD",1,0)),U)  Q:IDGN'>0
 . . S TMP=$$RXE2(IDGN,CS,.BUF,.INDF)
 . . I TMP  S ERRCNT=ERRCNT+1  Q:TMP<0
 . . Q:BUF=""
 . . S RORSEG(2)=BUF
 . . ;
 . . ;--- RXE-3 - Give Amount (Min)
 . . S RORSEG(3)=""""""
 . . ;
 . . ;--- RXE-4 - Max # of re-fills
 . . S RORSEG(4)=RORMREF
 . . ;
 . . ;--- RXE-5 - Give Units
 . . S TMP=$$RXE5(+$G(INDF),CS,.BUF)
 . . S:TMP ERRCNT=ERRCNT+1
 . . S:BUF'="" RORSEG(5)=BUF
 . . ;
 . . ;--- RXE-6 - Release Date/Time
 . . S TMP=$P($G(RORRXE(RORINDEX,II,0)),U,4)
 . . S RORSEG(6)=$$FM2HL^RORHL7(TMP)
 . . ;
 . . ;--- RXE-7 - SIG1
 . . S RORSEG(7)=CS_$$ESCAPE^RORHL7(RORISIG)
 . . ;
 . . ;--- RXE-10 - Dispense amount
 . . S RORSEG(10)=$P($G(RORRXE(RORINDEX,II,0)),U,3)
 . . ;
 . . ;--- RXE-15 - Refill Indicator
 . . S RORSEG(15)=$S(RORINDEX="REF":1,RORINDEX="PAR":2)
 . . ;
 . . ;--- RXE-17 - Refill #
 . . S RORSEG(17)=II
 . . ;
 . . ;--- RXE-18 - Fill Date/Time
 . . S TMP=$P($G(RORRXE(RORINDEX,II,0)),U)
 . . S RORSEG(18)=$$FM2HL^RORHL7(TMP)
 . . ;
 . . ;--- RXE-19 - Total Daily Dose
 . . S RORSEG(19)=$P($G(RORRXE(RORINDEX,II,0)),U,2)
 . . ;
 . . ;--- RXE-20 - CMOP
 . . S RORSEG(20)=$S($D(RORCMOP("A2",II)):"Y",1:"N")
 . . ;
 . . ;--- RXE-21 - Clinic Stop
 . . S RORSEG(21)=RORSTOP
 . . ;
 . . ;--- RXE-22 - Dispense Date
 . . I 'II  D
 . . . S TMP=$P($G(RORRXE(0)),U,5)
 . . . S RORSEG(22)=$$FM2HL^RORHL7(TMP)
 . . E  D:$D(RORLST(II))
 . . . S TMP=+$G(RORLST(II,10.1))
 . . . S RORSEG(22)=$$FM2HL^RORHL7(TMP)
 . . ;
 . . ;--- RXE-23 - Unit Cost
 . . S RORSEG(23)=RORPRICE
 . . ;
 . . ;--- RXE-27 - Patient Status
 . . S RORSEG(27)=RORSTAT_CS_RORSTDE
 . . ;
 . . ;--- RXE-30 Mail/Window
 . . S TMP=$P($G(RORRXE(RORINDEX,II,0)),U,5)
 . . S RORSEG(30)=$S(TMP="M":"AD",TMP="W":"TR",1:"")
 . . ;
 . . ;--- Store the segment
 . . D ADDSEG^RORHL7(.RORSEG)
 ;
 K ^TMP("PSOR",$J)
 Q ERRCNT
 ;
 ;***** CONSTRUCTS THE RXE-2 FIELD (GIVE CODE)
 ;
 ; IEN50         IEN in the DRUG file (#50)
 ;
 ; [CS]          Component Separator (defaults to "^")
 ;
 ; .RXE2         Reference to a local variable where the value
 ;               of the  RXE-2 field is returned
 ;
 ; [.PSNDF]      VA PRODUCT
 ;                 ^01: IEN
 ;                 ^02: NAME (.01)
 ;
 ; Return Values:
 ;       <0  Error Code
 ;        0  Ok
 ;       >0  Non-fatal error(s)
 ;
RXE2(IEN50,CS,RXE2,PSNDF) ;
 N ERRCNT,IDGN,NODE,RC,RORMSG,TMP,TMP1
 S (ERRCNT,RC)=0,RXE2=""
 ;
 S:$G(CS)="" CS="^"
 S IDGN=+$G(IEN50)
 ;
 S NODE=$$ALLOC^RORTMP(.TMP)
 D ARWS^PSS50(IDGN,,TMP)
 ;
 S $P(RXE2,CS,1)=$G(@NODE@(IDGN,31))        ; NDC
 ;--- VA Product Name
 S PSNDF=$G(@NODE@(IDGN,22)),TMP1=$P(PSNDF,U,2)
 S $P(RXE2,CS,2)=$$ESCAPE^RORHL7($E(TMP1,1,64))
 S $P(RXE2,CS,3)="PSNDF"
 ;
 S TMP=""
 S $P(TMP,"-",1)=$P($G(@NODE@(IDGN,20)),U)  ; VA Drug Code
 S $P(TMP,"-",2)=$G(@NODE@(IDGN,2))         ; VA Drug Class
 S:TMP'="-" $P(RXE2,CS,4)=TMP
 ;--- Drug Name
 S $P(RXE2,CS,5)=$$ESCAPE^RORHL7($G(@NODE@(IDGN,.01)))
 S $P(RXE2,CS,6)="99PSD"
 ;
 D FREE^RORTMP(NODE)
 S:($P(RXE2,CS,1,2)="^")&($P(RXE2,CS,4,5)="^") RXE2=""
 Q ERRCNT
 ;
 ;***** CONSTRUCTS THE RXE-5 FIELD (GIVE UNITS)
 ;
 ; IEN50P68      IEN in the VA PRODUCT file (#50.68)
 ;
 ; [CS]          Component Separator (defaults to "^")
 ;
 ; .RXE5         Reference to a local variable where the value
 ;               of the  RXE-5 field is returned
 ;
 ; Return Values:
 ;       <0  Error Code
 ;        0  Ok
 ;
RXE5(IEN50P68,CS,RXE5) ;
 N INDF,NODE,TMP
 S:$G(CS)="" CS="^"
 S RXE5="",INDF=+$G(IEN50P68)
 Q:INDF'>0 0
 ;--- Get the units
 S NODE=$$ALLOC^RORTMP(.TMP)
 D DATA^PSN50P68(INDF,,TMP)
 S TMP=$G(@NODE@(INDF,3))
 D FREE^RORTMP(NODE)
 Q:TMP'>0 0
 ;--- Format the field
 S $P(RXE5,CS,4)=$P(TMP,U)
 S $P(RXE5,CS,5)=$$ESCAPE^RORHL7($P(TMP,U,2))
 S $P(RXE5,CS,6)="99PSU"
 ;--- Success
 Q 0