Market Items
Services or products offered by the organization, organized into a two-level category tree.
Invoicing
Create, publish, and track payment of invoices linked to tickets or issued independently.
Price Scopes
Set prices globally for an organization or override them per property.
Online & Cash
Residents pay online through the acquiring integration or indicate cash payment.
Market Categories
Services are organized in a two-level category tree. EachMarketCategory has:
name— Localized category nameimage— Preview image shown in the appparentCategory— Optional parent category (maximum depth: 2)mobileSettings— Display configuration for the mobile app
The category tree depth is capped at 2 levels. Attempting to nest a subcategory more than one level deep raises a
MAXIMUM_DEPTH_REACHED error.Market Items
AMarketItem is an individual service or product offered by an organization. Fields:
| Field | Description |
|---|---|
name | Service name displayed to residents |
sku | Stock keeping unit — unique per organization |
description | Detailed service description |
marketCategory | Category this item belongs to |
organization | Owning organization |
MarketItem is deleted, all its MarketItemPrice records are soft-deleted automatically.
Pricing & Price Scopes
Prices are stored inMarketItemPrice records, which can be scoped at different levels:
| Scope Type | Constant | Applies To |
|---|---|---|
| Organization-wide | MARKETPLACE_PRICE_SCOPE_TYPE_ORGANIZATION | All properties in the organization |
| Property-specific | MARKETPLACE_PRICE_SCOPE_TYPE_PROPERTY | A single building |
| Unknown | MARKETPLACE_PRICE_SCOPE_TYPE_UNKNOWN | Fallback / unset |
MarketPriceScope record links a price to its scope.
Invoices
AInvoice (in the marketplace domain) is a payment request sent to a resident for one or more services.
Invoice Fields
| Field | Description |
|---|---|
number | Auto-incremented invoice number |
status | Current lifecycle status |
paymentType | online or cash |
toPay | Total amount due |
rows | Line items (name, count, unit price, measure) |
property / unitName / unitType | Target resident’s address |
clientName / clientPhone | Resident contact details |
contact | Linked Contact record |
ticket | Optional linked Ticket |
currencyCode | Defaults to RUB |
Invoice Lifecycle
Draft
Staff creates an invoice in
draft status. Line items can be freely edited. The invoice is not visible to the resident yet.Published
Staff publishes the invoice. Status moves to
published and the resident receives a push notification with a payment link.- Online invoices:
MARKETPLACE_INVOICE_PUBLISHED_MESSAGE - Cash invoices:
MARKETPLACE_INVOICE_CASH_PUBLISHED_MESSAGE - With linked ticket:
MARKETPLACE_INVOICE_WITH_TICKET_PUBLISHED_MESSAGE
Paid
The resident completes payment. Status moves to
paid. A paidAt timestamp is recorded. No further edits are allowed.Invoice Status Transitions
paid and canceled are terminal states.
Payment Types
| Type | Constant | Flow |
|---|---|---|
| Online | INVOICE_PAYMENT_TYPE_ONLINE | Resident pays via acquiring integration in-app |
| Cash | INVOICE_PAYMENT_TYPE_CASH | Resident pays outside the platform; staff confirms |
Fees
A default implicit fee of 5% (DEFAULT_IMPLICIT_FEE_PERCENT) is applied to online invoice payments. Organizations can configure their own fee structure.
Minimum line-item price is 10 units (MIN_PRICE_VALUE) in the configured currency.
Organization Setup
Before marketplace features are available, an organization must complete the marketplace setup (MARKETPLACE_SETUP_URL_PATH = '/setupMarketplace'), which includes:
- Agreeing to marketplace rules and the offer agreement
- Configuring banking/recipient details (
InvoiceContext) - Linking an active acquiring integration context (required for online payments)
AcquiringIntegrationContext, only cash invoices are allowed.
Resident Experience
Residents discover and interact with marketplace services through the resident app:Browse categories
Residents browse the
MarketCategory tree to find services offered by their management organization.Request a service
Residents can request a service directly, or staff can create an invoice on their behalf (optionally linked to an existing ticket).
Receive invoice
A push notification arrives with a payment link. Online payment redirects to the acquiring provider’s checkout.
Integration with Tickets
Invoices can be linked to an existingTicket via the ticket field. This ties the service order to the originating maintenance request, giving both staff and residents a complete picture of the work and its cost.
When a ticket link is set, push notifications use the WITH_TICKET message types, and the app presents both the ticket and invoice in context.
Marketplace Settings
MarketSetting holds global marketplace configuration for the organization, including mobile display preferences and payment rules.