// Copyright 2020 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
//
// https://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.
// Note: this file is purely for documentation. Any contents are not expected
// to be loaded as the JS file.
/**
* A Job resource represents a job posting (also referred to as a "job listing"
* or "job requisition"). A job belongs to a Company, which is the hiring
* entity responsible for the job.
*
* @property {string} name
* Required during job update.
*
* The resource name for the job. This is generated by the service when a
* job is created.
*
* The format is
* "projects/{project_id}/tenants/{tenant_id}/jobs/{job_id}". For
* example, "projects/foo/tenants/bar/jobs/baz".
*
* If tenant id is unspecified, the default tenant is used. For
* example, "projects/foo/jobs/bar".
*
* Use of this field in job queries and API calls is preferred over the use of
* requisition_id since this value is unique.
*
* @property {string} company
* Required. The resource name of the company listing the job.
*
* The format is
* "projects/{project_id}/tenants/{tenant_id}/companies/{company_id}". For
* example, "projects/foo/tenants/bar/companies/baz".
*
* If tenant id is unspecified, the default tenant is used. For
* example, "projects/foo/companies/bar".
*
* @property {string} requisitionId
* Required. The requisition ID, also referred to as the posting ID, is assigned by the
* client to identify a job. This field is intended to be used by clients
* for client identification and tracking of postings. A job isn't allowed
* to be created if there is another job with the same company,
* language_code and requisition_id.
*
* The maximum number of allowed characters is 255.
*
* @property {string} title
* Required. The title of the job, such as "Software Engineer"
*
* The maximum number of allowed characters is 500.
*
* @property {string} description
* Required. The description of the job, which typically includes a multi-paragraph
* description of the company and related information. Separate fields are
* provided on the job object for responsibilities,
* qualifications, and other job characteristics. Use of
* these separate job fields is recommended.
*
* This field accepts and sanitizes HTML input, and also accepts
* bold, italic, ordered list, and unordered list markup tags.
*
* The maximum number of allowed characters is 100,000.
*
* @property {string[]} addresses
* Strongly recommended for the best service experience.
*
* Location(s) where the employer is looking to hire for this job posting.
*
* Specifying the full street address(es) of the hiring location enables
* better API results, especially job searches by commute time.
*
* At most 50 locations are allowed for best search performance. If a job has
* more locations, it is suggested to split it into multiple jobs with unique
* requisition_ids (e.g. 'ReqA' becomes 'ReqA-1', 'ReqA-2', and so on.) as
* multiple jobs with the same company, language_code and
* requisition_id are not allowed. If the original requisition_id must
* be preserved, a custom field should be used for storage. It is also
* suggested to group the locations that close to each other in the same job
* for better search experience.
*
* The maximum number of allowed characters is 500.
*
* @property {Object} applicationInfo
* Job application information.
*
* This object should have the same structure as [ApplicationInfo]{@link google.cloud.talent.v4beta1.ApplicationInfo}
*
* @property {number[]} jobBenefits
* The benefits included with the job.
*
* The number should be among the values of [JobBenefit]{@link google.cloud.talent.v4beta1.JobBenefit}
*
* @property {Object} compensationInfo
* Job compensation information (a.k.a. "pay rate") i.e., the compensation
* that will paid to the employee.
*
* This object should have the same structure as [CompensationInfo]{@link google.cloud.talent.v4beta1.CompensationInfo}
*
* @property {Object.<string, Object>} customAttributes
* A map of fields to hold both filterable and non-filterable custom job
* attributes that are not covered by the provided structured fields.
*
* The keys of the map are strings up to 64 bytes and must match the
* pattern: [a-zA-Z][a-zA-Z0-9_]*. For example, key0LikeThis or
* KEY_1_LIKE_THIS.
*
* At most 100 filterable and at most 100 unfilterable keys are supported.
* For filterable `string_values`, across all keys at most 200 values are
* allowed, with each string no more than 255 characters. For unfilterable
* `string_values`, the maximum total size of `string_values` across all keys
* is 50KB.
*
* @property {number[]} degreeTypes
* The desired education degrees for the job, such as Bachelors, Masters.
*
* The number should be among the values of [DegreeType]{@link google.cloud.talent.v4beta1.DegreeType}
*
* @property {string} department
* The department or functional area within the company with the open
* position.
*
* The maximum number of allowed characters is 255.
*
* @property {number[]} employmentTypes
* The employment type(s) of a job, for example,
* full time or
* part time.
*
* The number should be among the values of [EmploymentType]{@link google.cloud.talent.v4beta1.EmploymentType}
*
* @property {string} incentives
* A description of bonus, commission, and other compensation
* incentives associated with the job not including salary or pay.
*
* The maximum number of allowed characters is 10,000.
*
* @property {string} languageCode
* The language of the posting. This field is distinct from
* any requirements for fluency that are associated with the job.
*
* Language codes must 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){:
* class="external" target="_blank" }.
*
* If this field is unspecified and Job.description is present, detected
* language code based on Job.description is assigned, otherwise
* defaults to 'en_US'.
*
* @property {number} jobLevel
* The experience level associated with the job, such as "Entry Level".
*
* The number should be among the values of [JobLevel]{@link google.cloud.talent.v4beta1.JobLevel}
*
* @property {number} promotionValue
* A promotion value of the job, as determined by the client.
* The value determines the sort order of the jobs returned when searching for
* jobs using the featured jobs search call, with higher promotional values
* being returned first and ties being resolved by relevance sort. Only the
* jobs with a promotionValue >0 are returned in a FEATURED_JOB_SEARCH.
*
* Default value is 0, and negative values are treated as 0.
*
* @property {string} qualifications
* A description of the qualifications required to perform the
* job. The use of this field is recommended
* as an alternative to using the more general description field.
*
* This field accepts and sanitizes HTML input, and also accepts
* bold, italic, ordered list, and unordered list markup tags.
*
* The maximum number of allowed characters is 10,000.
*
* @property {string} responsibilities
* A description of job responsibilities. The use of this field is
* recommended as an alternative to using the more general description
* field.
*
* This field accepts and sanitizes HTML input, and also accepts
* bold, italic, ordered list, and unordered list markup tags.
*
* The maximum number of allowed characters is 10,000.
*
* @property {number} postingRegion
* The job PostingRegion (for example, state, country) throughout
* which the job is available. If this field is set, a LocationFilter
* in a search query within the job region finds this job posting if an
* exact location match isn't specified. If this field is set to
* PostingRegion.NATION or PostingRegion.ADMINISTRATIVE_AREA,
* setting job Job.addresses to the same location level as this field
* is strongly recommended.
*
* The number should be among the values of [PostingRegion]{@link google.cloud.talent.v4beta1.PostingRegion}
*
* @property {number} visibility
* Deprecated. The job is only visible to the owner.
*
* The visibility of the job.
*
* Defaults to Visibility.ACCOUNT_ONLY if not specified.
*
* The number should be among the values of [Visibility]{@link google.cloud.talent.v4beta1.Visibility}
*
* @property {Object} jobStartTime
* The start timestamp of the job in UTC time zone. Typically this field
* is used for contracting engagements. Invalid timestamps are ignored.
*
* This object should have the same structure as [Timestamp]{@link google.protobuf.Timestamp}
*
* @property {Object} jobEndTime
* The end timestamp of the job. Typically this field is used for contracting
* engagements. Invalid timestamps are ignored.
*
* This object should have the same structure as [Timestamp]{@link google.protobuf.Timestamp}
*
* @property {Object} postingPublishTime
* The timestamp this job posting was most recently published. The default
* value is the time the request arrives at the server. Invalid timestamps are
* ignored.
*
* This object should have the same structure as [Timestamp]{@link google.protobuf.Timestamp}
*
* @property {Object} postingExpireTime
* Strongly recommended for the best service experience.
*
* The expiration timestamp of the job. After this timestamp, the
* job is marked as expired, and it no longer appears in search results. The
* expired job can't be listed by the ListJobs API,
* but it can be retrieved with the GetJob API or
* updated with the UpdateJob API or deleted with
* the DeleteJob API. An expired job can
* be updated and opened again by using a future expiration timestamp.
* Updating an expired job fails if there is another existing open job with
* same company, language_code and requisition_id.
*
* The expired jobs are retained in our system for 90 days. However, the
* overall expired job count cannot exceed 3 times the maximum number of
* open jobs over previous 7 days. If this threshold is exceeded,
* expired jobs are cleaned out in order of earliest expire time.
* Expired jobs are no longer accessible after they are cleaned
* out.
*
* Invalid timestamps are ignored, and treated as expire time not provided.
*
* If the timestamp is before the instant request is made, the job
* is treated as expired immediately on creation. This kind of job can
* not be updated. And when creating a job with past timestamp, the
* posting_publish_time must be set before
* posting_expire_time. The purpose of this feature is
* to allow other objects, such as Application, to refer a job
* that didn't exist in the system prior to becoming expired. If you
* want to modify a job that was expired on creation,
* delete it and create a new one.
*
* If this value isn't provided at the time of job creation or is invalid,
* the job posting expires after 30 days from the job's creation time. For
* example, if the job was created on 2017/01/01 13:00AM UTC with an
* unspecified expiration date, the job expires after 2017/01/31 13:00AM UTC.
*
* If this value isn't provided on job update, it depends on the field masks
* set by UpdateJobRequest.update_mask. If the field masks include
* job_end_time, or the masks are empty meaning that every field is
* updated, the job posting expires after 30 days from the job's last
* update time. Otherwise the expiration date isn't updated.
*
* This object should have the same structure as [Timestamp]{@link google.protobuf.Timestamp}
*
* @property {Object} postingCreateTime
* Output only. The timestamp when this job posting was created.
*
* This object should have the same structure as [Timestamp]{@link google.protobuf.Timestamp}
*
* @property {Object} postingUpdateTime
* Output only. The timestamp when this job posting was last updated.
*
* This object should have the same structure as [Timestamp]{@link google.protobuf.Timestamp}
*
* @property {string} companyDisplayName
* Output only. Display name of the company listing the job.
*
* @property {Object} derivedInfo
* Output only. Derived details about the job posting.
*
* This object should have the same structure as [DerivedInfo]{@link google.cloud.talent.v4beta1.DerivedInfo}
*
* @property {Object} processingOptions
* Options for job processing.
*
* This object should have the same structure as [ProcessingOptions]{@link google.cloud.talent.v4beta1.ProcessingOptions}
*
* @typedef Job
* @memberof google.cloud.talent.v4beta1
* @see [google.cloud.talent.v4beta1.Job definition in proto format]{@link https://github.com/googleapis/googleapis/blob/master/google/cloud/talent/v4beta1/job.proto}
*/
const Job = {
// This is for documentation. Actual contents will be loaded by gRPC.
/**
* Application related details of a job posting.
*
* @property {string[]} emails
* Use this field to specify email address(es) to which resumes or
* applications can be sent.
*
* The maximum number of allowed characters for each entry is 255.
*
* @property {string} instruction
* Use this field to provide instructions, such as "Mail your application
* to ...", that a candidate can follow to apply for the job.
*
* This field accepts and sanitizes HTML input, and also accepts
* bold, italic, ordered list, and unordered list markup tags.
*
* The maximum number of allowed characters is 3,000.
*
* @property {string[]} uris
* Use this URI field to direct an applicant to a website, for example to
* link to an online application form.
*
* The maximum number of allowed characters for each entry is 2,000.
*
* @typedef ApplicationInfo
* @memberof google.cloud.talent.v4beta1
* @see [google.cloud.talent.v4beta1.Job.ApplicationInfo definition in proto format]{@link https://github.com/googleapis/googleapis/blob/master/google/cloud/talent/v4beta1/job.proto}
*/
ApplicationInfo: {
// This is for documentation. Actual contents will be loaded by gRPC.
},
/**
* Derived details about the job posting.
*
* @property {Object[]} locations
* Structured locations of the job, resolved from Job.addresses.
*
* locations are exactly matched to Job.addresses in the same
* order.
*
* This object should have the same structure as [Location]{@link google.cloud.talent.v4beta1.Location}
*
* @property {number[]} jobCategories
* Job categories derived from Job.title and Job.description.
*
* The number should be among the values of [JobCategory]{@link google.cloud.talent.v4beta1.JobCategory}
*
* @typedef DerivedInfo
* @memberof google.cloud.talent.v4beta1
* @see [google.cloud.talent.v4beta1.Job.DerivedInfo definition in proto format]{@link https://github.com/googleapis/googleapis/blob/master/google/cloud/talent/v4beta1/job.proto}
*/
DerivedInfo: {
// This is for documentation. Actual contents will be loaded by gRPC.
},
/**
* Options for job processing.
*
* @property {boolean} disableStreetAddressResolution
* If set to `true`, the service does not attempt to resolve a
* more precise address for the job.
*
* @property {number} htmlSanitization
* Option for job HTML content sanitization. Applied fields are:
*
* * description
* * applicationInfo.instruction
* * incentives
* * qualifications
* * responsibilities
*
* HTML tags in these fields may be stripped if sanitiazation isn't
* disabled.
*
* Defaults to HtmlSanitization.SIMPLE_FORMATTING_ONLY.
*
* The number should be among the values of [HtmlSanitization]{@link google.cloud.talent.v4beta1.HtmlSanitization}
*
* @typedef ProcessingOptions
* @memberof google.cloud.talent.v4beta1
* @see [google.cloud.talent.v4beta1.Job.ProcessingOptions definition in proto format]{@link https://github.com/googleapis/googleapis/blob/master/google/cloud/talent/v4beta1/job.proto}
*/
ProcessingOptions: {
// This is for documentation. Actual contents will be loaded by gRPC.
}
};