job.proto 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
  1. // Copyright 2020 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. syntax = "proto3";
  15. package google.cloud.talent.v4beta1;
  16. import "google/api/field_behavior.proto";
  17. import "google/api/resource.proto";
  18. import "google/cloud/talent/v4beta1/common.proto";
  19. import "google/protobuf/timestamp.proto";
  20. import "google/type/postal_address.proto";
  21. import "google/api/annotations.proto";
  22. option go_package = "google.golang.org/genproto/googleapis/cloud/talent/v4beta1;talent";
  23. option java_multiple_files = true;
  24. option java_outer_classname = "JobResourceProto";
  25. option java_package = "com.google.cloud.talent.v4beta1";
  26. option objc_class_prefix = "CTS";
  27. // A Job resource represents a job posting (also referred to as a "job listing"
  28. // or "job requisition"). A job belongs to a [Company][google.cloud.talent.v4beta1.Company], which is the hiring
  29. // entity responsible for the job.
  30. message Job {
  31. option (google.api.resource) = {
  32. type: "jobs.googleapis.com/Job"
  33. pattern: "projects/{project}/tenants/{tenant}/jobs/{job}"
  34. pattern: "projects/{project}/jobs/{job}"
  35. };
  36. // Application related details of a job posting.
  37. message ApplicationInfo {
  38. // Use this field to specify email address(es) to which resumes or
  39. // applications can be sent.
  40. //
  41. // The maximum number of allowed characters for each entry is 255.
  42. repeated string emails = 1;
  43. // Use this field to provide instructions, such as "Mail your application
  44. // to ...", that a candidate can follow to apply for the job.
  45. //
  46. // This field accepts and sanitizes HTML input, and also accepts
  47. // bold, italic, ordered list, and unordered list markup tags.
  48. //
  49. // The maximum number of allowed characters is 3,000.
  50. string instruction = 2;
  51. // Use this URI field to direct an applicant to a website, for example to
  52. // link to an online application form.
  53. //
  54. // The maximum number of allowed characters for each entry is 2,000.
  55. repeated string uris = 3;
  56. }
  57. // Derived details about the job posting.
  58. message DerivedInfo {
  59. // Structured locations of the job, resolved from [Job.addresses][google.cloud.talent.v4beta1.Job.addresses].
  60. //
  61. // [locations][google.cloud.talent.v4beta1.Job.DerivedInfo.locations] are exactly matched to [Job.addresses][google.cloud.talent.v4beta1.Job.addresses] in the same
  62. // order.
  63. repeated Location locations = 1;
  64. // Job categories derived from [Job.title][google.cloud.talent.v4beta1.Job.title] and [Job.description][google.cloud.talent.v4beta1.Job.description].
  65. repeated JobCategory job_categories = 3;
  66. }
  67. // Options for job processing.
  68. message ProcessingOptions {
  69. // If set to `true`, the service does not attempt to resolve a
  70. // more precise address for the job.
  71. bool disable_street_address_resolution = 1;
  72. // Option for job HTML content sanitization. Applied fields are:
  73. //
  74. // * description
  75. // * applicationInfo.instruction
  76. // * incentives
  77. // * qualifications
  78. // * responsibilities
  79. //
  80. // HTML tags in these fields may be stripped if sanitiazation isn't
  81. // disabled.
  82. //
  83. // Defaults to [HtmlSanitization.SIMPLE_FORMATTING_ONLY][google.cloud.talent.v4beta1.HtmlSanitization.SIMPLE_FORMATTING_ONLY].
  84. HtmlSanitization html_sanitization = 2;
  85. }
  86. // Required during job update.
  87. //
  88. // The resource name for the job. This is generated by the service when a
  89. // job is created.
  90. //
  91. // The format is
  92. // "projects/{project_id}/tenants/{tenant_id}/jobs/{job_id}". For
  93. // example, "projects/foo/tenants/bar/jobs/baz".
  94. //
  95. // If tenant id is unspecified, the default tenant is used. For
  96. // example, "projects/foo/jobs/bar".
  97. //
  98. // Use of this field in job queries and API calls is preferred over the use of
  99. // [requisition_id][google.cloud.talent.v4beta1.Job.requisition_id] since this value is unique.
  100. string name = 1;
  101. // Required. The resource name of the company listing the job.
  102. //
  103. // The format is
  104. // "projects/{project_id}/tenants/{tenant_id}/companies/{company_id}". For
  105. // example, "projects/foo/tenants/bar/companies/baz".
  106. //
  107. // If tenant id is unspecified, the default tenant is used. For
  108. // example, "projects/foo/companies/bar".
  109. string company = 2 [
  110. (google.api.field_behavior) = REQUIRED,
  111. (google.api.resource_reference) = {
  112. type: "jobs.googleapis.com/Company"
  113. }
  114. ];
  115. // Required. The requisition ID, also referred to as the posting ID, is assigned by the
  116. // client to identify a job. This field is intended to be used by clients
  117. // for client identification and tracking of postings. A job isn't allowed
  118. // to be created if there is another job with the same [company][google.cloud.talent.v4beta1.Job.name],
  119. // [language_code][google.cloud.talent.v4beta1.Job.language_code] and [requisition_id][google.cloud.talent.v4beta1.Job.requisition_id].
  120. //
  121. // The maximum number of allowed characters is 255.
  122. string requisition_id = 3 [(google.api.field_behavior) = REQUIRED];
  123. // Required. The title of the job, such as "Software Engineer"
  124. //
  125. // The maximum number of allowed characters is 500.
  126. string title = 4 [(google.api.field_behavior) = REQUIRED];
  127. // Required. The description of the job, which typically includes a multi-paragraph
  128. // description of the company and related information. Separate fields are
  129. // provided on the job object for [responsibilities][google.cloud.talent.v4beta1.Job.responsibilities],
  130. // [qualifications][google.cloud.talent.v4beta1.Job.qualifications], and other job characteristics. Use of
  131. // these separate job fields is recommended.
  132. //
  133. // This field accepts and sanitizes HTML input, and also accepts
  134. // bold, italic, ordered list, and unordered list markup tags.
  135. //
  136. // The maximum number of allowed characters is 100,000.
  137. string description = 5 [(google.api.field_behavior) = REQUIRED];
  138. // Strongly recommended for the best service experience.
  139. //
  140. // Location(s) where the employer is looking to hire for this job posting.
  141. //
  142. // Specifying the full street address(es) of the hiring location enables
  143. // better API results, especially job searches by commute time.
  144. //
  145. // At most 50 locations are allowed for best search performance. If a job has
  146. // more locations, it is suggested to split it into multiple jobs with unique
  147. // [requisition_id][google.cloud.talent.v4beta1.Job.requisition_id]s (e.g. 'ReqA' becomes 'ReqA-1', 'ReqA-2', and so on.) as
  148. // multiple jobs with the same [company][google.cloud.talent.v4beta1.Job.company], [language_code][google.cloud.talent.v4beta1.Job.language_code] and
  149. // [requisition_id][google.cloud.talent.v4beta1.Job.requisition_id] are not allowed. If the original [requisition_id][google.cloud.talent.v4beta1.Job.requisition_id] must
  150. // be preserved, a custom field should be used for storage. It is also
  151. // suggested to group the locations that close to each other in the same job
  152. // for better search experience.
  153. //
  154. // The maximum number of allowed characters is 500.
  155. repeated string addresses = 6;
  156. // Job application information.
  157. ApplicationInfo application_info = 7;
  158. // The benefits included with the job.
  159. repeated JobBenefit job_benefits = 8;
  160. // Job compensation information (a.k.a. "pay rate") i.e., the compensation
  161. // that will paid to the employee.
  162. CompensationInfo compensation_info = 9;
  163. // A map of fields to hold both filterable and non-filterable custom job
  164. // attributes that are not covered by the provided structured fields.
  165. //
  166. // The keys of the map are strings up to 64 bytes and must match the
  167. // pattern: [a-zA-Z][a-zA-Z0-9_]*. For example, key0LikeThis or
  168. // KEY_1_LIKE_THIS.
  169. //
  170. // At most 100 filterable and at most 100 unfilterable keys are supported.
  171. // For filterable `string_values`, across all keys at most 200 values are
  172. // allowed, with each string no more than 255 characters. For unfilterable
  173. // `string_values`, the maximum total size of `string_values` across all keys
  174. // is 50KB.
  175. map<string, CustomAttribute> custom_attributes = 10;
  176. // The desired education degrees for the job, such as Bachelors, Masters.
  177. repeated DegreeType degree_types = 11;
  178. // The department or functional area within the company with the open
  179. // position.
  180. //
  181. // The maximum number of allowed characters is 255.
  182. string department = 12;
  183. // The employment type(s) of a job, for example,
  184. // [full time][google.cloud.talent.v4beta1.EmploymentType.FULL_TIME] or
  185. // [part time][google.cloud.talent.v4beta1.EmploymentType.PART_TIME].
  186. repeated EmploymentType employment_types = 13;
  187. // A description of bonus, commission, and other compensation
  188. // incentives associated with the job not including salary or pay.
  189. //
  190. // The maximum number of allowed characters is 10,000.
  191. string incentives = 14;
  192. // The language of the posting. This field is distinct from
  193. // any requirements for fluency that are associated with the job.
  194. //
  195. // Language codes must be in BCP-47 format, such as "en-US" or "sr-Latn".
  196. // For more information, see
  197. // [Tags for Identifying Languages](https://tools.ietf.org/html/bcp47){:
  198. // class="external" target="_blank" }.
  199. //
  200. // If this field is unspecified and [Job.description][google.cloud.talent.v4beta1.Job.description] is present, detected
  201. // language code based on [Job.description][google.cloud.talent.v4beta1.Job.description] is assigned, otherwise
  202. // defaults to 'en_US'.
  203. string language_code = 15;
  204. // The experience level associated with the job, such as "Entry Level".
  205. JobLevel job_level = 16;
  206. // A promotion value of the job, as determined by the client.
  207. // The value determines the sort order of the jobs returned when searching for
  208. // jobs using the featured jobs search call, with higher promotional values
  209. // being returned first and ties being resolved by relevance sort. Only the
  210. // jobs with a promotionValue >0 are returned in a FEATURED_JOB_SEARCH.
  211. //
  212. // Default value is 0, and negative values are treated as 0.
  213. int32 promotion_value = 17;
  214. // A description of the qualifications required to perform the
  215. // job. The use of this field is recommended
  216. // as an alternative to using the more general [description][google.cloud.talent.v4beta1.Job.description] field.
  217. //
  218. // This field accepts and sanitizes HTML input, and also accepts
  219. // bold, italic, ordered list, and unordered list markup tags.
  220. //
  221. // The maximum number of allowed characters is 10,000.
  222. string qualifications = 18;
  223. // A description of job responsibilities. The use of this field is
  224. // recommended as an alternative to using the more general [description][google.cloud.talent.v4beta1.Job.description]
  225. // field.
  226. //
  227. // This field accepts and sanitizes HTML input, and also accepts
  228. // bold, italic, ordered list, and unordered list markup tags.
  229. //
  230. // The maximum number of allowed characters is 10,000.
  231. string responsibilities = 19;
  232. // The job [PostingRegion][google.cloud.talent.v4beta1.PostingRegion] (for example, state, country) throughout
  233. // which the job is available. If this field is set, a [LocationFilter][google.cloud.talent.v4beta1.LocationFilter]
  234. // in a search query within the job region finds this job posting if an
  235. // exact location match isn't specified. If this field is set to
  236. // [PostingRegion.NATION][google.cloud.talent.v4beta1.PostingRegion.NATION] or [PostingRegion.ADMINISTRATIVE_AREA][google.cloud.talent.v4beta1.PostingRegion.ADMINISTRATIVE_AREA],
  237. // setting job [Job.addresses][google.cloud.talent.v4beta1.Job.addresses] to the same location level as this field
  238. // is strongly recommended.
  239. PostingRegion posting_region = 20;
  240. // Deprecated. The job is only visible to the owner.
  241. //
  242. // The visibility of the job.
  243. //
  244. // Defaults to [Visibility.ACCOUNT_ONLY][google.cloud.talent.v4beta1.Visibility.ACCOUNT_ONLY] if not specified.
  245. Visibility visibility = 21 [deprecated = true];
  246. // The start timestamp of the job in UTC time zone. Typically this field
  247. // is used for contracting engagements. Invalid timestamps are ignored.
  248. google.protobuf.Timestamp job_start_time = 22;
  249. // The end timestamp of the job. Typically this field is used for contracting
  250. // engagements. Invalid timestamps are ignored.
  251. google.protobuf.Timestamp job_end_time = 23;
  252. // The timestamp this job posting was most recently published. The default
  253. // value is the time the request arrives at the server. Invalid timestamps are
  254. // ignored.
  255. google.protobuf.Timestamp posting_publish_time = 24;
  256. // Strongly recommended for the best service experience.
  257. //
  258. // The expiration timestamp of the job. After this timestamp, the
  259. // job is marked as expired, and it no longer appears in search results. The
  260. // expired job can't be listed by the [ListJobs][google.cloud.talent.v4beta1.JobService.ListJobs] API,
  261. // but it can be retrieved with the [GetJob][google.cloud.talent.v4beta1.JobService.GetJob] API or
  262. // updated with the [UpdateJob][google.cloud.talent.v4beta1.JobService.UpdateJob] API or deleted with
  263. // the [DeleteJob][google.cloud.talent.v4beta1.JobService.DeleteJob] API. An expired job can
  264. // be updated and opened again by using a future expiration timestamp.
  265. // Updating an expired job fails if there is another existing open job with
  266. // same [company][google.cloud.talent.v4beta1.Job.company], [language_code][google.cloud.talent.v4beta1.Job.language_code] and [requisition_id][google.cloud.talent.v4beta1.Job.requisition_id].
  267. //
  268. // The expired jobs are retained in our system for 90 days. However, the
  269. // overall expired job count cannot exceed 3 times the maximum number of
  270. // open jobs over previous 7 days. If this threshold is exceeded,
  271. // expired jobs are cleaned out in order of earliest expire time.
  272. // Expired jobs are no longer accessible after they are cleaned
  273. // out.
  274. //
  275. // Invalid timestamps are ignored, and treated as expire time not provided.
  276. //
  277. // If the timestamp is before the instant request is made, the job
  278. // is treated as expired immediately on creation. This kind of job can
  279. // not be updated. And when creating a job with past timestamp, the
  280. // [posting_publish_time][google.cloud.talent.v4beta1.Job.posting_publish_time] must be set before
  281. // [posting_expire_time][google.cloud.talent.v4beta1.Job.posting_expire_time]. The purpose of this feature is
  282. // to allow other objects, such as [Application][google.cloud.talent.v4beta1.Application], to refer a job
  283. // that didn't exist in the system prior to becoming expired. If you
  284. // want to modify a job that was expired on creation,
  285. // delete it and create a new one.
  286. //
  287. // If this value isn't provided at the time of job creation or is invalid,
  288. // the job posting expires after 30 days from the job's creation time. For
  289. // example, if the job was created on 2017/01/01 13:00AM UTC with an
  290. // unspecified expiration date, the job expires after 2017/01/31 13:00AM UTC.
  291. //
  292. // If this value isn't provided on job update, it depends on the field masks
  293. // set by [UpdateJobRequest.update_mask][google.cloud.talent.v4beta1.UpdateJobRequest.update_mask]. If the field masks include
  294. // [job_end_time][google.cloud.talent.v4beta1.Job.job_end_time], or the masks are empty meaning that every field is
  295. // updated, the job posting expires after 30 days from the job's last
  296. // update time. Otherwise the expiration date isn't updated.
  297. google.protobuf.Timestamp posting_expire_time = 25;
  298. // Output only. The timestamp when this job posting was created.
  299. google.protobuf.Timestamp posting_create_time = 26 [(google.api.field_behavior) = OUTPUT_ONLY];
  300. // Output only. The timestamp when this job posting was last updated.
  301. google.protobuf.Timestamp posting_update_time = 27 [(google.api.field_behavior) = OUTPUT_ONLY];
  302. // Output only. Display name of the company listing the job.
  303. string company_display_name = 28 [(google.api.field_behavior) = OUTPUT_ONLY];
  304. // Output only. Derived details about the job posting.
  305. DerivedInfo derived_info = 29 [(google.api.field_behavior) = OUTPUT_ONLY];
  306. // Options for job processing.
  307. ProcessingOptions processing_options = 30;
  308. }