Exemplo n.º 1
0
        public Hl7.Fhir.Model.Bundle everythingById(string id)
        {
            Hl7.Fhir.Model.Bundle ReturnedBundle = null;

            try
            {
                //Attempt to send the resource to the server endpoint
                UriBuilder UriBuilderx = new UriBuilder(FhirClientEndPoint);
                UriBuilderx.Path = "Patient/" + id;
                Hl7.Fhir.Model.Resource ReturnedResource = _client.InstanceOperation(UriBuilderx.Uri, "everything");

                if (ReturnedResource is Hl7.Fhir.Model.Bundle)
                {
                    ReturnedBundle = ReturnedResource as Hl7.Fhir.Model.Bundle;
                    Console.WriteLine("Received: " + ReturnedBundle.Total + " results. ");
                }
                else
                {
                    throw new Exception("Operation call must return a bundle resource");
                }
                Console.WriteLine();
            }
            catch (Hl7.Fhir.Rest.FhirOperationException FhirOpExec)
            {
                //Process any Fhir Errors returned as OperationOutcome resource
                Console.WriteLine();
                Console.WriteLine("An error message: " + FhirOpExec.Message);
                Console.WriteLine();
                string    xml  = Hl7.Fhir.Serialization.FhirSerializer.SerializeResourceToXml(FhirOpExec.Outcome);
                XDocument xDoc = XDocument.Parse(xml);
                Console.WriteLine(xDoc.ToString());
            }
            return(ReturnedBundle);
        }
        public ActionResult ShowResourceVersion(string rId, string id)
        {
            var conn = new FhirClient("http://localhost:8080/baseR4");

            conn.PreferredFormat = ResourceFormat.Json;

            Patient patient = conn.Read <Patient>("Patient/" + id);

            UriBuilder uriBuilder = new UriBuilder("http://localhost:8080/baseR4");

            uriBuilder.Path = "Patient/" + patient.Id;
            Resource resultResource = conn.InstanceOperation(uriBuilder.Uri, "everything");
            var      resourceList   = new List <Details>();

            if (resultResource is Bundle)
            {
                Bundle resultBundle = resultResource as Bundle;
                while (resultBundle != null)
                {
                    foreach (var i in resultBundle.Entry)
                    {
                        Details element = new Details();
                        switch (i.Resource.TypeName)
                        {
                        case "Observation":
                            Observation observation = (Observation)i.Resource;
                            if (observation.Id == rId)
                            {
                                element.id           = observation.Id;
                                element.resourceName = "Observation";
                                element.reason       = observation.Code.Text;
                                element.version      = observation.Meta.VersionId;
                                int versions = int.Parse(element.version);
                                for (int j = 1; j <= versions; j++)
                                {
                                    Details    vPatient    = new Details();
                                    UriBuilder uriBuilder1 = new UriBuilder("http://localhost:8080/baseR4");
                                    uriBuilder1.Path = "Observation/" + element.id + "/_history/" + j;
                                    Observation resultResource1 = conn.Read <Observation>(uriBuilder1.Uri);
                                    vPatient.id      = resultResource1.Id;
                                    vPatient.reason  = resultResource1.Code.Text;
                                    vPatient.date    = Convert.ToDateTime(resultResource1.Effective.ToString());
                                    vPatient.version = resultResource1.Meta.VersionId;
                                    vPatient.modDate = Convert.ToDateTime(resultResource1.Meta.LastUpdated.ToString());
                                    resourceList.Add(vPatient);
                                }
                            }
                            break;
                        }
                    }
                    resultBundle = conn.Continue(resultBundle, PageDirection.Next);
                }
            }


            return(View(resourceList));
        }
Exemplo n.º 3
0
        [TestMethod, Ignore] //Server throws error: Access violation at address 000000000129D56C in module 'FHIRServer.exe'. Read of address 0000000000000000
        public void InvokeTestPatientGetEverything()
        {
            var client = new FhirClient(testEndpoint);
            var start = new FhirDateTime(2014,11,1);
            var end = new FhirDateTime(2015,1,1);
            var par = new Parameters().Add("start", start).Add("end", end);
            var bundle = (Bundle)client.InstanceOperation(ResourceIdentity.Build("Patient", "1"), "everything", par);
            Assert.IsTrue(bundle.Entry.Any());

            var bundle2 = client.FetchPatientRecord(ResourceIdentity.Build("Patient","1"), start, end);
            Assert.IsTrue(bundle2.Entry.Any());
        }
Exemplo n.º 4
0
        public void InvokeExpandUsingInstanceOp()
        {
            var client = new FhirClient(testEndpoint);

            //    var vs = client.Read<ValueSet>("ValueSet/administrative-gender");

            //   var vsX = client.ExpandValueSet(ExpandValueSet(vs);

            // Assert.IsTrue(vsX.Expansion.Contains.Any());
            var result = client.InstanceOperation(ResourceIdentity.Build("ValueSet", "extensional-case-1"),
                                                  FhirClientOperations.Operation.EXPAND_VALUESET);
        }
Exemplo n.º 5
0
        public void InvokeTestPatientGetEverything()
        {
            var client = new FhirClient(testEndpoint);
            var start  = new FhirDateTime(2014, 11, 1);
            var end    = new FhirDateTime(2015, 1, 1);
            var par    = new Parameters().Add("start", start).Add("end", end);
            var bundle = (Bundle)client.InstanceOperation(ResourceIdentity.Build("Patient", "example"), "everything", par);

            Assert.IsTrue(bundle.Entry.Any());

            var bundle2 = client.FetchPatientRecord(ResourceIdentity.Build("Patient", "example"), start, end);

            Assert.IsTrue(bundle2.Entry.Any());
        }
Exemplo n.º 6
0
        private static void CreatePatientFile(FhirClient client, string patientid)
        {
            string     SericeRootURI = "https://r3.smarthealthit.org/";
            UriBuilder UriBuildX     = new UriBuilder(SericeRootURI);
            Bundle     bundle        = null;


            UriBuildX.Path = "Patient/" + patientid;
            var Returnedresource = client.InstanceOperation(UriBuildX.Uri, "everything");

            if (Returnedresource is Bundle)
            {
                bundle = Returnedresource as Bundle;
            }
            //var query = new string[] { "name=Rob" };
            //var bundle = client.Search("Patient", query);
        }
Exemplo n.º 7
0
        public static void GetEverythingForPatient(string patientId)
        {
            UriBuilder uriBuilder = new UriBuilder(FhirClientEndPoint);

            uriBuilder.Path = "Patient/" + patientId;

            try
            {
                FhirClient fhirClient     = new FhirClient(FhirClientEndPoint);
                Resource   resultResource = fhirClient.InstanceOperation(uriBuilder.Uri, "everything");

                var xml = FhirSerializer.SerializeResourceToXml(resultResource);
                LogToFile(XDocument.Parse(xml).ToString());
            }
            catch (Exception ex)
            {
                LogToFile(ex.ToString());
            }
        }
Exemplo n.º 8
0
        public void CreateAndFullRepresentation()
        {
            FhirClient client = new FhirClient(testEndpoint);

            client.ReturnFullResource = true;       // which is also the default

            var pat             = client.Read <Patient>("Patient/example");
            ResourceIdentity ri = pat.ResourceIdentity().WithBase(client.Endpoint);

            pat.Id = null;
            pat.Identifier.Clear();
            var patC = client.Create <Patient>(pat);

            Assert.IsNotNull(patC);

            client.ReturnFullResource = false;
            patC = client.Create <Patient>(pat);

            Assert.IsNull(patC);

            if (client.LastBody != null)
            {
                var returned = client.LastBodyAsResource;
                Assert.IsTrue(returned is OperationOutcome);
            }

            // Now validate this resource
            client.ReturnFullResource = true;       // which is also the default
            Parameters p = new Parameters();

            //  p.Add("mode", new FhirString("create"));
            p.Add("resource", pat);
            OperationOutcome ooI = (OperationOutcome)client.InstanceOperation(ri.WithoutVersion(), "validate", p);

            Assert.IsNotNull(ooI);
        }
Exemplo n.º 9
0
        public ViewResult ShowInfo(string id, DateTime?after, DateTime?before, int?page)
        {
            //POKAZYWANIE WSZYSTKICH INFORMACJI O PACJENCIE
            //ŁĄCZENIE Z SERWEREM
            var client = new FhirClient("http://localhost:8080/baseR4");        //second parameter - check standard version

            client.PreferredFormat = ResourceFormat.Json;
            Patient myPatient = client.Read <Patient>("Patient/" + id);

            UriBuilder UriBuilderx = new UriBuilder("http://localhost:8080/baseR4");

            UriBuilderx.Path = "Patient/" + myPatient.Id;
            Resource ReturnedResource = client.InstanceOperation(UriBuilderx.Uri, "everything");


            //DANE OSOBOWE PACJENTA
            ViewBag.Surname   = myPatient.Name[0].Family;
            ViewBag.ID        = myPatient.Id;
            ViewBag.Name      = myPatient.Name[0].Given.FirstOrDefault();
            ViewBag.birthDate = new Date(myPatient.BirthDate.ToString());

            //WYSZUKIWANIE "EVERYTHING"
            var myElemList = new List <ShowInfo>();

            if (ReturnedResource is Bundle)
            {
                Bundle ReturnedBundle = ReturnedResource as Bundle;
                while (ReturnedBundle != null)
                {
                    foreach (var Entry in ReturnedBundle.Entry)
                    {
                        ShowInfo myElem = new ShowInfo();
                        //DANE DO OSI CZASU
                        if (Entry.Resource.TypeName == "Observation")
                        {
                            //LISTA OBSERVATION
                            Observation observation = (Observation)Entry.Resource;

                            myElem.elemID        = observation.Id;
                            myElem.originalModel = "Observation";

                            var amount = observation.Value as Quantity;
                            if (amount != null)
                            {
                                myElem.amount = amount.Value + " " + amount.Unit;
                            }
                            myElem.date   = Convert.ToDateTime(observation.Effective.ToString());
                            myElem.reason = observation.Code.Text;

                            myElemList.Add(myElem);
                        }
                        else if (Entry.Resource.TypeName == "MedicationRequest")
                        {
                            //LISTA MEDICATIONSTATEMENT
                            MedicationRequest mrequest = (MedicationRequest)Entry.Resource;

                            myElem.elemID        = mrequest.Id;
                            myElem.originalModel = "MedicationRequest";

                            myElem.date    = Convert.ToDateTime(mrequest.AuthoredOn.ToString());
                            myElem.reason += (mrequest.Medication as CodeableConcept).Text;
                            myElemList.Add(myElem);
                        }
                    }

                    ReturnedBundle = client.Continue(ReturnedBundle, PageDirection.Next);
                }
            }
            else
            {
                throw new Exception("Operation call must return a bundle resource");
            }

            //OKREŚLENIE SZUKANEJ DATY
            if (before != null)
            {
                DateTime date = before.GetValueOrDefault();
                myElemList     = myElemList.FindAll(s => s.date.Date.CompareTo(date.Date) < 0);
                ViewBag.Before = date;
            }

            if (after != null)
            {
                DateTime date = after.GetValueOrDefault();
                myElemList    = myElemList.FindAll(s => s.date.Date.CompareTo(date.Date) > 0);
                ViewBag.After = date;
            }

            myElemList.Reverse();       //żeby daty były odpowiednio od najwyższej

            int pageSize   = 10;
            int pageNumber = (page ?? 1);

            return(View(myElemList.ToPagedList(pageNumber, pageSize)));
        }
Exemplo n.º 10
0
        public ActionResult Chart(string id, DateTime?after, DateTime?before)
        {
            var client = new FhirClient("http://localhost:8080/baseR4");

            client.PreferredFormat = ResourceFormat.Json;
            Patient myPatient = client.Read <Patient>("Patient/" + id);        //5cbc121b-cd71-4428-b8b7-31e53eba8184

            UriBuilder UriBuilderx = new UriBuilder("http://localhost:8080/baseR4");

            UriBuilderx.Path = "Patient/" + myPatient.Id;
            Resource ReturnedResource = client.InstanceOperation(UriBuilderx.Uri, "everything");


            //DANE OSOBOWE PACJENTA
            ViewBag.Surname = myPatient.Name[0].Family;
            ViewBag.Name    = myPatient.Name[0].Given.FirstOrDefault();
            ViewBag.ID      = id;

            //WYSZUKIWANIE "EVERYTHING"
            var list = new List <ChartModel> {
            };

            if (ReturnedResource is Bundle)
            {
                Bundle ReturnedBundle = ReturnedResource as Bundle;
                while (ReturnedBundle != null)
                {
                    foreach (var Entry in ReturnedBundle.Entry)
                    {
                        //DANE DO OSI CZASU
                        if (Entry.Resource.TypeName == "Observation")
                        {
                            //LISTA BADAŃ WAGI
                            Observation observation = (Observation)Entry.Resource;

                            if (observation.Code.Text.Contains("Body Weight"))
                            {
                                var val    = observation.Value as Quantity;
                                var amount = double.Parse((val.Value).ToString());
                                var date   = observation.Effective.ToString().Substring(0, 10);
                                var point  = new ChartModel(amount, date);
                                list.Add(point);
                            }
                        }
                    }

                    ReturnedBundle = client.Continue(ReturnedBundle, PageDirection.Next);
                }
            }
            else
            {
                throw new Exception("Operation call must return a bundle resource");
            }

            //OKREŚLENIE SZUKANEJ DATY
            if (before != null)
            {
                DateTime date = before.GetValueOrDefault();
                list           = list.FindAll(s => Convert.ToDateTime(s.label).Date.CompareTo(date.Date) < 0);
                ViewBag.Before = date;
            }

            if (after != null)
            {
                DateTime date = after.GetValueOrDefault();
                list          = list.FindAll(s => Convert.ToDateTime(s.label).Date.CompareTo(date.Date) > 0);
                ViewBag.After = date;
            }

            ViewBag.DataPoints = JsonConvert.SerializeObject(list);
            return(View());
        }
Exemplo n.º 11
0
        public void CreateAndFullRepresentation()
        {
            FhirClient client = new FhirClient(testEndpoint);
            client.ReturnFullResource = true;       // which is also the default

            var pat = client.Read<Patient>("Patient/example");
            ResourceIdentity ri = pat.ResourceIdentity().WithBase(client.Endpoint);
            pat.Id = null;
            pat.Identifier.Clear();
            var patC = client.Create<Patient>(pat);
            Assert.IsNotNull(patC);

            client.ReturnFullResource = false;
            patC = client.Create<Patient>(pat);

            Assert.IsNull(patC);

            if (client.LastBody != null)
            {
                var returned = client.LastBodyAsResource;
                Assert.IsTrue(returned is OperationOutcome);
            }

            // Now validate this resource
            client.ReturnFullResource = true;       // which is also the default
            Parameters p = new Parameters();
          //  p.Add("mode", new FhirString("create"));
            p.Add("resource", pat);
            OperationOutcome ooI = (OperationOutcome)client.InstanceOperation(ri.WithoutVersion(), "validate", p);
            Assert.IsNotNull(ooI);
        }
        public ViewResult ShowDetails(string id)
        {
            var conn = new FhirClient("http://localhost:8080/baseR4");

            conn.PreferredFormat = ResourceFormat.Json;

            Patient patient = conn.Read <Patient>("Patient/" + id);

            UriBuilder uriBuilder = new UriBuilder("http://localhost:8080/baseR4");

            uriBuilder.Path = "Patient/" + patient.Id;
            Resource resultResource = conn.InstanceOperation(uriBuilder.Uri, "everything");

            ViewBag.Surname   = patient.Name[0].Family;
            ViewBag.ID        = patient.Id;
            ViewBag.Name      = patient.Name[0].Given.FirstOrDefault();
            ViewBag.birthDate = new Date(patient.BirthDate.ToString());

            var listElement = new List <Details>();

            if (resultResource is Bundle)
            {
                Bundle resultBundle = resultResource as Bundle;
                while (resultBundle != null)
                {
                    foreach (var i in resultBundle.Entry)
                    {
                        Details element = new Details();
                        switch (i.Resource.TypeName)
                        {
                        case "Observation":
                            Observation observation = (Observation)i.Resource;

                            element.id           = observation.Id;
                            element.resourceName = "Observation";
                            element.date         = Convert.ToDateTime(observation.Effective.ToString());
                            element.reason       = observation.Code.Text;
                            element.version      = observation.Meta.VersionId;



                            Quantity amount = observation.Value as Quantity;
                            if (amount != null)
                            {
                                element.amount = amount.Value + " " + amount.Unit;
                            }

                            listElement.Add(element);

                            break;

                        case "MedicationRequest":
                            MedicationRequest medicationRequest = (MedicationRequest)i.Resource;

                            element.id           = medicationRequest.Id;
                            element.resourceName = "MedicationRequest";
                            element.date         = Convert.ToDateTime(medicationRequest.AuthoredOn.ToString());
                            element.reason      += ((CodeableConcept)medicationRequest.Medication).Text;
                            element.version      = medicationRequest.Meta.VersionId;

                            listElement.Add(element);
                            break;
                        }
                    }
                    resultBundle = conn.Continue(resultBundle, PageDirection.Next);
                }
            }

            listElement = listElement.OrderByDescending(s => s.date).ToList();

            return(View(listElement.ToList()));
        }
        public ActionResult Save(DetailsPatient item)
        {
            DetailsPatient element = new DetailsPatient();

            element.date         = item.date;
            element.reason       = item.reason;
            element.amount       = item.amount;
            element.resourceName = item.resourceName;
            element.id           = item.id;
            element.patientId    = item.patientId;


            var conn = new FhirClient("http://localhost:8080/baseR4");

            conn.PreferredFormat = ResourceFormat.Json;

            Patient patient = conn.Read <Patient>("Patient/" + element.patientId);

            UriBuilder uriBuilder = new UriBuilder("http://localhost:8080/baseR4");

            uriBuilder.Path = "Patient/" + patient.Id;
            Resource resultResource = conn.InstanceOperation(uriBuilder.Uri, "everything");

            ViewBag.Surname   = patient.Name[0].Family;
            ViewBag.ID        = patient.Id;
            ViewBag.Name      = patient.Name[0].Given.FirstOrDefault();
            ViewBag.birthDate = new Date(patient.BirthDate.ToString());


            if (resultResource is Bundle)
            {
                Bundle resultBundle = resultResource as Bundle;
                while (resultBundle != null)
                {
                    foreach (var i in resultBundle.Entry)
                    {
                        DetailsPatient fetchedElement = new DetailsPatient();
                        switch (i.Resource.TypeName)
                        {
                        case "Observation":
                            Observation observation = (Observation)i.Resource;

                            if (observation.Id == item.id)
                            {
                                fetchedElement.date   = observation.Effective;
                                fetchedElement.reason = observation.Code.Text;
                                fetchedElement.amount = observation.Meta.VersionId;


                                UriBuilder uriBuilderBack = new UriBuilder("http://localhost:8080/baseR4");
                                uriBuilderBack.Path = "Observation/" + item.id;
                                Observation resultResourceBack = conn.Read <Observation>(uriBuilderBack.Uri);


                                resultResourceBack.Code.Text = item.reason;
                                conn.Update(resultResourceBack);
                            }
                            break;

                        case "MedicationRequest":
                            MedicationRequest medicationRequest = (MedicationRequest)i.Resource;
                            if (medicationRequest.Id == item.id)
                            {
                                fetchedElement.amount = medicationRequest.Meta.VersionId;

                                //fetchedElement.date = medicationRequest.AuthoredOn
                                //fetchedElement.reason += ((CodeableConcept)medicationRequest.Medication).Text;
                            }
                            break;
                        }
                    }
                    resultBundle = conn.Continue(resultBundle, PageDirection.Next);
                }
            }



            return(View(element));
        }
        public ViewResult Edit(string id, string resourceName, string patientId)
        {
            var conn = new FhirClient("http://localhost:8080/baseR4");

            conn.PreferredFormat = ResourceFormat.Json;

            Patient patient = conn.Read <Patient>("Patient/" + patientId);

            UriBuilder uriBuilder = new UriBuilder("http://localhost:8080/baseR4");

            uriBuilder.Path = "Patient/" + patient.Id;
            Resource resultResource = conn.InstanceOperation(uriBuilder.Uri, "everything");

            ViewBag.Surname   = patient.Name[0].Family;
            ViewBag.ID        = patient.Id;
            ViewBag.Name      = patient.Name[0].Given.FirstOrDefault();
            ViewBag.birthDate = new Date(patient.BirthDate.ToString());

            var selectedElement = new DetailsPatient();

            if (resultResource is Bundle)
            {
                Bundle resultBundle = resultResource as Bundle;
                while (resultBundle != null)
                {
                    foreach (var i in resultBundle.Entry)
                    {
                        DetailsPatient element = new DetailsPatient();
                        switch (i.Resource.TypeName)
                        {
                        case "Observation":
                            Observation observation = (Observation)i.Resource;
                            if (observation.Id == id)
                            {
                                element.id           = observation.Id;
                                element.resourceName = "Observation";
                                element.date         = observation.Effective;
                                element.reason       = observation.Code.Text;
                                element.amount       = observation.Meta.VersionId;


                                element.patientId = patient.Id;

                                selectedElement = element;
                            }
                            break;

                        case "MedicationRequest":
                            MedicationRequest medicationRequest = (MedicationRequest)i.Resource;
                            if (medicationRequest.Id == id)
                            {
                                element.id           = medicationRequest.Id;
                                element.resourceName = "MedicationRequest";

                                element.reason   += ((CodeableConcept)medicationRequest.Medication).Text;
                                element.patientId = patientId;
                                element.amount    = medicationRequest.Meta.VersionId;

                                selectedElement = element;
                            }
                            break;
                        }
                    }
                    resultBundle = conn.Continue(resultBundle, PageDirection.Next);
                }
            }


            return(View(selectedElement));
        }
        public ViewResult Chart(string id, string dateType = "all")
        {
            List <DataPoint> dataPoints = new List <DataPoint>();

            var conn = new FhirClient("http://localhost:8080/baseR4");

            conn.PreferredFormat = ResourceFormat.Json;

            Patient patient = conn.Read <Patient>("Patient/" + id);

            var x = conn.History("Patient/" + id);

            UriBuilder uriBuilder = new UriBuilder("http://localhost:8080/baseR4");

            uriBuilder.Path = "Patient/" + patient.Id;
            Resource resultResource = conn.InstanceOperation(uriBuilder.Uri, "everything");

            ViewBag.ID   = patient.Id;
            ViewBag.Name = patient.Name[0].Given.FirstOrDefault() + " " + patient.Name[0].Family;

            if (resultResource is Bundle)
            {
                Bundle resultBundle = resultResource as Bundle;
                while (resultBundle != null)
                {
                    foreach (var i in resultBundle.Entry)
                    {
                        switch (i.Resource.TypeName)
                        {
                        case "Observation":
                            Observation observation = (Observation)i.Resource;

                            if (observation.Code.Text.Contains("Glucose"))
                            {
                                var date = observation.Effective.ToString().Substring(0, 10);

                                Quantity value  = observation.Value as Quantity;
                                var      amount = double.Parse((value.Value).ToString());

                                dataPoints.Add(new DataPoint(date, amount));
                            }
                            break;
                        }
                    }
                    resultBundle = conn.Continue(resultBundle, PageDirection.Next);
                }
            }
            ViewBag.MessagePost = dateType;

            switch (dateType)
            {
            case "5years":
                dataPoints = dataPoints.Where(s => Convert.ToDateTime(s.label) >= DateTime.Now.Date.AddYears(-5)).ToList();
                break;

            case "1year":
                dataPoints = dataPoints.Where(s => Convert.ToDateTime(s.label) >= DateTime.Now.Date.AddYears(-1)).ToList();
                break;

            case "6months":
                dataPoints = dataPoints.Where(s => Convert.ToDateTime(s.label) >= DateTime.Now.Date.AddMonths(-6)).ToList();
                break;

            case "3month":
                dataPoints = dataPoints.Where(s => Convert.ToDateTime(s.label) >= DateTime.Now.Date.AddMonths(-3)).ToList();
                break;

            case "1month":
                dataPoints = dataPoints.Where(s => Convert.ToDateTime(s.label) >= DateTime.Now.Date.AddMonths(-1)).ToList();
                break;

            default:
                break;
            }

            ViewBag.DataPoints = JsonConvert.SerializeObject(dataPoints);

            return(View());
        }