{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["admonition"]},"type":"markdown"},"seo":{"title":"LOC migration strategy and operations","siteUrl":"https://docs.peachfinance.com","description":"API and product documentation for Peach Finance, a lending-as-a-service platform.","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"loc-migration-strategy-and-operations","__idx":0},"children":["LOC migration strategy and operations"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For large portfolio migrations, follow these operational best practices."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"batching-and-segmentation","__idx":1},"children":["Batching and segmentation"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If migrating a large portfolio, segment it into batches. Start small and increase batch size as you gain confidence:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Start with 50 loans"]}," — validate thoroughly"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Increase to 100, then 250, then 500"]}," — monitor for patterns"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Scale to your target batch size"]}," once the process is stable"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Group loans with similar attributes in each batch:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Current loans together"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Delinquent loans together"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Loans with promo programs together"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Loans with specific fee configurations together"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This makes it easier to identify reconciliation patterns. For example, if all loans in a \"delinquent\" batch show a consistent DPD offset, you can diagnose the root cause once and apply the fix to the entire batch."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["There is no hard limit on batch size in production, but we recommend monitoring migration completion times and adjusting batch sizes based on your throughput requirements."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"borrower-communications-during-migration","__idx":2},"children":["Borrower communications during migration"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Set ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["muteLoanNotices: true"]}," on loan creation to prevent notifications during migration. This avoids confusing borrowers with messages like payment reminders or balance alerts while data is still being set up."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Re-enable communications only after:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Migration has succeeded"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Balances have been validated"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Autopay has been configured (if applicable)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["You're ready to sunset the legacy system's communications for that borrower"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"concurrent-system-operation","__idx":3},"children":["Concurrent system operation"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["During migration, both your legacy system and Peach can operate simultaneously. This allows for thorough testing and validation without disrupting your business."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"canceling-and-re-migrating-loans","__idx":4},"children":["Canceling and re-migrating loans"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If a loan was migrated incorrectly and cannot be fixed with adjustments, you can cancel it and re-migrate. This is also the recovery path if you miss the migration period due date — the loan must be canceled and re-created with a new migration period aligned to your next statement date."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Option A — Clear all external IDs automatically"]}," (up to 1,000 objects):"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"POST /api/people/{personId}/loans/{loanId}/cancel?clearAllExternalIds=true\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This clears external IDs on the loan, all its draws (including the migration draw, which is auto-canceled), transactions, purchases, and fees — up to 1,000 objects total. If your loan has more than 1,000 associated objects, use Option B."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Option B — Manual cleanup for large loans"]}," (> 1,000 objects):"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Cancel each draw individually, clearing its external IDs."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Cancel the loan with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["clearAllExternalIds=true"]}," for the remaining objects."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["After cancellation:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Create a new loan"]}," with the original external ID and repeat the migration process."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["If you need to adjust data on the canceled loan before re-migrating (e.g., convert migration period data to a past period, reclassify live activities as past activities), you can update the canceled loan's data first."]}]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Canceled loans do not appear on loan tapes. The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["clearAllExternalIds"]}," parameter frees up external IDs for re-use on the corrected loan without requiring manual changes."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"see-also","__idx":5},"children":["See also"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/loan-lifecycle/loc-migration/migration-procedure"},"children":["LOC migration procedure"]}," — The migration process to repeat after re-migration."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/loan-lifecycle/loc-migration/validation-and-troubleshooting"},"children":["LOC migration validation and troubleshooting"]}," — Diagnose issues before deciding to re-migrate."]}]}]},"headings":[{"value":"LOC migration strategy and operations","id":"loc-migration-strategy-and-operations","depth":1},{"value":"Batching and segmentation","id":"batching-and-segmentation","depth":2},{"value":"Borrower communications during migration","id":"borrower-communications-during-migration","depth":2},{"value":"Concurrent system operation","id":"concurrent-system-operation","depth":2},{"value":"Canceling and re-migrating loans","id":"canceling-and-re-migrating-loans","depth":2},{"value":"See also","id":"see-also","depth":2}],"frontmatter":{"title":"LOC migration strategy and operations","description":"Operational guidance for large LOC migrations: batching and segmentation, borrower communications, concurrent operation, and re-migration.","verifiedDate":"2026-06-10T00:00:00.000Z","verifiedSpec":"loc-migration.yml","verifiedRef":"peach@41d1f8a","seo":{"title":"LOC migration strategy and operations"}},"lastModified":"2026-06-10T22:51:20.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/loan-lifecycle/loc-migration/strategy-and-operations","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}