Contract
In Zenskar, a contract is the central digital schema that represents a commercial agreement between a service provider and a customer. It serves as the single source of truth for the system, defining the parameters for generating invoices and calculating recognized revenue.
A contract ensures consistency across financial operations by centralizing:
- What is being sold (products and features)
- The pricing and billing cadence
- The rules for revenue recognition
- Audit trails for financial compliance
Data architecture
A contract is structured as a hierarchy. This design allows Zenskar to handle everything from simple flat-rate subscriptions to complex, multi-year enterprise agreements with varying terms.
Phases
A phase is a time-based segment within a contract. It defines specific commercial terms for a set duration, and a contract must contain at least one. Because customer relationships often change over time, phases allow you to model those transitions within a single contract rather than creating separate agreements. Common examples include:
- Trial periods: A phase with a fixed duration (e.g., 14 days) where products are priced at zero.
- Step-up pricing: An initial phase with discounted rates followed by a phase at standard pricing.
- Contract amendments: A new phase capturing updated pricing or product composition mid-term.
Products and features
Each phase acts as a container for the items being sold:
- Products: The core units of value, such as subscriptions, usage-based services, or one-time fees. These define the primary pricing models.
- Features: Specific commercial modifiers or configuration settings, such as tax rules (e.g., Avalara) or volume discounts, that enhance or modify the behavior of products within the phase.
Parallel workflows
Zenskar operates every contract through two distinct, concurrent workflows. This design supports organizations at various stages of financial maturity.
| Workflow | Functional focus | Primary output |
|---|---|---|
| Billing | Operational execution of payment terms. | Invoices, credit notes, and payment receipts. |
| Revenue recognition | Accounting compliance (ASC 606/IFRS 15). | Revenue schedules and deferred revenue reports. |
Background execution
The revenue recognition workflow runs automatically for all contracts. Early-stage organizations or those using simple cash accounting may not require this output immediately, but the data remains available to support future audits or transitions to accrual-based accounting without requiring system reconfiguration.
stateDiagram-v2
[*] --> ContractCreated
ContractCreated: Contract created
ContractCreated --> BillingWorkflow : Billing terms defined
ContractCreated --> RevenueWorkflow : Performance obligations identified
BillingWorkflow: Billing workflow
RevenueWorkflow: Revenue workflow
%% Billing Workflow
state BillingWorkflow {
[*] --> BillingScheduled
BillingScheduled --> InvoiceGeneratedAndSent : Invoice created and sent to customer
InvoiceGeneratedAndSent --> PaymentPending : Awaiting payment
PaymentPending --> PaymentReceived : Payment received
PaymentReceived --> ReceiptIssued : Receipt issued
ReceiptIssued --> [*]
BillingScheduled: Billing scheduled
InvoiceGeneratedAndSent: Invoice generated and sent
PaymentPending: Payment pending
PaymentReceived: Payment received
ReceiptIssued: Receipt issued
}
%% Revenue Recognition Workflow
state RevenueWorkflow {
[*] --> RevenuePlanCreated
RevenuePlanCreated --> RevenueScheduleGenerated : Revenue schedule created
RevenueScheduleGenerated --> RevenueRecognized : Revenue recognized on fulfillment of performance obligations
RevenueRecognized --> [*]
RevenuePlanCreated: Revenue plan created
RevenueScheduleGenerated: Revenue schedule generated
RevenueRecognized: Revenue recognized
}
note right of ContractCreated
Contract includes product, price, billing, and revenue terms.
end note
note right of RevenueRecognized
Recognized revenue is recorded against the revenue schedule and reflected in deferred revenue reports.
end note
note right of ReceiptIssued
Receipt confirms payment and closes the billing transaction.
end note
The revenue recognition framework
For businesses subject to ASC 606 or IFRS 15 standards, Zenskar automates the technical execution of the five-step revenue recognition model.
System boundaries
Zenskar manages the automated transformation of contract data into financial reports, but does not replace professional legal or accounting judgment regarding the validity of an agreement.
- Identify the contract: (Out of scope) The user must determine if a legally enforceable agreement exists.
- Identify performance obligations: Zenskar identifies distinct obligations based on the products and features configured within each phase.
- Determine transaction price: The system calculates total consideration, accounting for fixed and variable components.
- Allocate price: Zenskar allocates the transaction price across performance obligations.
- Recognize revenue: Revenue is recognized as obligations are satisfied, based on the schedules defined in the contract.
Important: Zenskar manages the commercial structure and financial logic of a contract but does not assess its legal enforceability.
Contract ingestion methods
To support various quote-to-cash (Q2C) pipelines, Zenskar provides three methods for instantiating contracts. Each suits a different operational context.
- Automated sync: Direct ingestion from external systems such as CRM (e.g., Salesforce), CPQ, or ERP platforms. Best suited for organizations with existing commercial tooling that should remain the system of record.
- Manual configuration: Creation via the Zenskar administrative interface for physical or non-standardized agreements that fall outside automated pipelines.
- Programmatic creation: Use of Zenskar APIs to instantiate contracts directly from custom application logic. Best suited for organizations building proprietary Q2C workflows or requiring fine-grained control over contract structure.
stateDiagram-v2
[*] --> Contract_Options
Contract_Options: Contract ingestion method
Contract_Options --> Sync_Existing_Contracts : Option 1 — Automated sync
Contract_Options --> Create_New_Contracts_Manually : Option 2 — Manual configuration
Contract_Options --> Create_New_Contracts_API : Option 3 — API creation
Sync_Existing_Contracts: Automated sync
Create_New_Contracts_Manually: Manual configuration
Create_New_Contracts_API: API creation
Sync_Existing_Contracts --> Contracts_Available
Create_New_Contracts_Manually --> Contracts_Available
Create_New_Contracts_API --> Contracts_Available
Contracts_Available: Contracts available in Zenskar
Contracts_Available --> [*]
state Sync_Existing_Contracts {
[*] --> Sync_In_Progress
Sync_In_Progress --> Sync_Completed : Sync successful
Sync_Completed --> [*]
Sync_In_Progress: Connecting to third-party system (ERP, CRM, or CPQ)
Sync_Completed: Contract data ingested and validated
}
state Create_New_Contracts_Manually {
[*] --> Contract_Creation
Contract_Creation --> Contract_Ready : Contract saved
Contract_Ready --> [*]
Contract_Creation: Configuring contract in Zenskar UI
Contract_Ready: Contract reviewed and confirmed
}
state Create_New_Contracts_API {
[*] --> Contract_Creation_API
Contract_Creation_API --> Contract_Ready_API : API call successful
Contract_Ready_API --> [*]
Contract_Creation_API: Contract payload submitted via API
Contract_Ready_API: Contract instantiated and validated
}
note left of Contract_Options
Sync contracts from a third-party system (ERP, CRM, or CPQ),
configure them manually in the Zenskar UI,
or instantiate them programmatically via the Zenskar API.
end note
Next steps:
- To learn how to create your first contract in the interface, see the [Getting started: your first contract] guide.
- For a detailed list of contract fields and data types, see the [Contract API reference].
Updated 6 days ago
