// Code generated by lark_sdk_gen. DO NOT EDIT.
/**
 * Copyright 2022 chyroc
 *
 * 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.
 */

package lark

import (
	"context"
)

// GetCoreHRCompensationPlanList 批量查询薪资方案
//
// doc: https://open.larkoffice.com/document/uAjLw4CM/ukTMukTMukTM/compensation-v1/plan/list
func (r *CoreHRService) GetCoreHRCompensationPlanList(ctx context.Context, request *GetCoreHRCompensationPlanListReq, options ...MethodOptionFunc) (*GetCoreHRCompensationPlanListResp, *Response, error) {
	if r.cli.mock.mockCoreHRGetCoreHRCompensationPlanList != nil {
		r.cli.Log(ctx, LogLevelDebug, "[lark] CoreHR#GetCoreHRCompensationPlanList mock enable")
		return r.cli.mock.mockCoreHRGetCoreHRCompensationPlanList(ctx, request, options...)
	}

	req := &RawRequestReq{
		Scope:                 "CoreHR",
		API:                   "GetCoreHRCompensationPlanList",
		Method:                "GET",
		URL:                   r.cli.openBaseURL + "/open-apis/compensation/v1/plans",
		Body:                  request,
		MethodOption:          newMethodOption(options),
		NeedTenantAccessToken: true,
	}
	resp := new(getCoreHRCompensationPlanListResp)

	response, err := r.cli.RawRequest(ctx, req, resp)
	return resp.Data, response, err
}

// MockCoreHRGetCoreHRCompensationPlanList mock CoreHRGetCoreHRCompensationPlanList method
func (r *Mock) MockCoreHRGetCoreHRCompensationPlanList(f func(ctx context.Context, request *GetCoreHRCompensationPlanListReq, options ...MethodOptionFunc) (*GetCoreHRCompensationPlanListResp, *Response, error)) {
	r.mockCoreHRGetCoreHRCompensationPlanList = f
}

// UnMockCoreHRGetCoreHRCompensationPlanList un-mock CoreHRGetCoreHRCompensationPlanList method
func (r *Mock) UnMockCoreHRGetCoreHRCompensationPlanList() {
	r.mockCoreHRGetCoreHRCompensationPlanList = nil
}

// GetCoreHRCompensationPlanListReq ...
type GetCoreHRCompensationPlanListReq struct {
	PageSize  int64   `query:"page_size" json:"-"`  // 分页大小, 示例值: 100, 默认值: `100`, 取值范围: `1` ～ `500`
	PageToken *string `query:"page_token" json:"-"` // 分页标记, 第一次请求不填, 表示从头开始遍历；分页查询结果还有更多项时会同时返回新的 page_token, 下次遍历可采用该 page_token 获取查询结果, 示例值: 213432123
}

// GetCoreHRCompensationPlanListResp ...
type GetCoreHRCompensationPlanListResp struct {
	Items     []*GetCoreHRCompensationPlanListRespItem `json:"items,omitempty"`      // 薪资方案信息列表
	PageToken string                                   `json:"page_token,omitempty"` // 分页标记, 当 has_more 为 true 时, 会同时返回新的 page_token, 否则不返回 page_token
	HasMore   bool                                     `json:"has_more,omitempty"`   // 是否还有更多项
}

// GetCoreHRCompensationPlanListRespItem ...
type GetCoreHRCompensationPlanListRespItem struct {
	ID                    string                                                  `json:"id,omitempty"`                      // 薪资方案ID
	Tid                   string                                                  `json:"tid,omitempty"`                     // 薪资方案版本ID
	Name                  string                                                  `json:"name,omitempty"`                    // 薪资方案名称
	Description           string                                                  `json:"description,omitempty"`             // 薪资方案描述
	EffectiveDate         string                                                  `json:"effective_date,omitempty"`          // 薪资方案生效时间
	PlanScope             *GetCoreHRCompensationPlanListRespItemPlanScope         `json:"plan_scope,omitempty"`              // 薪资方案适用范围
	CurrencyID            string                                                  `json:"currency_id,omitempty"`             // 币种ID
	ProbationSalaryStatus bool                                                    `json:"probation_salary_status,omitempty"` // 开启试用期薪酬状态
	PlanItems             []*GetCoreHRCompensationPlanListRespItemPlanItem        `json:"plan_items,omitempty"`              // 方案关联的薪资项, 字段权限要求: 获取薪资方案的关联薪资项
	PlanIndicators        []*GetCoreHRCompensationPlanListRespItemPlanIndicator   `json:"plan_indicators,omitempty"`         // 方案关联的薪资统计指标, 字段权限要求: 获取薪资方案的关联薪资指标
	I18nNames             []*GetCoreHRCompensationPlanListRespItemI18nName        `json:"i18n_names,omitempty"`              // 多语言名称
	I18nDescriptions      []*GetCoreHRCompensationPlanListRespItemI18nDescription `json:"i18n_descriptions,omitempty"`       // 多语言描述
}

// GetCoreHRCompensationPlanListRespItemI18nDescription ...
type GetCoreHRCompensationPlanListRespItemI18nDescription struct {
	Locale string `json:"locale,omitempty"` // 语言版本, 例如: “zh-CN”、“en-US”
	Value  string `json:"value,omitempty"`  // 语言名称
}

// GetCoreHRCompensationPlanListRespItemI18nName ...
type GetCoreHRCompensationPlanListRespItemI18nName struct {
	Locale string `json:"locale,omitempty"` // 语言版本, 例如: “zh-CN”、“en-US”
	Value  string `json:"value,omitempty"`  // 语言名称
}

// GetCoreHRCompensationPlanListRespItemPlanIndicator ...
type GetCoreHRCompensationPlanListRespItemPlanIndicator struct {
	IndicatorID        string                                                                `json:"indicator_id,omitempty"`         // 薪资统计指标ID, 详细信息可以通过[批量查询薪资统计指标](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/compensation-v1/indicator/list)接口查询获得
	PlanIndicatorLogic *GetCoreHRCompensationPlanListRespItemPlanIndicatorPlanIndicatorLogic `json:"plan_indicator_logic,omitempty"` // 方案关联薪资统计指标逻辑配置
}

// GetCoreHRCompensationPlanListRespItemPlanIndicatorPlanIndicatorLogic ...
type GetCoreHRCompensationPlanListRespItemPlanIndicatorPlanIndicatorLogic struct {
	Fixed   string                                                                       `json:"fixed,omitempty"`   // 固定值
	Formula *GetCoreHRCompensationPlanListRespItemPlanIndicatorPlanIndicatorLogicFormula `json:"formula,omitempty"` // 公式配置
}

// GetCoreHRCompensationPlanListRespItemPlanIndicatorPlanIndicatorLogicFormula ...
type GetCoreHRCompensationPlanListRespItemPlanIndicatorPlanIndicatorLogicFormula struct {
	Expr          string                                                                                     `json:"expr,omitempty"`           // 公式表达式
	FormulaParams []*GetCoreHRCompensationPlanListRespItemPlanIndicatorPlanIndicatorLogicFormulaFormulaParam `json:"formula_params,omitempty"` // 公式参数列表
}

// GetCoreHRCompensationPlanListRespItemPlanIndicatorPlanIndicatorLogicFormulaFormulaParam ...
type GetCoreHRCompensationPlanListRespItemPlanIndicatorPlanIndicatorLogicFormulaFormulaParam struct {
	RefType int64  `json:"ref_type,omitempty"` // 引用类型, 可选值有: 1: 引用薪资项, 2: 引用薪资指标
	ID      string `json:"id,omitempty"`       // 引用类型ID
}

// GetCoreHRCompensationPlanListRespItemPlanItem ...
type GetCoreHRCompensationPlanListRespItemPlanItem struct {
	AdjustmentType             string                                                      `json:"adjustment_type,omitempty"`              // 定薪方式, 可选值有: manual: 手动输入, formula: 公式计算, fixed: 固定值
	ItemID                     string                                                      `json:"item_id,omitempty"`                      // 薪资项ID, 详细信息可以通过[批量查询薪资项](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/compensation-v1/item/list)接口查询获得
	PlanItemLogic              *GetCoreHRCompensationPlanListRespItemPlanItemPlanItemLogic `json:"plan_item_logic,omitempty"`              // 方案关联薪资项逻辑配置
	ProbationDiscountType      string                                                      `json:"probation_discount_type,omitempty"`      // 试用期薪酬类型, 可选值有: percentum: 百分比, manual_input: 手动输入, none: 不区分试用期和转正薪酬, fixed: 固定值, formula: 公式计算, not_set: 未设置试用期
	ProbationDiscountPercentum string                                                      `json:"probation_discount_percentum,omitempty"` // 试用期薪酬百分比
}

// GetCoreHRCompensationPlanListRespItemPlanItemPlanItemLogic ...
type GetCoreHRCompensationPlanListRespItemPlanItemPlanItemLogic struct {
	Fixed   string                                                             `json:"fixed,omitempty"`   // 固定值
	Formula *GetCoreHRCompensationPlanListRespItemPlanItemPlanItemLogicFormula `json:"formula,omitempty"` // 公式配置
}

// GetCoreHRCompensationPlanListRespItemPlanItemPlanItemLogicFormula ...
type GetCoreHRCompensationPlanListRespItemPlanItemPlanItemLogicFormula struct {
	Expr          string                                                                           `json:"expr,omitempty"`           // 公式表达式
	FormulaParams []*GetCoreHRCompensationPlanListRespItemPlanItemPlanItemLogicFormulaFormulaParam `json:"formula_params,omitempty"` // 公式参数列表
}

// GetCoreHRCompensationPlanListRespItemPlanItemPlanItemLogicFormulaFormulaParam ...
type GetCoreHRCompensationPlanListRespItemPlanItemPlanItemLogicFormulaFormulaParam struct {
	RefType int64  `json:"ref_type,omitempty"` // 引用类型, 可选值有: 1: 引用薪资项, 2: 引用薪资指标
	ID      string `json:"id,omitempty"`       // 引用类型ID
}

// GetCoreHRCompensationPlanListRespItemPlanScope ...
type GetCoreHRCompensationPlanListRespItemPlanScope struct {
	IsAll          bool                                                           `json:"is_all,omitempty"`          // 是否全部范围
	PlanConditions []*GetCoreHRCompensationPlanListRespItemPlanScopePlanCondition `json:"plan_conditions,omitempty"` // 方案适用范围条件组
}

// GetCoreHRCompensationPlanListRespItemPlanScopePlanCondition ...
type GetCoreHRCompensationPlanListRespItemPlanScopePlanCondition struct {
	LeftType   int64    `json:"left_type,omitempty"`   // 适用范围左值, 可选值有: 1: 部门, 2: 部门（包含下级部门）, 3: 工作地点, 4: 工作地点（包含下级地点）, 5: 公司, 6: 公司（包含下级公司）, 7: 序列, 8: 序列（包含子序列）, 9: 职务, 10: 职级, 11: 人员类型, 12: 招聘类型, 13: 国家/地区, 14: 职等
	Operator   int64    `json:"operator,omitempty"`    // 适用范围操作, 可选值有: 1: 包含, 2: 不包含
	RightValue []string `json:"right_value,omitempty"` // 部门ID, 详细信息可以通过[批量查询部门](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/corehr-v2/department/batch_get)接口查询获得, 工作地点ID, 详细信息可以通过[批量查询地点](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/corehr-v1/location/list)接口查询获得, 成本中心ID, 详细信息可以通过[搜索成本中心信息](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/corehr-v2/cost_center/search)接口查询获得, 职务ID, 详细信息可以通过[批量查询职务](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/corehr-v2/job/list)接口查询获得, 职级ID, 详细信息可以通过[通过职级 ID 批量获取职级信息](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/corehr-v2/job_level/batch_get)接口查询获得, 序列ID, 详细信息可以通过[通过序列 ID 批量获取序列信息](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/corehr-v2/job_family/batch_get)接口查询获得, 人员类型ID, 详细信息可以通过[批量查询人员类型](https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/corehr-v1/employee_type/list)接口查询获得
}

// getCoreHRCompensationPlanListResp ...
type getCoreHRCompensationPlanListResp struct {
	Code  int64                              `json:"code,omitempty"` // 错误码, 非 0 表示失败
	Msg   string                             `json:"msg,omitempty"`  // 错误描述
	Data  *GetCoreHRCompensationPlanListResp `json:"data,omitempty"`
	Error *ErrorDetail                       `json:"error,omitempty"`
}
