Files
docs/财务管理/openapi/finance-f1-manual-v1.yaml
T

252 lines
13 KiB
YAML
Raw Normal View History

2026-08-11 09:25:45 +08:00
openapi: 3.0.3
info:
title: Finance F1 Manual AR API
version: 1.0.0
description: 首期人工账单、收款和成本接口;仅 CNY,平台财务可写,客户只读。
servers:
- url: /api
paths:
2026-08-11 10:45:57 +08:00
/platform/finance/v1/customers/{tenantId}/terms:
get:
summary: 查询客户账期
x-permission: platform:finance:customer-terms:view
security: [{platformFinance: []}]
parameters: [{$ref: '#/components/parameters/TenantId'}]
responses: {'200': {$ref: '#/components/responses/SuccessObject'}, '403': {$ref: '#/components/responses/BusinessError'}}
put:
summary: 保存客户账期
x-permission: platform:finance:customer-terms:update
security: [{platformFinance: []}]
parameters: [{$ref: '#/components/parameters/TenantId'}, {$ref: '#/components/parameters/IdempotencyKey'}]
requestBody: {required: true, content: {application/json: {schema: {$ref: '#/components/schemas/CustomerTermsRequest'}}}}
responses: {'200': {$ref: '#/components/responses/SuccessObject'}, '403': {$ref: '#/components/responses/BusinessError'}}
2026-08-11 09:25:45 +08:00
/platform/finance/v1/bills:
get:
summary: 查询平台账单
2026-08-11 10:45:57 +08:00
x-permission: platform:finance:bill:view
2026-08-11 09:25:45 +08:00
security: [{platformFinance: []}]
parameters:
2026-08-11 10:45:57 +08:00
- {$ref: '#/components/parameters/RequiredCustomerId'}
responses: {'200': {$ref: '#/components/responses/SuccessList'}}
2026-08-11 09:25:45 +08:00
post:
summary: 创建账单草稿
2026-08-11 10:45:57 +08:00
x-permission: platform:finance:bill:create
2026-08-11 09:25:45 +08:00
security: [{platformFinance: []}]
parameters: [{$ref: '#/components/parameters/IdempotencyKey'}]
requestBody: {required: true, content: {application/json: {schema: {$ref: '#/components/schemas/CreateBillRequest'}}}}
responses: {'200': {$ref: '#/components/responses/SuccessBill'}, '403': {$ref: '#/components/responses/BusinessError'}}
/platform/finance/v1/bills/{billId}:
get:
summary: 查询平台账单详情
2026-08-11 10:45:57 +08:00
x-permission: platform:finance:bill:view
2026-08-11 09:25:45 +08:00
security: [{platformFinance: []}]
parameters: [{$ref: '#/components/parameters/BillId'}]
responses: {'200': {$ref: '#/components/responses/SuccessBill'}}
put:
summary: 更新账单草稿
2026-08-11 10:45:57 +08:00
x-permission: platform:finance:bill:update
2026-08-11 09:25:45 +08:00
security: [{platformFinance: []}]
parameters: [{$ref: '#/components/parameters/BillId'}, {$ref: '#/components/parameters/IdempotencyKey'}]
requestBody: {required: true, content: {application/json: {schema: {$ref: '#/components/schemas/UpdateBillRequest'}}}}
responses: {'200': {$ref: '#/components/responses/SuccessBill'}}
/platform/finance/v1/bills/{billId}/issue:
post:
summary: 出账并冻结账单
2026-08-11 10:45:57 +08:00
x-permission: platform:finance:bill:issue
2026-08-11 09:25:45 +08:00
security: [{platformFinance: []}]
parameters: [{$ref: '#/components/parameters/BillId'}, {$ref: '#/components/parameters/IdempotencyKey'}]
requestBody: {required: true, content: {application/json: {schema: {$ref: '#/components/schemas/VersionRequest'}}}}
responses: {'200': {$ref: '#/components/responses/SuccessBill'}}
/platform/finance/v1/bills/{billId}/adjust:
post:
summary: 出账后调整并生成新版本
2026-08-11 10:45:57 +08:00
x-permission: platform:finance:bill:adjust
2026-08-11 09:25:45 +08:00
security: [{platformFinance: []}]
parameters: [{$ref: '#/components/parameters/BillId'}, {$ref: '#/components/parameters/IdempotencyKey'}]
requestBody: {required: true, content: {application/json: {schema: {$ref: '#/components/schemas/AdjustBillRequest'}}}}
responses: {'200': {$ref: '#/components/responses/SuccessBill'}}
/platform/finance/v1/bills/{billId}/void:
post:
summary: 作废账单
2026-08-11 10:45:57 +08:00
x-permission: platform:finance:bill:void
2026-08-11 09:25:45 +08:00
security: [{platformFinance: []}]
parameters: [{$ref: '#/components/parameters/BillId'}, {$ref: '#/components/parameters/IdempotencyKey'}]
requestBody: {required: true, content: {application/json: {schema: {$ref: '#/components/schemas/ReasonRequest'}}}}
responses: {'200': {$ref: '#/components/responses/SuccessBill'}}
/platform/finance/v1/receipts:
post:
summary: 人工登记收款并分配账单
2026-08-11 10:45:57 +08:00
x-permission: platform:finance:receipt:create
2026-08-11 09:25:45 +08:00
security: [{platformFinance: []}]
parameters: [{$ref: '#/components/parameters/IdempotencyKey'}]
requestBody: {required: true, content: {application/json: {schema: {$ref: '#/components/schemas/CreateReceiptRequest'}}}}
responses: {'200': {$ref: '#/components/responses/SuccessReceipt'}}
get:
summary: 查询收款记录
2026-08-11 10:45:57 +08:00
x-permission: platform:finance:receipt:view
2026-08-11 09:25:45 +08:00
security: [{platformFinance: []}]
2026-08-11 10:45:57 +08:00
parameters: [{$ref: '#/components/parameters/OptionalCustomerId'}]
responses: {'200': {$ref: '#/components/responses/SuccessList'}}
2026-08-11 09:25:45 +08:00
/platform/finance/v1/cost-entries:
post:
summary: 人工登记单票或整柜成本
2026-08-11 10:45:57 +08:00
x-permission: platform:finance:cost:create
2026-08-11 09:25:45 +08:00
security: [{platformFinance: []}]
parameters: [{$ref: '#/components/parameters/IdempotencyKey'}]
requestBody: {required: true, content: {application/json: {schema: {$ref: '#/components/schemas/CreateCostRequest'}}}}
responses: {'200': {$ref: '#/components/responses/SuccessCost'}}
get:
summary: 查询成本记录
2026-08-11 10:45:57 +08:00
x-permission: platform:finance:cost:view
2026-08-11 09:25:45 +08:00
security: [{platformFinance: []}]
2026-08-11 10:45:57 +08:00
parameters: [{$ref: '#/components/parameters/OptionalCustomerId'}]
responses: {'200': {$ref: '#/components/responses/SuccessList'}}
2026-08-11 09:25:45 +08:00
/client/finance/v1/bills:
get:
summary: 客户只读查询账单
2026-08-11 10:45:57 +08:00
x-permission: merchant:finance:statement:list
2026-08-11 09:25:45 +08:00
security: [{customerFinanceRead: []}]
2026-08-11 10:45:57 +08:00
responses: {'200': {$ref: '#/components/responses/SuccessList'}, '403': {$ref: '#/components/responses/BusinessError'}}
2026-08-11 09:25:45 +08:00
/client/finance/v1/bills/{billId}:
get:
summary: 客户只读查看账单详情
2026-08-11 10:45:57 +08:00
x-permission: merchant:finance:statement:view
2026-08-11 09:25:45 +08:00
security: [{customerFinanceRead: []}]
parameters: [{$ref: '#/components/parameters/BillId'}]
responses: {'200': {$ref: '#/components/responses/SuccessBill'}, '403': {$ref: '#/components/responses/BusinessError'}}
/client/finance/v1/receipts:
get:
summary: 客户只读查询收款记录
2026-08-11 10:45:57 +08:00
x-permission: merchant:finance:statement:view
2026-08-11 09:25:45 +08:00
security: [{customerFinanceRead: []}]
2026-08-11 10:45:57 +08:00
responses: {'200': {$ref: '#/components/responses/SuccessList'}, '403': {$ref: '#/components/responses/BusinessError'}}
2026-08-11 09:25:45 +08:00
components:
securitySchemes:
platformFinance: {type: http, scheme: bearer}
customerFinanceRead: {type: http, scheme: bearer}
parameters:
BillId: {name: billId, in: path, required: true, schema: {type: string, pattern: '^[1-9][0-9]*$'}}
2026-08-11 10:45:57 +08:00
TenantId: {name: tenantId, in: path, required: true, description: 后端兼容字段,对应产品中的客户 ID, schema: {type: string, pattern: '^[1-9][0-9]*$'}}
RequiredCustomerId: {name: customerId, in: query, required: true, schema: {type: string, pattern: '^[1-9][0-9]*$'}}
OptionalCustomerId: {name: customerId, in: query, required: false, schema: {type: string, pattern: '^[1-9][0-9]*$'}}
2026-08-11 09:25:45 +08:00
IdempotencyKey: {name: Idempotency-Key, in: header, required: true, schema: {type: string, maxLength: 128}}
schemas:
2026-08-11 10:45:57 +08:00
CustomerTermsRequest:
type: object
required: [creditDays]
properties:
customerName: {type: string, maxLength: 200, description: 客户名称快照;未传时由服务端按客户主数据补齐}
creditDays: {type: integer, minimum: 0, maximum: 3650, default: 30, description: 自然日账期}
2026-08-11 09:25:45 +08:00
CreateBillRequest:
type: object
required: [customerId, billDate, lines]
properties:
2026-08-11 10:45:57 +08:00
customerId: {type: string, pattern: '^[1-9][0-9]*$'}
2026-08-11 09:25:45 +08:00
billDate: {type: string, format: date}
lines: {type: array, minItems: 1, items: {$ref: '#/components/schemas/BillLineInput'}}
UpdateBillRequest:
2026-08-11 10:45:57 +08:00
type: object
required: [customerId, billDate, expectedVersion, lines]
properties:
customerId: {type: string, pattern: '^[1-9][0-9]*$'}
billDate: {type: string, format: date}
expectedVersion: {type: integer, minimum: 0}
lines: {type: array, minItems: 1, items: {$ref: '#/components/schemas/BillLineInput'}}
2026-08-11 09:25:45 +08:00
BillLineInput:
type: object
required: [sourceFeeId, sourceFeeVersion, amount]
properties:
2026-08-11 10:45:57 +08:00
sourceFeeId: {type: string, pattern: '^[1-9][0-9]*$'}
2026-08-11 09:25:45 +08:00
sourceFeeVersion: {type: integer, minimum: 1}
2026-08-11 10:45:57 +08:00
orderId: {type: string, pattern: '^[1-9][0-9]*$'}
inboundId: {type: string, pattern: '^[1-9][0-9]*$'}
2026-08-11 09:25:45 +08:00
feeItemName: {type: string}
2026-08-11 10:45:57 +08:00
amount: {type: number, minimum: 0, multipleOf: 0.000001}
2026-08-11 09:25:45 +08:00
VersionRequest:
type: object
required: [expectedVersion]
properties: {expectedVersion: {type: integer, minimum: 0}}
ReasonRequest:
type: object
required: [expectedVersion, reason]
properties:
expectedVersion: {type: integer, minimum: 0}
reason: {type: string, minLength: 1, maxLength: 500}
AdjustBillRequest:
allOf:
- {$ref: '#/components/schemas/ReasonRequest'}
- type: object
required: [lines]
properties: {lines: {type: array, minItems: 1, items: {$ref: '#/components/schemas/BillLineInput'}}}
CreateReceiptRequest:
type: object
required: [customerId, receivedDate, amount, paymentMethod, voucherFileIds, allocations]
properties:
2026-08-11 10:45:57 +08:00
customerId: {type: string, pattern: '^[1-9][0-9]*$'}
2026-08-11 09:25:45 +08:00
receivedDate: {type: string, format: date}
2026-08-11 10:45:57 +08:00
amount: {type: number, minimum: 0, exclusiveMinimum: true, multipleOf: 0.000001}
2026-08-11 09:25:45 +08:00
currency: {type: string, enum: [CNY], default: CNY}
paymentMethod: {type: string, enum: [BANK_TRANSFER, CASH, OTHER]}
voucherFileIds: {type: array, minItems: 1, items: {type: string}}
remark: {type: string, maxLength: 500}
allocations: {type: array, minItems: 1, items: {$ref: '#/components/schemas/ReceiptAllocationInput'}}
example:
customerId: '10001'
receivedDate: '2026-08-11'
amount: 300
currency: CNY
paymentMethod: BANK_TRANSFER
voucherFileIds: ['90001']
allocations:
- {billId: '81001', amount: 100}
- {billId: '81002', amount: 100}
- {billId: '81003', amount: 100}
ReceiptAllocationInput:
type: object
required: [billId, amount]
properties:
2026-08-11 10:45:57 +08:00
billId: {type: string, pattern: '^[1-9][0-9]*$'}
amount: {type: number, minimum: 0, exclusiveMinimum: true, multipleOf: 0.000001}
2026-08-11 09:25:45 +08:00
CreateCostRequest:
type: object
2026-08-11 10:45:57 +08:00
description: SINGLE_ORDER 必须提供 orderId;CONTAINER_SHARED 必须提供 containerId,并按柜内有效票体积分摊。
required: [customerId, costType, amount, expenseName, voucherFileIds]
2026-08-11 09:25:45 +08:00
properties:
2026-08-11 10:45:57 +08:00
customerId: {type: string, pattern: '^[1-9][0-9]*$'}
2026-08-11 09:25:45 +08:00
costType: {type: string, enum: [SINGLE_ORDER, CONTAINER_SHARED]}
2026-08-11 10:45:57 +08:00
orderId: {type: string, pattern: '^[1-9][0-9]*$'}
containerId: {type: string, pattern: '^[1-9][0-9]*$'}
2026-08-11 09:25:45 +08:00
expenseName: {type: string, minLength: 1, maxLength: 100}
2026-08-11 10:45:57 +08:00
amount: {type: number, minimum: 0, exclusiveMinimum: true, multipleOf: 0.000001}
2026-08-11 09:25:45 +08:00
currency: {type: string, enum: [CNY], default: CNY}
voucherFileIds: {type: array, minItems: 1, items: {type: string}}
remark: {type: string, maxLength: 500}
BillStatus: {type: string, enum: [DRAFT, ISSUED, PARTIALLY_PAID, PAID, VOIDED]}
ApiEnvelope:
type: object
required: [code, message, data]
properties:
code: {type: string, example: '200'}
message: {type: string}
data: {type: object, additionalProperties: true}
requestId: {type: string}
2026-08-11 10:45:57 +08:00
ApiListEnvelope:
type: object
required: [code, message, data]
properties:
code: {type: string, example: '200'}
message: {type: string}
data: {type: array, items: {type: object, additionalProperties: true}}
requestId: {type: string}
2026-08-11 09:25:45 +08:00
ErrorEnvelope:
type: object
required: [code, message]
properties: {code: {type: string}, message: {type: string}, requestId: {type: string}}
responses:
SuccessBill: {description: Bill result, content: {application/json: {schema: {$ref: '#/components/schemas/ApiEnvelope'}}}}
SuccessReceipt: {description: Receipt result, content: {application/json: {schema: {$ref: '#/components/schemas/ApiEnvelope'}}}}
SuccessCost: {description: Cost result, content: {application/json: {schema: {$ref: '#/components/schemas/ApiEnvelope'}}}}
2026-08-11 10:45:57 +08:00
SuccessObject: {description: Object result, content: {application/json: {schema: {$ref: '#/components/schemas/ApiEnvelope'}}}}
SuccessList: {description: Non-paged list result, content: {application/json: {schema: {$ref: '#/components/schemas/ApiListEnvelope'}}}}
2026-08-11 09:25:45 +08:00
BusinessError: {description: Business error, content: {application/json: {schema: {$ref: '#/components/schemas/ErrorEnvelope'}}}}