Migrating a Regulated Legacy Application to Power Apps and Dataverse
A decision guide for replacing a legacy system that encodes regulatory logic: the rule catalogue, the server-side rule layer, audit design, parallel-run reconciliation and what a proof of concept must prove.
Replacing a legacy system that runs regulated work starts with stabilising it, not rebuilding it. If an expensive system does three things and fails audits, triage the findings, close the urgent ones in place, then choose between remediating it, moving to Power Platform or a custom build you own outright, proven by a scoped pilot. If a home-built SharePoint HR system is buggy, stop the bleeding first, then build an MVP of the critical HR processes on a proper Dataverse data model and migrate one process at a time. In every case, catalogue each regulatory rule as a testable specification, run it in a server-side rule layer, design audit logging up front and parallel-run both systems before cutover.
Why is replacing a regulated legacy application different from an ordinary rebuild?
Because the old system is not just a set of screens. Over years it has absorbed eligibility checks, calculations, thresholds, approval routes and reporting logic that someone once agreed with a regulator, an auditor or a legal team, and much of it is no longer written down anywhere else. An ordinary rebuild asks users what they need. A regulated rebuild has to prove that the new system does what the old one did, or that every deliberate difference was decided and recorded.
The cost of getting it wrong is also different. A missed field on a sales form is a nuisance. A missed rule in a benefits calculation, a lending decision, a payroll deduction or a statutory report is a finding, a remediation exercise across affected records and sometimes a notification. That is why the assessment described on this page is a piece of work in its own right, done before anyone commits to a platform or a build budget. It is also technical guidance, not legal or regulatory advice: what counts as compliant comes from your compliance function and advisers.
An expensive system that does three things and fails audits: remediate it, move to Power Platform or build your own?
Stabilise first, decide second. When a costly subscription or legacy package does only three jobs, such as holding records, running an approval and producing a compliance report, and the last audit found problems with it, the instinct is to replace it before the next audit. That is usually the wrong order. A replacement takes longer than the time to the next audit, and an auditor wants the findings closed, not a promise of a new system. So triage the findings, close what can be closed in the current system, and only then make the platform decision, proven by a small pilot rather than a big commitment.
If the audit date itself is close and you need a compliant process in weeks, our guide to building a CRM in 60 days for an audit covers what is achievable against that kind of deadline. This section is about the decision that follows.
| Option | Right when | Watch for | Cost shape |
|---|---|---|---|
| Remediate the current system | Most findings are configuration, access or data problems, and the product can produce the evidence auditors want once set up properly. | Findings that need a product change the vendor will not make, and renewal terms that lock you in for years. | The existing subscription continues, plus a one-off remediation effort. |
| Move to Power Platform and Dataverse | You already run Microsoft 365, the three jobs are records, approvals and reports, and the users who touch the regulated process are a known, licensable group. | Treating configuration as the control; regulated rules still need the server-side rule layer and audit design on this page. | A build effort, then per-user Power Apps licensing and capacity on Microsoft terms, with no separate application subscription. |
| A custom build you own outright | Licensing does not fit the user base, hosting and database control matter, or the regulated logic is most of the system. | Ownership includes hosting, security patching and maintenance for the life of the system, so someone has to own those. | A build effort, then hosting and maintenance you control, with no per-user licence. See custom CRM development. |
- Triage every finding into one of four groups. Configuration and access findings, such as shared accounts, missing approvals or excessive rights, can usually be fixed in the current system now. Data findings need a cleanup and a control to stop recurrence. Evidence findings, where the system cannot show who did what or export its history, may need a compensating control. Product findings are the ones the system genuinely cannot fix, and only those argue for replacement.
- Put compensating controls in place for anything you cannot fix this quarter: a documented manual check, a second approver, a reconciliation report, with an owner and a record that it ran.
- Secure your data before any decision: confirm you can export every record and its history in a usable format, check the contract notice period and renewal date, and take a complete export now so the vendor relationship does not decide your timetable.
- Write down the three things the system actually does, with the rules, reports and evidence each one has to produce. That list becomes the rule catalogue described below and the scope of any replacement.
What should a scoped replacement pilot prove before you cancel the old system?
That one of the three jobs can run on the new platform with the evidence an auditor wants, before you commit to moving the other two. Pick the job with the most audit findings or the clearest rules, build only that, and run it alongside the old system for at least one full reporting cycle, with every difference between the two explained. The old subscription stays until the pilot passes and the cutover plan is agreed, so the pilot never becomes a forced migration.
The exit criteria are written before the pilot starts: the job's rules pass their test cases, the audit trail answers the questions the last audit asked, the compliance report matches or the differences are explained, and users can do the work without a workaround. If the pilot fails those, you have learnt it cheaply and remediation of the current system becomes the better answer. Where the old system's rules are undocumented and the original builders have gone, our guide to migrating with no original developers covers recovering them and running the two systems in parallel.
How do you turn every regulatory rule into a testable specification?
Build a rule catalogue. Each rule gets a numbered entry that a developer can implement, a tester can verify and a compliance owner can sign. Rules come from three places: the regulation or policy itself, the legacy code and configuration, and the outputs the legacy system has produced for years. Where those disagree, record the disagreement rather than resolving it quietly.
When the rules are undocumented and the original developers have gone, recovering them from historical outputs is its own discipline, covered in our guide to migrating a legacy system with no original developers. This page assumes you are doing that work and focuses on the regulated shape of the catalogue.
| Catalogue field | What it holds | Why an auditor cares |
|---|---|---|
| Rule ID and plain statement | A stable identifier and the rule in one or two sentences a non-developer can read. | Every test, defect and change request can point to one rule. |
| Source | The regulation clause, internal policy, contract term or legacy behaviour the rule comes from, with version and date. | Shows the rule is traceable to an obligation, not invented by the project. |
| Inputs | Every data item the rule reads, including reference data such as rates, thresholds and calendars, and the effective date logic for each. | A correct formula fed the wrong input or effective date still produces a wrong regulated outcome. |
| Expected outputs | The decision, value, status or document the rule produces, with rounding and precision stated. | Defines what "correct" means before anyone argues about it. |
| Test cases | Worked examples with given inputs and exact expected outputs, including boundaries, exceptions and historical cases taken from the legacy system. | The regression suite that proves the new system and later changes. |
| Owner and sign-off | The business or compliance owner who confirms the rule and approves changes to it. | Segregation between the person who defines a rule and the person who builds it. |
| Known legacy defects | Places where the old system is believed to be wrong, and the written decision to replicate or correct from a named date. | A silent fix is as much a change as a silent bug. |
Which rules belong in a deterministic server-side rule layer?
Any rule whose result has regulatory consequence, and any rule that must hold no matter how data arrives. On Dataverse, forms are only one of the ways records get written. Imports, integrations, Power Automate flows, the Web API and other apps write to the same tables, and logic that lives only in a form, a form-scoped business rule or client script does not run for those channels. A rule that matters has to run on the server, in one place, with the same result every time for the same inputs.
In practice that means synchronous Dataverse plug-ins for validation and calculation inside the transaction, and custom APIs backed by plug-in code for calculations that other processes call explicitly. Both are compiled, versioned, unit-testable code that deploys through solutions. Configuration still has a place for presentation and guidance, and Power Automate is right for orchestration, notifications and work that can happen after the transaction. What goes wrong is the same rule implemented partly in a business rule, partly in a flow and partly in a script, so that nobody can say which version ran for a given record. How to enforce a single rule reliably across every write channel, and the trade-offs between business rules, real-time workflows and plug-ins, is set out in enforcing compliance rules server-side before an audit.
| Rule type | Where it should run | Reason |
|---|---|---|
| Validation that must block a save (mandatory relationships, forbidden states, limits) | Synchronous plug-in on the create and update pipeline | Runs for every write channel and rolls back the transaction when it fails. |
| Regulated calculations (amounts, eligibility, scores, deadlines) | Plug-in or custom API calling one tested calculation library | One implementation, unit tests against the catalogue, deterministic output. |
| Reference data (rates, thresholds, calendars) | Dataverse tables with effective dates, changed only through an approved process | Rules read values rather than hard-coding them, and every change is itself audited. |
| Guidance and form behaviour | Form business rules, client script or PCF controls | Helps the user get it right first time; it is never the control itself. |
| Notifications, approvals and downstream updates | Power Automate or asynchronous plug-ins | Can happen after the transaction and be retried without blocking users. |
What audit logging has to be defined before the first record is migrated?
Decide what evidence you will need to produce, for how long, and who must be unable to alter it, then design for that before migration starts. Dataverse auditing is not retroactive, so anything written before it is switched on for the right tables and columns has no change history. Migrated history needs its own treatment: the legacy audit trail either comes across as read-only records with their original dates, or the legacy system stays readable for the retention period.
- Which tables and columns need change auditing, and whether reads of sensitive records must also be logged, which is a separate capability from record change auditing.
- How long audit evidence must be kept, and whether the platform audit log retention you configure covers it or evidence has to be exported to storage you control.
- Who can delete or purge audit data. Administrators with the right privileges can delete audit logs in Dataverse, so where records must be tamper-evident, export them to write-once storage, for example Azure Storage with an immutability policy, and restrict that storage separately.
- A rule execution log for regulated calculations: rule ID, rule version, inputs, output and timestamp, written by the rule layer itself, so a decision can be explained years later even after reference data has changed.
- How approvals are recorded: approver, time and the state of the record they approved, not only a status change.
How should a parallel-run reconciliation be planned?
Both systems receive the same real inputs and compute their outputs independently, only the legacy system acts on them, and an automated comparison runs on a schedule with every difference explained and classified. For a regulated application the comparison is driven by the rule catalogue: each output under comparison maps to catalogue rules, so a difference points to a specific rule, input or reference value.
Plan it during the assessment, not the build. The inputs have to reach both systems, which may mean an interface or a controlled double entry, the comparison needs to be automated, and the exit criteria have to be agreed with compliance before the run starts, such as a number of consecutive cycles with every difference resolved. The daily mechanics, difference classification and cutover by process are covered in parallel running with daily reconciliation, and running controls across both systems while a wider estate moves is covered in consolidating legacy systems onto Dataverse.
What must a proof of concept prove before you commit to the build?
A proof of concept for a regulated replacement is not a demo of screens. It is a small, honest attempt at the parts most likely to fail, with pass and fail criteria agreed in advance. If it cannot pass, you have learnt that cheaply.
- The hardest rules pass: a handful of the most complex catalogue rules implemented in the proposed rule layer and passing every test case, including boundary and historical cases.
- Every write channel is covered: the same rules hold when the record is written through a form, an import, an integration and the Web API.
- The audit design works: changes, rule executions and approvals produce the evidence defined earlier, and the export to controlled storage runs.
- Reconciliation is feasible: a sample of real legacy inputs runs through the new rule layer and the automated comparison reports matches and explained differences.
- Security fits: the roles and segregation of duties the regulator expects can be expressed in the Dataverse security model without workarounds.
- Volume and timing hold: batch calculations and reports complete within the windows the business needs, within platform service protection limits.
- Residency and retention requirements are met by the environment region and storage choices, confirmed against current Microsoft documentation.
- Deployment is controlled: the proof of concept is built and moved between environments through solutions and a pipeline, not by hand.
What does Power Platform provide natively, and what still has to be designed?
Power Platform and Dataverse give a regulated application a lot out of the box, which is why they are often the right target. They do not make an application compliant by themselves. Microsoft revises feature names, retention options and regional availability, so confirm current behaviour in Microsoft documentation before relying on any item below.
| Area | Provided natively | Still has to be designed |
|---|---|---|
| Change history | Dataverse auditing at environment, table and column level, with configurable audit log retention. | What is audited, for how long, export to storage you control where evidence must outlive platform retention or be tamper-evident, and the rule execution log. |
| Access control | Security roles, business units, teams, record sharing and column security profiles, enforced for every request. See Dynamics 365 security with business units and teams. | Segregation of duties: who can define, build, deploy and approve, and keeping administrator and service accounts out of day-to-day regulated work. |
| Data residency | Environments are created in a chosen geography, and data is stored in that region. | Confirming where connectors, integrations, backups, analytics exports and AI features send data, and documenting it. |
| Retention | Dataverse long-term data retention options for inactive records, plus backup and restore for environments. | A retention schedule per record type agreed with compliance, deletion and erasure rules, and evidence that retention runs as designed. |
| Deterministic logic | Plug-ins and custom APIs executing in the platform transaction. | The rule layer itself: one implementation per rule, unit tests from the catalogue, versioning and a rule execution log. |
| Immutable records | Status models, read-only forms and security that restrict editing. | Records that genuinely cannot change once finalised: server-side blocks on update, append-only correction records, and external write-once copies where required. |
| Change control | Solutions, environments, managed solution deployment and pipelines. | An approval process with separation between developer and deployer, source control, release evidence and blocking unmanaged changes in production. See Power Platform ALM with PAC CLI and pipelines. |
Can HR and finance processes be built on Power Platform under regulatory reporting requirements?
The line-of-business processes around HR and finance often can: case and request handling, onboarding and offboarding steps, approvals, policy attestations, expense or grant applications, eligibility decisions and the reporting that sits over them. Built as Power Apps on Dataverse with a server-side rule layer and designed audit evidence, those are a good fit.
The ledger itself is a different matter and belongs in an ERP. Solzet implements Business Central and Finance and Operations for that side. Where a regulated process produces postings, payments or payroll figures, we build the line-of-business application on Power Apps and Dataverse and integrate it with the finance system you run, whether one of those or another, with reconciliation between the two, rather than rebuilding accounting on Power Platform. Regulatory reports that combine both should be defined against the finance system as the source of truth for financial figures. Sector context for banks, insurers and other regulated financial organisations is on our financial services page.
How do you replace a buggy home-built SharePoint HR system with Power Apps and Dataverse?
In four steps, in this order: stop the bleeding, build a minimum viable product of the HR processes that cannot fail, design a proper data model underneath it, and migrate one process at a time while SharePoint stays readable. Home-built HR systems on SharePoint lists usually start well and degrade as they grow: lists pass the list view threshold and views stop loading, lookups multiply until forms slow down, permissions are broken item by item to hide sensitive records, and flows written by someone who has since left fail silently. HR data is personal data, so a buggy system is a data protection problem as well as a productivity one. What follows is how we approach this work; the build itself is part of our Power Platform development service.
| Step | What happens | Done when |
|---|---|---|
| 1. Stop the bleeding | Freeze changes to the lists and flows, back up every list and document library, review who can see which HR records and fix over-sharing first, switch off or repair flows that fail silently, and write down the known bugs and the workarounds staff use. | Nobody can see records they should not, nothing is being lost or overwritten, and the workarounds are documented. |
| 2. MVP of the critical HR processes | Choose the two or three processes that hurt most when they fail, typically the employee record, onboarding and offboarding, and leave or absence requests with approvals, and build only those as a model-driven Power App. | HR runs those processes in the new app every day, with SharePoint still available as the fallback. |
| 3. The data model | Dataverse tables for employees, departments and positions, employment records with start and end dates, requests and approvals, onboarding tasks and policy attestations, with choice columns instead of free text, an employee number as the alternate key, and column security on salary, health and identity fields. | Every field has one home, sensitive fields are restricted by role, and reports no longer depend on list views. |
| 4. The migration plan | Export each list with its item IDs, map columns to the new tables, clean duplicates and orphaned lookups, load in dependency order (departments, employees, then requests), keep documents in SharePoint linked to the Dataverse records or move them to file columns, and cut over one process at a time. | Each process has moved, been reconciled against the old lists, and the SharePoint site is read-only as an archive. |
- Payroll stays where it is: the HR app integrates with the payroll system you run rather than replacing it.
- Keep SharePoint read-only, not deleted, until the retention period for the old records is agreed with HR and your data protection lead.
- Use Dataverse business units, teams and security roles so managers see their own people, HR sees everyone, and nobody relies on item-level permissions again.
Самописная система на SharePoint глючит: как заменить её на Power Apps и Dataverse?
Кратко на русском. Если самописная HR-система на SharePoint глючит, замену начинают не с разработки, а со стабилизации. Сначала остановите потери: заморозьте изменения в списках и потоках, сделайте резервные копии списков и библиотек документов, проверьте, кто видит какие кадровые данные, и отключите или исправьте потоки, которые падают без ошибок. Затем постройте минимальный продукт для двух-трёх критичных HR-процессов, например карточка сотрудника, приём и увольнение, заявки на отпуск с согласованием, как модельное приложение Power Apps. Под ним спроектируйте модель данных в Dataverse: сотрудники, подразделения, должности, заявки и согласования, с ролевой безопасностью и защитой чувствительных полей. Переносите данные по одному процессу, сверяя результат со старыми списками, а сайт SharePoint оставьте доступным только для чтения как архив. Зарплатный расчёт остаётся в вашей системе расчёта зарплаты, мы делаем интеграцию с ней. Мы работаем удалённо из Еревана и общаемся на русском и английском языках.
When is a custom build more defensible than Power Platform?
We recommend the right solution: Dynamics 365 (Customer Engagement, Business Central or Finance and Operations), Power Platform, or a custom-built CRM. One team for CRM, ERP and the integration between them.
For a regulated replacement, the question is which platform lets you evidence the controls most cleanly. A custom-built application on React, Node.js, PostgreSQL or .NET is the more defensible choice when the regulator or your own policy requires full control of hosting, database and backups; when records must be immutable at the database level rather than by application logic; when the rule layer is most of the system and the low-code parts would add little; when large numbers of occasional users make per-user licensing the wrong shape; or when change control must cover every line of the stack. Power Platform is usually the stronger choice when the organisation already runs on Microsoft 365, the application is mostly records, forms, approvals and reporting, and a focused rule layer can carry the regulated logic.
Should regulated business logic run on Microsoft's platform or on a stack you fully own?
Can afford licensing and want the Microsoft ecosystem
Dynamics 365
Microsoft 365, Teams and Outlook integration, Copilot, apps for sales, service and field operations that are configured rather than built, and Business Central or Finance and Operations when the ERP should live in the same ecosystem.
Need full control and zero licensing
Custom CRM
A CRM built on React, Node.js, PostgreSQL or .NET that you own outright: your data model, your hosting, no per-user subscription, and features shaped exactly to your process.
Not sure which fits
We help you decide
A short discovery weighs licensing budget, process complexity, integrations and long-term ownership, then recommends one path. We deliver both, so the recommendation has no reason to lean.
How does Solzet run a regulated migration assessment?
We run the assessment as a standalone engagement before any build commitment: the rule catalogue with test cases, the split between the server-side rule layer and configuration, the audit and retention design, the parallel-run plan and exit criteria, and a proof of concept against the criteria above. The output is a recommendation between Power Platform and a custom build that your compliance team can challenge, whichever way it lands. The build that follows is described in our Power Platform development service.
Solzet delivers remotely from Yerevan, Armenia, with senior consultants and full-stack developers and 8+ years of Dynamics 365 Customer Engagement and Power Platform work, directly or white-label for Microsoft partners. We provide technical design and evidence; regulatory interpretation stays with your compliance function and advisers.
What do people ask us?
Is it risky to replace a regulated legacy system with Power Apps and Dataverse?
The platform is not the main risk; losing or changing regulatory rules during the move is. The risk is controlled by an assessment before the build: a rule catalogue with test cases for every rule, a server-side rule layer for anything with regulatory consequence, audit logging designed up front, a parallel run with every difference explained, and a proof of concept that proves the hardest rules before you commit.
Our legacy system is expensive, does three things and is failing audits. Should we replace it?
Not before you stabilise it. Triage the audit findings, fix the configuration, access and data findings in the current system, and put compensating controls on the rest, so the next audit sees progress. Then decide between remediating the system, moving the three jobs to Power Platform, or a custom build you own outright, and prove the choice with a scoped pilot of one job before cancelling the subscription.
How do we compare remediating, Power Platform and a custom build without quoting prices?
Compare the cost shape and the risk. Remediation keeps the existing subscription plus a one-off fix. Power Platform is a build effort followed by per-user licensing and capacity on Microsoft terms. A custom build is a build effort followed by hosting and maintenance you own, with no per-user licence. Add the cost of the audit findings each option leaves open and the exit terms of your current contract, then get scoped estimates for your situation.
Where should regulatory business logic live in Dataverse?
In a server-side rule layer: synchronous plug-ins for validation and calculations that must hold for every write, and custom APIs backed by tested code for calculations other processes call. Form business rules and client scripts do not run for imports, integrations or API writes, so they are guidance for users rather than controls. Keep one implementation per rule, tested against the rule catalogue.
Is Dataverse auditing enough for a regulated application?
It is a strong foundation for change history but usually not the whole design. It must be enabled before data arrives, it is configured per table and column, retention is a setting you choose, and privileged administrators can delete audit logs. Regulated applications typically add a rule execution log, approval evidence and export of audit data to write-once storage you control. Confirm current capabilities in Microsoft documentation.
How long should a parallel run last when replacing a regulated system?
There is no universal length. Agree exit criteria with compliance before it starts, based on the process cycle: for example a number of consecutive processing or reporting cycles in which every output difference has been explained and classified. Processes with monthly, quarterly or annual events need a run, or targeted test cases, that covers those events too.
What should a proof of concept prove for a regulated Power Apps migration?
That the hardest regulatory rules pass their test cases in the proposed rule layer; that the rules hold for forms, imports, integrations and API writes; that the audit design produces the required evidence; that reconciliation against real legacy inputs works; that the security model supports segregation of duties; and that volume, residency and deployment through solutions and pipelines meet requirements.
Does Solzet build HR or finance systems on Power Platform?
Yes, for the processes around them. We build line-of-business applications on Power Apps and Dataverse for processes around HR and finance, such as requests, approvals, onboarding, attestations and eligibility decisions, and integrate them with the finance system you already run, with reconciliation between the two. The ledger itself belongs in an ERP rather than in Power Apps, and Solzet also implements Business Central and Finance and Operations for that side.
How do we replace a buggy SharePoint HR system with Power Apps and Dataverse?
Stop the bleeding first: freeze changes, back up the lists and libraries, fix who can see which HR records and repair or switch off silently failing flows. Then build an MVP of the two or three critical HR processes as a model-driven Power App on a proper Dataverse data model with role-based security, and migrate one process at a time, reconciling against the old lists, while SharePoint stays read-only as an archive.
Самописная система на SharePoint глючит. Чем её заменить?
Для кадровых процессов хорошо подходит модельное приложение Power Apps на Dataverse, если вы уже работаете в Microsoft 365. Сначала стабилизируйте текущую систему и закройте доступ к чувствительным данным, затем постройте минимальный продукт для критичных HR-процессов на правильной модели данных и переносите процессы по одному, оставив SharePoint архивом только для чтения. Если лицензирование Microsoft не подходит, мы строим собственное приложение на React, Node.js, PostgreSQL или .NET.
When is a custom application a better choice than Power Platform for regulated logic?
When you need full control of hosting, database and backups, immutable records enforced at the database level, change control over the whole stack, or when per-user licensing does not fit a large occasional user base. Solzet builds custom applications on React, Node.js, PostgreSQL and .NET for those cases, and recommends Power Platform where it fits better.
Where should you go next?
Power Platform development
Model-driven and canvas Power Apps, Dataverse, plug-ins, Power Automate and PCF controls built by senior developers.
Building a CRM in 60 days for an audit
What is achievable against an audit date, the evidence auditors want and the interim controls that hold.
Legacy migration with no original developers
Recovering undocumented rules from historical outputs, parallel running and cutover one process at a time.
Power Platform ALM with PAC CLI and pipelines
Source control, managed solutions and release pipelines that make change control evidenceable.
Dynamics 365 for financial services
Onboarding, compliance tracking and security design for banks, insurers and other regulated financial organisations.
Dynamics 365 audit trails and compliance
Who changed what, audit retention and exporting evidence from Dataverse.
Custom CRM Development
Applications on React, Node.js, PostgreSQL and .NET for organisations that need full control without Microsoft licensing.
Which solution is right for your business?
Tell us what you need. A senior consultant replies within one business day with a recommendation (Customer Engagement, Business Central, Finance and Operations, Power Platform or a custom-built CRM), not a sales script.