Extra Scripts

Add the modifier "Modify Message with HL7 Script" in this window you can add Pascal Script to change your messages

How to use Pascal Script

→ Medical-Objects Transformation IDE →→ write codes(refers to the following examples) → (open HL7 test data) → Load a HL7 test data → (execute script) → → check Input/Output Message in

 

Script Examples

Add TimeZone

program AddTimeZone;           
                                                                                  
begin                                     
   HL7Data['MSH.6.0'] := AddSpecificTimezone(HL7Data['MSH.6.0'], '+0800');
   HL7Data['OBR.6.0'] := AddLocalTimezone(HL7Data['OBR.6.0']);
end.

Replace TimeZone

program FixTimeZone;           
                                                                                   
begin                                     
    HL7Data['MSH.6.0'] := HL7TSChangeTimeZoneToLocal(HL7Data['MSH.6.0']);
    HL7Data['OBR.6.0'] := HL7TSChangeTimeZone(HL7Data['OBR.6.0'], '+1200');
    HL7Data['OBR.7.0'] := HL7TSChangeTimeZone(HL7Data['OBR.7.0'], '+1100');
end.

Replace GUID

program FixGUID;
 
begin
    if(HL7Data['MSH.3.0'] = 'Noosa Radiology') and (HL7Data['MSH.3.0.2'] = 'A5B87B80-CB01-4593-BE54-867A1430A8FC') then
       HL7Data['MSH.3.1'] := 'X-RAY and Imaging^B960B3FB-7D68-44F1-AFAC-9C64C7ED11D2^GUID';

end.

This program will find the specific GUID in the Sending Facility and replace it with the GUID of your choice. In this case the GUID that we are looking for is Noosa Radiology and it will be replaced with X-Ray and Imaging GUID.

 

Copy OBR16 to PV1-9 if PV1-9 target not set

{ 
  This program copies the provider number from OBR-16 to PV1-9. If PV1 doesnt exist, it will insert it. 
  Only copy the components over if a target ID is not already set in PV1. Try to make it future proof 
  incase the input messages contain PV1-9 values.
}                                                                                                     
   
Program AddPV19;
var 
  i:integer;         
  mshindex: integer;                   
  pv1index:integer;  
  pidindex:integer;  
  targetid: string; 
  j: integer; 

begin             
   pv1index :=-1;
   while i < HL7Data.segmentcount -1 do
   begin
       if HL7Data.segmentname[i] = 'MSH' then
       begin  
           mshindex := i;
           pv1index :=-1;
           pidindex := -1;
       end
       else if HL7data.segmentname[i] = 'PID' then
           pidindex := i
       else if HL7Data.segmentname[i] = 'PV1' then                          
           pv1index :=i
       else if ((HL7Data.segmentname[i] = 'OBR') or (HL7Data.segmentname[i] = 'ORC')) and (pv1index=-1) then
       begin                                   
           HL7Data.insertsegment (PIDINDEX+1, 'PV1');
           pv1index := PIDINDEX+1;
           inc(i);                           
       end;   
       
       if (HL7Data.segmentname[i] = 'OBR') and (pv1index<>-1) then 
       begin     
         if HL7Data.GetFieldvalue(pv1index, 9, 0, 0, 0)=  then
         begin                       
           targetid := HL7Data.GetFieldvalue(i, 16, 0, 0, 0);
           HL7Data.SetFieldvalue(targetid, pv1index, 9,0,0,0); 
           for j := 1 to 6 do
             HL7Data.SetFieldvalue(HL7Data.GetFieldvalue(i, 16, 0, j, 0), pv1index, 9,0,j,0);  
         end;
       end;
       
       inc(i);
   end
end.

 

Available Pascal Scripts

function HL7TSChangeTimeZoneToLocal(const AHL7TS: string): string;


→ Convert input TimeStamp(AHL7TS) to TimeStamp with local TimeZone

function HL7TSChangeTimeZone(const AHL7TS: string; const ANewTimeZone: string): string;


→ Convertinput TimeStamp(AHL7TS) to TimeStamp with input TimeZone(ANewTimeZone)

function AddSpecificTimezone(const AHL7TS, ATimeZone: String): string;


→ Add specific TimeZone information(ATimeZone) to HL7 TimeStamp(AHL7TS)

function AddLocalTimezone(const AHL7TS: String): string;


→ Add local TimeZone information to HL7 TimeStamp(AHL7TS)

function StripTimezone(const AHL7TS: String): string;


→ Get and return HL7 TimeStamp without TimeZone information

function HL7TimeZoneToBiasMinutes(const HL7TimeZone: string): Integer;


→ Calculate bias minutes based on input TimeZone(HL7TimeZone)

function AgeInYears(ADateOfBirth, ADateOfAge: TDateTime): Integer;


→ Calculate the Age(based on ADateOfBirth and ADateOfAge) in years

function AgeToDisplayString(ABirthDate, AAgeAtThisDate: TDateTime): string;


→ Converts directly a Age to a display string

function AutoCompleteDate(const AText: string; AddTime: Boolean = False): string;


→ Adds the next most significant date part with separator

function DateStrToHL7DT(const AEditText: String; AAccept2DigitYears: Boolean = True; AddTimestamp:Boolean = True): string;


→ Convert a user-input date to a HL7 date string

procedure ScanDateStr(const ADateStr: string; out ADay, AMonth, AYear: string);


→ Given a delimited date string, returns the day, month and year parts

function HL7DTDecode(const AHL7DT: string; out AYear, AMonth, ADay: Integer): Boolean;


→ Decode a HL7 date into the year, month and day parts

→ Returns -1 for parts which are not present. If not even a year is present, returns False otherwise True

function HL7DTEncode(AYear, AMonth, ADay: Integer): string;


→ Encode a HL7 date from the input AYear, AMonth and ADay parts

function HL7TMDecode(const AHL7TM: string; out AHour, AMinute, ASecond: Integer; out AFractionalSecond: Double): Boolean;


→ Decode a HL7 time into the hour, minute and second parts (with fractional seconds if it exists)

function HL7TMEncode(AHour, AMinute: Integer; ASecond: Integer = -1; AFractionalSecond: Double = -1): string;


→ Encode a HL7 time from the AHour, AMinuteand and ASecond parts (with fractional seconds if it exists)

function HL7TSStripTimezone(const AHL7TS: string): string;


→ Return a HL7 TimeStamp without TimeZone

function HL7TMStripTimezone(const AHL7TM: string): string;


→ Return a HL7 Time without TimeZone

function HL7TSToLocalTS(const AHL7TS: string; AIncludeTimeZone: Boolean = True): string;


→ Convert a HL7 TimeStamp to local TimeStamp (with or without TimeZone)

function HL7LocalTimeZone: string;


→ Get and return local TimeZone

function HL7TimeZoneFromTS(const AHL7TS: string): string;


→ Get and return TimeZone information from the input TimeStamp(AHL7TS)

function HL7TimeZoneFromTM(const AHL7TM: string): string;


→ Get and return TimeZone information from the input Time(AHL7TM)

function HL7TMGetFractionalSecond(const AHL7TM: string; out AFractionalSecond: Double): Boolean;


→ Get fractional parts of second and return Boolean value(false or true)

function HL7TSEncode(AYear: Integer;
AMonth: Integer = -1;
ADay: Integer = -1;
AHour: Integer = -1;
AMinute: Integer = -1;
ASecond: Integer = -1;
AFractionalSecond: Double = -1.0): string;


→ Encode a HL7 TimeStamp from the input AYear, AMonth, ADay, AHour, AMinute, ASecond and AFractionalSecond parts

function HL7TSAddDay(const ADateStr: string; AIncrement: Integer = +1): string;


→ Add days(AIncrement) to Input(ADateStr) and return the result

→ Takes a HL7 date (or date/time) input and returns a date (or date/time)

function HL7TSAddMonth(const ADateStr: string; AIncrement: Integer = +1): string;


→ Add months(AIncrement) to Input(ADateStr) and return the result

function HL7TSAddYear(const ADateStr: string; AIncrement: Integer = +1): string;


→ Add years(AIncrement) to Input(ADateStr) and return the result

function HL7TSToTDateTime(AHL7DateTime: string): TDateTime;


→ Convert a HL7 TimeStamp(AHL7DateTime) to TDateTime type

function HL7DTToTDateTime(AHL7Date: string): TDateTime;


→ Convert a HL7 Date(AHL7Date) to TDateTime type

function HL7TMToTDateTime(AHL7Time: string): TDateTime;


→ Convert a HL7 Time(AHL7Time) to TDateTime type

function HL7TSToSQLText(const AHL7TS: string): string;


→ Convert a HL7 TimeStamp(AHL7TS) to SQL Text('dd/mm/yyyy')

function HL7DTToDisplayString(const AHL7DT: string; const ADisplayFormat: string = 'd?m?yyyy'): string;


→ Convert directly from a HL7 Date to a display string

function HL7TMToDisplayString(const AHL7TM: string; const ADisplayFormat: string = 'hh:nn'): string;


→ Convert directly from a HL7 Time to a display string

function HL7TSToDisplayString(const AHL7TS: string; const ADisplayFormat: string = 'd.m.yyyy hh:nn'): string;


→ Convert directly from a HL7 TimeStamp to a display string

function HL7TSToReverseGregorian(const AHL7TS: string): string;


→ Convert HL7 TimeStamp(AHL7TS) to Reverse Gregorian('yyyymmddhhnnsszzz')

function HL7TSToHL7DT(const AHL7TS: string): string;


→ Convert HL7 TimeStamp(AHL7TS) to HL7 Date

function HL7TSToHL7TM(const AHL7TS: string): string;


→ Convert HL7 TimeStamp(AHL7TS) to HL7 Time

function TDateTimeToHL7DT(AInput:TDateTime): string;


→ Convert TDateTime(AInput) to HL7 Date

function HL7TSToDatabaseText(const AHL7TS: string): string;


→ Convert HL7 TimeStamp(AHL7TS) to Database Text('yyyy-mm-dd hh:mm:ss')

function HL7TSToTDateTimeDef(AHL7TS: String; Default:TDateTime): TDateTime;


→ Convert a HL7 TimeStamp(AHL7TS) to TDateTime with Default value

function MedicalDirectorDateToHL7DT(MD_Date:String): string;


→ Convert Medical Director Date to HL7 Date

function LongMonthStringtoMonth(const AMonth:String): Word;


→ Convert month string to month integer

function MinutesToHL7TM(const Minutes:Integer): string;


→ Convert minutes(Minutes) to HL7 Time

function HL7TMtoMinutes(const HL7TM:String): Integer;


→ Convert HL7 Time(HL7TM) to minutes

function TDateTimeToHL7DateTimeAutoPrecision(AInput: TDateTime; AIncludeTimeZone: Boolean = False): string;


→ Convert TDateTime(AInput) to HL7 DateTime with auto precision step

function HL7TMtoOBXDisplayString(const AHL7TM:String): string;


→ Convert directly from a HL7 Time to a OBX display string

function XMLDateTimeToHL7TS(XMLDateTime: String): string;


→ Convert XML DateTime to HL7 TimeStamp

function DateTimeXMLToString(ADate: TDateTime): string;


→ Convert the TDateTime ADate to a string according to the W3C date/time specification

function HL7DateToXMLFormat(ADate: String): string;


→ Convert HL7 Date(ADate) to XML format

function HL7DTAddDays(const AHL7DT: string; Days :integer): String;


→ Add days(Days) to Input(AHL7DT) and return the result

function IsHL7TSValid(const HL7Date: string): Boolean;


→ Check if HL7 TimeStamp is valid

function ActualBiasMinutes: Integer;


→ Calculate an actual Bias Minutes based on the status of TimeZone

var

HL7Data: THL7Scriptable


THL7Scriptable = class(TObject)
public
constructor Create;
destructor Destroy; override;
procedure Clear;
function ComponentCount(const SegmentIndex: Integer; const FieldNo: Integer;
const RepeatNo: Integer = 0): Integer;
function SubComponentCount(const SegmentIndex: Integer; const FieldNo: Integer;
const RepeatNo: Integer ; const ComponentNo: Integer): Integer;
procedure DeleteRepeat(const SegmentIndex: Integer; const FieldNo: Integer;
const RepeatNo: Integer );
procedure DeleteSegment(const Index: Integer);
function FieldCount(const SegmentIndex: Integer): Integer;
function GetFieldvalue(const SegmentIndex, FieldNo: Integer; const RepeatNo:
Integer = 0; const ComponentNo: Integer = 0; const SubComponentNo: Integer
= 0): string;
function IndexofSegment(const SegmentName: String): Integer;
procedure SetFieldvalue(const Value: String; const SegmentIndex, FieldNo:
Integer; const RepeatNo: Integer = 0; const ComponentNo: Integer = 0; const
SubComponentNo: Integer = 0);
procedure InsertSegment(const Index:Integer; const SegmentName: String);
procedure LoadFromFile(const AFilename: String);
procedure LoadFromStream(AStream: TStream);
function RepeatCount(const SegmentIndex: Integer; const FieldNo: Integer):
Integer;
procedure SaveToFile(const AFilename: String);
function SegmentCount: Integer;
property asString: string read GetasString write SetasString;
property Raw: Boolean read GetRaw write SetRaw;
property SegmentName[Index: Integer]: string read GetSegmentName;
property Value[Index: String]: string read GetValue write SetValue; default;
end;


More functions should be kept updated.