WPF desktop simulation project for selected EMVS-style pharmaceutical verification workflows.
The application is a local learning and portfolio project. It simulates product master data, product pack data, pack verification, pack state updates, operation history, and database inspection without connecting to a real EMVS or NMVS system.
This is a practice and portfolio project focused on WPF, MVVM, workflow simulation, repository abstraction, JSON persistence, optional Oracle persistence, and documentation of enterprise-style integration concepts.
It is not an official EMVS implementation and does not connect to any real pharmaceutical verification system.
- WPF desktop application
- MVVM structure with
CommunityToolkit.Mvvm - Product master data workflow
- Product pack data workflow
- Pack verification workflow
- Pack state update workflow
- Simulation history
- Database overview with product, target market, batch, pack, and operation log views
- JSON persistence as the default local mode
- Optional Oracle persistence for database-backed testing
- Automatic Oracle schema initialization when Oracle persistence is enabled
- SOAP/XML sample messages for learning and documentation
- Architecture and SOAP overview documentation
- Automated service and repository tests with xUnit
- C#
- .NET 10
- WPF
- MVVM
- CommunityToolkit.Mvvm
- Microsoft.Extensions.Hosting
- JSON file persistence
- Oracle Managed Data Access
- SOAP/XML sample documentation
- xUnit
EMVS Simulation Lab supports multiple persistence modes.
JSON mode is the committed default and works without Oracle.
{
"Persistence": {
"Provider": "Json"
},
"ConnectionStrings": {
"Oracle": ""
}
}JSON data is stored in the current user's application data folder:
%APPDATA%\EmvsSimulationLab\emvs-data.json
Oracle mode is optional and intended for local database-backed testing.
Create a non-committed local override file:
EmvsSimulationLab.App/appsettings.Local.json
Example structure:
{
"Persistence": {
"Provider": "Oracle"
},
"ConnectionStrings": {
"Oracle": "<your local Oracle connection string>"
}
}Do not commit real Oracle usernames, passwords, hosts, service names, or local connection strings.
When Oracle persistence is enabled, the application creates the required Oracle tables automatically if they do not exist yet. The schema is also included for inspection in:
docs/database/CreateEmvsTables.sql
Restore and build:
dotnet restore .\EmvsSimulationLab.slnx
dotnet build .\EmvsSimulationLab.slnxRun:
dotnet run --project .\EmvsSimulationLab.App\EmvsSimulationLab.App.csproj- Create Product Master Data.
- Create Product Pack Data for the same product.
- Open Database Overview and refresh.
- Run Pack Verification for the created pack.
- Run Pack State Update for the created pack.
- Check Simulation History.
- Restart the application.
- Verify that persisted data and history are still available.
- Function overview
- Architecture overview
- SOAP web services overview
- Oracle schema SQL
- SOAP sample files
emvs-simulation-lab/
|- .github/
| `- workflows/
| `- ci.yml
|- docs/
| |- architecture/
| |- database/
| |- samples/
| `- screenshots/
|- EmvsSimulationLab.App/
| |- Models/
| |- Services/
| |- ViewModels/
| |- Views/
| |- App.xaml
| |- App.xaml.cs
| |- appsettings.json
| `- EmvsSimulationLab.App.csproj
|- EmvsSimulationLab.App.Tests/
|- .gitignore
|- README.md
`- EmvsSimulationLab.slnx
dotnet build .\EmvsSimulationLab.slnx -c Release
dotnet test .\EmvsSimulationLab.slnx -c ReleaseRecommended public-safety check before committing:
Get-ChildItem -Recurse -File |
Where-Object { $_.FullName -notmatch '\\bin\\|\\obj\\|\\.vs\\|\\.git\\' } |
Select-String -Pattern "EMVS_SIM|EmvsSim123|192.168|FREEPDB1|freepdb1|localhost:1521"This project was used to practice:
- WPF desktop UI structure
- MVVM and dependency injection in a desktop application
- Repository abstraction for interchangeable persistence providers
- JSON persistence for local demo usage
- Oracle-backed persistence and schema initialization
- EMVS-style workflow modeling
- SOAP, WSDL, WS-Addressing, and WS-Security concepts
- Documentation of enterprise-style integration workflows
- No real EMVS connection is used.
- No real NMVS communication is performed.
- Error codes and workflow responses are simulated.
- SOAP files are learning-oriented samples, not official EMVS messages.
- The project is designed for local training and portfolio demonstration.
This repository follows Conventional Commits.
- Releases use tags in the format
vX.Y.Z. - Release notes should summarize user-visible changes, documentation updates, and validation results.
MIT


