using System.Collections.Generic;
using System.Text.RegularExpressions;
public static Dictionary<string, string> fieldTypes = new Dictionary<string, string>
{ "LeaveType", "choice" },
{ "duration", "decimal" }
public static void Main()
string jsExpression1 = "$LeaveType$ == '1'";
string jsExpression2 = "$duration$ == \"0\"";
string jsExpression3 = "$LeaveType$ != '2'";
string jsExpression4 = "$duration$ >= \"1\"";
string jsExpression5 = "$LeaveType$ < '3'";
string fhirExpression1 = ConvertToFhirSdcExpression(jsExpression1);
string fhirExpression2 = ConvertToFhirSdcExpression(jsExpression2);
string fhirExpression3 = ConvertToFhirSdcExpression(jsExpression3);
string fhirExpression4 = ConvertToFhirSdcExpression(jsExpression4);
string fhirExpression5 = ConvertToFhirSdcExpression(jsExpression5);
Console.WriteLine(fhirExpression1);
Console.WriteLine(fhirExpression2);
Console.WriteLine(fhirExpression3);
Console.WriteLine(fhirExpression4);
Console.WriteLine(fhirExpression5);
public static string ConvertToFhirSdcExpression(string jsExpression)
string pattern = @"\$(\w+)\$";
string fhirExpression = Regex.Replace(jsExpression, pattern, match =>
string fieldName = match.Groups[1].Value;
string fieldType = fieldTypes.ContainsKey(fieldName) ? fieldTypes[fieldName] : "unknown";
string valuePath = fieldType == "choice" ? ".answer.value.code" : ".answer.value";
return $"%resource.item.where(linkId='{fieldName}'){valuePath}";
pattern = @"(\s*(==|!=|>=|<=|>|<)\s*)""([^""]*)""";
string replacement = "$1'$3'";
fhirExpression = Regex.Replace(fhirExpression, pattern, replacement);
fhirExpression = fhirExpression.Replace("==", "=");