Files
Masterarbeit/Versuche/Versuch 02/Ergenisse/system/SyRS_API_Specification.yaml

1766 lines
48 KiB
YAML

openapi: 3.0.3
info:
title: Centron Enterprise Application REST API
description: |
Comprehensive REST API specification for the Centron Enterprise Application.
This API provides access to all core business functionality including CRM,
financial management, helpdesk, project management, and administrative functions.
The API implements a dual-architecture pattern supporting both direct database
and web service access through the ILogic interface pattern.
version: 1.0.0
contact:
name: Centron Development Team
email: support@c-entron.de
license:
name: Proprietary
url: https://c-entron.de/license
servers:
- url: https://api.centron.local/v1
description: Production Server
- url: https://api-dev.centron.local/v1
description: Development Server
- url: https://api-test.centron.local/v1
description: Testing Server
security:
- BearerAuth: []
- ApiKeyAuth: []
paths:
# Authentication and User Management
/login:
post:
tags:
- Authentication
summary: User Authentication
description: Authenticate user credentials and obtain access token
operationId: authenticateUser
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/LoginRequest'
responses:
'200':
description: Authentication successful
content:
application/json:
schema:
$ref: '#/components/schemas/LoginResponse'
'401':
$ref: '#/components/responses/UnauthorizedError'
'400':
$ref: '#/components/responses/BadRequestError'
/logout:
post:
tags:
- Authentication
summary: User Logout
description: Invalidate current session and access token
operationId: logoutUser
security:
- BearerAuth: []
responses:
'200':
$ref: '#/components/responses/SuccessResponse'
'401':
$ref: '#/components/responses/UnauthorizedError'
# Customer Management
/GetCustomers:
post:
tags:
- Customer Management
summary: Get Customer List
description: Retrieve customers based on filter criteria
operationId: getCustomers
security:
- BearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CustomerFilterRequest'
responses:
'200':
description: Customer list retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/CustomerListResponse'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/ForbiddenError'
/SaveCustomer:
post:
tags:
- Customer Management
summary: Save Customer
description: Create or update customer information
operationId: saveCustomer
security:
- BearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SaveCustomerRequest'
responses:
'200':
description: Customer saved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/CustomerResponse'
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/ForbiddenError'
/DeleteCustomer:
post:
tags:
- Customer Management
summary: Delete Customer
description: Delete customer by ID with validation
operationId: deleteCustomer
security:
- BearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DeleteCustomerRequest'
responses:
'200':
$ref: '#/components/responses/SuccessResponse'
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/ForbiddenError'
# Financial Management
/GetAccountNavInfo:
post:
tags:
- Financial Management
summary: Get Account Navigation Information
description: Retrieve account overview for the logged-in user
operationId: getAccountNavInfo
security:
- BearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AccountNavRequest'
responses:
'200':
description: Account navigation information retrieved
content:
application/json:
schema:
$ref: '#/components/schemas/AccountNavResponse'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/ForbiddenError'
/GetIncomingPayments:
post:
tags:
- Financial Management
summary: Get Incoming Payments
description: Retrieve incoming payments based on filter criteria
operationId: getIncomingPayments
security:
- BearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/IncomingPaymentsFilterRequest'
responses:
'200':
description: Incoming payments retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/IncomingPaymentsResponse'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/ForbiddenError'
/SaveIncomingPayment:
post:
tags:
- Financial Management
summary: Save Incoming Payment
description: Create or update incoming payment record
operationId: saveIncomingPayment
security:
- BearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SaveIncomingPaymentRequest'
responses:
'200':
description: Incoming payment saved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/IncomingPaymentResponse'
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/ForbiddenError'
/GetOutgoingPayments:
post:
tags:
- Financial Management
summary: Get Outgoing Payments
description: Retrieve outgoing payments based on filter criteria
operationId: getOutgoingPayments
security:
- BearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/OutgoingPaymentsFilterRequest'
responses:
'200':
description: Outgoing payments retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/OutgoingPaymentsResponse'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/ForbiddenError'
# Helpdesk Management
/GetTickets:
post:
tags:
- Helpdesk Management
summary: Get Tickets
description: Retrieve helpdesk tickets based on filter criteria
operationId: getTickets
security:
- BearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TicketFilterRequest'
responses:
'200':
description: Tickets retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/TicketListResponse'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/ForbiddenError'
/SaveTicket:
post:
tags:
- Helpdesk Management
summary: Save Ticket
description: Create or update helpdesk ticket
operationId: saveTicket
security:
- BearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SaveTicketRequest'
responses:
'200':
description: Ticket saved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/TicketResponse'
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/ForbiddenError'
/UpdateTicketStatus:
post:
tags:
- Helpdesk Management
summary: Update Ticket Status
description: Update ticket status with audit trail
operationId: updateTicketStatus
security:
- BearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateTicketStatusRequest'
responses:
'200':
$ref: '#/components/responses/SuccessResponse'
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/ForbiddenError'
# Article Management
/GetArticles:
post:
tags:
- Article Management
summary: Get Articles
description: Retrieve articles/products based on filter criteria
operationId: getArticles
security:
- BearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ArticleFilterRequest'
responses:
'200':
description: Articles retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/ArticleListResponse'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/ForbiddenError'
/SaveArticle:
post:
tags:
- Article Management
summary: Save Article
description: Create or update article/product information
operationId: saveArticle
security:
- BearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SaveArticleRequest'
responses:
'200':
description: Article saved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/ArticleResponse'
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/ForbiddenError'
# Administration
/GetUserRights:
post:
tags:
- Administration
summary: Get User Rights
description: Retrieve user rights and permissions
operationId: getUserRights
security:
- BearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UserRightsRequest'
responses:
'200':
description: User rights retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/UserRightsResponse'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/ForbiddenError'
/UpdateUserRights:
post:
tags:
- Administration
summary: Update User Rights
description: Update user permissions and access rights
operationId: updateUserRights
security:
- BearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateUserRightsRequest'
responses:
'200':
$ref: '#/components/responses/SuccessResponse'
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/ForbiddenError'
/GetSystemSettings:
post:
tags:
- Administration
summary: Get System Settings
description: Retrieve system configuration settings
operationId: getSystemSettings
security:
- BearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SystemSettingsRequest'
responses:
'200':
description: System settings retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/SystemSettingsResponse'
'401':
$ref: '#/components/responses/UnauthorizedError'
'403':
$ref: '#/components/responses/ForbiddenError'
components:
securitySchemes:
BearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
description: JWT Bearer token authentication
ApiKeyAuth:
type: apiKey
in: header
name: X-API-Key
description: API key for system integration
schemas:
# Base Request/Response Models
BaseRequest:
type: object
properties:
requestId:
type: string
format: uuid
description: Unique request identifier for tracing
timestamp:
type: string
format: date-time
description: Request timestamp
clientVersion:
type: string
description: Client application version
required:
- requestId
- timestamp
BaseResponse:
type: object
properties:
success:
type: boolean
description: Indicates if the request was successful
message:
type: string
description: Response message or error description
timestamp:
type: string
format: date-time
description: Response timestamp
requestId:
type: string
format: uuid
description: Original request identifier
errors:
type: array
items:
$ref: '#/components/schemas/ErrorDetail'
required:
- success
- timestamp
ErrorDetail:
type: object
properties:
code:
type: string
description: Error code for programmatic handling
message:
type: string
description: Human-readable error message
field:
type: string
description: Field name for validation errors
severity:
type: string
enum: [info, warning, error, critical]
description: Error severity level
# Authentication Models
LoginRequest:
allOf:
- $ref: '#/components/schemas/BaseRequest'
- type: object
properties:
username:
type: string
description: User login name
password:
type: string
format: password
description: User password
domain:
type: string
description: Optional domain for Active Directory authentication
mfaToken:
type: string
description: Multi-factor authentication token
required:
- username
- password
LoginResponse:
allOf:
- $ref: '#/components/schemas/BaseResponse'
- type: object
properties:
accessToken:
type: string
description: JWT access token
refreshToken:
type: string
description: JWT refresh token
expiresIn:
type: integer
description: Token expiration time in seconds
userInfo:
$ref: '#/components/schemas/UserInfo'
permissions:
type: array
items:
type: string
description: User permissions and rights
UserInfo:
type: object
properties:
userId:
type: integer
description: Unique user identifier (I3D)
username:
type: string
description: User login name
displayName:
type: string
description: User display name
email:
type: string
format: email
description: User email address
department:
type: string
description: User department
roles:
type: array
items:
type: string
description: User roles and groups
lastLogin:
type: string
format: date-time
description: Last login timestamp
# Customer Management Models
CustomerFilterRequest:
allOf:
- $ref: '#/components/schemas/BaseRequest'
- type: object
properties:
searchText:
type: string
description: Full-text search across customer data
customerNumber:
type: string
description: Specific customer number filter
companyName:
type: string
description: Company name filter
city:
type: string
description: City filter
country:
type: string
description: Country filter
status:
type: string
enum: [active, inactive, all]
description: Customer status filter
pageSize:
type: integer
minimum: 1
maximum: 1000
default: 100
description: Number of records per page
pageNumber:
type: integer
minimum: 1
default: 1
description: Page number for pagination
CustomerListResponse:
allOf:
- $ref: '#/components/schemas/BaseResponse'
- type: object
properties:
customers:
type: array
items:
$ref: '#/components/schemas/CustomerSummary'
totalCount:
type: integer
description: Total number of matching customers
pageSize:
type: integer
description: Requested page size
pageNumber:
type: integer
description: Current page number
CustomerSummary:
type: object
properties:
customerId:
type: integer
description: Unique customer identifier (I3D)
customerNumber:
type: string
description: Customer number
companyName:
type: string
description: Company name
contactName:
type: string
description: Primary contact name
email:
type: string
format: email
description: Primary email address
phone:
type: string
description: Primary phone number
city:
type: string
description: Customer city
country:
type: string
description: Customer country
status:
type: string
enum: [active, inactive]
description: Customer status
createdDate:
type: string
format: date-time
description: Customer creation date
lastModified:
type: string
format: date-time
description: Last modification date
SaveCustomerRequest:
allOf:
- $ref: '#/components/schemas/BaseRequest'
- type: object
properties:
customer:
$ref: '#/components/schemas/CustomerDetail'
CustomerDetail:
type: object
properties:
customerId:
type: integer
description: Customer ID for updates, null for new customers
customerNumber:
type: string
description: Customer number (auto-generated if not provided)
companyName:
type: string
maxLength: 255
description: Company name
contactName:
type: string
maxLength: 255
description: Primary contact name
email:
type: string
format: email
maxLength: 255
description: Primary email address
phone:
type: string
maxLength: 50
description: Primary phone number
address:
$ref: '#/components/schemas/Address'
paymentTerms:
type: integer
description: Payment terms in days
creditLimit:
type: number
format: decimal
description: Customer credit limit
taxId:
type: string
maxLength: 50
description: Tax identification number
notes:
type: string
description: Additional customer notes
status:
type: string
enum: [active, inactive]
description: Customer status
required:
- companyName
Address:
type: object
properties:
street:
type: string
maxLength: 255
description: Street address
city:
type: string
maxLength: 100
description: City
postalCode:
type: string
maxLength: 20
description: Postal/ZIP code
country:
type: string
maxLength: 100
description: Country
region:
type: string
maxLength: 100
description: State/Province/Region
CustomerResponse:
allOf:
- $ref: '#/components/schemas/BaseResponse'
- type: object
properties:
customer:
$ref: '#/components/schemas/CustomerDetail'
DeleteCustomerRequest:
allOf:
- $ref: '#/components/schemas/BaseRequest'
- type: object
properties:
customerId:
type: integer
description: Customer ID to delete
reason:
type: string
description: Reason for deletion
required:
- customerId
# Financial Management Models
AccountNavRequest:
allOf:
- $ref: '#/components/schemas/BaseRequest'
- type: object
properties:
accountId:
type: integer
description: Account ID for navigation info
AccountNavResponse:
allOf:
- $ref: '#/components/schemas/BaseResponse'
- type: object
properties:
accountInfo:
$ref: '#/components/schemas/AccountNavInfo'
AccountNavInfo:
type: object
properties:
accountId:
type: integer
description: Account identifier
accountName:
type: string
description: Account name
balance:
type: number
format: decimal
description: Current account balance
currency:
type: string
description: Account currency code
lastTransaction:
type: string
format: date-time
description: Last transaction date
status:
type: string
enum: [active, inactive, suspended]
description: Account status
IncomingPaymentsFilterRequest:
allOf:
- $ref: '#/components/schemas/BaseRequest'
- type: object
properties:
dateFrom:
type: string
format: date
description: Start date for payment filter
dateTo:
type: string
format: date
description: End date for payment filter
customerId:
type: integer
description: Filter by specific customer
status:
type: string
enum: [pending, processed, cancelled]
description: Payment status filter
amountFrom:
type: number
format: decimal
description: Minimum payment amount
amountTo:
type: number
format: decimal
description: Maximum payment amount
pageSize:
type: integer
minimum: 1
maximum: 1000
default: 100
pageNumber:
type: integer
minimum: 1
default: 1
IncomingPaymentsResponse:
allOf:
- $ref: '#/components/schemas/BaseResponse'
- type: object
properties:
payments:
type: array
items:
$ref: '#/components/schemas/IncomingPayment'
totalCount:
type: integer
pageSize:
type: integer
pageNumber:
type: integer
IncomingPayment:
type: object
properties:
paymentId:
type: integer
description: Payment identifier (I3D)
customerId:
type: integer
description: Customer identifier
customerName:
type: string
description: Customer name
amount:
type: number
format: decimal
description: Payment amount
currency:
type: string
description: Payment currency
paymentDate:
type: string
format: date
description: Payment date
reference:
type: string
description: Payment reference
bankAccount:
type: string
description: Bank account information
status:
type: string
enum: [pending, processed, cancelled]
description: Payment status
notes:
type: string
description: Payment notes
SaveIncomingPaymentRequest:
allOf:
- $ref: '#/components/schemas/BaseRequest'
- type: object
properties:
payment:
$ref: '#/components/schemas/IncomingPayment'
IncomingPaymentResponse:
allOf:
- $ref: '#/components/schemas/BaseResponse'
- type: object
properties:
payment:
$ref: '#/components/schemas/IncomingPayment'
OutgoingPaymentsFilterRequest:
allOf:
- $ref: '#/components/schemas/BaseRequest'
- type: object
properties:
dateFrom:
type: string
format: date
dateTo:
type: string
format: date
supplierId:
type: integer
status:
type: string
enum: [pending, processed, cancelled]
amountFrom:
type: number
format: decimal
amountTo:
type: number
format: decimal
pageSize:
type: integer
minimum: 1
maximum: 1000
default: 100
pageNumber:
type: integer
minimum: 1
default: 1
OutgoingPaymentsResponse:
allOf:
- $ref: '#/components/schemas/BaseResponse'
- type: object
properties:
payments:
type: array
items:
$ref: '#/components/schemas/OutgoingPayment'
totalCount:
type: integer
pageSize:
type: integer
pageNumber:
type: integer
OutgoingPayment:
type: object
properties:
paymentId:
type: integer
description: Payment identifier (I3D)
supplierId:
type: integer
description: Supplier identifier
supplierName:
type: string
description: Supplier name
amount:
type: number
format: decimal
description: Payment amount
currency:
type: string
description: Payment currency
paymentDate:
type: string
format: date
description: Payment date
reference:
type: string
description: Payment reference
bankAccount:
type: string
description: Bank account information
status:
type: string
enum: [pending, processed, cancelled]
description: Payment status
notes:
type: string
description: Payment notes
# Helpdesk Management Models
TicketFilterRequest:
allOf:
- $ref: '#/components/schemas/BaseRequest'
- type: object
properties:
searchText:
type: string
description: Search in ticket title, description, and comments
status:
type: string
enum: [open, in_progress, resolved, closed, cancelled]
description: Ticket status filter
priority:
type: string
enum: [low, normal, high, urgent, critical]
description: Ticket priority filter
assignedTo:
type: integer
description: Filter by assigned user ID
customerId:
type: integer
description: Filter by customer ID
categoryId:
type: integer
description: Filter by ticket category
createdFrom:
type: string
format: date-time
description: Tickets created after this date
createdTo:
type: string
format: date-time
description: Tickets created before this date
pageSize:
type: integer
minimum: 1
maximum: 1000
default: 100
pageNumber:
type: integer
minimum: 1
default: 1
TicketListResponse:
allOf:
- $ref: '#/components/schemas/BaseResponse'
- type: object
properties:
tickets:
type: array
items:
$ref: '#/components/schemas/TicketSummary'
totalCount:
type: integer
pageSize:
type: integer
pageNumber:
type: integer
TicketSummary:
type: object
properties:
ticketId:
type: integer
description: Ticket identifier (I3D)
ticketNumber:
type: string
description: Human-readable ticket number
title:
type: string
description: Ticket title/subject
description:
type: string
description: Ticket description (truncated)
status:
type: string
enum: [open, in_progress, resolved, closed, cancelled]
description: Current ticket status
priority:
type: string
enum: [low, normal, high, urgent, critical]
description: Ticket priority
customerId:
type: integer
description: Associated customer ID
customerName:
type: string
description: Customer name
assignedTo:
type: integer
description: Assigned user ID
assignedToName:
type: string
description: Assigned user name
createdBy:
type: integer
description: Creator user ID
createdByName:
type: string
description: Creator user name
createdDate:
type: string
format: date-time
description: Ticket creation date
lastModified:
type: string
format: date-time
description: Last modification date
dueDate:
type: string
format: date-time
description: Ticket due date
SaveTicketRequest:
allOf:
- $ref: '#/components/schemas/BaseRequest'
- type: object
properties:
ticket:
$ref: '#/components/schemas/TicketDetail'
TicketDetail:
type: object
properties:
ticketId:
type: integer
description: Ticket ID for updates, null for new tickets
title:
type: string
maxLength: 255
description: Ticket title/subject
description:
type: string
description: Detailed ticket description
status:
type: string
enum: [open, in_progress, resolved, closed, cancelled]
description: Ticket status
priority:
type: string
enum: [low, normal, high, urgent, critical]
description: Ticket priority
customerId:
type: integer
description: Associated customer ID
assignedTo:
type: integer
description: Assigned user ID
categoryId:
type: integer
description: Ticket category ID
dueDate:
type: string
format: date-time
description: Ticket due date
estimatedHours:
type: number
format: decimal
description: Estimated work hours
actualHours:
type: number
format: decimal
description: Actual work hours spent
tags:
type: array
items:
type: string
description: Ticket tags for categorization
attachments:
type: array
items:
$ref: '#/components/schemas/Attachment'
description: File attachments
required:
- title
- description
- customerId
Attachment:
type: object
properties:
attachmentId:
type: integer
description: Attachment identifier
fileName:
type: string
description: Original file name
fileSize:
type: integer
description: File size in bytes
contentType:
type: string
description: MIME content type
uploadDate:
type: string
format: date-time
description: Upload timestamp
uploadedBy:
type: integer
description: User who uploaded the file
TicketResponse:
allOf:
- $ref: '#/components/schemas/BaseResponse'
- type: object
properties:
ticket:
$ref: '#/components/schemas/TicketDetail'
UpdateTicketStatusRequest:
allOf:
- $ref: '#/components/schemas/BaseRequest'
- type: object
properties:
ticketId:
type: integer
description: Ticket ID to update
newStatus:
type: string
enum: [open, in_progress, resolved, closed, cancelled]
description: New ticket status
comment:
type: string
description: Status change comment
assignedTo:
type: integer
description: New assigned user (optional)
required:
- ticketId
- newStatus
# Article Management Models
ArticleFilterRequest:
allOf:
- $ref: '#/components/schemas/BaseRequest'
- type: object
properties:
searchText:
type: string
description: Search in article number, name, and description
categoryId:
type: integer
description: Filter by article category
supplierIds:
type: array
items:
type: integer
description: Filter by supplier IDs
priceFrom:
type: number
format: decimal
description: Minimum price filter
priceTo:
type: number
format: decimal
description: Maximum price filter
inStock:
type: boolean
description: Filter by stock availability
active:
type: boolean
description: Filter by active status
pageSize:
type: integer
minimum: 1
maximum: 1000
default: 100
pageNumber:
type: integer
minimum: 1
default: 1
ArticleListResponse:
allOf:
- $ref: '#/components/schemas/BaseResponse'
- type: object
properties:
articles:
type: array
items:
$ref: '#/components/schemas/ArticleSummary'
totalCount:
type: integer
pageSize:
type: integer
pageNumber:
type: integer
ArticleSummary:
type: object
properties:
articleId:
type: integer
description: Article identifier (I3D)
articleNumber:
type: string
description: Article number/SKU
name:
type: string
description: Article name
description:
type: string
description: Short description
price:
type: number
format: decimal
description: Current price
currency:
type: string
description: Price currency
stockQuantity:
type: integer
description: Available stock quantity
categoryName:
type: string
description: Category name
supplierName:
type: string
description: Primary supplier name
active:
type: boolean
description: Whether article is active
createdDate:
type: string
format: date-time
description: Article creation date
lastModified:
type: string
format: date-time
description: Last modification date
SaveArticleRequest:
allOf:
- $ref: '#/components/schemas/BaseRequest'
- type: object
properties:
article:
$ref: '#/components/schemas/ArticleDetail'
ArticleDetail:
type: object
properties:
articleId:
type: integer
description: Article ID for updates, null for new articles
articleNumber:
type: string
maxLength: 100
description: Article number/SKU
name:
type: string
maxLength: 255
description: Article name
description:
type: string
description: Detailed description
shortDescription:
type: string
maxLength: 500
description: Short description for listings
categoryId:
type: integer
description: Article category ID
price:
type: number
format: decimal
description: Base price
currency:
type: string
description: Price currency
costPrice:
type: number
format: decimal
description: Cost price
stockQuantity:
type: integer
description: Current stock quantity
minStockQuantity:
type: integer
description: Minimum stock level
weight:
type: number
format: decimal
description: Article weight
dimensions:
$ref: '#/components/schemas/Dimensions'
active:
type: boolean
description: Whether article is active
taxRate:
type: number
format: decimal
description: Tax rate percentage
suppliers:
type: array
items:
$ref: '#/components/schemas/ArticleSupplier'
description: Supplier information
required:
- articleNumber
- name
- categoryId
- price
Dimensions:
type: object
properties:
length:
type: number
format: decimal
description: Length in cm
width:
type: number
format: decimal
description: Width in cm
height:
type: number
format: decimal
description: Height in cm
ArticleSupplier:
type: object
properties:
supplierId:
type: integer
description: Supplier identifier
supplierArticleNumber:
type: string
description: Supplier's article number
supplierPrice:
type: number
format: decimal
description: Supplier's price
leadTimeDays:
type: integer
description: Lead time in days
minimumOrderQuantity:
type: integer
description: Minimum order quantity
isPrimary:
type: boolean
description: Whether this is the primary supplier
ArticleResponse:
allOf:
- $ref: '#/components/schemas/BaseResponse'
- type: object
properties:
article:
$ref: '#/components/schemas/ArticleDetail'
# Administration Models
UserRightsRequest:
allOf:
- $ref: '#/components/schemas/BaseRequest'
- type: object
properties:
userId:
type: integer
description: User ID to get rights for
UserRightsResponse:
allOf:
- $ref: '#/components/schemas/BaseResponse'
- type: object
properties:
userRights:
$ref: '#/components/schemas/UserRights'
UserRights:
type: object
properties:
userId:
type: integer
description: User identifier
rights:
type: array
items:
$ref: '#/components/schemas/UserRight'
description: List of user rights
groups:
type: array
items:
type: string
description: User groups
effectiveRights:
type: array
items:
type: string
description: All effective rights (including inherited)
UserRight:
type: object
properties:
rightId:
type: integer
description: Right identifier from UserRightsConst
rightName:
type: string
description: Right name/identifier
description:
type: string
description: Right description
category:
type: string
description: Right category
granted:
type: boolean
description: Whether right is granted
inherited:
type: boolean
description: Whether right is inherited from group
UpdateUserRightsRequest:
allOf:
- $ref: '#/components/schemas/BaseRequest'
- type: object
properties:
userId:
type: integer
description: User ID to update rights for
rightsUpdates:
type: array
items:
$ref: '#/components/schemas/RightUpdate'
description: Rights to update
required:
- userId
- rightsUpdates
RightUpdate:
type: object
properties:
rightId:
type: integer
description: Right identifier
granted:
type: boolean
description: Grant or revoke the right
reason:
type: string
description: Reason for the change
required:
- rightId
- granted
SystemSettingsRequest:
allOf:
- $ref: '#/components/schemas/BaseRequest'
- type: object
properties:
category:
type: string
description: Settings category filter
settingNames:
type: array
items:
type: string
description: Specific setting names to retrieve
SystemSettingsResponse:
allOf:
- $ref: '#/components/schemas/BaseResponse'
- type: object
properties:
settings:
type: array
items:
$ref: '#/components/schemas/SystemSetting'
description: System settings
SystemSetting:
type: object
properties:
settingId:
type: integer
description: Setting identifier from ApplicationSettingID
name:
type: string
description: Setting name
value:
type: string
description: Setting value
category:
type: string
description: Setting category
dataType:
type: string
enum: [string, integer, decimal, boolean, date]
description: Setting data type
description:
type: string
description: Setting description
isReadOnly:
type: boolean
description: Whether setting is read-only
lastModified:
type: string
format: date-time
description: Last modification date
responses:
SuccessResponse:
description: Operation completed successfully
content:
application/json:
schema:
$ref: '#/components/schemas/BaseResponse'
BadRequestError:
description: Invalid request data
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/BaseResponse'
- type: object
properties:
success:
example: false
message:
example: "Invalid request data"
UnauthorizedError:
description: Authentication required or token invalid
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/BaseResponse'
- type: object
properties:
success:
example: false
message:
example: "Authentication required"
ForbiddenError:
description: Insufficient permissions
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/BaseResponse'
- type: object
properties:
success:
example: false
message:
example: "Insufficient permissions"
NotFoundError:
description: Resource not found
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/BaseResponse'
- type: object
properties:
success:
example: false
message:
example: "Resource not found"
InternalServerError:
description: Internal server error
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/BaseResponse'
- type: object
properties:
success:
example: false
message:
example: "Internal server error"
tags:
- name: Authentication
description: User authentication and session management
- name: Customer Management
description: Customer data and relationship management
- name: Financial Management
description: Payment processing and financial operations
- name: Helpdesk Management
description: Ticket and support management
- name: Article Management
description: Product and article management
- name: Administration
description: System administration and configuration
externalDocs:
description: Centron API Documentation
url: https://docs.centron.local/api