Initial Prescription model with factory.
This commit is contained in:
parent
5198fa7358
commit
a255349672
48
Tests/Medication/PrescriptionTest.cs
Executable file
48
Tests/Medication/PrescriptionTest.cs
Executable file
@ -0,0 +1,48 @@
|
||||
/* PrescriptionTest.cs
|
||||
* part of zaaReloaded2
|
||||
*
|
||||
* Copyright 2015 Daniel Kraus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using NUnit.Framework;
|
||||
using zaaReloaded2.Medication;
|
||||
|
||||
namespace Tests.Medication
|
||||
{
|
||||
[TestFixture]
|
||||
class PrescriptionTest
|
||||
{
|
||||
[Test]
|
||||
[TestCase("Ramipril 5 mg 1-2-3", "Ramipril 5 mg", "1", "2", "3")]
|
||||
[TestCase("Ramipril 5 mg 1 -2 - 3", "Ramipril 5 mg", "1", "2", "3")]
|
||||
[TestCase("Ramipril 5 mg 1 - 2 - 3", "Ramipril 5 mg", "1", "2", "3")]
|
||||
[TestCase("Ramipril 5 mg 1 - 2 - 3", "Ramipril 5 mg", "1", "2", "3")]
|
||||
[TestCase("Ramipril 5 mg 1 1/2-2-3", "Ramipril 5 mg", "1 1/2", "2", "3")]
|
||||
[TestCase("Ramipril 5 mg 1 1/2 - 2 - 3", "Ramipril 5 mg", "1 1/2", "2", "3")]
|
||||
[TestCase("Ramipril 5 mg ½-⅓-¼", "Ramipril 5 mg", "½", "⅓", "¼")]
|
||||
public void ParseLine(string line, string drug, string morning,
|
||||
string noon, string evening)
|
||||
{
|
||||
Prescription p = Prescription.FromLine(line);
|
||||
Assert.AreEqual(drug, p.Drug, "Drug should be " + drug);
|
||||
Assert.AreEqual(morning, p.Morning, "Morning should be " + morning);
|
||||
Assert.AreEqual(noon, p.Noon, "Noon should be " + noon);
|
||||
Assert.AreEqual(evening, p.Evening, "Evening should be " + evening);
|
||||
}
|
||||
}
|
||||
}
|
@ -83,6 +83,7 @@
|
||||
<Compile Include="Controller\Comments\CommentPoolTest.cs" />
|
||||
<Compile Include="Controller\Comments\ItemCommentTest.cs" />
|
||||
<Compile Include="Controller\Elements\CloneTest.cs" />
|
||||
<Compile Include="Medication\PrescriptionTest.cs" />
|
||||
<Compile Include="SerializationTest.cs" />
|
||||
<Compile Include="Controller\SettingsRepositoryTest.cs" />
|
||||
<Compile Include="Controller\SettingsTest.cs" />
|
||||
|
99
zaaReloaded2/Medication/Prescription.cs
Executable file
99
zaaReloaded2/Medication/Prescription.cs
Executable file
@ -0,0 +1,99 @@
|
||||
/* Prescription.cs
|
||||
* part of zaaReloaded2
|
||||
*
|
||||
* Copyright 2015 Daniel Kraus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace zaaReloaded2.Medication
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents a prescription
|
||||
/// </summary>
|
||||
public class Prescription
|
||||
{
|
||||
#region Factory
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new Prescription object by parsing a line (e.g.,
|
||||
/// from a physician's letter).
|
||||
/// </summary>
|
||||
/// <param name="line">Line to parse</param>
|
||||
/// <returns>Prescription created from the <paramref name="Line"/></returns>
|
||||
public static Prescription FromLine(string line)
|
||||
{
|
||||
// Replace any runs of whitespace with a single space
|
||||
// (from http://stackoverflow.com/a/206946/270712)
|
||||
line = Regex.Replace(line, @"\s+", " ");
|
||||
Match m = lineRegex.Match(line);
|
||||
int n = m.Groups[DOSING_GROUP].Captures.Count;
|
||||
|
||||
return new Prescription(
|
||||
m.Groups["drug"].Value,
|
||||
n > 0 ? m.Groups[DOSING_GROUP].Captures[0].Value : String.Empty,
|
||||
n > 1 ? m.Groups[DOSING_GROUP].Captures[1].Value : String.Empty,
|
||||
n > 2 ? m.Groups[DOSING_GROUP].Captures[2].Value : String.Empty,
|
||||
n > 3 ? m.Groups[DOSING_GROUP].Captures[3].Value : String.Empty
|
||||
);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
public string Drug { get; set; }
|
||||
|
||||
public string Morning { get; set; }
|
||||
|
||||
public string Noon { get; set; }
|
||||
|
||||
public string Evening { get; set; }
|
||||
|
||||
public string Night { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructor
|
||||
|
||||
public Prescription() { }
|
||||
|
||||
public Prescription(string drug, string morning, string noon,
|
||||
string evening, string night)
|
||||
{
|
||||
Drug = drug;
|
||||
Morning = morning;
|
||||
Noon = noon;
|
||||
Evening = evening;
|
||||
Night = night;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Fields
|
||||
|
||||
private const string DOSING_GROUP = "dosing";
|
||||
private const string DOSING = @"(\d{1,3}((\s1)?/[234])?|[\u00bd\u2153\u00bc])";
|
||||
private const string SPACER = @"\s*[-\u2012\u2013\u2014]+\s*";
|
||||
private static readonly Regex lineRegex = new Regex(
|
||||
@"(?<drug>.+?)\s(?<dosing>" + DOSING +
|
||||
@")(\s?[-\u2012\u2013\u2014]+\s?(?<dosing>" + DOSING + @")){1,3}");
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
@ -221,6 +221,7 @@
|
||||
<Compile Include="Formatter\DanielsStyle.cs" />
|
||||
<Compile Include="Formatter\DocumentWriter.cs" />
|
||||
<Compile Include="Formatter\NoLaboratoryDataException.cs" />
|
||||
<Compile Include="Medication\Prescription.cs" />
|
||||
<Compile Include="Preferences.cs" />
|
||||
<Compile Include="Ribbon.cs" />
|
||||
<Compile Include="Thesaurus\ThesaurusBase.cs" />
|
||||
|
Loading…
Reference in New Issue
Block a user