Initial commit

This commit is contained in:
Ronald Huynen
2026-03-23 21:37:59 +01:00
commit 2547717edb
2193 changed files with 972171 additions and 0 deletions

View File

@@ -0,0 +1,83 @@
# Cyclos Migration Verification Report
Last run: 2026-03-19
Source DB: `timebank_2026_03_16`
Target DB: `timebank_cc_2`
Command: `php artisan verify:cyclos-migration`
---
## Script Output
```
--- 1. Member counts ---
PASS Active users: 2197
PASS Inactive users: 995
PASS Removed/deleted users: 51
PASS Banks (L1+L2): 7
PASS Active organizations: 55
PASS Inactive organizations: 9
--- 2. Transaction counts ---
PASS Imported transactions match Cyclos transfers: 32869
(Total Laravel: 32913 = 32869 imported + 44 gift migrations + 0 currency removals)
PASS No transactions with NULL account IDs: 0
--- 3. Account balances ---
PASS Laravel system is balanced (net = 0): 0
PASS Debit account: -7025.00h (diff: 0.0000h)
PASS Community account: 4.47h (diff: 0.0167h)
PASS Voucher account: 0.00h (diff: 0.0000h)
PASS Organization account: 0.00h (diff: 0.0000h)
PASS Gift accounts: 65.38h (diff: -0.0167h)
PASS Work + Project accounts combined (remappings allowed): 6955.15h (diff: 0.0167h)
--- 4. Gift account cleanup ---
PASS All gift accounts marked inactive: 0
PASS All gift account balances are zero after migration: 0
PASS Gift migration transactions go from gift → work account: 44
--- 5. Deleted profile cleanup ---
PASS Removed Cyclos users are soft-deleted in Laravel: 51
PASS Deleted users have zero remaining balance (tolerance: 6min): 0
WARN Deleted users still have 8 account records (expected — kept for transaction history)
INFO Currency removal transactions: 0
Summary: 20 PASS, 1 WARN
All checks passed!
```
---
## Notes
### WARN — Deleted users have account records
Expected behaviour. Accounts of deleted users are retained for transaction history integrity.
The balance check (check 5) confirms these accounts have zero balance.
### Small balance diffs in check 3 (~0.0167h = 1 min)
The Community, Gift, and Work+Project accounts show a ~1 minute diff. This is rounding
accumulation from `ROUND(amount * 60)` applied per transaction during import — Cyclos stores
amounts as decimal hours. The diffs are within the 0.1h tolerance and the overall system
balance is exactly 0. Per-account rounding errors exist on ~300 accounts (ranging from ±1 min
to +1158 min for Lekkernassuh with 29,222 transactions). This is a known open issue — see
next steps.
### Gift accounts
`migrate:cyclos-gift-accounts` was run after import. It transfers each gift account balance
to the owner's personal account and closes the gift account. All gift checks pass.
### Work + Project accounts combined
Some profiles were remapped between Cyclos account types 5 (work) and 7 (project) during
migration. The verify script checks these combined to allow for intentional remappings.
---
## Open Issue — Per-account rounding errors
Individual account balances can differ from Cyclos by a few minutes due to `ROUND(amount * 60)`
being applied per transaction. The aggregate balance checks pass because errors partially cancel
out across accounts, but individual users may see discrepancies.
Proposed fix: after import, adjust the largest transaction per affected account by the exact
difference. Every stored amount stays an integer; balances match Cyclos exactly.