-
-
Notifications
You must be signed in to change notification settings - Fork 70
/
api_ai_contract_field_extrac.go
163 lines (144 loc) · 8.82 KB
/
api_ai_contract_field_extrac.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
// 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"
"io"
)
// ExtractAIContractField 支持从doc、docx和pdf文件类型中提取合同字段
//
// 单租户限流: 10QPS, 同租户下的应用没有限流, 共享本租户的 10QPS 限流
//
// doc: https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/ai/document_ai-v1/contract/field_extraction
// new doc: https://open.feishu.cn/document/server-docs/ai/document_ai-v1/contract/field_extraction
func (r *AIService) ExtractAIContractField(ctx context.Context, request *ExtractAIContractFieldReq, options ...MethodOptionFunc) (*ExtractAIContractFieldResp, *Response, error) {
if r.cli.mock.mockAIExtractAIContractField != nil {
r.cli.Log(ctx, LogLevelDebug, "[lark] AI#ExtractAIContractField mock enable")
return r.cli.mock.mockAIExtractAIContractField(ctx, request, options...)
}
req := &RawRequestReq{
Scope: "AI",
API: "ExtractAIContractField",
Method: "POST",
URL: r.cli.openBaseURL + "/open-apis/document_ai/v1/contract/field_extraction",
Body: request,
MethodOption: newMethodOption(options),
NeedTenantAccessToken: true,
IsFile: true,
}
resp := new(extractAIContractFieldResp)
response, err := r.cli.RawRequest(ctx, req, resp)
return resp.Data, response, err
}
// MockAIExtractAIContractField mock AIExtractAIContractField method
func (r *Mock) MockAIExtractAIContractField(f func(ctx context.Context, request *ExtractAIContractFieldReq, options ...MethodOptionFunc) (*ExtractAIContractFieldResp, *Response, error)) {
r.mockAIExtractAIContractField = f
}
// UnMockAIExtractAIContractField un-mock AIExtractAIContractField method
func (r *Mock) UnMockAIExtractAIContractField() {
r.mockAIExtractAIContractField = nil
}
// ExtractAIContractFieldReq ...
type ExtractAIContractFieldReq struct {
File io.Reader `json:"file,omitempty"` // 合同字段解析的源文件, 当前只支持pdf, doc, docx三种类型的文件, 示例值: file binary
PdfPageLimit int64 `json:"pdf_page_limit,omitempty"` // pdf页数限制, 太长会导致latency增加, 最大允许100页, 示例值: 15
OcrMode string `json:"ocr_mode,omitempty"` // ocr 参数, 当前支持force, pdf, unused三种格式, 示例值: "auto", 可选值有: force: pdf类型文件直接走OCR解析, auto: pdf类型文件先走本地解析, 无法解析(扫描/图片版)再走OCR, unused: 不调用OCR, 扫描/图片PDF返回不可解析信息
}
// ExtractAIContractFieldResp ...
type ExtractAIContractFieldResp struct {
FileID string `json:"file_id,omitempty"` // 文件的唯一id
Price *ExtractAIContractFieldRespPrice `json:"price,omitempty"` // 总交易金额
Time *ExtractAIContractFieldRespTime `json:"time,omitempty"` // 期限相关信息, 包括开始日期、结束日期、有效时长
Copy *ExtractAIContractFieldRespCopy `json:"copy,omitempty"` // 盖章份数
Currency *ExtractAIContractFieldRespCurrency `json:"currency,omitempty"` // 币种
Header string `json:"header,omitempty"` // 合同标题
BodyInfo []*ExtractAIContractFieldRespBodyInfo `json:"body_info,omitempty"` // 主体信息
BankInfo []*ExtractAIContractFieldRespBankInfo `json:"bank_info,omitempty"` // 银行信息
}
// ExtractAIContractFieldRespBankInfo ...
type ExtractAIContractFieldRespBankInfo struct {
BankType string `json:"bank_type,omitempty"` // 甲乙方信息类型, 可选值有: buy_bank: 甲方银行, sell_bank: 乙方银行, third_bank: 第三方银行, unceratin_bank: 其他方银行
Value *ExtractAIContractFieldRespBankInfoValue `json:"value,omitempty"` // 值
}
// ExtractAIContractFieldRespBankInfoValue ...
type ExtractAIContractFieldRespBankInfoValue struct {
AccountName string `json:"account_name,omitempty"` // 账户名
BankName string `json:"bank_name,omitempty"` // 银行名称
AccountNumber string `json:"account_number,omitempty"` // 账户ID
Phone string `json:"phone,omitempty"` // 电话
Contacts string `json:"contacts,omitempty"` // 联系人
TaxNumber string `json:"tax_number,omitempty"` // 传真号码
Address string `json:"address,omitempty"` // 联系地址
IDNumber string `json:"id_number,omitempty"` // id号
Email string `json:"email,omitempty"` // 邮箱
}
// ExtractAIContractFieldRespBodyInfo ...
type ExtractAIContractFieldRespBodyInfo struct {
BodyType string `json:"body_type,omitempty"` // 主体类型, 可选值有: buy: 甲方主体, sell: 乙方主体, third: 第三方、其他方主体
Value *ExtractAIContractFieldRespBodyInfoValue `json:"value,omitempty"` // 值
}
// ExtractAIContractFieldRespBodyInfoValue ...
type ExtractAIContractFieldRespBodyInfoValue struct {
Address string `json:"address,omitempty"` // 地址
Contacts string `json:"contacts,omitempty"` // 联系人
Email string `json:"email,omitempty"` // 邮箱
Phone string `json:"phone,omitempty"` // 电话
IDNumber string `json:"id_number,omitempty"` // ID
LegalRepresentative string `json:"legal_representative,omitempty"` // 法人代表
Party string `json:"party,omitempty"` // 当事人
}
// ExtractAIContractFieldRespCopy ...
type ExtractAIContractFieldRespCopy struct {
CopyNum int64 `json:"copy_num,omitempty"` // 盖章份数
OriginalCopy string `json:"original_copy,omitempty"` // 从原文中抽取的盖章份数
Key string `json:"key,omitempty"` // 盖章文件类型
Text string `json:"text,omitempty"` // 原文有关盖章份数的描述
}
// ExtractAIContractFieldRespCurrency ...
type ExtractAIContractFieldRespCurrency struct {
CurrencyName string `json:"currency_name,omitempty"` // 币种名称
CurrencyText string `json:"currency_text,omitempty"` // 币种符号
}
// ExtractAIContractFieldRespPrice ...
type ExtractAIContractFieldRespPrice struct {
ContractPrice float64 `json:"contract_price,omitempty"` // 交易金额
ContractPriceOriginal string `json:"contract_price_original,omitempty"` // 从原文中抽取的交易金额
Text string `json:"text,omitempty"` // 原文中描述交易金额的文字
}
// ExtractAIContractFieldRespTime ...
type ExtractAIContractFieldRespTime struct {
TimeStart string `json:"time_start,omitempty"` // 开始时间
TimeEnd string `json:"time_end,omitempty"` // 结束时间
OriginalTimeStart string `json:"original_time_start,omitempty"` // 原文中抽取出的开始时间
OriginalTimeEnd string `json:"original_time_end,omitempty"` // 原文中抽取出的结束时间
TextStart string `json:"text_start,omitempty"` // 原文中关于开始时间的描述
TextEnd string `json:"text_end,omitempty"` // 原文中关于结束时间的描述
InitialTerm *ExtractAIContractFieldRespTimeInitialTerm `json:"initial_term,omitempty"` // 合同持续时长
TextInitialTerm string `json:"text_initial_term,omitempty"` // 原文中关于持续时间的描述
}
// ExtractAIContractFieldRespTimeInitialTerm ...
type ExtractAIContractFieldRespTimeInitialTerm struct {
InitialTime string `json:"initial_time,omitempty"` // 合同持续时长
InitialUnit string `json:"initial_unit,omitempty"` // 持续时长单位
}
// extractAIContractFieldResp ...
type extractAIContractFieldResp struct {
Code int64 `json:"code,omitempty"` // 错误码, 非 0 表示失败
Msg string `json:"msg,omitempty"` // 错误描述
Data *ExtractAIContractFieldResp `json:"data,omitempty"`
Error *ErrorDetail `json:"error,omitempty"`
}