Ejemplo n.º 1
0
        /// <summary>
        /// Échappement des caractères réservés.
        /// </summary>
        /// <param name="data">Données à échapper.</param>
        /// <param name="encChars">Caractères d'encodage utilisés.</param>
        /// <returns></returns>
        public static string Escape(string data, EncodingCharacters encChars)
        {
            if (string.IsNullOrWhiteSpace(data))
            {
                return(string.Empty);
            }

            char[]        dataAsChar = data.ToCharArray();
            StringBuilder ret        = new StringBuilder();

            for (int i = 0; i < dataAsChar.Length; i++)
            {
                if (dataAsChar[i].Equals(encChars.FieldSeparator))
                {
                    ret.Append(EscapeCharacterUtil.CSTS_ESCAPE_FIELD);
                }
                else if (dataAsChar[i].Equals(encChars.ComponentSeparator))
                {
                    ret.Append(EscapeCharacterUtil.CSTS_ESCAPE_COMPONENT);
                }
                else if (dataAsChar[i].Equals(encChars.RepetitionSeparator))
                {
                    ret.Append(EscapeCharacterUtil.CSTS_ESCAPE_REPETITION);
                }
                else if (dataAsChar[i].Equals(encChars.EscapeCharacter))
                {
                    ret.Append(EscapeCharacterUtil.CSTS_ESCAPE_CHAR);
                }
                else if (dataAsChar[i].Equals(encChars.SubComponentSeparator))
                {
                    ret.Append(EscapeCharacterUtil.CSTS_ESCAPE_SUBCOMPONENT);
                }
                else
                {
                    ret.Append(dataAsChar[i]);
                }
            }

            if (ret.Length > 0)
            {
                return(ret.ToString().Trim());
            }
            else
            {
                return(string.Empty);
            }
        }
Ejemplo n.º 2
0
        public void FromMessage_NoFieldSeperatorCharacterInMessage_ThrowsHl7Exception()
        {
            // Arrange
            var input = "MSH|^~\\&|sys1|sys1|sys2|sys2|20180503174921||ORM^O01|1234567890|P|2.3\r"
                        + "PID|||1^^^XXX~2^^^YYY||LastName^FirstName||19660429|F\r"
                        + "PV1||I|3906||||||||||||||||100001\r"
                        + "ORC|CA|1410|3121||CA\r"
                        + "OBR|1|1410|3121|RX50^ADDOME SUPINO";

            var parser  = new PipeParser();
            var message = parser.Parse(input);
            var terser  = new Terser(message);

            terser.Set("MSH-1", null);

            // Action / Assert
            Assert.Throws <HL7Exception>(
                () => EncodingCharacters.FromMessage(message));
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Constructeur.
        /// </summary>
        /// <param name="encChars">Caractères d'encodage utilisés par le message.</param>
        /// <param name="eventOperator">Informations de la personne à l'origine de l'événement.</param>
        /// <param name="messageCode">Valeur pour <see cref="MSG.MessageCode"/> (MSH-9).</param>
        /// <param name="triggerEvent">Valeur pour <see cref="MSG.TriggerEvent"/> (MSH-9).</param>
        /// <param name="messageStructure">Valeur pour <see cref="MSG.MessageStructure"/> (MSH-9).</param>
        public AbstractMessage(EncodingCharacters encChars,
                               object eventOperator,
                               string messageCode,
                               string triggerEvent,
                               string messageStructure)
        {
            this._segments           = new List <MessageItem>();
            this._encodingCharacters = encChars;
            this._eventOperator      = eventOperator;

            // Initialisation des segments toujours présents dans un message
            this.InitSegment(typeof(MSH), "", 1, true);
            this.InitSegment(typeof(EVN), "", 1, true);

            // Initialisation de MSH-9
            this.MSH.MessageType.MessageCode.Value      = messageCode;
            this.MSH.MessageType.TriggerEvent.Value     = triggerEvent;
            this.MSH.MessageType.MessageStructure.Value = messageStructure;
        }
Ejemplo n.º 4
0
 /// <summary> Returns given group serialized as a pipe-encoded string - this method is called
 /// by encode(Message source, String encoding).
 /// </summary>
 protected virtual void encode(Group source, EncodingCharacters encodingChars, Table tbl)
 {
     System.String[] names = source.Names;
     for (int i = 0; i < names.Length; i++)
     {
         Structure[] reps = source.getAll(names[i]);
         for (int rep = 0; rep < reps.Length; rep++)
         {
             if (reps[rep] is Group)
             {
                 Group g = (Group)reps[rep];
                 encode(g, encodingChars, tbl);
             }
             else
             {
                 Segment segment = (Segment)reps[rep];
                 encode(segment, encodingChars, tbl);
             }
         }
     }
 }
Ejemplo n.º 5
0
        public void TestParseEmpty()
        {
            // Arrange
            var input = "MSH|^~\\&|LABGL1||DMCRES||19951002185200||ADT^A01|LABGL1199510021852632|P|2.2\r"
                        + "PID|||T12345||TEST^PATIENT^P||19601002|M||||||||||123456\r"
                        + "PV1|||NER|||||||GSU||||||||E||||||||||||||||||||||||||19951002174900|19951006\r";

            var expected = "MSH|^~\\&|LABGL1||DMCRES||19951002185200||ADT^A01|LABGL1199510021852632|P|2.2\r"
                           + "PV1|||NER|||||||GSU||||||||E||||||||||||||||||||||||||19951002174900|19951006\r";

            var parser = new PipeParser();

            var a01 = new ADT_A01();

            parser.Parse(a01, input);

            Assert.AreEqual(input, parser.Encode(a01));

            // Act
            parser.Parse(a01.PID, "PID", EncodingCharacters.FromMessage(a01));

            // Assert
            Assert.AreEqual(expected, parser.Encode(a01));
        }
Ejemplo n.º 6
0
        public void TestRemoveRepetition()
        {
            // Arrange
            var input = "MSH|^~\\&|ULTRA|TML|OLIS|OLIS|200905011130||ORU^R01|20169838|T|2.5\r"
                        + "PID|||7005728^^^TML^MR||TEST^RACHEL^DIAMOND||19310313|F|||200 ANYWHERE ST^^TORONTO^ON^M6G 2T9||(416)888-8888||||||1014071185^KR\r"
                        + "PV1|1||OLIS||||OLIST^BLAKE^DONALD^THOR^^^^^921379^^^^OLIST\r"
                        + "ORC|RE||T09-100442-RET-0^^OLIS_Site_ID^ISO|||||||||OLIST^BLAKE^DONALD^THOR^^^^L^921379\r"
                        + "OBR|0||T09-100442-RET-0^^OLIS_Site_ID^ISO|RET^RETICULOCYTE COUNT^HL79901 literal|||200905011106|||||||200905011106||OLIST^BLAKE^DONALD^THOR^^^^L^921379||7870279|7870279|T09-100442|MOHLTC|200905011130||B7|F||1^^^200905011106^^R\r"
                        + "OBX|1\r"
                        + "OBX|2\r"
                        + "OBX|3\r";

            var expected = "MSH|^~\\&|ULTRA|TML|OLIS|OLIS|200905011130||ORU^R01|20169838|T|2.5\r"
                           + "PID|||7005728^^^TML^MR||TEST^RACHEL^DIAMOND||19310313|F|||200 ANYWHERE ST^^TORONTO^ON^M6G 2T9||(416)888-8888||||||1014071185^KR\r"
                           + "PV1|1||OLIS||||OLIST^BLAKE^DONALD^THOR^^^^^921379^^^^OLIST\r"
                           + "ORC|RE||T09-100442-RET-0^^OLIS_Site_ID^ISO|||||||||OLIST^BLAKE^DONALD^THOR^^^^L^921379\r"
                           + "OBR|0||T09-100442-RET-0^^OLIS_Site_ID^ISO|RET^RETICULOCYTE COUNT^HL79901 literal|||200905011106|||||||200905011106||OLIST^BLAKE^DONALD^THOR^^^^L^921379||7870279|7870279|T09-100442|MOHLTC|200905011130||B7|F||1^^^200905011106^^R\r"
                           + "OBX|1\r"
                           + "OBX|3\r";

            var oruR01 = new ORU_R01();
            var parser = new PipeParser();

            parser.Parse(oruR01, input);

            // Action
            var obx = oruR01.GetPATIENT_RESULT().GetORDER_OBSERVATION().GetOBSERVATION(1);

            oruR01.GetPATIENT_RESULT().GetORDER_OBSERVATION().RemoveOBSERVATIONAt(1);

            var result = parser.Encode(oruR01);

            // Assert
            Assert.AreEqual("OBX|2", PipeParser.Encode(obx.OBX, EncodingCharacters.FromMessage(oruR01)));
            Assert.AreEqual(expected, result);
        }
Ejemplo n.º 7
0
 /// <summary>
 /// Constructeur.
 /// </summary>
 /// <param name="encChars">Caractères d'encodage utilisés par le message.</param>
 /// <param name="eventOperator">Informations de la personne à l'origine de l'événement.</param>
 public ADT_A28(EncodingCharacters encChars, object eventOperator)
     : base(encChars, eventOperator, MessageType.ADT, EventType.A28, MessageStructure.ADT_A05)
 {
 }
Ejemplo n.º 8
0
 internal void setSeparators(string s)
 {
     encChars = new EncodingCharacters(s[3], s.Substring(4, 8));
 }
Ejemplo n.º 9
0
        protected virtual void encode(Segment source, EncodingCharacters encodingChars, Table tbl)
        {
            TableRow  tr;
            TableCell td;

            tr            = new TableRow();
            td            = new TableCell();
            td.ColumnSpan = 3;
            if (_cssSegmentHeader != null && _cssSegmentHeader.Trim().Length > 0)
            {
                tr.CssClass = _cssSegmentHeader;
            }
            td.Text = source.getStructureName();
            tr.Cells.Add(td);
            tbl.Rows.Add(tr);


            //start at field 2 for MSH segment because field 1 is the field delimiter
            int startAt = 1;

            if (isDelimDefSegment(source.getStructureName()))
            {
                startAt = 2;
            }

            //loop through fields; for every field delimit any repetitions and add field delimiter after ...
            int numFields = source.numFields();

            for (int i = startAt; i <= numFields; i++)
            {
                try
                {
                    tr = new TableRow();

                    td      = new TableCell();
                    td.Text = i.ToString();
                    tr.Cells.Add(td);

                    Type[] reps        = source.getField(i);
                    string description = source.getFieldDescription(i);
                    td = new TableCell();
                    if (_cssSegmentField != null)
                    {
                        td.CssClass = _cssSegmentField;
                    }
                    if (description != null && description.Trim().Length > 0)
                    {
                        td.Text = description;
                    }
                    else
                    {
                        td.Text = "&nbsp;";
                    }

                    tr.Cells.Add(td);

                    td = new TableCell();
                    if (reps.Length == 0)
                    {
                        td.Text = "&nbsp;";
                    }
                    else
                    {
                        for (int j = 0; j < reps.Length; j++)
                        {
                            td.Controls.Add(encode(reps[j], encodingChars));
                            if (j < reps.Length - 1)
                            {
                                td.Controls.Add(new LiteralControl("<hr size='2'>"));
                            }
                        }
                    }
                    tr.Cells.Add(td);
                    tbl.Rows.Add(tr);
                }
                catch (HL7Exception e)
                {
                    log.error("Error while encoding segment: ", e);
                }
            }
        }
Ejemplo n.º 10
0
        /// <summary> Encodes the given Type, using the given encoding characters.
        /// It is assumed that the Type represents a complete field rather than a component.
        /// </summary>
        protected virtual Control encode(Type source, EncodingCharacters encodingChars)
        {
            if (source is ca.uhn.hl7v2.model.Composite)
            {
                TableCell td;
                TableRow  tr;
                Table     tbl = new Table();
                tbl.Attributes["border"] = _componentBorder.ToString();
                tbl.CellSpacing          = _componentCellSpacing;
                tbl.CellPadding          = _componentCellPadding;
                for (int i = 1; i <= Terser.numComponents(source); i++)
                {
                    for (int j = 1; j <= Terser.numSubComponents(source, i); j++)
                    {
                        tr = new TableRow();
                        Primitive p    = Terser.getPrimitive(source, i, j);
                        Type      type = (Type)p;
                        td = new TableCell();
                        if (_cssComponentField != null)
                        {
                            td.CssClass = _cssComponentField;
                        }
                        string desc = "&nbsp;";
                        if (type.Description != null && type.Description.Trim().Length > 0)
                        {
                            desc = type.Description;
                        }
                        if (j > 1)
                        {
                            desc = "&nbsp;&nbsp;&nbsp;-" + desc;
                        }

                        td.Text = desc;
                        tr.Cells.Add(td);
                        string val = "&nbsp;";
                        if (p.Value != null && p.Value.Trim().Length > 0)
                        {
                            val = p.Value;
                            val = val.Replace(@"\.br\", "<BR>");
                        }
                        td      = new TableCell();
                        td.Text = val;
                        tr.Cells.Add(td);
                        tbl.Rows.Add(tr);
                    }
                }
                return(tbl);
            }
            else
            {
                Primitive p   = Terser.getPrimitive(source, 1, 1);
                string    val = "&nbsp;";

                if (p.Value != null && p.Value.Trim().Length > 0)
                {
                    val = p.Value;
                    val = val.Replace(@"\.br\", "<BR>");
                }
                return(new LiteralControl(val));
            }
        }
Ejemplo n.º 11
0
 public DolphinController()
 {
     _dolphinApi = new Infrastructure();
     //_auditService = new AuditService();
     _encodingService = new EncodingCharacters();
 }
Ejemplo n.º 12
0
 internal void setSeparators(string s)
 {
     encChars = new EncodingCharacters(s[3], s.Substring(4, 8));
 }