Files
dashback/src/api/openapi.js
2026-10-14 19:43:53 +02:00

1997 lines
58 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* Shared OpenAPI components scanned by `scripts/generateApiDocs.js`.
* Route-specific paths live as `@openapi` blocks next to each handler.
*
* @openapi
* components:
* securitySchemes:
* cookieAuth:
* type: apiKey
* in: cookie
* name: token
* description: HTTP-only session cookie set by POST /auth/login
* bearerAuth:
* type: http
* scheme: bearer
* bearerFormat: JWT
* description: JWT token in Authorization header (Bearer <token>)
* schemas:
* Error:
* type: object
* required: [error]
* properties:
* error:
* type: string
* User:
* type: object
* required: [id, email, selectedCompanyId]
* properties:
* id:
* type: integer
* email:
* type: string
* format: email
* selectedCompanyId:
* type: integer
* nullable: true
* picture:
* type: string
* description: Profile image as base64 (from stored picturebinary); omitted when unset
* Company:
* type: object
* properties:
* id:
* type: integer
* name:
* type: string
* rootCategoryId:
* type: integer
* nullable: true
* languageId:
* type: integer
* nullable: true
* iso639:
* type: string
* nullable: true
* taxrate:
* type: number
* reducedtaxrate:
* type: number
* taxfreerate:
* type: number
* SuccessResponse:
* type: object
* required: [ok]
* properties:
* ok:
* type: boolean
* example: true
* CompanySetting:
* type: object
* required: [key, value]
* properties:
* key:
* type: string
* value:
* type: string
* nullable: true
* Category:
* type: object
* properties:
* id:
* type: integer
* parentId:
* type: integer
* nullable: true
* sort:
* type: integer
* name:
* type: string
* Unit:
* type: object
* description: Measurement unit with conversion factor to base SI unit (e.g. g -> kg, ml -> l)
* required: [si, basesi, basesifactor]
* properties:
* si:
* type: string
* description: Unit code identifier (e.g. "g", "kg", "ml", "l", "stk")
* basesi:
* type: string
* description: Base SI reference unit (e.g. "kg" for mass, "l" or "m3" for volume, "stk" for counts)
* basesifactor:
* type: number
* description: Conversion factor to base SI (1 si = basesifactor * basesi; e.g. 0.001 for g -> kg)
* symbol:
* type: string
* nullable: true
* name:
* type: string
* nullable: true
* ArticleSummary:
* type: object
* properties:
* id:
* type: integer
* categoryId:
* type: integer
* name:
* type: string
* sku:
* type: string
* track_stock:
* type: boolean
* Article:
* type: object
* properties:
* id:
* type: integer
* categoryId:
* type: integer
* name:
* type: string
* sku:
* type: string
* track_stock:
* type: boolean
* ArticleDetail:
* type: object
* description: Full article payload (unit, brand, categoryIds, photos, eans, prices, track_stock, …)
* properties:
* id:
* type: integer
* sku:
* type: string
* name:
* type: string
* slug:
* type: string
* desc:
* type: string
* nullable: true
* seo:
* type: string
* nullable: true
* track_stock:
* type: boolean
* unitamount:
* type: number
* nullable: true
* description: Net package content quantity measured in article unit (e.g. 500 for 500g, 0.75 for 0.75l)
* weight:
* type: number
* nullable: true
* description: Shipping weight in kg (must be >= 0)
* unit:
* $ref: '#/components/schemas/Unit'
* brand:
* $ref: '#/components/schemas/ArticleBrand'
* nullable: true
* categoryIds:
* type: array
* items:
* type: integer
* photos:
* type: array
* description: Attached article photos
* items:
* $ref: '#/components/schemas/ArticlePhoto'
* eans:
* type: array
* items:
* type: string
* prices:
* type: array
* description: Selling prices by customer group and quantity tier (field is net, not price)
* items:
* $ref: '#/components/schemas/ArticlePriceEntry'
* suppliers:
* type: array
* items:
* $ref: '#/components/schemas/ArticleSupplier'
* ArticlePhoto:
* type: object
* description: Article photo metadata
* required: [sort, fullHash, fullW, fullH, fullSize, thumbW, thumbH, thumbHash]
* properties:
* sort:
* type: integer
* description: Display sort order
* fullHash:
* type: string
* description: SHA-256 hex hash of the full AVIF image
* fullW:
* type: integer
* description: Width in pixels of the full image
* fullH:
* type: integer
* description: Height in pixels of the full image
* fullSize:
* type: integer
* description: Byte length of full AVIF
* thumbW:
* type: integer
* description: Width in pixels of the thumbnail image
* thumbH:
* type: integer
* description: Height in pixels of the thumbnail image
* thumbHash:
* type: string
* description: Base64 thumbhash preview
* ArticlePriceEntry:
* type: object
* description: Article selling price tier for a customer group (note price field is net, not price)
* required: [minmultiplier, net, taxRate, customergroupId]
* properties:
* minmultiplier:
* type: number
* description: Quantity threshold for volume pricing (defaults to 1)
* net:
* type: number
* description: Net selling price
* taxRate:
* type: number
* description: Tax rate in percent (e.g. 19 or 8.1)
* customergroupId:
* type: integer
* description: Customer group ID (e.g. company POS customer group)
* ArticleHistoryEntry:
* type: object
* required: [id, date, text]
* properties:
* id:
* type: integer
* date:
* type: string
* format: date-time
* text:
* type: string
* CompanyHistoryEntry:
* type: object
* required: [id, date, text]
* properties:
* id:
* type: integer
* companyuserId:
* type: integer
* nullable: true
* date:
* type: string
* format: date-time
* text:
* type: string
* ArticleSupplierPrice:
* type: object
* required: [net, taxId]
* properties:
* net:
* type: number
* description: Net purchase price
* taxId:
* type: integer
* description: Tax ID
* taxRate:
* type: number
* nullable: true
* description: Tax rate in percent
* ArticleSupplier:
* type: object
* required: [id, articleId, entityId, pu, sort]
* properties:
* id:
* type: integer
* articleId:
* type: integer
* entityId:
* type: integer
* supplierName:
* type: string
* nullable: true
* sku:
* type: string
* nullable: true
* description: Supplier-specific SKU (Lieferanten-Art.-Nr.)
* pu:
* type: number
* description: Packaging unit (Verpackungseinheit / VPE)
* stock:
* type: number
* nullable: true
* description: Supplier stock
* sort:
* type: integer
* description: Display sort order
* priceId:
* type: integer
* nullable: true
* price:
* $ref: '#/components/schemas/ArticleSupplierPrice'
* nullable: true
* SupplierArticlePhoto:
* type: object
* required: [sort, fullHash, thumbW, thumbH, thumbHash]
* properties:
* sort:
* type: integer
* fullHash:
* type: string
* thumbW:
* type: integer
* thumbH:
* type: integer
* thumbHash:
* type: string
* SupplierArticleInfo:
* type: object
* required: [id, sku]
* properties:
* id:
* type: integer
* sku:
* type: string
* name:
* type: string
* nullable: true
* slug:
* type: string
* nullable: true
* photos:
* type: array
* items:
* $ref: '#/components/schemas/SupplierArticlePhoto'
* eans:
* type: array
* items:
* type: string
* SupplierArticle:
* allOf:
* - $ref: '#/components/schemas/ArticleSupplier'
* - type: object
* required: [article]
* properties:
* article:
* $ref: '#/components/schemas/SupplierArticleInfo'
* BrandPic:
* type: object
* required: [fullHash, thumbW, thumbH, thumbHash]
* properties:
* fullHash:
* type: string
* thumbW:
* type: integer
* thumbH:
* type: integer
* thumbHash:
* type: string
* Brand:
* type: object
* required: [id, name, pics]
* properties:
* id:
* type: integer
* name:
* type: string
* gsprpinfo:
* type: string
* nullable: true
* pics:
* type: array
* description: Brand pictures sorted by sort
* items:
* $ref: '#/components/schemas/BrandPic'
* BrandListPic:
* type: object
* required: [fullHash, thumbW, thumbH, thumbHash]
* properties:
* fullHash:
* type: string
* thumbW:
* type: integer
* thumbH:
* type: integer
* thumbHash:
* type: string
* smallThumbW:
* type: integer
* nullable: true
* description: Width in pixels of the small AVIF thumbnail
* smallThumbH:
* type: integer
* nullable: true
* description: Height in pixels of the small AVIF thumbnail
* smallThumbBinary:
* type: string
* format: byte
* nullable: true
* description: Base64-encoded small AVIF thumbnail bytes
* BrandList:
* type: object
* required: [id, name, articleCount, pics]
* properties:
* id:
* type: integer
* name:
* type: string
* articleCount:
* type: integer
* description: Number of articles assigned to this brand (excluding father articles, including child articles inheriting the brand)
* gsprpinfo:
* type: string
* nullable: true
* pics:
* type: array
* description: Brand pictures sorted by sort, including the 32px-edge small thumbnail
* items:
* $ref: '#/components/schemas/BrandListPic'
* ArticleBrand:
* type: object
* required: [name]
* properties:
* id:
* type: integer
* nullable: true
* name:
* type: string
* fullHash:
* type: string
* nullable: true
* thumbW:
* type: integer
* nullable: true
* thumbH:
* type: integer
* nullable: true
* thumbHash:
* type: string
* nullable: true
* StuecklisteItem:
* type: object
* required: [id, articleId, sku, name, count, sort]
* properties:
* id:
* type: integer
* articleId:
* type: integer
* sku:
* type: string
* name:
* type: string
* count:
* type: integer
* sort:
* type: integer
* ArticleChild:
* type: object
* required: [id, sku, name, parentsort, attributeValueId, attributeValue]
* properties:
* id:
* type: integer
* sku:
* type: string
* name:
* type: string
* parentsort:
* type: integer
* attributeValueId:
* type: integer
* attributeValue:
* type: string
* ArticleOptionItem:
* type: object
* required: [id, articleId, sku, name, count, sort, mandated]
* properties:
* id:
* type: integer
* articleId:
* type: integer
* sku:
* type: string
* name:
* type: string
* count:
* type: integer
* sort:
* type: integer
* mandated:
* type: boolean
* CategoryTreeNode:
* type: object
* required: [id, sort, posterminalIds]
* properties:
* id:
* type: integer
* parentId:
* type: integer
* nullable: true
* sort:
* type: integer
* name:
* type: string
* nullable: true
* slug:
* type: string
* nullable: true
* fullHash:
* type: string
* nullable: true
* thumbW:
* type: integer
* nullable: true
* thumbH:
* type: integer
* nullable: true
* thumbHash:
* type: string
* nullable: true
* articleCount:
* type: integer
* description: Number of articles assigned directly to this category
* posterminalIds:
* type: array
* items:
* type: integer
* CategoryArticle:
* type: object
* required: [id, sku, name, slug, track_stock, optionsCount, articleListCount, childCount]
* properties:
* id:
* type: integer
* sku:
* type: string
* name:
* type: string
* slug:
* type: string
* net:
* type: number
* nullable: true
* taxRate:
* type: number
* nullable: true
* track_stock:
* type: boolean
* optionsCount:
* type: integer
* articleListCount:
* type: integer
* childCount:
* type: integer
* parentArticleId:
* type: integer
* nullable: true
* parentSku:
* type: string
* nullable: true
* fullHash:
* type: string
* nullable: true
* thumbW:
* type: integer
* nullable: true
* thumbH:
* type: integer
* nullable: true
* thumbHash:
* type: string
* nullable: true
* brand:
* $ref: '#/components/schemas/ArticleBrand'
* nullable: true
* NumberSequence:
* type: object
* required: [id, type, prefix, padding, next]
* properties:
* id:
* type: integer
* type:
* type: string
* description: Sequence type (e.g. entity, article, delivery)
* prefix:
* type: string
* padding:
* type: integer
* description: Zero-padding length for the numeric part
* next:
* type: integer
* description: Next value to allocate
* Supplier:
* type: object
* required: [id, name, createdAt, updatedAt]
* properties:
* id:
* type: integer
* name:
* type: string
* createdAt:
* type: string
* format: date-time
* updatedAt:
* type: string
* format: date-time
* Customergroup:
* type: object
* required: [id, name, sort]
* properties:
* id:
* type: integer
* name:
* type: string
* sort:
* type: integer
* CustomergroupListItem:
* allOf:
* - $ref: '#/components/schemas/Customergroup'
* - type: object
* required: [editable]
* properties:
* editable:
* type: boolean
* description: |
* `false` for implicit groups `POS` and `Lieferanten` (name locked).
* `true` for user-created groups. Reorder all groups via
* `PUT /customergroup/order`.
* Entity:
* type: object
* required: [id, customergroupId, firstName, name, number, createdAt, updatedAt]
* properties:
* id:
* type: integer
* customergroupId:
* type: integer
* firstName:
* type: string
* nullable: true
* name:
* type: string
* number:
* type: string
* nullable: true
* description: Customer number (null for suppliers)
* createdAt:
* type: string
* format: date-time
* updatedAt:
* type: string
* format: date-time
* EntityAddress:
* type: object
* required: [id, entityId, addressType]
* properties:
* id:
* type: integer
* entityId:
* type: integer
* firstName:
* type: string
* nullable: true
* name:
* type: string
* nullable: true
* street:
* type: string
* nullable: true
* streetNumber:
* type: string
* nullable: true
* zip:
* type: string
* nullable: true
* city:
* type: string
* nullable: true
* county:
* type: string
* nullable: true
* addressType:
* type: string
* EntityContact:
* type: object
* required: [id, entityId, contactType, contact]
* properties:
* id:
* type: integer
* entityId:
* type: integer
* contactType:
* type: string
* description: e.g. email, phone
* contact:
* type: string
* DeliverySummary:
* type: object
* required: [id, number, type, supplierId, date]
* properties:
* id:
* type: integer
* number:
* type: string
* description: Auto-allocated via nextNumber('delivery')
* type:
* type: string
* enum: [delivery]
* supplierId:
* type: integer
* nullable: true
* description: manifest.entity_id
* externalNumber:
* type: string
* nullable: true
* description: User-supplied reference number
* date:
* type: string
* format: date-time
* createdAt:
* type: string
* format: date-time
* ledger:
* type: object
* description: Ledger booking summary for this delivery
* properties:
* totalPositions:
* type: integer
* description: Total number of position lines on this manifest
* completelyOnLedgerPositions:
* type: integer
* description: Number of positions whose quantity is fully transacted in the ledger
* DeliveryLine:
* type: object
* required: [id, sku, name, pu, amount, net, rebate, taxrate, comment]
* properties:
* id:
* type: integer
* sku:
* type: string
* nullable: true
* name:
* type: string
* nullable: true
* description: Line item name or custom description
* pu:
* type: number
* description: Packaging unit (defaults to 1)
* amount:
* type: number
* net:
* type: number
* rebate:
* type: number
* taxrate:
* type: number
* description: Tax rate in percent (e.g. 19)
* comment:
* type: string
* nullable: true
* DeliveryLineInput:
* type: object
* required: [amount, net, taxrate]
* description: Line item input. Requires `sku` or `name`.
* properties:
* sku:
* type: string
* nullable: true
* description: SKU reference (sku or name is required)
* name:
* type: string
* nullable: true
* description: Line item name (sku or name is required)
* pu:
* type: number
* description: Packaging unit (defaults to 1)
* amount:
* type: number
* net:
* type: number
* taxrate:
* type: number
* description: Tax rate in percent (resolved via tax.ensure)
* rebate:
* type: number
* description: Defaults to 0
* comment:
* type: string
* nullable: true
* Delivery:
* allOf:
* - $ref: '#/components/schemas/DeliverySummary'
* - type: object
* required: [lines, files]
* properties:
* lines:
* type: array
* items:
* $ref: '#/components/schemas/DeliveryLine'
* files:
* type: array
* description: Attached documents (pdf/txt) for the delivery
* items:
* $ref: '#/components/schemas/DeliveryFile'
* DeliveryFile:
* type: object
* description: Attachment metadata (full binary content is served via `GET /delivery/{id}/file/{fileId}`). Thumbnails (AVIF) are generated server-side.
* required: [id, manifestId, fileId, sort, hash, mimetype, name, size]
* properties:
* id:
* type: integer
* description: manifestattachment id
* manifestId:
* type: integer
* fileId:
* type: integer
* sort:
* type: integer
* hash:
* type: string
* description: SHA-256 of the file content
* mimetype:
* type: string
* description: application/pdf or text/plain
* name:
* type: string
* size:
* type: integer
* created:
* type: string
* format: date-time
* modified:
* type: string
* format: date-time
* thumbavif:
* type: string
* format: byte
* nullable: true
* description: Base64-encoded AVIF thumbnail generated server-side (null for text files)
* thumbx:
* type: integer
* nullable: true
* thumby:
* type: integer
* nullable: true
* meta:
* type: object
* nullable: true
* description: String key/value metadata from the file row
* additionalProperties:
* type: string
* DeliveryFileInput:
* type: object
* required: [mimetype, name, content]
* description: Attachment input. Only application/pdf and text/plain are accepted. Thumbnails are generated server-side and must not be supplied by the client.
* properties:
* mimetype:
* type: string
* enum: [application/pdf, text/plain]
* name:
* type: string
* content:
* type: string
* format: byte
* description: File content (base64-encoded in JSON)
* sort:
* type: integer
* description: Optional sort order (defaults to appending after existing files)
* size:
* type: integer
* description: Optional size in bytes (defaults to content length)
* hash:
* type: string
* description: Optional SHA-256 (auto-computed if omitted)
* created:
* type: string
* format: date-time
* modified:
* type: string
* format: date-time
* meta:
* type: object
* description: Optional string key/value metadata stored with the file
* additionalProperties:
* type: string
* ManifestLine:
* type: object
* required: [id, sku, name, pu, amount, net, rebate, taxrate, comment]
* description: Line shape for quote and order
* properties:
* id:
* type: integer
* sku:
* type: string
* nullable: true
* name:
* type: string
* nullable: true
* description: Line item name or custom description
* pu:
* type: number
* description: Packaging unit (defaults to 1)
* amount:
* type: number
* net:
* type: number
* rebate:
* type: number
* taxrate:
* type: number
* description: Tax rate in percent (e.g. 19)
* comment:
* type: string
* nullable: true
* ManifestLineInput:
* type: object
* required: [amount, net, taxrate]
* description: Line item input. Requires `sku` or `name`.
* properties:
* sku:
* type: string
* nullable: true
* description: SKU reference (sku or name is required)
* name:
* type: string
* nullable: true
* description: Line item name (sku or name is required)
* pu:
* type: number
* description: Packaging unit (defaults to 1)
* amount:
* type: number
* net:
* type: number
* taxrate:
* type: number
* description: Tax rate in percent (resolved via tax.ensure)
* rebate:
* type: number
* description: Defaults to 0
* comment:
* type: string
* nullable: true
* QuoteSummary:
* type: object
* required: [id, number, type, entityId, date]
* properties:
* id:
* type: integer
* number:
* type: string
* type:
* type: string
* enum: [quote]
* entityId:
* type: integer
* nullable: true
* description: Customer (manifest.entity_id)
* date:
* type: string
* format: date-time
* description: Document date / valid-until
* createdAt:
* type: string
* format: date-time
* positions:
* type: integer
* description: Number of line items
* grossTotal:
* type: number
* description: Gross sum across quote positions
* totalQuantity:
* type: number
* description: Total quantity across quote positions
* customerName:
* type: string
* nullable: true
* Quote:
* allOf:
* - $ref: '#/components/schemas/QuoteSummary'
* - type: object
* required: [lines]
* properties:
* lines:
* type: array
* items:
* $ref: '#/components/schemas/ManifestLine'
* OrderSummary:
* type: object
* required: [id, number, type, entityId, date]
* properties:
* id:
* type: integer
* number:
* type: string
* type:
* type: string
* enum: [order]
* entityId:
* type: integer
* nullable: true
* description: Customer (manifest.entity_id)
* date:
* type: string
* format: date-time
* description: Document date / expected delivery
* createdAt:
* type: string
* format: date-time
* Order:
* allOf:
* - $ref: '#/components/schemas/OrderSummary'
* - type: object
* required: [lines]
* properties:
* lines:
* type: array
* items:
* $ref: '#/components/schemas/ManifestLine'
* shipping:
* $ref: '#/components/schemas/Shipping'
* nullable: true
* shippings:
* type: array
* items:
* $ref: '#/components/schemas/Shipping'
* payment:
* $ref: '#/components/schemas/Payment'
* nullable: true
* payments:
* type: array
* items:
* $ref: '#/components/schemas/Payment'
* paid:
* type: boolean
* description: True when paidTotal equals orderTotal
* shipped:
* type: boolean
* description: True when shippedQuantity equals orderedQuantity
* delivered:
* type: boolean
* orderTotal:
* type: number
* description: Gross sum across order positions
* paidTotal:
* type: number
* description: Sum of all payments connected to order
* orderedQuantity:
* type: number
* description: Total ordered items
* shippedQuantity:
* type: number
* description: Total shipped items across order shipments
* shipments:
* type: array
* items:
* $ref: '#/components/schemas/Shipment'
* files:
* type: array
* description: Attached documents (e.g. order PDF) for the order
* items:
* $ref: '#/components/schemas/DeliveryFile'
* ArticleImage:
* type: object
* required: [picId, sort, full, thumb, hash, thumbHash]
* properties:
* picId:
* type: integer
* sort:
* type: integer
* full:
* type: object
* required: [w, h, size]
* properties:
* w:
* type: integer
* h:
* type: integer
* size:
* type: integer
* description: Byte length of full AVIF (as-is when already AVIF ≤1000×1000)
* thumb:
* type: object
* required: [w, h]
* properties:
* w:
* type: integer
* h:
* type: integer
* hash:
* type: string
* description: SHA-256 hex of full image bytes
* thumbHash:
* type: string
* description: Base64 thumbhash of thumb preview
* LedgerEntry:
* type: object
* required: [id, manifestarticle_id, transaction_type, amount, transaction_text, hash_version]
* properties:
* id:
* type: integer
* manifestarticle_id:
* type: integer
* description: References manifestarticle.id
* transaction_type:
* type: string
* description: Transaction identifier / type
* amount:
* type: number
* description: Movement amount
* transaction_text:
* type: string
* description: Transaction memo / details
* hash_version:
* type: integer
* description: Algorithm version (1)
* prev_hash:
* type: string
* description: Previous entry SHA-512 hex or initial seed hash
* sku:
* type: string
* nullable: true
* description: SKU from referenced manifestarticle (present in query views)
* created_at:
* type: string
* format: date-time
* description: Timestamp when the row was created
* LedgerEntryInput:
* type: object
* required: [manifestarticle_id, transaction_type, amount, transaction_text]
* properties:
* manifestarticle_id:
* type: integer
* description: References manifestarticle.id
* transaction_type:
* type: string
* description: Transaction identifier / type (max 100 chars)
* amount:
* type: number
* description: Movement amount
* transaction_text:
* type: string
* description: Transaction memo / details
* ModelConversation:
* type: object
* required: [id, companyuser_id, provider, model, created_at, updated_at, state]
* properties:
* id:
* type: integer
* companyuser_id:
* type: integer
* provider:
* type: string
* model:
* type: string
* created_at:
* type: string
* updated_at:
* type: string
* state:
* type: string
* enum: [idle, busy]
* description: Messages can only be posted while `idle`
* started_by:
* type: [integer, 'null']
* description: Id of the conversation that started this one as a subagent, or null for a top-level conversation. Deleting a conversation also deletes every conversation below it in this chain.
* first_message:
* type: [string, 'null']
* description: Plain text of the conversation's first user message (XML stripped, max 50 chars, ellipsis if cut), or null if there is none yet.
* ModelConversationCreateInput:
* type: object
* required: [provider, model]
* properties:
* provider:
* type: string
* model:
* type: string
* ModelMessage:
* type: object
* required: [id, conversation_id, created_at, role, message]
* properties:
* id:
* type: integer
* conversation_id:
* type: integer
* created_at:
* type: string
* role:
* type: string
* enum: [system, user, assistant, tool, reasoning, usage]
* message:
* type: string
* ModelMessageCreateInput:
* type: object
* properties:
* message:
* type: string
* description: User message text or fallback content
* role:
* type: string
* enum: [user, tool]
* description: Message role ('user' or 'tool')
* tool_call_id:
* type: string
* description: Target tool call ID when responding to a tool like ask_user
* content:
* description: Tool response content payload
* answer:
* description: Shorthand answer for ask_user response
* Account:
* type: object
* required: [id, companyId, type, name]
* properties:
* id:
* type: integer
* companyId:
* type: integer
* type:
* type: string
* name:
* type: string
* Payment:
* type: object
* required: [id, accountId, manifestId, type, amount]
* properties:
* id:
* type: integer
* accountId:
* type: integer
* manifestId:
* type: integer
* type:
* type: string
* amount:
* type: number
* Shipping:
* type: object
* required: [id, manifestId, number, type, state]
* properties:
* id:
* type: integer
* manifestId:
* type: integer
* number:
* type: string
* description: Shipping number from the `shipping` number sequence
* trackingCode:
* type: string
* nullable: true
* description: Carrier parcel tracking code
* carrier:
* type: string
* nullable: true
* description: Carrier name (e.g. DHL, UPS, DPD)
* type:
* type: string
* state:
* type: string
* Shipment:
* type: object
* required: [id, number, type, date, lines, shippings]
* properties:
* id:
* type: integer
* number:
* type: string
* description: Shipment compound number `<orderNumber><shipmentPrefix><y>`
* type:
* type: string
* enum: [shipment]
* entityId:
* type: integer
* nullable: true
* externalNumber:
* type: string
* nullable: true
* date:
* type: string
* createdAt:
* type: string
* nullable: true
* lineCount:
* type: integer
* packageCount:
* type: integer
* lines:
* type: array
* items:
* $ref: '#/components/schemas/ManifestLine'
* shippings:
* type: array
* items:
* $ref: '#/components/schemas/Shipping'
* Package:
* type: object
* required: [id, shippingId, entityaddressId, number, type, state]
* properties:
* id:
* type: integer
* shippingId:
* type: integer
* entityaddressId:
* type: integer
* number:
* type: string
* description: Package number from the `package` number sequence
* type:
* type: string
* state:
* type: string
* details:
* type: string
* nullable: true
* Printer:
* type: object
* required: [id, company_id, address, type, sort]
* properties:
* id:
* type: integer
* company_id:
* type: integer
* address:
* type: string
* description: Printer network address or hostname
* type:
* type: string
* enum: [esc/pos, zpl, ipp]
* description: Printer type ("esc/pos" for lines, "zpl" for pages, or "ipp")
* model:
* type: string
* nullable: true
* description: Printer model name
* serial:
* type: string
* nullable: true
* description: Printer serial number
* sort:
* type: integer
* description: Sort order
* desc:
* type: string
* nullable: true
* description: Printer description
* PrinterCreateInput:
* type: object
* required: [address, type]
* properties:
* address:
* type: string
* description: Printer network address or hostname
* type:
* type: string
* enum: [esc/pos, zpl, ipp]
* description: Printer type ("esc/pos" for lines, "zpl" for pages, or "ipp")
* model:
* type: string
* nullable: true
* serial:
* type: string
* nullable: true
* sort:
* type: integer
* desc:
* type: string
* nullable: true
* PrinterUpdateInput:
* type: object
* properties:
* address:
* type: string
* type:
* type: string
* enum: [esc/pos, zpl, ipp]
* model:
* type: string
* nullable: true
* serial:
* type: string
* nullable: true
* sort:
* type: integer
* desc:
* type: string
* nullable: true
* Posterminal:
* type: object
* required: [id, name]
* properties:
* id:
* type: integer
* name:
* type: string
* pairingpin:
* type: string
* nullable: true
* token:
* type: string
* nullable: true
* pairedAt:
* type: string
* nullable: true
* clientserial:
* type: string
* nullable: true
* rootCategoryId:
* type: integer
* nullable: true
* syncRootArticles:
* type: boolean
* lastseenAt:
* type: string
* nullable: true
* updatedAt:
* type: string
* nullable: true
* categoryIds:
* type: array
* items:
* type: integer
* LabelObject:
* type: object
* required: [id, type, x, y]
* properties:
* id:
* type: string
* type:
* type: string
* enum: [textbox, barcode, png]
* x:
* type: number
* y:
* type: number
* w:
* type: number
* h:
* type: number
* text:
* type: string
* font:
* type: string
* fontSize:
* type: number
* barcodeFormat:
* type: string
* enum: [EAN8, EAN13, CODE128, QR]
* LabelContent:
* type: object
* required: [objects]
* properties:
* objects:
* type: array
* description: Canvas label editor items
* items:
* $ref: '#/components/schemas/LabelObject'
* LabelTemplateSummary:
* type: object
* required: [id, name, width, height, dpi, type]
* properties:
* id:
* type: integer
* name:
* type: string
* width:
* type: number
* height:
* type: number
* dpi:
* type: integer
* type:
* type: string
* thumb:
* type: string
* nullable: true
* LabelTemplate:
* type: object
* required: [id, name, width, height, dpi, type, content]
* properties:
* id:
* type: integer
* name:
* type: string
* width:
* type: number
* height:
* type: number
* dpi:
* type: integer
* type:
* type: string
* content:
* $ref: '#/components/schemas/LabelContent'
* thumb:
* type: string
* nullable: true
* LabelTemplateCreateInput:
* type: object
* required: [name, width, height, dpi, type, content]
* properties:
* name:
* type: string
* width:
* type: number
* height:
* type: number
* dpi:
* type: integer
* type:
* type: string
* content:
* $ref: '#/components/schemas/LabelContent'
* LabelTemplateUpdateInput:
* type: object
* properties:
* name:
* type: string
* width:
* type: number
* height:
* type: number
* dpi:
* type: integer
* type:
* type: string
* content:
* $ref: '#/components/schemas/LabelContent'
* Warehouse:
* type: object
* required: [id, name, sort]
* properties:
* id:
* type: integer
* name:
* type: string
* sort:
* type: integer
* description: Sort order
* WarehouseCreateInput:
* type: object
* required: [name]
* properties:
* name:
* type: string
* sort:
* type: integer
* description: Optional sort order (defaults to auto-increment)
* WarehouseUpdateInput:
* type: object
* properties:
* name:
* type: string
* sort:
* type: integer
* description: Sort order
* StockAdjustmentInput:
* type: object
* description: Stock adjustment input. Provide `sku` and `amount` for single-item adjustments, or `lines` for batch adjustments. Note that `sku` must be a string (e.g. "25"), not a number.
* properties:
* sku:
* type: string
* description: Article SKU string (e.g. "25", not a number; for single-item adjustment)
* warehouseId:
* type: integer
* description: Target warehouse ID
* amount:
* type: number
* description: Signed adjustment quantity (+ to add, - to remove)
* text:
* type: string
* nullable: true
* description: Reason or memo
* lines:
* type: array
* description: Batch adjustment lines
* items:
* type: object
* required: [sku, amount]
* properties:
* sku:
* type: string
* description: Article SKU string (e.g. "25", not a number)
* warehouseId:
* type: integer
* description: Target warehouse ID
* amount:
* type: number
* description: Signed adjustment quantity (+ to add, - to remove)
* text:
* type: string
* description: Reason or memo
* StockAdjustmentResult:
* type: object
* properties:
* manifest:
* type: object
* properties:
* id:
* type: integer
* number:
* type: string
* type:
* type: string
* example: adjustment
* date:
* type: string
* format: date-time
* createdAt:
* type: string
* format: date-time
* lines:
* type: array
* items:
* type: object
* required: [manifestarticle_id, sku, name, warehouse_id, amount, text]
* properties:
* manifestarticle_id:
* type: integer
* sku:
* type: string
* name:
* type: string
* warehouse_id:
* type: integer
* amount:
* type: number
* text:
* type: string
* ledger:
* type: array
* items:
* $ref: '#/components/schemas/LedgerEntry'
* Propertyname:
* type: object
* required: [id, name, sort, exclusive]
* properties:
* id:
* type: integer
* name:
* type: string
* sort:
* type: integer
* exclusive:
* type: boolean
* articleCount:
* type: integer
* description: Number of articles in the selected company that have an articleproperty row for this property.
* ArticleProperty:
* type: object
* required: [id, propertyId, name, exclusive, value, sort]
* properties:
* id:
* type: integer
* articleId:
* type: integer
* propertyId:
* type: integer
* name:
* type: string
* exclusive:
* type: boolean
* value:
* type: string
* sort:
* type: integer
* AttributeValue:
* type: object
* required: [id, attributeId, value, sort]
* properties:
* id:
* type: integer
* attributeId:
* type: integer
* value:
* type: string
* sort:
* type: integer
* articleCount:
* type: integer
* description: Number of articles in the selected company having this attribute value.
* AttributeValuePic:
* type: object
* required: [fullHash, thumbW, thumbH, thumbHash]
* properties:
* fullHash:
* type: string
* thumbW:
* type: integer
* thumbH:
* type: integer
* thumbHash:
* type: string
* Attributename:
* type: object
* required: [id, name, sort, exclusive, values]
* properties:
* id:
* type: integer
* name:
* type: string
* sort:
* type: integer
* exclusive:
* type: boolean
* articleCount:
* type: integer
* description: Number of parent articles in the selected company configured with this attribute name.
* values:
* type: array
* items:
* $ref: '#/components/schemas/AttributeValue'
* ArticleAttributeValue:
* type: object
* required: [id, attributeId, attributeName, attributeValueId, value, sort]
* properties:
* id:
* type: integer
* articleId:
* type: integer
* attributeId:
* type: integer
* attributeName:
* type: string
* exclusive:
* type: boolean
* attributeValueId:
* type: integer
* value:
* type: string
* sort:
* type: integer
* CategoryProperty:
* type: object
* required: [id, propertyId, name, exclusive, value, sort]
* properties:
* id:
* type: integer
* categoryId:
* type: integer
* propertyId:
* type: integer
* name:
* type: string
* exclusive:
* type: boolean
* value:
* type: string
* sort:
* type: integer
* CategoryAttributeValue:
* type: object
* required: [id, attributeId, attributeName, attributeValueId, value, sort]
* properties:
* id:
* type: integer
* categoryId:
* type: integer
* attributeId:
* type: integer
* attributeName:
* type: string
* exclusive:
* type: boolean
* attributeValueId:
* type: integer
* value:
* type: string
* sort:
* type: integer
* VfsFile:
* type: object
* required: [name, size, mime, updated_at, created_at, isText, isImage, isPdf]
* properties:
* name:
* type: string
* description: Relative file path within the virtual filesystem
* size:
* type: integer
* description: File size in bytes
* mime:
* type: string
* description: Detected or declared MIME type
* updated_at:
* type: string
* format: date-time
* description: ISO timestamp of last modification
* created_at:
* type: string
* format: date-time
* description: ISO timestamp of creation
* isText:
* type: boolean
* description: True if file is text, code, JSON, Markdown, or tabular data
* isImage:
* type: boolean
* description: True if file is a supported raster image eligible for preview thumbnailing
* isPdf:
* type: boolean
* description: True if file is a PDF document
* BackupFileDetail:
* type: object
* required: [name, sizeBytes, sourceExists]
* properties:
* name:
* type: string
* sizeBytes:
* type: integer
* sourceExists:
* type: boolean
* BackupDatabaseDetail:
* type: object
* required: [name, sizeBytes, backedUp]
* properties:
* name:
* type: string
* nullable: true
* sizeBytes:
* type: integer
* backedUp:
* type: boolean
* reason:
* type: string
* nullable: true
* BackupManifest:
* type: object
* required: [id, timestamp, dateKey, monthKey, dbProvider, files, totalSizeBytes, durationMs]
* properties:
* id:
* type: string
* timestamp:
* type: string
* format: date-time
* dateKey:
* type: string
* monthKey:
* type: string
* dbProvider:
* type: string
* files:
* type: object
* required: [vfs, storage, database]
* properties:
* vfs:
* $ref: '#/components/schemas/BackupFileDetail'
* storage:
* $ref: '#/components/schemas/BackupFileDetail'
* database:
* $ref: '#/components/schemas/BackupDatabaseDetail'
* totalSizeBytes:
* type: integer
* durationMs:
* type: integer
* BackupEntry:
* type: object
* required: [name, path, totalSizeBytes, timestamp]
* properties:
* name:
* type: string
* path:
* type: string
* totalSizeBytes:
* type: integer
* timestamp:
* type: string
* format: date-time
* nullable: true
* manifest:
* $ref: '#/components/schemas/BackupManifest'
* nullable: true
* BackupTierCounts:
* type: object
* required: [hourly, daily, monthly]
* properties:
* hourly:
* type: integer
* daily:
* type: integer
* monthly:
* type: integer
* BackupRetentionConfig:
* type: object
* required: [hourlyMax, dailyMax, monthly]
* properties:
* hourlyMax:
* type: integer
* dailyMax:
* type: integer
* monthly:
* type: string
* BackupStatus:
* type: object
* required: [enabled, isRunning, dbProvider, mssqlWarning, backupDir, retention, counts]
* properties:
* enabled:
* type: boolean
* isRunning:
* type: boolean
* dbProvider:
* type: string
* mssqlWarning:
* type: boolean
* backupDir:
* type: string
* retention:
* $ref: '#/components/schemas/BackupRetentionConfig'
* counts:
* $ref: '#/components/schemas/BackupTierCounts'
* latestHourly:
* $ref: '#/components/schemas/BackupEntry'
* nullable: true
* latestDaily:
* $ref: '#/components/schemas/BackupEntry'
* nullable: true
* latestMonthly:
* $ref: '#/components/schemas/BackupEntry'
* nullable: true
* BackupListing:
* type: object
* required: [counts, hourly, daily, monthly]
* properties:
* counts:
* $ref: '#/components/schemas/BackupTierCounts'
* hourly:
* type: array
* items:
* $ref: '#/components/schemas/BackupEntry'
* daily:
* type: array
* items:
* $ref: '#/components/schemas/BackupEntry'
* monthly:
* type: array
* items:
* $ref: '#/components/schemas/BackupEntry'
* BackupOverviewResponse:
* type: object
* required: [status, backups]
* properties:
* status:
* $ref: '#/components/schemas/BackupStatus'
* backups:
* $ref: '#/components/schemas/BackupListing'
* BackupVfsFileItem:
* type: object
* required: [name, size, mime, mtime]
* properties:
* name:
* type: string
* size:
* type: integer
* mime:
* type: string
* mtime:
* type: string
* format: date-time
* BackupVfsListResponse:
* type: object
* required: [backupId, companyId, files]
* properties:
* backupId:
* type: string
* companyId:
* type: integer
* files:
* type: array
* items:
* $ref: '#/components/schemas/BackupVfsFileItem'
* BackupVfsRecoverRequest:
* type: object
* required: [path]
* properties:
* path:
* type: string
* description: Relative path of the VFS file to recover
* companyId:
* type: integer
* description: Optional company ID (defaults to user's selected company)
* BackupVfsRecoverResponse:
* type: object
* required: [success, backupId, companyId, path, sizeBytes, mime]
* properties:
* success:
* type: boolean
* backupId:
* type: string
* companyId:
* type: integer
* path:
* type: string
* sizeBytes:
* type: integer
* mime:
* type: string
*/
export {};