// Copyright 2019 Google LLC. // // 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. // syntax = "proto3"; package google.cloud.talent.v4beta1; import "google/api/annotations.proto"; import "google/cloud/talent/v4beta1/common.proto"; import "google/cloud/talent/v4beta1/job.proto"; import "google/cloud/talent/v4beta1/profile.proto"; import "google/protobuf/duration.proto"; import "google/protobuf/timestamp.proto"; import "google/protobuf/wrappers.proto"; import "google/type/date.proto"; import "google/type/latlng.proto"; import "google/type/timeofday.proto"; option go_package = "google.golang.org/genproto/googleapis/cloud/talent/v4beta1;talent"; option java_multiple_files = true; option java_outer_classname = "FiltersProto"; option java_package = "com.google.cloud.talent.v4beta1"; option objc_class_prefix = "CTS"; // Input only. // // The query required to perform a search query. message JobQuery { // Optional. // // The query string that matches against the job title, description, and // location fields. // // The maximum number of allowed characters is 255. string query = 1; // Optional. // // This filter specifies the company entities to search against. // // If a value isn't specified, jobs are searched for against all // companies. // // If multiple values are specified, jobs are searched against the // companies specified. // // The format is "projects/{project_id}/companies/{company_id}", for example, // "projects/api-test-project/companies/foo". // // At most 20 company filters are allowed. repeated string company_names = 2; // Optional. // // The location filter specifies geo-regions containing the jobs to // search against. See // [LocationFilter][google.cloud.talent.v4beta1.LocationFilter] for more // information. // // If a location value isn't specified, jobs fitting the other search // criteria are retrieved regardless of where they're located. // // If multiple values are specified, jobs are retrieved from any of the // specified locations. If different values are specified for the // [LocationFilter.distance_in_miles][google.cloud.talent.v4beta1.LocationFilter.distance_in_miles] // parameter, the maximum provided distance is used for all locations. // // At most 5 location filters are allowed. repeated LocationFilter location_filters = 3; // Optional. // // The category filter specifies the categories of jobs to search against. // See [Category][] for more information. // // If a value isn't specified, jobs from any category are searched against. // // If multiple values are specified, jobs from any of the specified // categories are searched against. repeated JobCategory job_categories = 4; // Optional. // // Allows filtering jobs by commute time with different travel methods (for // example, driving or public transit). Note: This only works with [COMMUTE // MODE][Mode#COMMUTE]. When specified, [JobQuery.location_filters] is // ignored. // // Currently we don't support sorting by commute time. CommuteFilter commute_filter = 5; // Optional. // // This filter specifies the exact [company display // name][Company.display_name] of the jobs to search against. // // If a value isn't specified, jobs within the search results are // associated with any company. // // If multiple values are specified, jobs within the search results may be // associated with any of the specified companies. // // At most 20 company display name filters are allowed. repeated string company_display_names = 6; // Optional. // // This search filter is applied only to // [Job.compensation_info][google.cloud.talent.v4beta1.Job.compensation_info]. // For example, if the filter is specified as "Hourly job with per-hour // compensation > $15", only jobs meeting these criteria are searched. If a // filter isn't defined, all open jobs are searched. CompensationFilter compensation_filter = 7; // Optional. // // This filter specifies a structured syntax to match against the // [Job.custom_attributes][google.cloud.talent.v4beta1.Job.custom_attributes] // marked as `filterable`. // // The syntax for this expression is a subset of SQL syntax. // // Supported operators are: `=`, `!=`, `<`, `<=`, `>`, and `>=` where the // left of the operator is a custom field key and the right of the operator // is a number or a quoted string. You must escape backslash (\\) and // quote (\") characters. // // Supported functions are `LOWER([field_name])` to // perform a case insensitive match and `EMPTY([field_name])` to filter on the // existence of a key. // // Boolean expressions (AND/OR/NOT) are supported up to 3 levels of // nesting (for example, "((A AND B AND C) OR NOT D) AND E"), a maximum of 100 // comparisons or functions are allowed in the expression. The expression // must be < 3000 bytes in length. // // Sample Query: // `(LOWER(driving_license)="class \"a\"" OR EMPTY(driving_license)) AND // driving_years > 10` string custom_attribute_filter = 8; // Optional. // // This flag controls the spell-check feature. If false, the // service attempts to correct a misspelled query, // for example, "enginee" is corrected to "engineer". // // Defaults to false: a spell check is performed. bool disable_spell_check = 9; // Optional. // // The employment type filter specifies the employment type of jobs to // search against, such as // [EmploymentType.FULL_TIME][google.cloud.talent.v4beta1.EmploymentType.FULL_TIME]. // // If a value isn't specified, jobs in the search results includes any // employment type. // // If multiple values are specified, jobs in the search results include // any of the specified employment types. repeated EmploymentType employment_types = 10; // Optional. // // This filter specifies the locale of jobs to search against, // for example, "en-US". // // If a value isn't specified, the search results can contain jobs in any // locale. // // // Language codes should be in BCP-47 format, such as "en-US" or "sr-Latn". // For more information, see // [Tags for Identifying Languages](https://tools.ietf.org/html/bcp47). // // At most 10 language code filters are allowed. repeated string language_codes = 11; // Optional. // // Jobs published within a range specified by this filter are searched // against. TimestampRange publish_time_range = 12; // Optional. // // This filter specifies a list of job names to be excluded during search. // // At most 200 excluded job names are allowed. repeated string excluded_jobs = 13; } // Filters to apply when performing the search query. message ProfileQuery { // Optional. // // Keywords to match any text fields of profiles. // // For example, "software engineer in Palo Alto". string query = 1; // Optional. // // The location filter specifies geo-regions containing the profiles to // search against. // // If a location filter isn't specified, profiles fitting the other search // criteria are retrieved regardless of where they're located. // // If // [LocationFilter.negated][google.cloud.talent.v4beta1.LocationFilter.negated] // is specified, the result doesn't contain profiles from that location. // // For example, search for profiles with addresses in "New York City". repeated LocationFilter location_filters = 2; // Optional. // // Job title filter specifies job titles of profiles to match on. // // If a job title isn't specified, profiles with any titles are retrieved. // // If multiple values are specified, profiles are retrieved with any of the // specified job titles. // // If // [JobTitleFilter.negated][google.cloud.talent.v4beta1.JobTitleFilter.negated] // is specified, the result won't contain profiles with the job titles. // // For example, search for profiles with a job title "Product Manager". repeated JobTitleFilter job_title_filters = 3; // Optional. // // Employer filter specifies employers of profiles to match on. // // If an employer filter isn't specified, profiles with any employers are // retrieved. // // If multiple employer filters are specified, profiles with any matching // employers are retrieved. // // If // [EmployerFilter.negated][google.cloud.talent.v4beta1.EmployerFilter.negated] // is specified, the result won't contain profiles that match the employers. // // For example, search for profiles that have working experience at "Google // LLC". repeated EmployerFilter employer_filters = 4; // Optional. // // Education filter specifies education of profiles to match on. // // If an education filter isn't specified, profiles with any education are // retrieved. // // If multiple education filters are specified, profiles that match any // education filters are retrieved. // // If // [EducationFilter.negated][google.cloud.talent.v4beta1.EducationFilter.negated] // is specified, the result won't contain profiles that match the educations. // // For example, search for profiles with a master degree. repeated EducationFilter education_filters = 5; // Optional. // // Skill filter specifies skill of profiles to match on. // // If a skill filter isn't specified, profiles with any skills are retrieved. // // If multiple skill filters are specified, profiles that match any skill // filters are retrieved. // // If [SkillFilter.negated][google.cloud.talent.v4beta1.SkillFilter.negated] // is specified, the result won't contain profiles that match the skills. // // For example, search for profiles that have "Java" and "Python" in skill // list. repeated SkillFilter skill_filters = 6; // Optional. // // Work experience filter specifies the total working experience of profiles // to match on. // // If a work experience filter isn't specified, profiles with any // professional experience are retrieved. // // If multiple work experience filters are specified, profiles that match any // work experience filters are retrieved. // // For example, search for profiles with 10 years of work experience. repeated WorkExperienceFilter work_experience_filter = 7; // Optional. // // Time filter specifies the create/update timestamp of the profiles to match // on. // // For example, search for profiles created since "2018-1-1". repeated TimeFilter time_filters = 8; // Optional. // // The hirable filter specifies the profile's hirable status to match on. google.protobuf.BoolValue hirable_filter = 9; // Optional. // // The application date filters specify application date ranges to match on. repeated ApplicationDateFilter application_date_filters = 10; // Optional. // // The application outcome reason filters specify the reasons for outcome of // the job application. repeated ApplicationOutcomeReasonFilter application_outcome_reason_filters = 11; // Optional. // // The application last stage filters specify the last stage of job // application. repeated ApplicationLastStageFilter application_last_stage_filters = 12; // Optional. // // The application job filters specify the job applied for in the application. repeated ApplicationJobFilter application_job_filters = 13; // Optional. // // The application status filters specify the status of job application. repeated ApplicationStatusFilter application_status_filters = 14; // Optional. // // This filter specifies a structured syntax to match against the // [Profile.custom_attributes][google.cloud.talent.v4beta1.Profile.custom_attributes] // that are marked as `filterable`. // // The syntax for this expression is a subset of Google SQL syntax. // // Supported operators are: =, != where the left of the operator is a custom // field key and the right of the operator is a string (surrounded by quotes) // value. // // Supported functions are LOWER() to // perform case insensitive match and EMPTY() to filter on the // existence of a key. // // Boolean expressions (AND/OR/NOT) are supported up to 3 levels of // nesting (for example "((A AND B AND C) OR NOT D) AND E"), and there can be // a maximum of 50 comparisons/functions in the expression. The expression // must be < 2000 characters in length. // // Sample Query: // (key1 = "TEST" OR LOWER(key1)="test" OR NOT EMPTY(key1)) string custom_field_filter = 15; } // Input only. // // Geographic region of the search. message LocationFilter { // Specify whether including telecommute jobs. enum TelecommutePreference { // Default value if the telecommute preference isn't specified. TELECOMMUTE_PREFERENCE_UNSPECIFIED = 0; // Exclude telecommute jobs. TELECOMMUTE_EXCLUDED = 1; // Allow telecommute jobs. TELECOMMUTE_ALLOWED = 2; } // Optional. // // The address name, such as "Mountain View" or "Bay Area". string address = 1; // Optional. // // CLDR region code of the country/region of the address. This is used // to address ambiguity of the user-input location, for example, "Liverpool" // against "Liverpool, NY, US" or "Liverpool, UK". // // Set this field if all the jobs to search against are from a same region, // or jobs are world-wide, but the job seeker is from a specific region. // // See http://cldr.unicode.org/ and // http://www.unicode.org/cldr/charts/30/supplemental/territory_information.html // for details. Example: "CH" for Switzerland. string region_code = 2; // Optional. // // The latitude and longitude of the geographic center from which to // search. This field's ignored if `address` is provided. google.type.LatLng lat_lng = 3; // Optional. // // // The distance_in_miles is applied when the location being searched for is // identified as a city or smaller. When the location being searched for is a // state or larger, this field is ignored. double distance_in_miles = 4; // Optional. // // Allows the client to return jobs without a // set location, specifically, telecommuting jobs (telecomuting is considered // by the service as a special location. // [Job.posting_region][google.cloud.talent.v4beta1.Job.posting_region] // indicates if a job permits telecommuting. If this field is set to // [TelecommutePreference.TELECOMMUTE_ALLOWED][google.cloud.talent.v4beta1.LocationFilter.TelecommutePreference.TELECOMMUTE_ALLOWED], // telecommuting jobs are searched, and // [address][google.cloud.talent.v4beta1.LocationFilter.address] and // [lat_lng][google.cloud.talent.v4beta1.LocationFilter.lat_lng] are ignored. // If not set or set to // [TelecommutePreference.TELECOMMUTE_EXCLUDED][google.cloud.talent.v4beta1.LocationFilter.TelecommutePreference.TELECOMMUTE_EXCLUDED], // telecommute job are not searched. // // This filter can be used by itself to search exclusively for telecommuting // jobs, or it can be combined with another location // filter to search for a combination of job locations, // such as "Mountain View" or "telecommuting" jobs. However, when used in // combination with other location filters, telecommuting jobs can be // treated as less relevant than other jobs in the search response. TelecommutePreference telecommute_preference = 5; // Optional. // // Whether to apply negation to the filter so profiles matching the filter // are excluded. // // Currently only supported in profile search. bool negated = 6; } // Input only. // // Filter on job compensation type and amount. message CompensationFilter { // Specify the type of filtering. enum FilterType { // Filter type unspecified. Position holder, INVALID, should never be used. FILTER_TYPE_UNSPECIFIED = 0; // Filter by `base compensation entry's` unit. A job is a match if and // only if the job contains a base CompensationEntry and the base // CompensationEntry's unit matches provided // [units][google.cloud.talent.v4beta1.CompensationFilter.units]. Populate // one or more // [units][google.cloud.talent.v4beta1.CompensationFilter.units]. // // See // [CompensationInfo.CompensationEntry][google.cloud.talent.v4beta1.CompensationInfo.CompensationEntry] // for definition of base compensation entry. UNIT_ONLY = 1; // Filter by `base compensation entry's` unit and amount / range. A job // is a match if and only if the job contains a base CompensationEntry, and // the base entry's unit matches provided [compensation_units][] and amount // or range overlaps with provided [compensation_range][]. // // See // [CompensationInfo.CompensationEntry][google.cloud.talent.v4beta1.CompensationInfo.CompensationEntry] // for definition of base compensation entry. // // Set exactly one // [units][google.cloud.talent.v4beta1.CompensationFilter.units] and // populate [range][google.cloud.talent.v4beta1.CompensationFilter.range]. UNIT_AND_AMOUNT = 2; // Filter by annualized base compensation amount and `base compensation // entry's` unit. Populate // [range][google.cloud.talent.v4beta1.CompensationFilter.range] and zero or // more [units][google.cloud.talent.v4beta1.CompensationFilter.units]. ANNUALIZED_BASE_AMOUNT = 3; // Filter by annualized total compensation amount and `base compensation // entry's` unit . Populate // [range][google.cloud.talent.v4beta1.CompensationFilter.range] and zero or // more [units][google.cloud.talent.v4beta1.CompensationFilter.units]. ANNUALIZED_TOTAL_AMOUNT = 4; } // Required. // // Type of filter. FilterType type = 1; // Required. // // Specify desired `base compensation entry's` // [CompensationInfo.CompensationUnit][google.cloud.talent.v4beta1.CompensationInfo.CompensationUnit]. repeated CompensationInfo.CompensationUnit units = 2; // Optional. // // Compensation range. CompensationInfo.CompensationRange range = 3; // Optional. // // Whether to include jobs whose compensation range is unspecified. bool include_jobs_with_unspecified_compensation_range = 4; } // Input only. // // Parameters needed for commute search. message CommuteFilter { // The traffic density to use when calculating commute time. enum RoadTraffic { // Road traffic situation isn't specified. ROAD_TRAFFIC_UNSPECIFIED = 0; // Optimal commute time without considering any traffic impact. TRAFFIC_FREE = 1; // Commute time calculation takes in account the peak traffic impact. BUSY_HOUR = 2; } // Required. // // The method of transportation for which to calculate the commute time. CommuteMethod commute_method = 1; // Required. // // The latitude and longitude of the location from which to calculate the // commute time. google.type.LatLng start_coordinates = 2; // Required. // // The maximum travel time in seconds. The maximum allowed value is `3600s` // (one hour). Format is `123s`. google.protobuf.Duration travel_duration = 3; // Optional. // If `true`, jobs without street level addresses may also be returned. // For city level addresses, the city center is used. For state and coarser // level addresses, text matching is used. // If this field is set to `false` or isn't specified, only jobs that include // street level addresses will be returned by commute search. bool allow_imprecise_addresses = 4; // Optional. // // Traffic factor to take into account while searching by commute. oneof traffic_option { // Optional. // // Specifies the traffic density to use when calculating commute time. RoadTraffic road_traffic = 5; // Optional. // // The departure time used to calculate traffic impact, represented as // [google.type.TimeOfDay][google.type.TimeOfDay] in local time zone. // // Currently traffic model is restricted to hour level resolution. google.type.TimeOfDay departure_time = 6; } } // Input only. // // Job title of the search. message JobTitleFilter { // Required. // // The job title, for example, "Software engineer", or "Product manager". string job_title = 1; // Optional. // // Whether to apply negation to the filter so profiles matching the filter // are excluded. bool negated = 2; } // Input only. // // Skill filter of the search. message SkillFilter { // Required. // // The skill name. For example, "java", "j2ee", etc. string skill = 1; // Optional. // // Whether to apply negation to the filter so profiles matching the filter // are excluded. bool negated = 2; } // Input only. // // Employer filter of the search. message EmployerFilter { // Enum indicating which set of // [Profile.employment_records][google.cloud.talent.v4beta1.Profile.employment_records] // to search against. enum EmployerFilterMode { // Default value. EMPLOYER_FILTER_MODE_UNSPECIFIED = 0; // Apply to all employers in // [Profile.employment_records][google.cloud.talent.v4beta1.Profile.employment_records]. ALL_EMPLOYMENT_RECORDS = 1; // Apply only to current employer in // [Profile.employment_records][google.cloud.talent.v4beta1.Profile.employment_records]. CURRENT_EMPLOYMENT_RECORDS_ONLY = 2; // Apply only to past (not current) employers in // [Profile.employment_records][google.cloud.talent.v4beta1.Profile.employment_records]. PAST_EMPLOYMENT_RECORDS_ONLY = 3; } // Required. // // The name of the employer, for example "Google", "Alphabet". string employer = 1; // Optional. // // Define set of // [EmploymentRecord][google.cloud.talent.v4beta1.EmploymentRecord]s to search // against. // // Defaults to // [EmployerFilterMode.ALL_EMPLOYMENT_RECORDS][google.cloud.talent.v4beta1.EmployerFilter.EmployerFilterMode.ALL_EMPLOYMENT_RECORDS]. EmployerFilterMode mode = 2; // Optional. // // Whether to apply negation to the filter so profiles matching the filter // is excluded. bool negated = 3; } // Input only. // // Education filter of the search. message EducationFilter { // Optional. // // The school name. For example "MIT", "University of California, Berkeley". string school = 1; // Optional. // // The field of study. This is to search against value provided in // [Degree.fields_of_study][google.cloud.talent.v4beta1.Degree.fields_of_study]. // For example "Computer Science", "Mathematics". string field_of_study = 2; // Optional. // // Education degree in ISCED code. Each value in degree covers a specific // level of education, without any expansion to upper nor lower levels of // education degree. DegreeType degree_type = 3; // Optional. // // Whether to apply negation to the filter so profiles matching the filter // is excluded. bool negated = 6; } // Input only. // // Work experience filter. // // This filter is used to search for profiles with working experience length // between // [min_experience][google.cloud.talent.v4beta1.WorkExperienceFilter.min_experience] // and // [max_experience][google.cloud.talent.v4beta1.WorkExperienceFilter.max_experience]. message WorkExperienceFilter { // Optional. // // The minimum duration of the work experience (inclusive). google.protobuf.Duration min_experience = 1; // Optional. // // The maximum duration of the work experience (exclusive). google.protobuf.Duration max_experience = 2; } // Input only. // // Application Date Range Filter. // // The API matches profiles with // [JobApplication.application_date][google.cloud.talent.v4beta1.JobApplication.application_date] // between start date and end date (both boundaries are inclusive). The filter // is ignored if both // [start_date][google.cloud.talent.v4beta1.ApplicationDateFilter.start_date] // and [end_date][google.cloud.talent.v4beta1.ApplicationDateFilter.end_date] // are missing. message ApplicationDateFilter { // Optional. // // Start date. If it's missing, The API matches profiles with application date // not after the end date. google.type.Date start_date = 1; // Optional. // // End date. If it's missing, The API matches profiles with application date // not before the start date. google.type.Date end_date = 2; } // Input only. // // Outcome Reason Filter. message ApplicationOutcomeReasonFilter { // Required. // // User entered or selected outcome reason. The API does an exact match on the // [JobApplication.outcome_reason][google.cloud.talent.v4beta1.JobApplication.outcome_reason] // in profiles. string outcome_reason = 1; // Optional. // // If true, The API excludes all candidates with any // [JobApplication.outcome_reason][google.cloud.talent.v4beta1.JobApplication.outcome_reason] // matching the outcome reason specified in the filter. bool negated = 2; } // Input only. // // Filter on Last Stage of Application. message ApplicationLastStageFilter { // Required. // // User entered or selected last stage the candidate reached in the // application. The API does an exact match on the // [JobApplication.last_stage][google.cloud.talent.v4beta1.JobApplication.last_stage] // in profiles. string last_stage = 1; // Optional. // If true, The API excludes all candidates with any // [JobApplication.last_stage][google.cloud.talent.v4beta1.JobApplication.last_stage] // matching the last stage specified in the filter. bool negated = 2; } // Input only. // // Filter on the job information of Application. message ApplicationJobFilter { // Optional. // // The job resource name in the application. The API does an exact match on // the [Job.name][google.cloud.talent.v4beta1.Job.name] of // [JobApplication.job][google.cloud.talent.v4beta1.JobApplication.job] in // profiles. string job_name = 1; // Optional. // // The job requisition id in the application. The API does an exact match on // the [Job.requisistion_id][] of // [JobApplication.job][google.cloud.talent.v4beta1.JobApplication.job] in // profiles. string job_requisition_id = 2; // Optional. // // The job title in the application. The API does an exact match on the // [Job.title][google.cloud.talent.v4beta1.Job.title] of // [JobApplication.job][google.cloud.talent.v4beta1.JobApplication.job] in // profiles. string job_title = 3; // Optional. // // If true, the API excludes all profiles with any // [JobApplication.job][google.cloud.talent.v4beta1.JobApplication.job] // matching the filters. bool negated = 4; } // Input only. // // Filter on status of Application. message ApplicationStatusFilter { // Required. // // User entered or selected application status. The API does an exact match // between the application status specified in this filter and the // [JobApplication.status][] in profiles. JobApplication.ApplicationStatus application_status = 1; // Optional. // // If true, The API excludes all candidates with any [JobApplication.status][] // matching the status specified in the filter. bool negated = 2; } // Input only. // // Filter on create timestamp or update timestamp of profiles. message TimeFilter { // Time fields can be used in TimeFilter. enum TimeField { // Default value. TIME_FIELD_UNSPECIFIED = 0; // Earliest profile create time. CREATE_TIME = 1; // Latest profile update time. UPDATE_TIME = 2; } // Optional. // // Start timestamp, matching profiles with the start time. If this field // missing, The API matches profiles with create / update timestamp before the // end timestamp. google.protobuf.Timestamp start_time = 1; // Optional. // // End timestamp, matching profiles with the end time. If this field // missing, The API matches profiles with create / update timestamp after the // start timestamp. google.protobuf.Timestamp end_time = 2; // Optional. // // Specifies which time field to filter profiles. // // Defaults to // [TimeField.CREATE_TIME][google.cloud.talent.v4beta1.TimeFilter.TimeField.CREATE_TIME]. TimeField time_field = 3; }