Why co-lending on open source loan software needs its own design
A lender that shares loans with a partner institution has to split interest, principal, repayments, fees and reporting between two balance sheets while keeping one auditable record of every loan. Frappe Lending covers more of this pattern out of the box than Apache Fineract, which usually needs custom work for the same model. That is the short answer, but the design still depends on what the partnership actually is. Before you pick a platform, decide whether the arrangement is a participation (the lead lender keeps the borrower relationship and sells slices of the economics), a transfer of ownership (the loan moves to the partner and its records must move with it), or a split of servicing (one institution owns the loan and the other collects, reports or handles customer contact).
Each model puts different demands on the system. A participation needs a fixed split of interest and principal per partner, applied consistently to every repayment and fee, with the lead lender's books still showing the full loan. A transfer needs a dated handover that keeps the schedule, arrears history and audit trail intact on both sides. A servicing split needs role-based access so the servicer sees collections data without seeing the owner's pricing or internal decisions. Ask any partner to show, on a test loan, how a single repayment is divided, how a transfer date is recorded, and which user roles can see which fields. Confirm these behaviors in the exact release you plan to run, because co-lending features differ between versions and between the standard product and custom code.
Partner reporting is where weak designs fail first. Each institution needs statements, regulatory extracts and reconciliation files that tie back to the same loan identifiers, and an examiner on either side should be able to trace a dollar from the borrower's payment to each partner's ledger. Define the reporting obligations of both parties in the requirements phase, including who owns the borrower record, who retains records and for how long, and how disputes over allocation are resolved. Treat the allocation rules as configuration that is versioned and approved, not as spreadsheets maintained outside the system.
Requirements a co-lending build must meet and what each means for the system
This table maps the regulatory and contractual requirements that shape a co-lending build to their source and to what each one asks of the system. Read each row as a design constraint: the requirement on the left determines the access model, ledger views or retention design on the right. Confirm applicability with your counsel, since the FTC Safeguards Rule and SEC Rule 17a-4(b) apply only to certain institutions.
| Requirement and source | What it asks for | What it means for the build |
|---|---|---|
| FTC Safeguards Rule, encryption (16 CFR 314.4) | Customer information encrypted in transit over external networks and at rest | Encrypt borrower data in the Fineract or Frappe Lending database, backups and partner data exchange files, with keys held by your team |
| FTC Safeguards Rule, MFA (16 CFR 314.4) | Multi-factor authentication for any individual accessing any information system | Apply MFA to lender staff and partner staff alike, and confirm which Fineract or Frappe Lending login paths can bypass it |
| FTC Safeguards Rule, logging (16 CFR 314.4) | Logging of authorized user activity | Log loan splits, rate changes, reassignments and manual repayment edits with user, partner and timestamp |
| FTC Safeguards Rule, change management (16 CFR 314.4) | Documented change management procedures | Route changes to co-lending rules, split formulas and partner configuration through tested change records before production |
| FTC Safeguards Rule, testing (16 CFR 314.4(d)(2)) | Penetration testing annually and vulnerability assessments at least every six months, absent effective continuous monitoring | Scope partner portals and transfer interfaces into the test plan, since they hold shared borrower data |
| SEC Rule 17a-4(b) retention, where applicable | Preserve certain records for at least three years, the first two easily accessible | Only relevant if a broker-dealer is involved; keep transfer and split records in an accessible store for the required period |
| Contractual split rules between partners | Agreed shares of principal, interest, fees and losses for each loan | Encode split terms as versioned product or contract parameters, so each loan keeps the terms in force at origination |
| Partner-level access controls | Each partner sees only the loans and data its agreement allows | Build role and branch or partner scoping on top of the core, and test that one partner cannot query another partner's records |
| Per-partner ledger views and reporting | Each institution reconciles its share of balances and income independently | Confirm whether Frappe Lending or Fineract accounting can produce separate ledgers per partner, or whether custom journal logic is needed |
Frappe Lending or Apache Fineract for a partnership model
Frappe Lending runs on the Frappe Framework, which is licensed under MIT, and it sits in the same stack as ERPNext. That is useful when the partner's general ledger, receivables and customer records already live in an ERP. Before designing a co-lending model, confirm with Frappe which partnership features the current release supports natively and which would need custom development.
- Configuration: Loan products, repayment schedules and accounting entries are set through the desk interface. Confirm whether a second institution's share can be defined as a product or account setting.
- Server Scripts for split logic: Server Scripts run Python on document events. From version 15 they are disabled by default and must be enabled with
server_script_enabled, and Frappe Cloud public shared benches do not allow them. - Version lifecycle: Frappe's published policy plans support for version 15 until the end of 2027 and version 16 until the end of 2029. Confirm which version the build targets.
- Support coverage: Frappe warranty coverage requires a listed version and a matching Frappe Cloud support plan, so ask how a self-hosted deployment is supported.
Check whether the native loan objects can hold two lender shares, how partner statements are generated and who owns reconciliation between the two institutions. The supported versions page is the starting point for the lifecycle questions.
Apache Fineract is a headless core banking platform licensed under Apache-2.0. It exposes REST APIs, has no built-in user interface, and covers loan portfolios, client data and integrated accounting. A co-lending split usually needs the partner's share, fees and servicing rights represented in the loan and accounting model, so product configuration and custom code must be designed together.
- Configured: Loan products, business rules and accounting mappings are set through platform configuration. Test whether two funding sources and their shares can be modeled on one loan before writing any code.
- Coded: Interest and repayment splitting between institutions, partner statements and settlement files are typically custom services that call the Fineract REST APIs. Confirm the extension points the project and the vendor support.
- Multi-tenancy: Requests carry the
Fineract-Platform-TenantIdheader, which separates institutions on one deployment. It does not by itself create a shared-loan model. - Instances and migrations: Read, write and batch instances are set by environment variables, and Liquibase migrations run only on write instances. Settlement jobs that write at volume need to be placed deliberately.
- Release cadence: Official releases are quarterly, and 1.15.0 was published on July 14, 2026. Plan upgrade testing around each release.
Ask the project documentation and an implementation partner which parts of a split are standard configuration and which were custom in earlier builds. The Fineract platform documentation describes the configuration and API surface.
The Fineract README names Mifos X as the front end in its Kubernetes example, so it is the usual starting point for staff workflows. When a partnership needs partner portals, approval screens or different views for each lender, the front end and the split engine are usually separate builds. Interface decisions should follow the data model, so define the split before designing the screens.
- Staff workflows: Mifos X covers the operational screens staff use every day. Confirm which partner-specific views it supports without modification.
- Partner access: A partner portal is usually a separate application that calls the APIs with scoped permissions. Define access per institution before build starts.
- Reporting: Partner reports, reconciliations and month-end files need a defined data source and an owner. Decide whether they come from the core system or a separate reporting layer.
- Testing: Split calculations need test cases for prepayment, arrears, write-off and mid-life transfer of a loan, with expected outputs signed off by both institutions.
Ask the implementation partner for a sample of split calculations and partner reports from a previous build, and confirm who maintains the custom code after handover.
Which open source platforms fit a co-lending model and why
Co-lending splits one loan between two institutions, so the platform has to hold shared terms, split repayments and interest, and partner-level reporting in one consistent record. The options below differ in how natively they handle that split, how they separate partner environments, and where the general ledger sits.
Frappe Lending on the Frappe Framework
Frappe Lending runs on the Frappe Framework, which is licensed under MIT, and the lending application itself is distributed under GPL-3.0. Check whether its loan and disbursement records can carry two lender shares on one facility, and how repayment allocations are calculated for each party. Confirm the licensing terms with your counsel before you modify or redistribute the code, since GPL-3.0 carries obligations that MIT does not.
Apache Fineract with Mifos X
Apache Fineract is licensed under Apache-2.0 and is headless, so it exposes REST APIs and leaves the user interface to a separate front end such as Mifos X. Its multi-tenant design, which routes requests with a tenant header, can separate partner environments on one deployment. Confirm whether the product model supports two funding sources on one loan, or whether that needs custom work.
ERPNext as the general ledger layer
Where ERPNext is already the company's accounting system, it can serve as the general ledger and partner reporting layer, with journal entries that mirror each lender's share. It is licensed under GPL-3.0 and covers accounting alongside other ERP modules. Confirm that the lending platform posts entries into ERPNext in a form that reconciles to each partner's statement, and that the chart of accounts supports both parties' books.
Split repayments and interest by partner
A co-lending model only works if each payment is allocated to principal, interest, fees and penalties in the agreed proportion for each lender. Ask any candidate platform to show a worked example of a partial payment, a late payment and a prepayment, with the resulting balances for both parties. Illustrative test cases should cover rounding differences, since small rounding errors compound across a large book.
Partner reporting and data separation
Each institution usually needs its own view of the loans it funds, with no access to the other party's pricing or borrower data beyond what the agreement allows. Confirm how the platform restricts partner users to their own portfolio, how reports are scheduled and exported, and whether audit logs record which partner viewed or changed each record. Separate tenants or instances are one option, but they add operational overhead.
When a custom ledger service fits better
If the co-lending terms change often, include revenue shares that vary by loan, or require real-time balances across several lenders, neither Frappe Lending nor Fineract may model the split without significant changes. In that case a dedicated double-entry ledger service, with the lending platform as the loan system of record, can hold the partner allocations. Weigh the added build and maintenance effort against the cost of forcing the split into a core product that was not designed for it.
How a co-lending rollout moves from agreed terms to live partner reporting
This sequence turns a written co-lending agreement into a configured, tested and reconciled system that both partners can rely on for shared loan books. Each phase closes with a document or test record that the next phase depends on.
Agree split rules and servicing terms in writing
The two institutions, with their credit, finance, operations and legal leads, define how each loan is funded, which partner services it, how principal, interest, fees and recoveries are divided, and what happens on default, prepayment or early buyout. Your implementation partner turns these decisions into a rules matrix that lists every case with its expected allocation. The step is complete when both partners sign the matrix and the servicing agreement references it by version.
Configure products and the partner share model
Using the signed matrix, the implementer sets up loan products, interest and fee treatment, and the partner share structure in the platform, whether through Frappe Lending's configuration or Fineract's product and accounting setup with custom work where needed. Each configuration decision is traced back to a matrix row so that no rule exists only in a developer's head. The step closes with a configuration record that maps every product and share rule to its matrix reference and a change log for later edits.
Test allocation with sample loans
The team runs a set of sample loans through the full life cycle: disbursement, scheduled repayments, a partial payment, a late payment, a fee, a write-off and an early payoff. Expected splits are calculated independently from the matrix and compared with the system output to the cent. Failures go back to configuration until the results match. The step ends with a test evidence pack that lists each scenario, the expected and actual results, and the people who reviewed them.
Migrate or tag existing shared loans
Loans already held jointly are either migrated into the platform with their funding shares and balances or tagged in the new system with a partner ownership record that the current servicer still administers. The choice depends on the state of the existing book and the servicing agreement. Reconciliation runs against the legacy ledger for every loan before any new transactions post. The step is complete when the opening balances per partner match the legacy records and the exceptions list is cleared or formally accepted.
Run partner reporting in parallel
For a defined period, the platform generates partner statements and settlement files alongside the existing process, and both partners' finance teams compare them with their own records. Differences are investigated for root cause, whether in rules, data, timing or the legacy process. This parallel run is where interest accrual, fee sharing and recoveries are most often found to diverge from the written terms. The step closes with a reconciliation sign-off from each partner that lists any accepted variances and their owners.
Go live under change control
Once both partners sign off, the platform takes over new allocations, and the legacy process is retired for new loans on an agreed date. Every later change to rules, products or reports goes through a change request that references the matrix, is tested on sample loans and approved by both partners before deployment. Access, logging and backups are checked against your control requirements before go-live. The step is complete when the go-live record, the approved change procedure and the first partner settlement cycle are documented.
How the integrations and deployment fit a shared loan book
Where does a self-hosted co-lending stack run?
It runs in the lender's own cloud account, data center or air-gapped network, so both the loan data and the database stay under the lender's control. The architecture is the same whichever platform you choose: an application tier, a relational database, background processing and a secure channel out to each partner. Where the two institutions are separate legal entities, decide early which one hosts the shared book and how the other gets read access. That decision drives network design, access logging and who is responsible for backups. Confirm the hosting location with your compliance team before design starts, since data residency rules can limit where partner data may sit.
Which database does Apache Fineract need for a co-lending setup?
Apache Fineract should run on PostgreSQL, which the project's README names as the recommended database. The README also states that MariaDB and MySQL are deprecated under proposal FSIP-9, and the official Docker image ships only the PostgreSQL JDBC driver. For a shared book, plan for a write instance, a batch instance and read instances on database read replicas, so partner reporting does not compete with servicing writes. Liquibase migrations run only on write instances, so schedule them as a separate step during upgrades. Confirm the instance layout with your implementation partner against your expected load.
What does the Frappe Docker setup include for Frappe Lending?
The frappe_docker repository provides production images and Compose files for ERPNext and other Frappe apps, including Frappe Lending, with services for MariaDB, Redis, background workers, the scheduler, Socket.io and Nginx. Split repayment jobs, interest accruals and partner statements run through the background workers and scheduler, so their capacity and failure alerts matter as much as the web tier. The single-file demo setup is marked for short-lived evaluation only and should not carry a live shared book. Confirm the exact services and versions you need against the current repository before you commit to a design.
Can Frappe Cloud run custom split logic for shared loans?
Frappe Cloud public shared benches do not allow Server Scripts, and Server Scripts are disabled by default from version 15 onward unless the server_script_enabled setting is turned on. Any custom split logic, such as a partner-specific repayment waterfall, therefore needs either a private bench you control or a custom app deployed with the code under your change management process. Server Scripts also run Python on document events, which makes them easy to start with and harder to audit at scale. Decide where split rules live before you pick the hosting option, because this choice can rule out a managed setup.
How do payment collections flow to the partner accounts?
Borrower payments arrive through a payment provider or bank rail, and the lending system matches each receipt to a loan and allocates it according to the agreed split. The integration must handle partial payments, reversals, failed collections and late postings, because a mismatch between the collected amount and the allocated amount creates a reconciliation break for both lenders. Collections data should be reconciled daily against the bank statement. Ask any partner to show how it matches receipts, how it treats returned payments, and which system holds the authoritative record of each allocation.
How should co-lending entries reach the general ledger?
Each lender needs its own ledger entries for its share of principal, interest, fees and write-offs, posted from the loan system into the general ledger of the entity that owns the asset. Shared-book activity should carry a partner or entity dimension so each side can close its books independently. Fineract offers real-time integrated accounting, and Frappe Lending connects to ERPNext accounting, but the mapping from loan events to chart-of-accounts codes is custom work for most co-lending models. Agree the posting rules, cut-off times and reversal handling with both finance teams before go-live.
How do partners get loan data without exposing the whole book?
A secure partner reporting channel should give each institution read access only to the loans it funds or services, through scoped reports or an API that filters by partner. Use encrypted transport, individual credentials with multi-factor authentication, and access logs that record who pulled which report and when. Scheduled file drops to an SFTP location or a read-only reporting database are common alternatives to live API access, and each one needs its own retention and deletion rules. Confirm the channel design with your security team and check which records each partner must keep under its own retention obligations.
Who should own the integration work for a shared loan book?
The lender that operates the shared book typically owns the platform, its hosting, the split logic and the reporting channel, while each partner owns its own ledger and its own access controls. An implementation partner such as DeployOpen can plan, implement, integrate, harden and document the self-hosted deployment within a fixed scope agreed in writing before work starts. Ongoing upgrades, backups and support are usually handled under a separate retainer. Ask any partner to state in writing which systems, interfaces and runbooks it delivers and which remain with your team.
Evidence auditors and partners ask for in a shared loan book
This table lists the evidence a shared loan book typically needs, the rule or contract that asks for it, and the component that produces it. Read it as a checklist to agree with your co-lending partner before go-live, since each partner may ask for different artifacts. DeployOpen prepares and organizes this evidence, but independent auditors issue any opinion or attestation.
| Evidence item | Rule or contract it supports | Component that produces it |
|---|---|---|
| Allocation logs showing each loan's split between partners and the effective date of each change | Partner agreement terms and internal records of who funded which share; FTC Safeguards Rule logging of authorized user activity (16 CFR 314.4) | Fineract or Frappe Lending audit trail, plus a separate log of co-lending agreement terms and transfer approvals |
| Change management records for split logic, interest allocation rules and any custom co-lending code | Change management procedures required under 16 CFR 314.4 | Git history, pull request approvals and deployment logs from the CI pipeline, linked to tickets |
| Access logs and MFA evidence for staff who can view or change partner-shared loans | Multi-factor authentication for individuals accessing information systems under 16 CFR 314.4 | Identity provider logs, Fineract or Frappe Lending user role history and admin session records |
| Backup and retention records for loan, payment and allocation data | Record retention expectations in partner agreements; SEC Rule 17a-4(b) applies only if a broker-dealer is involved | Database backup job reports, restore test results and retention policy configuration (confirm retention periods with counsel) |
| Penetration test and vulnerability assessment reports for the loan system and partner interfaces | Annual penetration testing and vulnerability assessments at least every six months under 16 CFR 314.4(d)(2), absent effective continuous monitoring | Third-party or internal test reports, remediation tickets and retest results covering partner API endpoints |
| Reconciliation reports showing that each partner's principal, interest and fee totals match the servicing ledger | Partner reporting obligations and internal financial controls confirmed in the co-lending agreement | Scheduled reconciliation jobs, exception queues and sign-off records from the accounting module |
Questions to ask an implementation partner before co-lending work starts
Start by asking the partner which co-lending or loan participation work they have done on lending software, and what they configured. Ask whether they have set up partner shares of principal, interest and fees inside the loan product rather than in spreadsheets outside the system, and where those shares are stored. Ask for the specific settings they used, such as how a share is applied to each repayment event and how a partner's share is handled on early repayment, write-off or restructuring. A partner who has only built single-lender products will describe the work in general terms. Ask them to name the Frappe Lending doctypes or Fineract product and accounting configuration they touched, and whether that work was delivered to a production system or only a test tenant.
Next, ask how allocation rules are tested before go-live. A credible answer names a written test matrix covering a fixed set of scenarios: a standard monthly payment, a partial payment, an overpayment, a payment after a late fee, a payment during a grace period, and a payment on a loan with a split that changed mid-term. Ask who signs off each expected result, both the lending institution and the partner, and whether the expected results were calculated independently of the system. Ask for the test data set and whether it reuses the reconciliation logic the finance team will run after go-live. Partner data isolation is the second area. Ask how the partner's users are separated from the lead institution's staff, whether the partner sees only its own loans and reports, and how access is granted and removed. In Fineract, ask how tenant and office scoping is used, and in Frappe Lending, how role permissions and user permissions restrict records.
Finally, ask for two artifacts before signing. The first is a sample partner report built from realistic test data, showing balances, interest, fees and collections per partner, with the calculation basis stated on the page. The second is the audit trail for a sample loan transfer, showing who initiated it, the effective date, the before and after shares, the approval and the system log entries. Ask how the partner documents changes under change management, including who approves configuration changes that alter a split, how those changes are tested, and where the record is kept. Confirm with the partner which evidence they retain and for how long, and check it against your own record-keeping obligations with counsel.
What co-lending on open source lending software costs and takes
What makes a co-lending implementation cost more or take longer?
The main drivers are the number of lending partners, how complex the split rules are, how many loans are already in servicing, and whether Apache Fineract needs custom work for the same model. Each partner adds its own funding terms, reporting formats, sign-off steps and accounting entries. Splitting principal, interest, fees and late charges by percentage is straightforward; splitting by tranche, by loan age or by performance trigger takes more design and more testing. Loans already in servicing add a migration and reconciliation workload that new originations do not. Ask any partner to price each of these drivers separately so you can see which ones move the total.
How long does a co-lending rollout take?
Duration depends on the scope you agree in writing before work starts, not on a standard timeline. A rollout limited to Frappe Lending with one partner, a single split rule and new originations is much smaller than one covering several partners, reporting packs and a book of existing loans. DeployOpen does not publish durations, so ask for a phased plan that shows design sign-off, configuration, data migration, partner reporting and parallel testing as separate milestones. Each milestone should name the inputs it needs from you and the acceptance test that closes it.
What does the lender need to provide before implementation starts?
The work needs signed commercial rules, test data and written sign-offs from each partner. The signed rules should define the split for principal, interest, fees and penalties, who owns collections on delinquent loans, how a transfer is triggered and what happens on early repayment or default. Test data should include realistic loan files, repayment histories and a set of edge cases such as partial payments and reversals. Partner sign-offs cover reporting formats, reconciliation cut-off times and the accounting treatment each institution expects. Without these inputs, configuration tends to be rebuilt during testing.
Can an internal team build co-lending on open source loan software?
An internal team can do it if it already runs the platform in production and has engineers who understand the lending product model, the accounting integration and the database. The skills most often missing are product configuration experience, testing of split and transfer logic, and partner reporting design. Frappe Lending is configured through the ERPNext-style desk and Server Scripts, which are disabled by default from version 15 and must be enabled with the server_script_enabled setting, so confirm how your team will govern custom logic. Fineract is headless and needs custom Java work for models it does not support out of the box. Many lenders split the work: internal staff own the business rules and operations, and an implementation partner handles configuration, testing and hardening.
How does DeployOpen price co-lending work?
DeployOpen does not publish a price list. Most engagements are fixed-scope, meaning scope, deliverables and timelines are agreed in writing before work starts, and a quote follows from that written scope. Ask for the quote to separate one-time work (requirements, configuration, custom development, data migration, testing, documentation and training) from recurring work (hosting, upgrades, monitoring and support). Ask which items depend on the number of partners, the number of loans in migration and the Fineract customizations you choose. Ongoing support, upgrades and continuous testing are available as retainers, and those should be priced as a separate line.
What infrastructure and licensing costs apply to self-hosted co-lending?
Both Frappe Lending on ERPNext and Apache Fineract are open source, so the platform itself carries no license fee. ERPNext is licensed under GPL-3.0 and the Frappe Framework under MIT, and Fineract is licensed under Apache-2.0. Self-hosting ERPNext is free according to its pricing page, and Frappe Cloud hosting starts at a published monthly rate, though that rate is not a Frappe Lending figure. The costs that remain are your cloud or data center infrastructure, database operations, backups, monitoring and staff time. For Fineract, the project's own README warns that production deployment can be complex, costly and time-consuming, so budget for hosting and operations as a recurring line. Confirm sizing with your infrastructure team against your expected loan volume.
Which compliance evidence should a co-lending implementation produce?
A co-lending implementation should produce evidence that the split and transfer logic works as agreed, that access and changes are controlled, and that partner reports reconcile to the ledger. Under the FTC Safeguards Rule at 16 CFR 314.4, covered lenders must encrypt customer information, apply multi-factor authentication, adopt change management and log authorized user activity, so keep change records for split rules and configuration. Where continuous monitoring is absent, the rule calls for penetration testing and vulnerability assessments at least every six months. DeployOpen prepares systems, controls and evidence for compliance assessments, but independent auditors and certification bodies issue the audit reports. Confirm with your counsel which record-keeping obligations apply to your partners' books.
What should the implementation contract cover for co-lending?
The contract should cover scope, deliverables, acceptance criteria, responsibilities for each partner and the process for changes. Specify which split rules are in scope, which partners and products are covered, how many loans are migrated, and which reports each partner receives. Ask for named acceptance tests that prove split accuracy on sample loans, reconciliation of partner balances to the ledger, and reversal handling. Clarify who owns the signed rules after go-live, how post-launch changes are priced and how defects found in parallel running are handled. Ask whether ongoing support, upgrades and testing are part of a retainer and what that retainer covers.
How DeployOpen scopes and supports co-lending on self-hosted lending software
DeployOpen is a Chainscore Labs company that plans, implements, customizes, integrates, hardens, documents and supports self-hosted open-source platforms inside the client's own infrastructure, whether that is a cloud account, a data center or an air-gapped network. For a co-lending program, that means the partner work is scoped against your environment: which lending platform carries the shared loans, where the split logic runs, how each institution's reporting is produced, and which systems hold the borrower data both parties can see. We would not start from a generic template. We start from the agreed loan products, the partner agreement terms and the reports each institution must receive.
Most engagements are fixed-scope, and the scope, deliverables and timelines are agreed in writing before any work begins. For co-lending, the written scope should name the specific items: the repayment and interest allocation rules, the loan transfer or participation workflow, the partner-facing reports, the integration points to each institution's general ledger, and the testing that proves the split matches the signed agreement. Ask for the scope to state what is out of scope, such as negotiating the partner agreement itself or the legal characterization of the loan. DeployOpen prepares systems, controls and evidence for compliance readiness, but it does not issue audit reports, attestations or certifications. Independent auditors and certification bodies do that work, so the scope should describe the evidence package you will hand to them rather than promise a certification outcome. Ongoing support, upgrades and continuous testing are available as a retainer, which suits co-lending programs where partner terms, product rules and platform versions change over time.

