/// <summary> /// Gets a list of documents based on the query criteria. /// </summary> /// <param name="pcehrHeader">PCEHR header.</param> /// <param name="adhocQueryRequest">Query request.</param> /// <returns>Query response.</returns> public AdhocQueryResponse GetDocumentList(CommonPcehrHeader pcehrHeader, AdhocQueryRequest adhocQueryRequest) { // PCEHRHeaderValidator.Validate(pcehrHeader); Validation.ValidateArgumentRequired("adhocQueryRequest", adhocQueryRequest); return(documentRegistryClient.GetDocumentList(pcehrHeader.GetHeader <PCEHRHeader>(), adhocQueryRequest)); }
public AdhocQueryRequest Build_Test01() { var item = new AdhocQueryRequest { ResponseOption = new ResponseOption { ReturnComposedObjects = true, ReturnType = ReturnType.LeafClass }, Query = new AdhocQuery { Id = "urn:xdskit:com:c7ptmx37tfbcwy8ky7a", Slots = new List <Slot> { new Slot { Name = "$XDSDocumentEntryPatientId", Values = new List <string> { "st3498702^^^&1.3.6.1.4.1.21367.2005.3.7&ISO" } }, new Slot { Name = "$XDSDocumentEntryStatus", Values = new List <string> { "('urn:oasis:names:tc:ebxml-egrep:ResponseStatusType:Approved')" } }, new Slot { Name = "$XDSDocumentEntryCreationTimeFrom", Values = new List <string> { "200412252300" } }, new Slot { Name = "$XDSDocumentEntryCreationTimeTo", Values = new List <string> { "200501010800" } }, new Slot { Name = "$XDSDocumentEntryHealthcareFacilityTypeCode", Values = new List <string> { "('Emergency Department')" } } } } }; return(item); }
/// <summary> /// Builds an adhoc query request. /// </summary> /// <returns>Adhoc query request.</returns> public AdhocQueryRequest BuildRequest() { AdhocQueryRequest queryRequest = new AdhocQueryRequest(); queryRequest.ResponseOption = new ResponseOptionType(); queryRequest.ResponseOption.returnComposedObjects = true; queryRequest.ResponseOption.returnType = ResponseOptionTypeReturnType.LeafClass; queryRequest.AdhocQuery = Build(); return(queryRequest); }
/// <summary> /// Gets a document list based on a query. /// </summary> /// <param name="pcehrHeader">PCEHR header.</param> /// <param name="queryRequest">Query request.</param> /// <returns>Query response.</returns> internal AdhocQueryResponse GetDocumentList(PCEHRHeader pcehrHeader, AdhocQueryRequest queryRequest) { var timestamp = new timestampType() { created = DateTime.Now }; var signatureContainer = new signatureContainerType(); return(documentRegistryClient.DocumentRegistry_RegistryStoredQuery(timestamp, ref signatureContainer, pcehrHeader, queryRequest)); }
/// <summary> /// Create an adhoc query request. /// </summary> /// <param name="queryId">The query identifier.</param> /// <param name="parameters">The parameters.</param> /// <returns>Returns the created adhoc query request.</returns> public static AdhocQueryRequest CreateAdhocQueryRequest(XdsGuidType queryId, params SlotType1[] parameters) { var retVal = new AdhocQueryRequest { // Set response option ResponseOption = new ResponseOptionType() { returnComposedObjects = true, returnType = ResponseOptionTypeReturnType.LeafClass }, // Adhoc query AdhocQuery = new AdhocQueryType { id = queryId.ToString(), // Create the slots Slot = parameters } }; return(retVal); }
public void Run() { // NASH certificate should be used here, NOT the HI certificate the NASH certificate can be found in the NASH PKI Test Kit // certificate needs to be installed in the right place // The "Issue To" field of a NASH certificate looks like general (or something different)."HPI-O".electronichealth.net.au // "Serial Number" can be found in the details once the certificate is installed.e.g. in Windows, certificates can be found in Certs.msc //Get Certificate and Header objects CertAndHeaderInfo CertAndHeaderInfo = Support.CertAndHeaderFactory.Get( certSerial: "06fba6", serialHPIO: "8003629900019338", patientType: Support.PatientType.FrankHarding); // Obtain the certificate for use with TLS and signing X509Certificate2 cert = CertAndHeaderInfo.Certificate; // Create PCEHR header CommonPcehrHeader header = CertAndHeaderInfo.Header; // Instantiate the client // SVT endpoint is "https://b2b.ehealthvendortest.health.gov.au/getDocumentList" // production endpoint is "https://services.ehealth.gov.au/getDocumentList" GetDocumentListClient documentListClient = new GetDocumentListClient(new Uri("https://b2b.ehealthvendortest.health.gov.au/getDocumentList"), cert, cert); // Add server certificate validation callback ServicePointManager.ServerCertificateValidationCallback += Support.CertificateHelper.ValidateServiceCertificate; // Create a query AdhocQueryBuilder adhocQueryBuilder = new AdhocQueryBuilder(header.IhiNumber, new[] { DocumentStatus.Approved }); adhocQueryBuilder.ServiceStartTimeFrom = new ISO8601DateTime(new DateTime(2018, 03, 18)); adhocQueryBuilder.ServiceStopTimeTo = new ISO8601DateTime(new DateTime(2020, 07, 17)); adhocQueryBuilder.ClassCode = new List <ClassCodes>() { ClassCodes.AdvanceCareDirectiveCustodianRecord, ClassCodes.AdvanceCareInformation }; //adhocQueryBuilder.TypeCode = new List<ClassCodes>() //{ // ClassCodes.AdvanceCareDirectiveCustodianRecord, // ClassCodes.AdvanceCareInformation //}; // To further filter documents, build on the adhocQueryBuilder helper functions // For example, filtering on document type //adhocQueryBuilder.ClassCode = new List<ClassCodes>() {ClassCodes.AdvanceCareInformation}; // See Table 3 XDSDocumentEntry Document Type and Class Code value set from // the Document Exchange Service Technical Service Specification // Create the request using the query AdhocQueryRequest queryRequest = adhocQueryBuilder.BuildRequest(); try { // Invoke the service AdhocQueryResponse queryResponse = documentListClient.GetDocumentList(header, queryRequest); // Get the soap request and response string soapRequest = documentListClient.SoapMessages.SoapRequest; string soapResponse = documentListClient.SoapMessages.SoapResponse; // Process data into a more simple model if (queryResponse.RegistryObjectList.ExtrinsicObject == null) { Console.WriteLine($"Total Documents: 0"); } else { XdsRecord[] data = XdsMetadataHelper.ProcessXdsMetadata(queryResponse.RegistryObjectList.ExtrinsicObject); int UseTimeZone = 11; // For displaying the data in a list Console.WriteLine($"Total Documents {data.Count().ToString()}"); Console.WriteLine($"{"Document Date".PadRight(23)} | {"Service Date".PadRight(23)} | {"Document".PadRight(35)} | {"Org".PadRight(35)} | {"Org Type".PadRight(35)}|"); Console.WriteLine($"================================================================================================================================================================================"); foreach (var row in data.OrderByDescending(x => x.creationTimeUTC)) { Console.WriteLine($"{row.creationTimeUTC.Add(TimeSpan.FromHours(UseTimeZone)).ToString().PadRight(23)} | {row.serviceStartTimeUTC.Add(TimeSpan.FromHours(UseTimeZone)).ToString().PadRight(23)} | {row.typeCodeDisplayName.PadRight(35)} | {row.authorInstitution.institutionName.PadRight(35)} | {row.healthcareFacilityTypeCodeDisplayName.PadRight(35)}"); //Console.WriteLine($"DocumentId: {row.documentId}"); //Console.WriteLine($"ClassCode DisplayName: {row.classCodeDisplayName}"); //Console.WriteLine($"TypeCode DisplayName: {row.typeCodeDisplayName}"); //Console.WriteLine($"Creation Time UTC: {row.creationTimeUTC.Add(TimeSpan.FromHours(UseTimeZone)).ToString()}"); //Console.WriteLine($"Service Start Time UTC: {row.serviceStartTimeUTC.Add(TimeSpan.FromHours(UseTimeZone)).ToString()}"); //Console.WriteLine($"Service Stop Time UTC: {row.serviceStopTimeUTC.Add(TimeSpan.FromHours(UseTimeZone)).ToString()}"); //Console.WriteLine($"Healthcare Facility TypeCode DisplayName: {row.healthcareFacilityTypeCodeDisplayName}"); //Console.WriteLine($"Repository Unique Id: {row.repositoryUniqueId}"); //Console.WriteLine($"Status: {row.status}"); //Console.WriteLine($"Remove Reason: {row.removeReason}"); //Console.WriteLine($"Record Version: {row.recordVersion}"); //Console.WriteLine($"AuthorInstitution.InstitutionName: {row.authorInstitution.institutionName}"); // Convert dates from UTC to local time //row.creationTimeUTC.ToLocalTime(); //row.serviceStopTimeUTC.ToLocalTime(); // Document name //row.classCodeDisplayName // Organisation //row.authorInstitution.institutionName // Organisation Type //row.healthcareFacilityTypeCodeDisplayName // Identifiers to retrieve the document //row.repositoryUniqueId //row.documentId } } } catch (FaultException e) { // Handle any errors } }
private bool GetDocumentId(string IHI, out string documentId, out string repositoryId) { // Obtain the certificate for use with TLS and signing X509Certificate2 cert = X509CertificateUtil.GetCertificate( "Serial Number", X509FindType.FindBySerialNumber, StoreName.My, StoreLocation.CurrentUser, true ); // Create PCEHR header CommonPcehrHeader header = PcehrHeaderHelper.CreateHeader(); // Instantiate the client GetDocumentListClient documentListClient = new GetDocumentListClient(new Uri("https://GetDocumentListEndpoint"), cert, cert); // Add server certificate validation callback ServicePointManager.ServerCertificateValidationCallback += ValidateServiceCertificate; // Create a query AdhocQueryBuilder adhocQueryBuilder = new AdhocQueryBuilder(IHI, new[] { DocumentStatus.Approved }); // Reduce documents returned to just SHS from yesterday onwards (Medicines View will always be returned in this query) // as cannot filter on Medicines View as a document adhocQueryBuilder.ClassCode = new List <ClassCodes>(); adhocQueryBuilder.ClassCode.Add(ClassCodes.SharedHealthSummary); adhocQueryBuilder.ServiceStopTimeFrom = new ISO8601DateTime(Convert.ToDateTime(DateTime.Now).AddDays(-1)); // Create the request using the query AdhocQueryRequest queryRequest = adhocQueryBuilder.BuildRequest(); // Initialise repositoryId = ""; documentId = ""; try { // Invoke the service AdhocQueryResponse queryResponse = documentListClient.GetDocumentList(header, queryRequest); if (queryResponse != null && queryResponse.status == "urn:oasis:names:tc:ebxml-regrep:ResponseStatusType:Success" && queryResponse.RegistryObjectList != null) { const string XDS_DOCUMENT_ENTRY_CLASS_CODE = "urn:uuid:41a5887f-8865-4c09-adf7-e362475b143a"; const string XDS_DOCUMENT_ENTRY_UNIQUE_ID = "urn:uuid:2e82c1f6-a085-4c72-9da3-8640a32e42ab"; const string NCTIS_CLASS_CODE_MEDS_VIEW = "100.32002"; //Loop through responses foreach (var entry in queryResponse.RegistryObjectList.ExtrinsicObject) { var classification = entry.Classification.FirstOrDefault(o => o.classificationScheme == XDS_DOCUMENT_ENTRY_CLASS_CODE); if (classification != null && classification.nodeRepresentation == NCTIS_CLASS_CODE_MEDS_VIEW) { // Get Values var repid = entry.Slot.FirstOrDefault(o => o.name == "repositoryUniqueId"); var docId = entry.ExternalIdentifier.FirstOrDefault(o => o.identificationScheme == XDS_DOCUMENT_ENTRY_UNIQUE_ID); // Set Values repositoryId = (repid != null ? repid.ValueList.Value[0] : ""); documentId = (docId != null ? docId.value : ""); break; } } } return(true); } catch (FaultException e) { // Handle any errors return(false); } }
public void Sample() { // NASH certificate should be used here, NOT the HI certificate the NASH certificate can be found in the NASH PKI Test Kit // certificate needs to be installed in the right place // The "Issue To" field of a NASH certificate looks like general (or something different)."HPI-O".electronichealth.net.au // "Serial Number" can be found in the details once the certificate is installed.e.g. in Windows, certificates can be found in Certs.msc // Obtain the certificate for use with TLS and signing X509Certificate2 cert = X509CertificateUtil.GetCertificate( "Serial Number", X509FindType.FindBySerialNumber, StoreName.My, StoreLocation.CurrentUser, true ); // Create PCEHR header CommonPcehrHeader header = PcehrHeaderHelper.CreateHeader(); // Override this value to the current patient's IHI. header.IhiNumber = "IHI"; // Instantiate the client // SVT endpoint is "https://b2b.ehealthvendortest.health.gov.au/getDocumentList" // production endpoint is "https://services.ehealth.gov.au/getDocumentList" GetDocumentListClient documentListClient = new GetDocumentListClient(new Uri("https://GetDocumentListEndpoint"), cert, cert); // Add server certificate validation callback ServicePointManager.ServerCertificateValidationCallback += ValidateServiceCertificate; // Create a query AdhocQueryBuilder adhocQueryBuilder = new AdhocQueryBuilder("patient IHI", new[] { DocumentStatus.Approved }); // To further filter documents, build on the adhocQueryBuilder helper functions // For example, filtering on document type // adhocQueryBuilder.ClassCode = new List<ClassCodes>() {ClassCodes.DischargeSummary}; // See Table 3 XDSDocumentEntry Document Type and Class Code value set from // the Document Exchange Service Technical Service Specification // Create the request using the query AdhocQueryRequest queryRequest = adhocQueryBuilder.BuildRequest(); try { // Invoke the service AdhocQueryResponse queryResponse = documentListClient.GetDocumentList(header, queryRequest); // Process data into a more simple model XdsRecord[] data = XdsMetadataHelper.ProcessXdsMetadata(queryResponse.RegistryObjectList.ExtrinsicObject); // For displaying the data in a list foreach (var row in data) { // Convert dates from UTC to local time //row.creationTimeUTC.ToLocalTime(); //row.serviceStopTimeUTC.ToLocalTime(); // Document name //row.classCodeDisplayName // Organisation //row.authorInstitution.institutionName // Organisation Type //row.healthcareFacilityTypeCodeDisplayName // Identifiers to retrieve the document //row.repositoryUniqueId //row.documentId } // Get the soap request and response string soapRequest = documentListClient.SoapMessages.SoapRequest; string soapResponse = documentListClient.SoapMessages.SoapResponse; } catch (FaultException e) { // Handle any errors } }