/// <summary> /// Perform an australian street address search on the ConsumerSearchIHI service. /// </summary> /// <param name="request"> /// The search criteria. The following fields are expected: /// <list type="bullet"> /// <item><description>familyName (Mandatory)</description></item> /// <item><description>givenName (Optional)</description></item> /// <item><description>dateOfBirth (Mandatory)</description></item> /// <item><description>sex (Mandatory)</description></item> /// <item> /// <description><b>australianStreetAddress</b> (Mandatory) /// <list type="bullet"> /// <item> /// <description><b>unitGroup</b> (Optional) /// <list type="bullet"> /// <item><description>unitType (Mandatory)</description></item> /// <item><description>unitNumber (Optional)</description></item> /// </list> /// </description> /// </item> /// <item> /// <description><b>levelGroup</b> (Optional) /// <list type="bullet"> /// <item><description>levelType (Mandatory)</description></item> /// <item><description>levelNumber (Optional)</description></item> /// </list> /// </description> /// </item> /// <item><description>addressSiteName (Optional)</description></item> /// <item><description>streetNumber (Optional)</description></item> /// <item><description>lotNumber (Optional)</description></item> /// <item><description>streetName (Mandatory)</description></item> /// <item><description>streetType (Conditional on if streetTypeSpecified is set to true)</description></item> /// <item><description>streetTypeSpecified (Mandatory)</description></item> /// <item><description>streetSuffix (Conditional on if streetSuffixSpecified is set to true)</description></item> /// <item><description>streetSuffixSpecified (Mandatory)</description></item> /// <item><description>suburb (Mandatory)</description></item> /// <item><description>state (Mandatory)</description></item> /// <item><description>postcode (Mandatory)</description></item> /// </list> /// </description> /// </item> /// </list> /// All other fields are to be null. /// </param> /// <returns> /// A searchIHIResponse instance containing: /// <list type="bullet"> /// <item><description>IHI number</description></item> /// <item><description>IHI record status</description></item> /// <item><description>IHI status</description></item> /// <item><description>Family name</description></item> /// <item><description>Given name (if entered in search criteria)</description></item> /// <item><description>Date of birth</description></item> /// <item><description>Sex</description></item> /// </list> /// </returns> public searchIHIResponse AustralianStreetAddressSearch(searchIHI request) { Validation.ValidateArgumentRequired("request", request); Validation.ValidateArgumentRequired("request.familyName", request.familyName); Validation.ValidateDateTime("request.dateOfBirth", request.dateOfBirth); // Check australian street address Dictionary <string, object> c1 = new Dictionary <string, object>(); c1.Add("request.australianStreetAddress.streetNumber", request.australianStreetAddress.streetNumber); c1.Add("request.australianStreetAddress.lotNumber", request.australianStreetAddress.lotNumber); Validation.ValidateArgumentAtLeastOneRequired(c1); Validation.ValidateArgumentRequired("request.australianStreetAddress", request.australianStreetAddress); Validation.ValidateArgumentRequired("request.australianStreetAddress.postcode", request.australianStreetAddress.postcode); Validation.ValidateArgumentRequired("request.australianStreetAddress.suburb", request.australianStreetAddress.suburb); Validation.ValidateArgumentRequired("request.australianStreetAddress.streetName", request.australianStreetAddress.streetName); Validation.ValidateArgumentNotAllowed("request.medicareCardNumber", request.medicareCardNumber); Validation.ValidateArgumentNotAllowed("request.medicareIRN", request.medicareIRN); Validation.ValidateArgumentNotAllowed("request.ihiNumber", request.ihiNumber); Validation.ValidateArgumentNotAllowed("request.australianPostalAddress", request.australianPostalAddress); Validation.ValidateArgumentNotAllowed("request.dvaFileNumber", request.dvaFileNumber); Validation.ValidateArgumentNotAllowed("request.history", request.historySpecified); Validation.ValidateArgumentNotAllowed("request.internationalAddress", request.internationalAddress); return(IHISearch(request)); }
/// <summary> /// Perform a basic medicare search on the ConsumerSearchIHI service. /// </summary> /// <param name="request"> /// The search criteria. The following fields are expected: /// <list type="bullet"> /// <item><description>medicareCardNumber (Mandatory)</description></item> /// <item><description>medicareIRN (Optional)</description></item> /// <item><description>familyName (Mandatory)</description></item> /// <item><description>givenName (Optional)</description></item> /// <item><description>dateOfBirth (Mandatory)</description></item> /// <item><description>sex (Mandatory)</description></item> /// </list> /// All other fields are to be null. /// </param> /// <returns> /// A searchIHIResponse instance containing: /// <list type="bullet"> /// <item><description>Medicare card number</description></item> /// <item><description>Medicare IRN</description></item> /// <item><description>IHI number</description></item> /// <item><description>IHI record status</description></item> /// <item><description>IHI status</description></item> /// <item><description>Family name</description></item> /// <item><description>Given name (if entered in search criteria)</description></item> /// <item><description>Date of birth</description></item> /// <item><description>Sex</description></item> /// </list> /// </returns> public searchIHIResponse BasicMedicareSearch(searchIHI request) { Validation.ValidateArgumentRequired("request.medicareCardNumber", request.medicareCardNumber); Validation.ValidateArgumentRequired("request.familyName", request.familyName); Validation.ValidateDateTime("request.dateOfBirth", request.dateOfBirth); Validation.ValidateArgumentNotAllowed("request.ihiNumber", request.ihiNumber); Validation.ValidateArgumentNotAllowed("request.dvaFileNumber", request.dvaFileNumber); Validation.ValidateArgumentNotAllowed("request.australianPostalAddress", request.australianPostalAddress); Validation.ValidateArgumentNotAllowed("request.australianStreetAddress", request.australianStreetAddress); Validation.ValidateArgumentNotAllowed("request.internationalAddress", request.internationalAddress); return(IHISearch(request)); }
/// <summary> /// Perform the IHI service call. /// </summary> /// <param name="request">The search criteria in a searchIHI object.</param> /// <returns>The IHI search results.</returns> private searchIHIResponse IHISearch(searchIHI request) { searchIHIRequest envelope = new searchIHIRequest(); envelope.searchIHI = request; envelope.product = product; envelope.user = user; envelope.hpio = hpio; envelope.signature = new SignatureContainerType(); envelope.timestamp = new TimestampType() { created = DateTime.Now.ToUniversalTime(), expires = DateTime.Now.AddDays(30).ToUniversalTime(), expiresSpecified = true }; // Set LastSoapRequestTimestamp LastSoapRequestTimestamp = envelope.timestamp; searchIHIResponse1 response1 = null; try { response1 = searchIhiClient.searchIHI(envelope); } catch (Exception ex) { // Catch generic FaultException and call helper to throw a more specific fault // (FaultException<ServiceMessagesType> FaultHelper.ProcessAndThrowFault <ServiceMessagesType>(ex); } if (response1 != null && response1.searchIHIResponse != null) { return(response1.searchIHIResponse); } else { throw new ApplicationException(Properties.Resources.UnexpectedServiceResponse); } }
/// <summary> /// Perform an international address search on the ConsumerSearchIHI service. /// </summary> /// <param name="request"> /// The search criteria. The following fields are expected: /// <list type="bullet"> /// <item><description>familyName (Mandatory)</description></item> /// <item><description>givenName (Optional)</description></item> /// <item><description>dateOfBirth (Mandatory)</description></item> /// <item><description>sex (Mandatory)</description></item> /// <item> /// <description><b>internationalAddress</b> (Mandatory) /// <list type="bullet"> /// <item><description>internationalAddressLine (Mandatory)</description></item> /// <item><description>internationalStateProvince (Mandatory)</description></item> /// <item><description>internationalPostcode (Mandatory)</description></item> /// <item><description>country (Mandatory)</description></item> /// </list> /// </description> /// </item> /// </list> /// All other fields are to be null. /// </param> /// <returns> /// A searchIHIResponse instance containing: /// <list type="bullet"> /// <item><description>IHI number</description></item> /// <item><description>IHI record status</description></item> /// <item><description>IHI status</description></item> /// <item><description>Family name</description></item> /// <item><description>Given name (if entered in search criteria)</description></item> /// <item><description>Date of birth</description></item> /// <item><description>Sex</description></item> /// </list> /// </returns> public searchIHIResponse InternationalAddressSearch(searchIHI request) { Validation.ValidateArgumentRequired("request", request); Validation.ValidateArgumentRequired("request.familyName", request.familyName); Validation.ValidateDateTime("request.dateOfBirth", request.dateOfBirth); // Check international address Validation.ValidateArgumentRequired("request.internationalAddress", request.internationalAddress); Validation.ValidateArgumentRequired("request.internationalAddress.internationalStateProvince", request.internationalAddress.internationalStateProvince); Validation.ValidateArgumentRequired("request.internationalAddress.internationalPostcode", request.internationalAddress.internationalPostcode); Validation.ValidateArgumentRequired("request.internationalAddress.internationalAddressLine", request.internationalAddress.internationalAddressLine); Validation.ValidateArgumentNotAllowed("request.medicareCardNumber", request.medicareCardNumber); Validation.ValidateArgumentNotAllowed("request.medicareIRN", request.medicareIRN); Validation.ValidateArgumentNotAllowed("request.ihiNumber", request.ihiNumber); Validation.ValidateArgumentNotAllowed("request.australianPostalAddress", request.australianPostalAddress); Validation.ValidateArgumentNotAllowed("request.australianStreetAddress", request.australianStreetAddress); Validation.ValidateArgumentNotAllowed("request.dvaFileNumber", request.dvaFileNumber); return(IHISearch(request)); }
/// <summary> /// Perform an australian unstructured street address search on the ConsumerSearchIHI service. /// </summary> /// <param name="request"> /// The search criteria. The following fields are expected: /// <list type="bullet"> /// <item><description>familyName (Mandatory)</description></item> /// <item><description>dateOfBirth (Mandatory)</description></item> /// <item><description>sex (Mandatory)</description></item> /// <item> /// <description><b>australianUnstructuredStreetAddress</b> (Mandatory) /// <list type="bullet"> /// <item><description>suburb (Mandatory)</description></item> /// <item><description>state (Mandatory)</description></item> /// <item><description>postcode (Mandatory)</description></item> /// <item><description>addressLineOne (Conditional)</description></item> /// <item><description>addressLineTwo (Conditional)</description></item> /// </list> /// </description> /// </item> /// </list> /// All other fields are to be null. /// </param> /// <returns> /// A searchIHIResponse instance containing: /// <list type="bullet"> /// <item><description>IHI number</description></item> /// <item><description>IHI record status</description></item> /// <item><description>IHI status</description></item> /// <item><description>Family name</description></item> /// <item><description>Given name (if entered in search criteria)</description></item> /// <item><description>Date of birth</description></item> /// <item><description>Sex</description></item> /// </list> /// </returns> public searchIHIResponse AustralianUnstructuredAddressSearch(searchIHI request) { Validation.ValidateArgumentRequired("request", request); Validation.ValidateArgumentRequired("request.familyName", request.familyName); Validation.ValidateDateTime("request.dateOfBirth", request.dateOfBirth); // Check australian unstructured address Validation.ValidateArgumentRequired("request.australianUnstructuredStreetAddress.suburb", request.australianUnstructuredStreetAddress.suburb); Validation.ValidateArgumentRequired("request.australianUnstructuredStreetAddress.state", request.australianUnstructuredStreetAddress.state); Validation.ValidateArgumentRequired("request.australianUnstructuredStreetAddress.postcode", request.australianUnstructuredStreetAddress.postcode); Validation.ValidateArgumentNotAllowed("request.medicareCardNumber", request.medicareCardNumber); Validation.ValidateArgumentNotAllowed("request.medicareIRN", request.medicareIRN); Validation.ValidateArgumentNotAllowed("request.ihiNumber", request.ihiNumber); Validation.ValidateArgumentNotAllowed("request.australianPostalAddress", request.australianPostalAddress); Validation.ValidateArgumentNotAllowed("request.dvaFileNumber", request.dvaFileNumber); Validation.ValidateArgumentNotAllowed("request.internationalAddress", request.internationalAddress); Validation.ValidateArgumentNotAllowed("request.australianStreetAddress", request.australianStreetAddress); return(IHISearch(request)); }
private void IhiSeachOrValidateQuery() { // ------------------------------------------------------------------------------ // Set up // ------------------------------------------------------------------------------ // Set up the request searchIHI request = new searchIHI(); SetRequestDataForQuery(IhiSearchValidateOutcome, request); // Obtain the certificate by serial number string CertSerial = RemoveWhitespace(IhiSearchValidateConfig.CertificateSerialNumber); X509Certificate2 tlsCert = GetCertificate( IhiSearchValidateConfig.CertificateSerialNumber, //The serial number is commonly seen with spaces "06 3c 23' yet we don't want then in this call. X509FindType.FindBySerialNumber, StoreName.My, StoreLocation.LocalMachine, true ); //Test that we found a certificate, there will be a error message write for return if it was not found if (tlsCert != null) { // The same certificate is used for signing the request. // This certificate will be different to TLS cert for some operations. X509Certificate2 signingCert = tlsCert; // Set up client product information (PCIN) // Values below should be provided by Medicare Pyro.ADHA.mcaR3.ConsumerSearchIHI.ProductType product = new Pyro.ADHA.mcaR3.ConsumerSearchIHI.ProductType() { platform = System.Environment.OSVersion.ToString(), // Can be any value productName = IhiSearchValidateConfig.ProductName, // Provided by Medicare productVersion = IhiSearchValidateConfig.ProductVersion, // Provided by Medicare vendor = new Pyro.ADHA.mcaR3.ConsumerSearchIHI.QualifiedId() { id = IhiSearchValidateConfig.VendorId, // Provided by Medicare qualifier = IhiSearchValidateConfig.VendorIdQualifier // Provided by Medicare } }; // Set up user identifier details Pyro.ADHA.mcaR3.ConsumerSearchIHI.QualifiedId user = new Pyro.ADHA.mcaR3.ConsumerSearchIHI.QualifiedId() { id = IhiSearchValidateOutcome.RequestData.UserId, // User ID internal to your system qualifier = IhiSearchValidateOutcome.RequestData.UserIdQualifier // Eg: http://ns.yourcompany.com.au/id/yoursoftware/userid/1.0 }; // Set up user HPI-O identifier //The HPI-O is optional and only required if you are setup and using a CSP certificate, in this case you must pass the HPI-O //of the orginisation you are making the call for. Pyro.ADHA.mcaR3.ConsumerSearchIHI.QualifiedId hpio = new Pyro.ADHA.mcaR3.ConsumerSearchIHI.QualifiedId() { id = "9344699237", // HPIO internal to your system qualifier = "http://ns.electronichealth.net.au/id/hi/hpio/1.0" // Eg: http://ns.yourcompany.com.au/id/yoursoftware/userid/1.0 }; // ------------------------------------------------------------------------------ // Client instantiation and invocation // ------------------------------------------------------------------------------ // Instantiate the client ConsumerSearchIHIClient client = new ConsumerSearchIHIClient( new Uri(IhiSearchValidateConfig.HiServiceEndpoint), product, user, null, signingCert, tlsCert); searchIHIResponse ihiResponse = null; try { // Invokes the query based on type if (RequestHasIHINumber || (RequestHasDvaNumber && RequestHasMedicareNumber)) { ihiResponse = client.BasicSearch(request); } if (RequestHasMedicareNumber) { ihiResponse = client.BasicMedicareSearch(request); } if (RequestHasDvaNumber) { ihiResponse = client.BasicDvaSearch(request); } SetResponseDataToReturnData(IhiSearchValidateOutcome, ihiResponse); SetSoapRequestAndResponseData(IhiSearchValidateOutcome, client, ihiResponse); IhiSearchValidateOutcome.SuccessfulQuery = true; } catch (FaultException fex) { IhiSearchValidateOutcome.SuccessfulQuery = false; MessageFault fault = fex.CreateMessageFault(); if (fault.HasDetail) { Pyro.ADHA.mcaR3.ConsumerSearchIHI.ServiceMessagesType error = fault.GetDetail <Pyro.ADHA.mcaR3.ConsumerSearchIHI.ServiceMessagesType>(); // Look at error details in here if (error.serviceMessage.Length > 0) { string returnMessage = error.serviceMessage[0].code + ": " + error.serviceMessage[0].reason; IhiSearchValidateOutcome.QueryMetadata.ErrorMessge = returnMessage; } } } catch (Exception Exec) { IhiSearchValidateOutcome.SuccessfulQuery = false; // If an error is encountered, client.LastSoapResponse often provides a more // detailed description of the error. IhiSearchValidateOutcome.QueryMetadata.ErrorMessge = Exec.Message; SetSoapRequestAndResponseData(IhiSearchValidateOutcome, client, ihiResponse); } finally { // Clean up client.Dispose(); } } }
private void SetRequestDataForQuery(IhiSearchValidateOutcome IhiSearchValidateOutcome, searchIHI request) { RequestHasMedicareNumber = false; RequestHasDvaNumber = false; RequestHasIHINumber = false; if (!String.IsNullOrWhiteSpace(IhiSearchValidateOutcome.RequestData.Given)) { request.givenName = IhiSearchValidateOutcome.RequestData.Given; } if (!String.IsNullOrWhiteSpace(IhiSearchValidateOutcome.RequestData.Family)) { request.familyName = IhiSearchValidateOutcome.RequestData.Family; } if (IhiSearchValidateOutcome.RequestData.Dob.HasValue) { request.dateOfBirth = IhiSearchValidateOutcome.RequestData.Dob.Value; } if (Char.IsLetter(IhiSearchValidateOutcome.RequestData.SexChar)) { request.sex = GetSexTypeByChar(IhiSearchValidateOutcome.RequestData.SexChar); } if (!String.IsNullOrWhiteSpace(IhiSearchValidateOutcome.RequestData.MedicareNumber)) { request.medicareCardNumber = RemoveWhitespace(IhiSearchValidateOutcome.RequestData.MedicareNumber); RequestHasMedicareNumber = true; } if (!String.IsNullOrWhiteSpace(IhiSearchValidateOutcome.RequestData.MedicareIRN)) { request.medicareIRN = IhiSearchValidateOutcome.RequestData.MedicareIRN; } if (!String.IsNullOrWhiteSpace(IhiSearchValidateOutcome.RequestData.DVANumber)) { request.dvaFileNumber = RemoveWhitespace(IhiSearchValidateOutcome.RequestData.DVANumber); RequestHasDvaNumber = true; } if (!String.IsNullOrWhiteSpace(IhiSearchValidateOutcome.RequestData.IHINumber)) { request.ihiNumber = IhiNamespace + RemoveWhitespace(IhiSearchValidateOutcome.RequestData.IHINumber); RequestHasIHINumber = true; } }
public void Sample() { // ------------------------------------------------------------------------------ // Set up // ------------------------------------------------------------------------------ // Obtain the certificate by serial number X509Certificate2 tlsCert = X509CertificateUtil.GetCertificate( "Serial Number", X509FindType.FindBySerialNumber, StoreName.My, StoreLocation.CurrentUser, true ); // The same certificate is used for signing the request. // This certificate will be different to TLS cert for some operations. X509Certificate2 signingCert = tlsCert; // Set up client product information (PCIN) // Values below should be provided by Medicare ProductType product = new ProductType() { platform = "Your system platform (Eg. Windows XP SP3)", // Can be any value productName = "Product Name", // Provided by Medicare productVersion = "Product Version", // Provided by Medicare vendor = new QualifiedId() { id = "Vendor Id", // Provided by Medicare qualifier = "Vendor Qualifier" // Provided by Medicare } }; // Set up user identifier details QualifiedId user = new QualifiedId() { id = "User Id", // User ID internal to your system qualifier = "http://<anything>/id/<anything>/userid/1.0" // Eg: http://ns.yourcompany.com.au/id/yoursoftware/userid/1.0 }; // Set up user identifier details QualifiedId hpio = new QualifiedId() { id = "HPIO", // HPIO internal to your system qualifier = "http://<anything>/id/<anything>/hpio/1.0" // Eg: http://ns.yourcompany.com.au/id/yoursoftware/userid/1.0 }; // ------------------------------------------------------------------------------ // Client instantiation and invocation // ------------------------------------------------------------------------------ // Instantiate the client ConsumerSearchIHIClient client = new ConsumerSearchIHIClient( new Uri("https://HIServiceEndpoint"), product, user, hpio, signingCert, tlsCert); // Set up the request searchIHI request = new searchIHI(); request.ihiNumber = "http://ns.electronichealth.net.au/id/hi/ihi/1.0/8003601240022579"; request.dateOfBirth = DateTime.Parse("12 Dec 2002"); request.givenName = "Jessica"; request.familyName = "Wood"; request.sex = SexType.F; try { // Invokes a basic search searchIHIResponse ihiResponse = client.BasicSearch(request); } catch (Exception ex) { // If an error is encountered, client.LastSoapResponse often provides a more // detailed description of the error. string soapResponse = client.SoapMessages.SoapResponse; } }
/// <summary> /// Adds a basic medicare search to the batch search. /// </summary> /// <param name="searches">The current list of searches for the batch search.</param> /// <param name="identifier">A 36 character GUID which identifies this search.</param> /// <param name="search"> /// The search criteria. The following fields are expected: /// <list type="bullet"> /// <item><description>medicareCardNumber (Mandatory)</description></item> /// <item><description>medicareIRN (Optional)</description></item> /// <item><description>familyName (Mandatory)</description></item> /// <item><description>givenName (Optional)</description></item> /// <item><description>dateOfBirth (Mandatory)</description></item> /// <item><description>sex (Mandatory)</description></item> /// </list> /// All other fields are to be null. For the fields returned by this search, see return value of <see cref="Nehta.VendorLibrary.HI.ConsumerSearchIHIClient.BasicMedicareSearch"/>. /// </param> public static void AddBasicMedicareSearch(this List <SearchIHIRequestType> searches, string identifier, searchIHI search) { Validation.ValidateStringLength("identifier", identifier, 36, true); Validation.ValidateArgumentRequired("search.medicareCardNumber", search.medicareCardNumber); Validation.ValidateArgumentRequired("search.familyName", search.familyName); Validation.ValidateDateTime("search.dateOfBirth", search.dateOfBirth); Validation.ValidateArgumentNotAllowed("search.ihiNumber", search.ihiNumber); Validation.ValidateArgumentNotAllowed("search.dvaFileNumber", search.dvaFileNumber); Validation.ValidateArgumentNotAllowed("search.australianPostalAddress", search.australianPostalAddress); Validation.ValidateArgumentNotAllowed("search.australianStreetAddress", search.australianStreetAddress); Validation.ValidateArgumentNotAllowed("search.history", search.historySpecified); Validation.ValidateArgumentNotAllowed("search.internationalAddress", search.internationalAddress); searches.Add(new SearchIHIRequestType() { searchIHI = search, requestIdentifier = identifier }); }
/// <summary> /// Adds an australian street address search to the batch search. /// </summary> /// <param name="searches">The current list of searches for the batch search.</param> /// <param name="identifier">A 36 character GUID which identifies this search.</param> /// <param name="search"> /// The search criteria. The following fields are expected: /// <list type="bullet"> /// <item><description>familyName (Mandatory)</description></item> /// <item><description>givenName (Optional)</description></item> /// <item><description>dateOfBirth (Mandatory)</description></item> /// <item><description>sex (Mandatory)</description></item> /// <item> /// <description><b>australianStreetAddress</b> (Mandatory) /// <list type="bullet"> /// <item> /// <description><b>unitGroup</b> (Optional) /// <list type="bullet"> /// <item><description>unitType (Mandatory)</description></item> /// <item><description>unitNumber (Optional)</description></item> /// </list> /// </description> /// </item> /// <item> /// <description><b>levelGroup</b> (Optional) /// <list type="bullet"> /// <item><description>levelType (Mandatory)</description></item> /// <item><description>levelNumber (Optional)</description></item> /// </list> /// </description> /// </item> /// <item><description>addressSiteName (Optional)</description></item> /// <item><description>streetNumber (Optional)</description></item> /// <item><description>lotNumber (Optional)</description></item> /// <item><description>streetName (Mandatory)</description></item> /// <item><description>streetType (Conditional on if streetTypeSpecified is set to true)</description></item> /// <item><description>streetTypeSpecified (Mandatory)</description></item> /// <item><description>streetSuffix (Conditional on if streetSuffixSpecified is set to true)</description></item> /// <item><description>streetSuffixSpecified (Mandatory)</description></item> /// <item><description>suburb (Mandatory)</description></item> /// <item><description>state (Mandatory)</description></item> /// <item><description>postcode (Mandatory)</description></item> /// </list> /// </description> /// </item> /// </list> /// All other fields are to be null. For the fields returned by this search, see return value of <see cref="Nehta.VendorLibrary.HI.ConsumerSearchIHIClient.AustralianStreetAddressSearch"/>. /// </param> public static void AddAustralianStreetAddressSearch(this List <SearchIHIRequestType> searches, string identifier, searchIHI search) { Validation.ValidateStringLength("identifier", identifier, 36, true); Validation.ValidateArgumentRequired("search", search); Validation.ValidateArgumentRequired("search.familyName", search.familyName); Validation.ValidateDateTime("search.dateOfBirth", search.dateOfBirth); // Check australian street address Dictionary <string, object> c1 = new Dictionary <string, object>(); c1.Add("search.australianStreetAddress.streetNumber", search.australianStreetAddress.streetNumber); c1.Add("search.australianStreetAddress.lotNumber", search.australianStreetAddress.lotNumber); Validation.ValidateArgumentAtLeastOneRequired(c1); Validation.ValidateArgumentRequired("search.australianStreetAddress", search.australianStreetAddress); Validation.ValidateArgumentRequired("search.australianStreetAddress.postcode", search.australianStreetAddress.postcode); Validation.ValidateArgumentRequired("search.australianStreetAddress.suburb", search.australianStreetAddress.suburb); Validation.ValidateArgumentRequired("search.australianStreetAddress.streetName", search.australianStreetAddress.streetName); Validation.ValidateArgumentNotAllowed("search.medicareCardNumber", search.medicareCardNumber); Validation.ValidateArgumentNotAllowed("search.medicareIRN", search.medicareIRN); Validation.ValidateArgumentNotAllowed("search.ihiNumber", search.ihiNumber); Validation.ValidateArgumentNotAllowed("search.australianPostalAddress", search.australianPostalAddress); Validation.ValidateArgumentNotAllowed("search.dvaFileNumber", search.dvaFileNumber); Validation.ValidateArgumentNotAllowed("search.history", search.historySpecified); Validation.ValidateArgumentNotAllowed("search.internationalAddress", search.internationalAddress); searches.Add(new SearchIHIRequestType() { searchIHI = search, requestIdentifier = identifier }); }