Articles
Articles represent the products or services that can be billed to customers in the system. Each article has a unique code, descriptive information, and configuration for tax codes, cost centers, and revenue accounts. Articles support time-based pricing that allows prices to change over time while maintaining historical accuracy for past invoices.
Article Properties
| Property | Type | Description |
|---|---|---|
id | GUID | Unique identifier |
code | string | Short code identifier |
name | string | Display name |
description | string | Detailed description |
isActive | boolean | Active status |
defaultTaxCodeId | GUID | Default tax code |
defaultCostCenterId | GUID | Default cost center |
revenueAccountId | GUID | Revenue account |
useArticleCostCenter | boolean | Force article cost center |
Article Price Properties
Each article can have multiple prices with different effective dates. The system automatically selects the appropriate price based on the invoice date or price guarantee date. This allows institutions to update prices for future billing while maintaining accurate historical records.
| Property | Type | Description |
|---|---|---|
id | GUID | Unique identifier |
articleId | GUID | Article reference |
amount | decimal | Price amount |
validFrom | datetime | Effective date |
API Endpoints
GET /articles
GET /articles/{id}
GET /article-prices?articleId={id}
Article Response Example
{
"id": "a7b8c9d0-e1f2-3456-1234-567890123456",
"code": "TUI-001",
"name": "Tuition Fee",
"description": "Standard tuition fee for semester-based programs",
"isActive": true,
"defaultTaxCodeId": "b8c9d0e1-f2a3-4567-2345-678901234567",
"defaultCostCenterId": "d0e1f2a3-b4c5-6789-4567-890123456789",
"revenueAccountId": "c9d0e1f2-a3b4-5678-3456-789012345678",
"useArticleCostCenter": false
}
Article Price Response Example
[
{
"id": "e1f2a3b4-c5d6-7890-5678-901234567890",
"articleId": "a7b8c9d0-e1f2-3456-1234-567890123456",
"amount": 5000.00,
"validFrom": "2023-01-01T00:00:00Z"
},
{
"id": "f2a3b4c5-d6e7-8901-6789-012345678901",
"articleId": "a7b8c9d0-e1f2-3456-1234-567890123456",
"amount": 5200.00,
"validFrom": "2024-01-01T00:00:00Z"
},
{
"id": "a3b4c5d6-e7f8-9012-7890-123456789012",
"articleId": "a7b8c9d0-e1f2-3456-1234-567890123456",
"amount": 5500.00,
"validFrom": "2025-01-01T00:00:00Z"
}
]
Pricing Logic
The billing system uses time-based pricing to determine the correct amount to charge for an article. When generating an invoice, the system looks at all prices for the article and selects the one with the most recent validFrom date that is on or before the billing date. For example, if an invoice is dated January 15, 2024, and the article has prices valid from January 1, 2023 ($5,000), January 1, 2024 ($5,200), and January 1, 2025 ($5,500), the system would use the $5,200 price because it is the most recent price that was valid on the invoice date.
Price Guarantee
Some billing configurations support price guarantee functionality that locks in prices at a specific reference date. This is commonly used to honor the tuition rate that was in effect when a student first enrolled, even if prices increase in subsequent years. When price guarantee is enabled for a fee, the system uses the contract's reference date (typically the student's matriculation date) instead of the invoice date to determine which price to apply. This ensures students pay consistent rates throughout their program regardless of price increases.
Cost Center Assignment
Articles can specify cost centers for financial tracking and reporting purposes. The defaultCostCenterId property defines which cost center should be used when the article appears on an invoice line item. However, this default can be overridden at the line item level if needed for specific billing scenarios. When the useArticleCostCenter flag is set to true, the article's cost center is always used regardless of any other configuration, ensuring consistent cost allocation for that article type across all invoices.