1// Copyright 2023 Google LLC
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15syntax = "proto3";
16
17package google.cloud.talent.v4;
18
19import "google/api/field_behavior.proto";
20import "google/protobuf/timestamp.proto";
21import "google/protobuf/wrappers.proto";
22import "google/type/latlng.proto";
23import "google/type/money.proto";
24import "google/type/postal_address.proto";
25
26option go_package = "cloud.google.com/go/talent/apiv4/talentpb;talentpb";
27option java_multiple_files = true;
28option java_outer_classname = "CommonProto";
29option java_package = "com.google.cloud.talent.v4";
30option objc_class_prefix = "CTS";
31
32// Message representing a period of time between two timestamps.
33message TimestampRange {
34  // Begin of the period (inclusive).
35  google.protobuf.Timestamp start_time = 1;
36
37  // End of the period (exclusive).
38  google.protobuf.Timestamp end_time = 2;
39}
40
41// An enum that represents the size of the company.
42enum CompanySize {
43  // Default value if the size isn't specified.
44  COMPANY_SIZE_UNSPECIFIED = 0;
45
46  // The company has less than 50 employees.
47  MINI = 1;
48
49  // The company has between 50 and 99 employees.
50  SMALL = 2;
51
52  // The company has between 100 and 499 employees.
53  SMEDIUM = 3;
54
55  // The company has between 500 and 999 employees.
56  MEDIUM = 4;
57
58  // The company has between 1,000 and 4,999 employees.
59  BIG = 5;
60
61  // The company has between 5,000 and 9,999 employees.
62  BIGGER = 6;
63
64  // The company has 10,000 or more employees.
65  GIANT = 7;
66}
67
68// An enum that represents employee benefits included with the job.
69enum JobBenefit {
70  // Default value if the type isn't specified.
71  JOB_BENEFIT_UNSPECIFIED = 0;
72
73  // The job includes access to programs that support child care, such
74  // as daycare.
75  CHILD_CARE = 1;
76
77  // The job includes dental services covered by a dental
78  // insurance plan.
79  DENTAL = 2;
80
81  // The job offers specific benefits to domestic partners.
82  DOMESTIC_PARTNER = 3;
83
84  // The job allows for a flexible work schedule.
85  FLEXIBLE_HOURS = 4;
86
87  // The job includes health services covered by a medical insurance plan.
88  MEDICAL = 5;
89
90  // The job includes a life insurance plan provided by the employer or
91  // available for purchase by the employee.
92  LIFE_INSURANCE = 6;
93
94  // The job allows for a leave of absence to a parent to care for a newborn
95  // child.
96  PARENTAL_LEAVE = 7;
97
98  // The job includes a workplace retirement plan provided by the
99  // employer or available for purchase by the employee.
100  RETIREMENT_PLAN = 8;
101
102  // The job allows for paid time off due to illness.
103  SICK_DAYS = 9;
104
105  // The job includes paid time off for vacation.
106  VACATION = 10;
107
108  // The job includes vision services covered by a vision
109  // insurance plan.
110  VISION = 11;
111}
112
113// Educational degree level defined in International Standard Classification
114// of Education (ISCED).
115enum DegreeType {
116  // Default value. Represents no degree, or early childhood education.
117  // Maps to ISCED code 0.
118  // Ex) Kindergarten
119  DEGREE_TYPE_UNSPECIFIED = 0;
120
121  // Primary education which is typically the first stage of compulsory
122  // education. ISCED code 1.
123  // Ex) Elementary school
124  PRIMARY_EDUCATION = 1;
125
126  // Lower secondary education; First stage of secondary education building on
127  // primary education, typically with a more subject-oriented curriculum.
128  // ISCED code 2.
129  // Ex) Middle school
130  LOWER_SECONDARY_EDUCATION = 2;
131
132  // Middle education; Second/final stage of secondary education preparing for
133  // tertiary education and/or providing skills relevant to employment.
134  // Usually with an increased range of subject options and streams. ISCED
135  // code 3.
136  // Ex) High school
137  UPPER_SECONDARY_EDUCATION = 3;
138
139  // Adult Remedial Education; Programmes providing learning experiences that
140  // build on secondary education and prepare for labour market entry and/or
141  // tertiary education. The content is broader than secondary but not as
142  // complex as tertiary education. ISCED code 4.
143  ADULT_REMEDIAL_EDUCATION = 4;
144
145  // Associate's or equivalent; Short first tertiary programmes that are
146  // typically practically-based, occupationally-specific and prepare for
147  // labour market entry. These programmes may also provide a pathway to other
148  // tertiary programmes. ISCED code 5.
149  ASSOCIATES_OR_EQUIVALENT = 5;
150
151  // Bachelor's or equivalent; Programmes designed to provide intermediate
152  // academic and/or professional knowledge, skills and competencies leading
153  // to a first tertiary degree or equivalent qualification. ISCED code 6.
154  BACHELORS_OR_EQUIVALENT = 6;
155
156  // Master's or equivalent; Programmes designed to provide advanced academic
157  // and/or professional knowledge, skills and competencies leading to a
158  // second tertiary degree or equivalent qualification. ISCED code 7.
159  MASTERS_OR_EQUIVALENT = 7;
160
161  // Doctoral or equivalent; Programmes designed primarily to lead to an
162  // advanced research qualification, usually concluding with the submission
163  // and defense of a substantive dissertation of publishable quality based on
164  // original research. ISCED code 8.
165  DOCTORAL_OR_EQUIVALENT = 8;
166}
167
168// An enum that represents the employment type of a job.
169enum EmploymentType {
170  // The default value if the employment type isn't specified.
171  EMPLOYMENT_TYPE_UNSPECIFIED = 0;
172
173  // The job requires working a number of hours that constitute full
174  // time employment, typically 40 or more hours per week.
175  FULL_TIME = 1;
176
177  // The job entails working fewer hours than a full time job,
178  // typically less than 40 hours a week.
179  PART_TIME = 2;
180
181  // The job is offered as a contracted, as opposed to a salaried employee,
182  // position.
183  CONTRACTOR = 3;
184
185  // The job is offered as a contracted position with the understanding
186  // that it's converted into a full-time position at the end of the
187  // contract. Jobs of this type are also returned by a search for
188  // [EmploymentType.CONTRACTOR][google.cloud.talent.v4.EmploymentType.CONTRACTOR]
189  // jobs.
190  CONTRACT_TO_HIRE = 4;
191
192  // The job is offered as a temporary employment opportunity, usually
193  // a short-term engagement.
194  TEMPORARY = 5;
195
196  // The job is a fixed-term opportunity for students or entry-level job
197  // seekers to obtain on-the-job training, typically offered as a summer
198  // position.
199  INTERN = 6;
200
201  // The is an opportunity for an individual to volunteer, where there's no
202  // expectation of compensation for the provided services.
203  VOLUNTEER = 7;
204
205  // The job requires an employee to work on an as-needed basis with a
206  // flexible schedule.
207  PER_DIEM = 8;
208
209  // The job involves employing people in remote areas and flying them
210  // temporarily to the work site instead of relocating employees and their
211  // families permanently.
212  FLY_IN_FLY_OUT = 9;
213
214  // The job does not fit any of the other listed types.
215  OTHER_EMPLOYMENT_TYPE = 10;
216}
217
218// An enum that represents the required experience level required for the job.
219enum JobLevel {
220  // The default value if the level isn't specified.
221  JOB_LEVEL_UNSPECIFIED = 0;
222
223  // Entry-level individual contributors, typically with less than 2 years of
224  // experience in a similar role. Includes interns.
225  ENTRY_LEVEL = 1;
226
227  // Experienced individual contributors, typically with 2+ years of
228  // experience in a similar role.
229  EXPERIENCED = 2;
230
231  // Entry- to mid-level managers responsible for managing a team of people.
232  MANAGER = 3;
233
234  // Senior-level managers responsible for managing teams of managers.
235  DIRECTOR = 4;
236
237  // Executive-level managers and above, including C-level positions.
238  EXECUTIVE = 5;
239}
240
241// An enum that represents the categorization or primary focus of specific
242// role. This value is different than the "industry" associated with a role,
243// which is related to the categorization of the company listing the job.
244enum JobCategory {
245  // The default value if the category isn't specified.
246  JOB_CATEGORY_UNSPECIFIED = 0;
247
248  // An accounting and finance job, such as an Accountant.
249  ACCOUNTING_AND_FINANCE = 1;
250
251  // An administrative and office job, such as an Administrative Assistant.
252  ADMINISTRATIVE_AND_OFFICE = 2;
253
254  // An advertising and marketing job, such as Marketing Manager.
255  ADVERTISING_AND_MARKETING = 3;
256
257  // An animal care job, such as Veterinarian.
258  ANIMAL_CARE = 4;
259
260  // An art, fashion, or design job, such as Designer.
261  ART_FASHION_AND_DESIGN = 5;
262
263  // A business operations job, such as Business Operations Manager.
264  BUSINESS_OPERATIONS = 6;
265
266  // A cleaning and facilities job, such as Custodial Staff.
267  CLEANING_AND_FACILITIES = 7;
268
269  // A computer and IT job, such as Systems Administrator.
270  COMPUTER_AND_IT = 8;
271
272  // A construction job, such as General Laborer.
273  CONSTRUCTION = 9;
274
275  // A customer service job, such s Cashier.
276  CUSTOMER_SERVICE = 10;
277
278  // An education job, such as School Teacher.
279  EDUCATION = 11;
280
281  // An entertainment and travel job, such as Flight Attendant.
282  ENTERTAINMENT_AND_TRAVEL = 12;
283
284  // A farming or outdoor job, such as Park Ranger.
285  FARMING_AND_OUTDOORS = 13;
286
287  // A healthcare job, such as Registered Nurse.
288  HEALTHCARE = 14;
289
290  // A human resources job, such as Human Resources Director.
291  HUMAN_RESOURCES = 15;
292
293  // An installation, maintenance, or repair job, such as Electrician.
294  INSTALLATION_MAINTENANCE_AND_REPAIR = 16;
295
296  // A legal job, such as Law Clerk.
297  LEGAL = 17;
298
299  // A management job, often used in conjunction with another category,
300  // such as Store Manager.
301  MANAGEMENT = 18;
302
303  // A manufacturing or warehouse job, such as Assembly Technician.
304  MANUFACTURING_AND_WAREHOUSE = 19;
305
306  // A media, communications, or writing job, such as Media Relations.
307  MEDIA_COMMUNICATIONS_AND_WRITING = 20;
308
309  // An oil, gas or mining job, such as Offshore Driller.
310  OIL_GAS_AND_MINING = 21;
311
312  // A personal care and services job, such as Hair Stylist.
313  PERSONAL_CARE_AND_SERVICES = 22;
314
315  // A protective services job, such as Security Guard.
316  PROTECTIVE_SERVICES = 23;
317
318  // A real estate job, such as Buyer's Agent.
319  REAL_ESTATE = 24;
320
321  // A restaurant and hospitality job, such as Restaurant Server.
322  RESTAURANT_AND_HOSPITALITY = 25;
323
324  // A sales and/or retail job, such Sales Associate.
325  SALES_AND_RETAIL = 26;
326
327  // A science and engineering job, such as Lab Technician.
328  SCIENCE_AND_ENGINEERING = 27;
329
330  // A social services or non-profit job, such as Case Worker.
331  SOCIAL_SERVICES_AND_NON_PROFIT = 28;
332
333  // A sports, fitness, or recreation job, such as Personal Trainer.
334  SPORTS_FITNESS_AND_RECREATION = 29;
335
336  // A transportation or logistics job, such as Truck Driver.
337  TRANSPORTATION_AND_LOGISTICS = 30;
338}
339
340// An enum that represents the job posting region. In most cases, job postings
341// don't need to specify a region. If a region is given, jobs are
342// eligible for searches in the specified region.
343enum PostingRegion {
344  // If the region is unspecified, the job is only returned if it
345  // matches the [LocationFilter][google.cloud.talent.v4.LocationFilter].
346  POSTING_REGION_UNSPECIFIED = 0;
347
348  // In addition to exact location matching, job posting is returned when the
349  // [LocationFilter][google.cloud.talent.v4.LocationFilter] in the search query
350  // is in the same administrative area as the returned job posting. For
351  // example, if a `ADMINISTRATIVE_AREA` job is posted in "CA, USA", it's
352  // returned if [LocationFilter][google.cloud.talent.v4.LocationFilter] has
353  // "Mountain View".
354  //
355  // Administrative area refers to top-level administrative subdivision of this
356  // country. For example, US state, IT region, UK constituent nation and
357  // JP prefecture.
358  ADMINISTRATIVE_AREA = 1;
359
360  // In addition to exact location matching, job is returned when
361  // [LocationFilter][google.cloud.talent.v4.LocationFilter] in search query is
362  // in the same country as this job. For example, if a `NATION_WIDE` job is
363  // posted in "USA", it's returned if
364  // [LocationFilter][google.cloud.talent.v4.LocationFilter] has 'Mountain
365  // View'.
366  NATION = 2;
367
368  // Job allows employees to work remotely (telecommute).
369  // If locations are provided with this value, the job is
370  // considered as having a location, but telecommuting is allowed.
371  TELECOMMUTE = 3;
372}
373
374// Deprecated. All resources are only visible to the owner.
375//
376// An enum that represents who has view access to the resource.
377enum Visibility {
378  option deprecated = true;
379
380  // Default value.
381  VISIBILITY_UNSPECIFIED = 0;
382
383  // The resource is only visible to the GCP account who owns it.
384  ACCOUNT_ONLY = 1;
385
386  // The resource is visible to the owner and may be visible to other
387  // applications and processes at Google.
388  SHARED_WITH_GOOGLE = 2;
389
390  // The resource is visible to the owner and may be visible to all other API
391  // clients.
392  SHARED_WITH_PUBLIC = 3;
393}
394
395// Option for HTML content sanitization on user input fields, for example, job
396// description. By setting this option, user can determine whether and how
397// sanitization is performed on these fields.
398enum HtmlSanitization {
399  // Default value.
400  HTML_SANITIZATION_UNSPECIFIED = 0;
401
402  // Disables sanitization on HTML input.
403  HTML_SANITIZATION_DISABLED = 1;
404
405  // Sanitizes HTML input, only accepts bold, italic, ordered list, and
406  // unordered list markup tags.
407  SIMPLE_FORMATTING_ONLY = 2;
408}
409
410// Method for commute. Walking, biking and wheelchair accessible transit is
411// still in the Preview stage.
412enum CommuteMethod {
413  // Commute method isn't specified.
414  COMMUTE_METHOD_UNSPECIFIED = 0;
415
416  // Commute time is calculated based on driving time.
417  DRIVING = 1;
418
419  // Commute time is calculated based on public transit including bus, metro,
420  // subway, and so on.
421  TRANSIT = 2;
422
423  // Commute time is calculated based on walking time.
424  WALKING = 3;
425
426  // Commute time is calculated based on biking time.
427  CYCLING = 4;
428
429  // Commute time is calculated based on public transit that is wheelchair
430  // accessible.
431  TRANSIT_ACCESSIBLE = 5;
432}
433
434// A resource that represents a location with full geographic information.
435message Location {
436  // An enum which represents the type of a location.
437  enum LocationType {
438    // Default value if the type isn't specified.
439    LOCATION_TYPE_UNSPECIFIED = 0;
440
441    // A country level location.
442    COUNTRY = 1;
443
444    // A state or equivalent level location.
445    ADMINISTRATIVE_AREA = 2;
446
447    // A county or equivalent level location.
448    SUB_ADMINISTRATIVE_AREA = 3;
449
450    // A city or equivalent level location.
451    LOCALITY = 4;
452
453    // A postal code level location.
454    POSTAL_CODE = 5;
455
456    // A sublocality is a subdivision of a locality, for example a city borough,
457    // ward, or arrondissement. Sublocalities are usually recognized by a local
458    // political authority. For example, Manhattan and Brooklyn are recognized
459    // as boroughs by the City of New York, and are therefore modeled as
460    // sublocalities.
461    SUB_LOCALITY = 6;
462
463    // A district or equivalent level location.
464    SUB_LOCALITY_1 = 7;
465
466    // A smaller district or equivalent level display.
467    SUB_LOCALITY_2 = 8;
468
469    // A neighborhood level location.
470    NEIGHBORHOOD = 9;
471
472    // A street address level location.
473    STREET_ADDRESS = 10;
474  }
475
476  // The type of a location, which corresponds to the address lines field of
477  // [google.type.PostalAddress][google.type.PostalAddress]. For example,
478  // "Downtown, Atlanta, GA, USA" has a type of
479  // [LocationType.NEIGHBORHOOD][google.cloud.talent.v4.Location.LocationType.NEIGHBORHOOD],
480  // and "Kansas City, KS, USA" has a type of
481  // [LocationType.LOCALITY][google.cloud.talent.v4.Location.LocationType.LOCALITY].
482  LocationType location_type = 1;
483
484  // Postal address of the location that includes human readable information,
485  // such as postal delivery and payments addresses. Given a postal address,
486  // a postal service can deliver items to a premises, P.O. Box, or other
487  // delivery location.
488  google.type.PostalAddress postal_address = 2;
489
490  // An object representing a latitude/longitude pair.
491  google.type.LatLng lat_lng = 3;
492
493  // Radius in miles of the job location. This value is derived from the
494  // location bounding box in which a circle with the specified radius
495  // centered from [google.type.LatLng][google.type.LatLng] covers the area
496  // associated with the job location. For example, currently, "Mountain View,
497  // CA, USA" has a radius of 6.17 miles.
498  double radius_miles = 4;
499}
500
501// Meta information related to the job searcher or entity
502// conducting the job search. This information is used to improve the
503// performance of the service.
504message RequestMetadata {
505  // Required if
506  // [allow_missing_ids][google.cloud.talent.v4.RequestMetadata.allow_missing_ids]
507  // is unset or `false`.
508  //
509  // The client-defined scope or source of the service call, which typically
510  // is the domain on
511  // which the service has been implemented and is currently being run.
512  //
513  // For example, if the service is being run by client <em>Foo, Inc.</em>, on
514  // job board www.foo.com and career site www.bar.com, then this field is
515  // set to "foo.com" for use on the job board, and "bar.com" for use on the
516  // career site.
517  //
518  // Note that any improvements to the model for a particular tenant site rely
519  // on this field being set correctly to a unique domain.
520  //
521  // The maximum number of allowed characters is 255.
522  string domain = 1;
523
524  // Required if
525  // [allow_missing_ids][google.cloud.talent.v4.RequestMetadata.allow_missing_ids]
526  // is unset or `false`.
527  //
528  // A unique session identification string. A session is defined as the
529  // duration of an end user's interaction with the service over a certain
530  // period.
531  // Obfuscate this field for privacy concerns before
532  // providing it to the service.
533  //
534  // Note that any improvements to the model for a particular tenant site rely
535  // on this field being set correctly to a unique session ID.
536  //
537  // The maximum number of allowed characters is 255.
538  string session_id = 2;
539
540  // Required if
541  // [allow_missing_ids][google.cloud.talent.v4.RequestMetadata.allow_missing_ids]
542  // is unset or `false`.
543  //
544  // A unique user identification string, as determined by the client.
545  // To have the strongest positive impact on search quality
546  // make sure the client-level is unique.
547  // Obfuscate this field for privacy concerns before
548  // providing it to the service.
549  //
550  // Note that any improvements to the model for a particular tenant site rely
551  // on this field being set correctly to a unique user ID.
552  //
553  // The maximum number of allowed characters is 255.
554  string user_id = 3;
555
556  // Only set when any of
557  // [domain][google.cloud.talent.v4.RequestMetadata.domain],
558  // [session_id][google.cloud.talent.v4.RequestMetadata.session_id] and
559  // [user_id][google.cloud.talent.v4.RequestMetadata.user_id] isn't available
560  // for some reason. It is highly recommended not to set this field and provide
561  // accurate [domain][google.cloud.talent.v4.RequestMetadata.domain],
562  // [session_id][google.cloud.talent.v4.RequestMetadata.session_id] and
563  // [user_id][google.cloud.talent.v4.RequestMetadata.user_id] for the best
564  // service experience.
565  bool allow_missing_ids = 4;
566
567  // The type of device used by the job seeker at the time of the call to the
568  // service.
569  DeviceInfo device_info = 5;
570}
571
572// Additional information returned to client, such as debugging information.
573message ResponseMetadata {
574  // A unique id associated with this call.
575  // This id is logged for tracking purposes.
576  string request_id = 1;
577}
578
579// Device information collected from the job seeker, candidate, or
580// other entity conducting the job search. Providing this information improves
581// the quality of the search results across devices.
582message DeviceInfo {
583  // An enumeration describing an API access portal and exposure mechanism.
584  enum DeviceType {
585    // The device type isn't specified.
586    DEVICE_TYPE_UNSPECIFIED = 0;
587
588    // A desktop web browser, such as, Chrome, Firefox, Safari, or Internet
589    // Explorer)
590    WEB = 1;
591
592    // A mobile device web browser, such as a phone or tablet with a Chrome
593    // browser.
594    MOBILE_WEB = 2;
595
596    // An Android device native application.
597    ANDROID = 3;
598
599    // An iOS device native application.
600    IOS = 4;
601
602    // A bot, as opposed to a device operated by human beings, such as a web
603    // crawler.
604    BOT = 5;
605
606    // Other devices types.
607    OTHER = 6;
608  }
609
610  // Type of the device.
611  DeviceType device_type = 1;
612
613  // A device-specific ID. The ID must be a unique identifier that
614  // distinguishes the device from other devices.
615  string id = 2;
616}
617
618// Custom attribute values that are either filterable or non-filterable.
619message CustomAttribute {
620  // Exactly one of
621  // [string_values][google.cloud.talent.v4.CustomAttribute.string_values] or
622  // [long_values][google.cloud.talent.v4.CustomAttribute.long_values] must be
623  // specified.
624  //
625  // This field is used to perform a string match (`CASE_SENSITIVE_MATCH` or
626  // `CASE_INSENSITIVE_MATCH`) search.
627  // For filterable `string_value`s, a maximum total number of 200 values
628  // is allowed, with each `string_value` has a byte size of no more than
629  // 500B. For unfilterable `string_values`, the maximum total byte size of
630  // unfilterable `string_values` is 50KB.
631  //
632  // Empty string isn't allowed.
633  repeated string string_values = 1;
634
635  // Exactly one of
636  // [string_values][google.cloud.talent.v4.CustomAttribute.string_values] or
637  // [long_values][google.cloud.talent.v4.CustomAttribute.long_values] must be
638  // specified.
639  //
640  // This field is used to perform number range search.
641  // (`EQ`, `GT`, `GE`, `LE`, `LT`) over filterable `long_value`.
642  //
643  // Currently at most 1
644  // [long_values][google.cloud.talent.v4.CustomAttribute.long_values] is
645  // supported.
646  repeated int64 long_values = 2;
647
648  // If the `filterable` flag is true, the custom field values may be used for
649  // custom attribute filters
650  // [JobQuery.custom_attribute_filter][google.cloud.talent.v4.JobQuery.custom_attribute_filter].
651  // If false, these values may not be used for custom attribute filters.
652  //
653  // Default is false.
654  bool filterable = 3;
655
656  // If the `keyword_searchable` flag is true, the keywords in custom fields are
657  // searchable by keyword match.
658  // If false, the values are not searchable by keyword match.
659  //
660  // Default is false.
661  bool keyword_searchable = 4;
662}
663
664// Spell check result.
665message SpellingCorrection {
666  // Indicates if the query was corrected by the spell checker.
667  bool corrected = 1;
668
669  // Correction output consisting of the corrected keyword string.
670  string corrected_text = 2;
671
672  // Corrected output with html tags to highlight the corrected words.
673  // Corrected words are called out with the "<b><i>...</i></b>" html tags.
674  //
675  // For example, the user input query is "software enginear", where the second
676  // word, "enginear," is incorrect. It should be "engineer". When spelling
677  // correction is enabled, this value is
678  // "software <b><i>engineer</i></b>".
679  string corrected_html = 3;
680}
681
682// Job compensation details.
683message CompensationInfo {
684  // A compensation entry that represents one component of compensation, such
685  // as base pay, bonus, or other compensation type.
686  //
687  // Annualization: One compensation entry can be annualized if
688  // - it contains valid
689  // [amount][google.cloud.talent.v4.CompensationInfo.CompensationEntry.amount]
690  // or
691  // [range][google.cloud.talent.v4.CompensationInfo.CompensationEntry.range].
692  // - and its
693  // [expected_units_per_year][google.cloud.talent.v4.CompensationInfo.CompensationEntry.expected_units_per_year]
694  // is set or can be derived. Its annualized range is determined as
695  // ([amount][google.cloud.talent.v4.CompensationInfo.CompensationEntry.amount]
696  // or
697  // [range][google.cloud.talent.v4.CompensationInfo.CompensationEntry.range])
698  // times
699  // [expected_units_per_year][google.cloud.talent.v4.CompensationInfo.CompensationEntry.expected_units_per_year].
700  message CompensationEntry {
701    // Compensation type.
702    //
703    // Default is
704    // [CompensationType.COMPENSATION_TYPE_UNSPECIFIED][google.cloud.talent.v4.CompensationInfo.CompensationType.COMPENSATION_TYPE_UNSPECIFIED].
705    CompensationType type = 1;
706
707    // Frequency of the specified amount.
708    //
709    // Default is
710    // [CompensationUnit.COMPENSATION_UNIT_UNSPECIFIED][google.cloud.talent.v4.CompensationInfo.CompensationUnit.COMPENSATION_UNIT_UNSPECIFIED].
711    CompensationUnit unit = 2;
712
713    // Compensation amount. It could be a fixed amount or a floating range.
714    oneof compensation_amount {
715      // Compensation amount.
716      google.type.Money amount = 3;
717
718      // Compensation range.
719      CompensationRange range = 4;
720    }
721
722    // Compensation description.  For example, could
723    // indicate equity terms or provide additional context to an estimated
724    // bonus.
725    string description = 5;
726
727    // Expected number of units paid each year. If not specified, when
728    // [Job.employment_types][google.cloud.talent.v4.Job.employment_types] is
729    // FULLTIME, a default value is inferred based on
730    // [unit][google.cloud.talent.v4.CompensationInfo.CompensationEntry.unit].
731    // Default values:
732    // - HOURLY: 2080
733    // - DAILY: 260
734    // - WEEKLY: 52
735    // - MONTHLY: 12
736    // - ANNUAL: 1
737    google.protobuf.DoubleValue expected_units_per_year = 6;
738  }
739
740  // The type of compensation.
741  //
742  // For compensation amounts specified in non-monetary amounts,
743  // describe the compensation scheme in the
744  // [CompensationEntry.description][google.cloud.talent.v4.CompensationInfo.CompensationEntry.description].
745  //
746  // For example, tipping format is described in
747  // [CompensationEntry.description][google.cloud.talent.v4.CompensationInfo.CompensationEntry.description]
748  // (for example, "expect 15-20% tips based on customer bill.") and an estimate
749  // of the tips provided in
750  // [CompensationEntry.amount][google.cloud.talent.v4.CompensationInfo.CompensationEntry.amount]
751  // or
752  // [CompensationEntry.range][google.cloud.talent.v4.CompensationInfo.CompensationEntry.range]
753  // ($10 per hour).
754  //
755  // For example, equity is described in
756  // [CompensationEntry.description][google.cloud.talent.v4.CompensationInfo.CompensationEntry.description]
757  // (for example, "1% - 2% equity vesting over 4 years, 1 year cliff") and
758  // value estimated in
759  // [CompensationEntry.amount][google.cloud.talent.v4.CompensationInfo.CompensationEntry.amount]
760  // or
761  // [CompensationEntry.range][google.cloud.talent.v4.CompensationInfo.CompensationEntry.range].
762  // If no value estimate is possible, units are
763  // [CompensationUnit.COMPENSATION_UNIT_UNSPECIFIED][google.cloud.talent.v4.CompensationInfo.CompensationUnit.COMPENSATION_UNIT_UNSPECIFIED]
764  // and then further clarified in
765  // [CompensationEntry.description][google.cloud.talent.v4.CompensationInfo.CompensationEntry.description]
766  // field.
767  enum CompensationType {
768    // Default value.
769    COMPENSATION_TYPE_UNSPECIFIED = 0;
770
771    // Base compensation: Refers to the fixed amount of money paid to an
772    // employee by an employer in return for work performed. Base compensation
773    // does not include benefits, bonuses or any other potential compensation
774    // from an employer.
775    BASE = 1;
776
777    // Bonus.
778    BONUS = 2;
779
780    // Signing bonus.
781    SIGNING_BONUS = 3;
782
783    // Equity.
784    EQUITY = 4;
785
786    // Profit sharing.
787    PROFIT_SHARING = 5;
788
789    // Commission.
790    COMMISSIONS = 6;
791
792    // Tips.
793    TIPS = 7;
794
795    // Other compensation type.
796    OTHER_COMPENSATION_TYPE = 8;
797  }
798
799  // Pay frequency.
800  enum CompensationUnit {
801    // Default value.
802    COMPENSATION_UNIT_UNSPECIFIED = 0;
803
804    // Hourly.
805    HOURLY = 1;
806
807    // Daily.
808    DAILY = 2;
809
810    // Weekly
811    WEEKLY = 3;
812
813    // Monthly.
814    MONTHLY = 4;
815
816    // Yearly.
817    YEARLY = 5;
818
819    // One time.
820    ONE_TIME = 6;
821
822    // Other compensation units.
823    OTHER_COMPENSATION_UNIT = 7;
824  }
825
826  // Compensation range.
827  message CompensationRange {
828    // The maximum amount of compensation. If left empty, the value is set
829    // to a maximal compensation value and the currency code is set to
830    // match the [currency code][google.type.Money.currency_code] of
831    // min_compensation.
832    google.type.Money max_compensation = 2;
833
834    // The minimum amount of compensation. If left empty, the value is set
835    // to zero and the currency code is set to match the
836    // [currency code][google.type.Money.currency_code] of max_compensation.
837    google.type.Money min_compensation = 1;
838  }
839
840  // Job compensation information.
841  //
842  // At most one entry can be of type
843  // [CompensationInfo.CompensationType.BASE][google.cloud.talent.v4.CompensationInfo.CompensationType.BASE],
844  // which is referred as **base compensation entry** for the job.
845  repeated CompensationEntry entries = 1;
846
847  // Output only. Annualized base compensation range. Computed as base
848  // compensation entry's
849  // [CompensationEntry.amount][google.cloud.talent.v4.CompensationInfo.CompensationEntry.amount]
850  // times
851  // [CompensationEntry.expected_units_per_year][google.cloud.talent.v4.CompensationInfo.CompensationEntry.expected_units_per_year].
852  //
853  // See
854  // [CompensationEntry][google.cloud.talent.v4.CompensationInfo.CompensationEntry]
855  // for explanation on compensation annualization.
856  CompensationRange annualized_base_compensation_range = 2
857      [(google.api.field_behavior) = OUTPUT_ONLY];
858
859  // Output only. Annualized total compensation range. Computed as all
860  // compensation entries'
861  // [CompensationEntry.amount][google.cloud.talent.v4.CompensationInfo.CompensationEntry.amount]
862  // times
863  // [CompensationEntry.expected_units_per_year][google.cloud.talent.v4.CompensationInfo.CompensationEntry.expected_units_per_year].
864  //
865  // See
866  // [CompensationEntry][google.cloud.talent.v4.CompensationInfo.CompensationEntry]
867  // for explanation on compensation annualization.
868  CompensationRange annualized_total_compensation_range = 3
869      [(google.api.field_behavior) = OUTPUT_ONLY];
870}
871
872// Metadata used for long running operations returned by CTS batch APIs.
873// It's used to replace
874// [google.longrunning.Operation.metadata][google.longrunning.Operation.metadata].
875message BatchOperationMetadata {
876  enum State {
877    // Default value.
878    STATE_UNSPECIFIED = 0;
879
880    // The batch operation is being prepared for processing.
881    INITIALIZING = 1;
882
883    // The batch operation is actively being processed.
884    PROCESSING = 2;
885
886    // The batch operation is processed, and at least one item has been
887    // successfully processed.
888    SUCCEEDED = 3;
889
890    // The batch operation is done and no item has been successfully processed.
891    FAILED = 4;
892
893    // The batch operation is in the process of cancelling after
894    // [google.longrunning.Operations.CancelOperation][google.longrunning.Operations.CancelOperation]
895    // is called.
896    CANCELLING = 5;
897
898    // The batch operation is done after
899    // [google.longrunning.Operations.CancelOperation][google.longrunning.Operations.CancelOperation]
900    // is called. Any items processed before cancelling are returned in the
901    // response.
902    CANCELLED = 6;
903  }
904
905  // The state of a long running operation.
906  State state = 1;
907
908  // More detailed information about operation state.
909  string state_description = 2;
910
911  // Count of successful item(s) inside an operation.
912  int32 success_count = 3;
913
914  // Count of failed item(s) inside an operation.
915  int32 failure_count = 4;
916
917  // Count of total item(s) inside an operation.
918  int32 total_count = 5;
919
920  // The time when the batch operation is created.
921  google.protobuf.Timestamp create_time = 6;
922
923  // The time when the batch operation status is updated. The metadata and the
924  // [update_time][google.cloud.talent.v4.BatchOperationMetadata.update_time] is
925  // refreshed every minute otherwise cached data is returned.
926  google.protobuf.Timestamp update_time = 7;
927
928  // The time when the batch operation is finished and
929  // [google.longrunning.Operation.done][google.longrunning.Operation.done] is
930  // set to `true`.
931  google.protobuf.Timestamp end_time = 8;
932}
933