Kota’s contribution reporting system provides the data you need while allowing your payroll engine to handle the business logic. By integrating properly with this system, you can ensure accurate, compliant payroll processing across multiple countries and insurance providers with minimal manual intervention.
Contribution reports are a critical component for platforms that handle contributions, such as payroll and benefits platforms. They provide a structured way to access and process insurance contributions across multiple countries, enabling scalable systems and efficient reporting.
A contribution report represents a comprehensive breakdown of all insurance contributions for a specific employer over a defined period. Each report contains detailed employee breakdowns that include both employer and employee contributions.
For detailed API references, see the Contribution Reports API documentation.
Contribution reports consist of three main components that work together to provide a complete picture of insurance contributions:
Contribution Report - The top-level container identified by a ctr_ prefix
open or finalizedEmployee Breakdowns - The per-employee details within a contribution report
Individual Contributions - The actual monetary amounts identified by a ct_ prefix
When processing contribution reports, you’ll first retrieve the report, then access the employee breakdowns to get the individual contributions. The employer contributions and employee contributions are separated within each breakdown, allowing you to process them differently in your system.
For example, as mentioned above, employer contributions might be handled as company expenses and need to be reported to a national authority, while employee contributions could be deducted from employee paychecks. This separation gives you the flexibility to implement your own business logic and handle the complexity of international payroll and reporting requirements and changing regulatory environments.
Contribution reports have two possible states:
Reports can be finalized at any point during the month by calling the Finalize contribution report API. If not explicitly finalized, they are automatically finalized at the end of the month.
Important: Once a report is finalized, any new contributions that arrive afterward during the same month will appear in the next month’s report. This is the standard behavior for late-arriving data, not an adjustment scenario.
Reports become available from the 1st of each month or after the finalization of the previous month’s report.
Adjustments are a mechanism to correct or modify previous contributions. When a contribution needs to be adjusted (due to changes in employee status, corrections, etc.), the adjustment is marked with:
adjustment flag set to trueadjustment_for)The various reports contain several different reporting and cover periods throughout, each relevant to what the report is being used for. Understanding these periods is crucial for accurate processing and reporting.
Each contribution report has a period property that covers a specific time period. This helps you decide which report to use for a given payroll run. For example, if you’re running June’s payroll, you might want to use either June’s report (if finalizing it manually) or May’s completed report.
The period property is defined as a start date (from_date) and an end date (to_date). Both dates are formatted as YYYY-MM-DD.
Employee breakdowns contain different period properties at different levels of the data structure.
period:The period property at the root of the employee breakdown is identical to the period of the parent contribution report. This represents the reporting period that the breakdown belongs to.
Note: While the breakdown’s period represents the reporting month, the individual contributions within it may have different cover_period values spanning current, previous, or future months.
cover_period:The period for which the insurance premium contribution covers the employee. It may differ from the report’s period. This allows for flexibility in reporting and processing contributions - see scenarios below to learn about the specific scenarios where this occurs.
The cover_period property is defined as a start date (from_date) and an end date (to_date). Both dates are formatted as YYYY-MM-DD.
Cover periods can vary in two important ways:
reporting_month:The primary month for which the contribution is relevant as it helps align contributions with standard monthly reporting cycles. It allows for consistent monthly categorisation in systems that require calendar-based reporting.
The reporting_month property is:
YYYY-MM-01 format (the day is always 01 by convention)This report contains the breakdown of contributions for each employee, split across the employer’s and employee’s own contributions. Focusing on the health_insurance object, common to both employer and employee, it’s useful to highlight some properties:
category: Category of the contribution gross_premium, tax, tax_relief - critical for how you process and report the contributionsmember_type: Where available we split out contributions by policyholder, partner_dependant, child_dependant - this is useful for understanding the breakdown of contributions and how they are processed and may have reporting or tax implications in different jurisdictionsadjustment: Explained more elsewhere but this is where you’d locate and process an adjustmentadjustment_for: References the id field of the original contribution being adjusted - this is important for tracking and reconciling adjustments within your system and presenting it back to employersnote: Optional field for additional context, e.g. if the amount is pro-rated or backdatedEmployee breakdown responses also include a currency field indicating the currency for all monetary amounts in the breakdown (e.g., eur, usd).
Estimated implementation time: 1-2 weeks, depending on:
Our implementation guide provides a clear path to integrate contribution reports into your system with clear code examples and scenarios through out for you which should help you decide on how much you need to support for your use-case and roadmapping.
Integrating contribution reports into your system involves a clear sequence of operations:
Before you can process contribution reports, you need to identify which reports are available for your use. Use the List contribution reports API to discover available reports with filtering options.
Common filtering scenarios:
employer_id and specific year/monthexternal_customer_id to separate reports by customerstatus: 'finalized' with date range filtering for completed periodsIf the report is in open status, you need to finalize it before processing to ensure the data is immutable. If it’s already finalized, you can skip this step. Use the Finalize contribution report API.
For payroll processing, the recommended approach is to finalize the report immediately before using it for locking your payroll run. For example, if you’re running payroll on September 22nd, you should finalize September’s report on that same day before processing payroll.
Once you have the finalized contribution report, you need to retrieve the employee breakdowns:
After retrieving the data, process each employee’s contributions:
Distinguish Contribution Types:
note fieldHandle Each Contribution Type Appropriately:
Depending on insurer invoicing and report finalization timelines, contribution reports may contain contributions for different periods. Understanding these timing variations is crucial for correctly processing contributions in your system.
In this scenario, May’s payroll would include contributions for April coverage, which appear in the May contribution report. When you process your May payroll run, you would include these April contributions to ensure employees and employers pay for the insurance coverage that was provided in April.
In this scenario, May’s payroll would include contributions for May coverage, which appear in the May contribution report. When you process your May payroll run, you would include these May contributions to ensure employees and employers pay for the insurance coverage that will be provided in May.
In this scenario, May’s payroll would include contributions for June coverage, which appear in the May contribution report. When you process your May payroll run, you would include these June contributions to ensure employees and employers pay for the insurance coverage that will be provided in June.
In this scenario, May’s payroll might include contributions with coverage periods that span across calendar months, such as mid-April to mid-May or mid-May to mid-June.
cover_period dates to understand the actual coverage timeframereporting_month property which provides a standardized monthly categorizationFor example, if contribution data with a coverage period from April 10th to May 9th is received by Kota on May 5th, it will be included in your May contribution report. The reporting_month field will help you categorize this contribution consistently with your monthly reporting cycles.
When corrections need to be made to previous contributions, they appear as adjustments in subsequent reports. Understanding how to process these adjustments is critical for maintaining accurate records and ensuring proper accounting.
Adjustments are special contribution entries that modify previously processed contributions. As mention above, they are characterized by:
adjustment flag set to true to distinguish them from regular contributionsadjustment_for field that references the ID of the original contribution being adjustedAdjustments typically occur due to:
When handling adjustments, your system should:
adjustment_for referenceThis approach ensures that your system accurately reflects all changes while maintaining a clear history of contributions and their adjustments.
When employees join mid-period, their first contribution report typically contains multiple contributions: pro-rated amounts for the partial initial period and full amounts for subsequent complete periods.
When an employee joins mid-month, their first contribution report typically includes:
Pro-rated amounts appear as regular contributions with shorter coverage periods:
cover_period field with specific from_date and to_dateWhen processing contributions for new employees, your system should:
This approach ensures that new employees are charged correctly from their first day of coverage, while maintaining accurate financial records for both the employer and employee.
When employees leave but their final payroll is processed before the contribution report reflecting their departure, you’ll need to handle pro-rata reimbursements. This scenario requires careful handling to ensure proper accounting and to avoid overcharging for insurance coverage.
When an employee leaves mid-month, the contribution report will typically include:
adjustment_for fieldA common challenge occurs when:
This timing mismatch means you’ll need to handle the refund in a subsequent payroll cycle after the employee has already departed.
Refunds for departed employees are identified by:
employee_id and employee_policy_id as the original contributionadjustment=true and a reference via adjustment_forWhen processing refunds for departed employees, your system should:
adjustment flag and negative amountsadjustment_for referenceThis approach ensures that employers receive appropriate refunds for departed employees while maintaining accurate financial records.
In Ireland, health insurance contributions may include Tax Relief at Source (TRS), which creates separate contribution entries for premium and tax relief amounts. This scenario requires special handling to ensure correct payroll processing and compliance with Irish tax regulations.
TRS contributions appear as separate entries in the contribution report. The handling differs significantly depending on whether it’s an employer or employee contribution.
For Irish health insurance with TRS, you will receive separate contribution entries. The following provides a simplified overview of the TRS handling, please ensure your implementation complies with current Irish tax regulations and Revenue requirements.
Employer contributions with TRS:
category: "gross_premium"category: "tax_relief"Employee contributions with TRS:
category: "gross_premium"category: "tax_relief"When processing TRS contributions, your system should:
category: "tax_relief"Employer of Record (EoR) platforms handle multiple customers under a single employer relationship. For these platforms, contribution reports are automatically separated by customer, with each customer receiving their own dedicated report identified by the external_customer_id field.
For EoR platforms, the system creates separate contribution reports for each customer:
external_customer_id gets its own contribution report, even if they share the same employerexternal_customer_id when retrieving contribution reportsexternal_customer_id appears in both the contribution report and all associated employee breakdownsWhen processing reports as an EoR platform, you should:
external_customer_id parameter when listing reports to process specific customers