Hi Harshdeep,
Yes. You can do this with data transformations. Note the HL7 framework is available on Iris for Health.
See the documentation:
- Log in to post comments
Hi Harshdeep,
Yes. You can do this with data transformations. Note the HL7 framework is available on Iris for Health.
See the documentation:
Hi Muhammad,
See the documentation:
Regards
Cristiano Silva
Hi Raghu,
No, You doens't loose your persistant data. If you need to purge your data too, you need to create a trigger or implement callback method %OnDelete.
Using Triggers - Using InterSystems SQL - InterSystems IRIS Data Platform 2021.1
Defining Callback Methods - Defining and Using Classes - InterSystems IRIS Data Platform 2021.1
Regards.
Hi Lucas,
That I have been know, ISC don't have native tool for data masking.
Look at this open source project, maybe help you.
GitHub - TheSoftwareHouse/fogger
I never been used this tool.
Regards.
Cristiano José da Silva.
Hi Jens,
You need to setup the port in the adapter settings.
In the method SendFormDataArray all adapter settings is passed to http request object.
.png)
Maybe using the property parameter :
(CONTENT = "ESCAPE")
Updated link to the badge https://www.youracclaim.com/badges/30f9d00f-82a3-45ab-a879-b83a7053f00d…
Speaking about "Relational World" is better to use Classes/Tables of package
In this post has a little example: https://community.intersystems.com/post/describe-table-cache-db?page=1#comment-128856
Regards.
HI Bukhtiar,
Iris has built in validation against a schema see: HL7 Schemas and Available Tools
But, is simple to iterate over all segments of a HL7 message or any Virtual Document like this example:
#Dim hl7Msg As EnsLib.HL7.Message = ##Class(EnsLib.HL7.Message).%OpenId(<changByAId>)#Dim segIndex As %Integer = 0For segIndex = 1 : 1 : hl7Msg.SegCount{ #Dim segment As EnsLib.HL7.Segment = hl7Msg.getSegmentByIndex(segIndex) // Write segment.Name, !}For more details se then documentation:
Yes.
/// <p>/// <b>2020-04-23 - Cristiano José da Silva</b><br/>/// Conjunto de fuincões a serem utilizadas pelas regras , tranformações e process/// <p>Class HC.distribuicao.utils.FunctionSet Extends Ens.Rule.FunctionSet{ClassMethod HL7AtribuirValor(valor As %String, caminhoPropriedade As %String, mensagem As EnsLib.HL7.Message) As %Boolean [ Final ]{
If ('mensagem.IsMutable)
{
Throw ##Class(%Exception.General).%New("ObjetoImutavel", 5001, $$$CurrentClass _ "." _ $$$CurrentMethod, "Impossível atribuir valor a mensagem imutável.")
}
Do mensagem.SetValueAt(valor, caminhoPropriedade, "set", "")
//
Return 1}
}Hi Bukhtiar,
Use the property "Document" instead HL7 or HL7.Source
Like this:
.png)
The Function HL7AtribuirValor assign the value "A08" int the field "MSH:MEssageType.triggerevent", in the Document that is the HL7 Message and returns a boolean value.
Hi Mikael,
The steps 4.1 and 4.2 Is done by the EnsLib.FTP.InboundAdapter. Check the documentation Overall Behavior.
For step 4.3 you can call the method delete from EnsLib.FTP.InboundAdapter in the method OnProcesssInput after you finalize the treatment of the "errors.txt".
Hi Stephen, I used to use this online diff tool: https://hl7.cc/juxtapose
Sorry my misunderstood John.
The class EnsLib.HL7.Segment has methods Escape and Unescape and classmethods EscapeEx and UnescapeEx.
See documentation about HL7 Escape Sequences.
Example:
Write ##Class(EnsLib.HL7.Segment).EscapeEx("H&P", "|^~\&", "\"), !Write ##Class(EnsLib.HL7.Segment).UnescapeEx("H\T\P", "|^~\&", "\")
Hi John,
If I understood, you want to pass the code to a method and return the description.
All descriptions of HL7 code tables are stored in the global ^EnsHL7.Description.
The structure of global is ^EnsHL7.Description(<category>,"CT",<codeTableCode,valurKey>)=<descritpion>.
For HL7 Schema Category 2.3.1 the global have the content:
^EnsHL7.Description("2.3.1","CT",270)="Document type"
^EnsHL7.Description("2.3.1","CT",270,"AR")="Autopsy report"
"CD")="Cardiodiagnostics"
"CN")="Consultation"
"DI")="Diagnostic imaging"
"DS")="Discharge summary"
"ED")="Emergency department report"
"HP")="History and physical examination"
"OP")="Operative report"
"PC")="Psychiatric consultation"
"PH")="Psychiatric history and physical examination"
"PN")="Procedure note"
"PR")="Progress note"
"SP")="Surgical pathology"
"TS")="Transfer summary"A generic method would be like:

Hi Ahmad,
In the class Ens.Util.FunctionSet exists the methods In and NotIn, that's work if comma-delimited string.
To check if a value is not in a LookupTable test if the returns of method Lookup is empty.
Hi David,
The SQLCODE -102 is that you trying to open, close or fetch a unopened cursor: https://docs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=RERR_sql#RERR_sql_101
Hi Ruslan,
Yes see the mozila specification: https://developer.mozilla.org/pt-BR/docs/Web/HTTP/Headers/Content-Encoding
Renato,
You can use the builtin InterSystems Natural Language Processing (iKnow) of IRIS.
Hi Yuri,
Only Journal Data Compression to be transmited between mirrors .
Hi Yuri,
Maybe you can do it with Row Level Security.
Hi Igor,
This occur because some Business Host still processing a message or waiting for a response.
You can override the method StopProduction to force the production to stop.
Class br.cjs.test.TestProduction Extends %UnitTest.TestProduction{/// Class name of the production. It must contain the production class name.Parameter PRODUCTION As %String = "HC.Production";/// Paratmerter used to force stop production by Ens.DirectorParameter FORCESTOPPRODUCTION As %Boolean = 1;
/// Code to run right after the production is started. Used, for example, to call a method that initiates the test./// If an error status is returned, the test will be aborted and failed and the production will be stopped./// So if a non fatal error occurs, you may invoke ..LogErrors(status,"OnAfterProductionStart()") and return $$$OK.Method OnAfterProductionStart() As %Status{ #Dim exception As %Exception.General = "" #Dim statusCode As %Status = $System.Status.OK() Try { // Do Yor Tests } Catch (exception) { Set statusCode = exception.AsStatus() } Return statusCode}Method StopProduction() As %Boolean [ Internal, Private ]{ Do ..GetMacros(.Macro) Do $$$LogMessage("Stopping production '"_..#PRODUCTION_"'") Set r = $$$AssertStatusOK(##class(Ens.Director).StopProduction(..#MAXWAIT, ..#FORCESTOPPRODUCTION), "Invoking Ens.Director::StopProduction") If 'r Quit 0 Set r = $$$AssertStatusOK(..WaitForState(Macro("eProductionStateStopped")), "Verifying Ensemble state is 'Stopped'") If 'r Quit 0 Quit 1}}Hi Jeff,
You need to traverse the array using the foreach action. The key of you array wil be the key of the OBXgrp. for the others group I'll assume that are fix with the key "1". Bellow a simple example.
<transform sourceClass='br.cjs.test.ArrayMessage' targetClass='EnsLib.HL7.Message' targetDocType='2.3.1:ORU_R01' create='new' language='objectscript' ><foreach property='source.ArrayData()' key='k1' ><assign value='source.ArrayData.(k1)' property='target.{PIDgrpgrp(1).ORCgrp(1).OBXgrp(k1).OBX:SetIDOBX}' action='set' /></foreach></transform>}Thanks Benjamin for the explanation,
Bellow the query in the INFORMATION_SCHEMA tables:
SELECT Tables.TABLE_SCHEMA, Tables.TABLE_NAME, Columns.COLUMN_NAME, Columns.DATA_TYPEFROM INFORMATION_SCHEMA.TABLES AS TablesINNER JOIN INFORMATION_SCHEMA.COLUMNS AS Columns ON (Columns.TABLE_SCHEMA = Tables.TABLE_SCHEMA) AND (Columns.TABLE_NAME = Tables.TABLE_NAME)WHERE (Tables.TABLE_SCHEMA = 'Sample') AND (Tables.TABLE_NAME = 'Person')
| TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | DATA_TYPE |
|---|---|---|---|
| Sample | Person | ID | integer |
| Sample | Person | Age | integer |
| Sample | Person | DOB | date |
| Sample | Person | FavoriteColors | varchar |
| Sample | Person | Name | varchar |
| Sample | Person | SSN | varchar |
| Sample | Person | Spouse | integer |
| Sample | Person | Home_City | varchar |
| Sample | Person | Home_State | varchar |
| Sample | Person | Home_Street | varchar |
| Sample | Person | Home_Zip | varchar |
| Sample | Person | Office_City | varchar |
| Sample | Person | Office_State | varchar |
| Sample | Person | Office_Street | varchar |
| Sample | Person | Office_Zip | varchar |
Hi Meenakshi,
In the package %Dictionary you can query all information about classes.
To list all properties before compilation (columns):
SELECT Class.Name AS ClassName, Prop.Name AS PropertyName, Prop.Type FROM %Dictionary.ClassDefinition AS ClassINNER JOIN %Dictionary.PropertyDefinition AS Prop ON Prop.parent = Class.%IDWHERE Class.Name = 'Sample.Person'
| ClassName | PropertyName | Type |
|---|---|---|
| Sample.Person | Age | %Integer |
| Sample.Person | DOB | %Date |
| Sample.Person | FavoriteColors | %String |
| Sample.Person | Home | Address |
| Sample.Person | Name | %String |
| Sample.Person | Office | Address |
| Sample.Person | SSN | %String |
| Sample.Person | Spouse | Person |
To list all properties after compilation (columns):
SELECT Class.Name AS ClassName, Prop.Name AS PropertyName, Prop.Type FROM %Dictionary.CompiledClass AS ClassINNER JOIN %Dictionary.CompiledProperty AS Prop ON Prop.parent = Class.%IDWHERE Class.Name = 'Sample.Person'
| ClassName | PropertyName | Type |
|---|---|---|
| Sample.Person | %%OID | %Library.CacheString |
| Sample.Person | %Concurrency | %Library.CacheString |
| Sample.Person | Age | %Library.Integer |
| Sample.Person | DOB | %Library.Date |
| Sample.Person | FavoriteColors | %Library.String |
| Sample.Person | Home | Sample.Address |
| Sample.Person | Name | %Library.String |
| Sample.Person | Office | Sample.Address |
| Sample.Person | SSN | %Library.String |
| Sample.Person | Spouse | Sample.Person |
Hi Thembelani
If I understood, you don't want to project the SerialC. If is this, remove the %XML.Adaptor from the Extends class list.
Yone,
This information is only in the Message Header, to relate the header with the message body use the properties MessageBodyId and MessageBodyClassName.
You can set in the Business Service the Setting: MessageSchemaCategory and then the Ensemble will recognize your message and map all properties.
I hope be helped you.
Eric,
The problem is that ensemble do not recognized your Message Type, then in this case you can only access properties by Index.
In your case is segment 9 field 6:
pRequest.GetValueAt("9:6")
To see the problem call the method GetValueAt and log the status code:
Do pRequest.GetValueAt("PIDgrpgrp(1).ORCgrp(1).OBXgrp(2).OBX:6", , .statusCode)
$$$LOGSTATUS(statusCode)
See de documentation for mor detail about message schema:
https://docs.intersystems.com/irisforhealthlatest/csp/docbook/Doc.View.cls?KEY=EHL72_tools
It's correct, you can use index or name of a field.
Are you sure about the value of a field?
Could you post the entire HL7 message?