2024-11-23
Verzionisanje Sve: Kako PMFA Eliminiše Migracije i Downtime
Scenario: Vaš ERP sistem radi 3 godine. Imate 50,000 faktura u bazi. Klijent traži da dodamo novi approval step u workflow.
SAP/Oracle pristup:
- Development (3-6 nedelja)
- Database migracija (svi postojeći dokumenti)
- Testing (2-4 nedelje)
- Transport u produkciju (scheduled downtime)
- Rollback plan (ako nešto pukne)
- Total cost: $200K+, 3 meseca, visok rizik
PMFA pristup:
- Izmena YAML workflow definicije (5 minuta)
- Deploy nove verzije (instant)
- Stare fakture ostaju na starom workflow-u
- Nove fakture koriste novi workflow
- Total cost: $0, 5 minuta, zero rizik
Razlika? Verzionisanje.
Problem: Migracije Ubijaju ERP Projekte
SAP Horror Story (Real Example)
Kompanija: Evropski retailer, 2,000 zaposlenih
Projekt: S/4HANA upgrade + novi workflow za purchase orders
Migracija podataka: 8 miliona dokumenata iz starog sistema
Timeline:
- Mesec 1-3: Analysis & design
- Mesec 4-8: Development
- Mesec 9-11: Data migration testing
- Mesec 12: Go-live attempt #1 → FAILED (data corruption)
- Mesec 13-14: Rollback + bug fixes
- Mesec 15: Go-live attempt #2 → SUCCESS (ali sa kompromisima)
Final cost: €12M
Downtime: 72 sata (planned), dodatnih 48 sati (unplanned)
Lost revenue: €3M+ (ne mogu procesirati porudžbine tokom downtime-a)
Root cause problema:
-- Stara struktura
CREATE TABLE purchase_orders (
id UUID,
status VARCHAR(50) CHECK (status IN ('draft', 'approved', 'rejected'))
);
-- Nova struktura (sa dodatnim step-om)
CREATE TABLE purchase_orders (
id UUID,
status VARCHAR(50) CHECK (status IN ('draft', 'pending_manager', 'pending_director', 'approved', 'rejected'))
);
-- PROBLEM: Kako migrirati 8M dokumenata?
-- Koja faktura treba 'pending_manager' a koja 'pending_director'?
-- Šta ako business pravila nisu postojala pre?
Nema dobrog rešenja.
PMFA Rešenje: Verzionisanje Kao First-Class Concept
Šta Se Verzioniše?
U PMFA, apsolutno sve je versionable:
# metadata/entities/purchase-order.yml
entity: PurchaseOrder
version: 2.0 # ← Version identifier
fields:
- name: id
type: uuid
- name: status
type: enum
values: [draft, pending_manager, pending_director, approved, rejected]
# v1.0 imao samo: draft, approved, rejected
workflow:
version: 2.0 # ← Workflow version
states:
- name: draft
transitions: [submit]
- name: pending_manager # ← NOVO u v2.0
transitions: [manager_approve, manager_reject]
- name: pending_director # ← NOVO u v2.0
transitions: [director_approve, director_reject]
- name: approved
final: true
- name: rejected
final: true
PMFA automatski:
✅ Čuva v1.0 workflow za postojeće dokumente
✅ Koristi v2.0 workflow za nove dokumente
✅ Nema migraciju
✅ Nema downtime
Kako PMFA Tehnički Implementira Verzionisanje?
1. Meta-Model Verzionisanje
Database schema:
-- Meta-model definitions tabela
CREATE TABLE pmfa_meta_models (
meta_model_id UUID PRIMARY KEY,
entity_name VARCHAR(100),
version VARCHAR(20), -- "1.0", "2.0", "2.1"...
definition_json JSONB, -- Puna YAML/JSON definicija
created_at TIMESTAMP,
created_by UUID,
is_active BOOLEAN DEFAULT false, -- Samo jedna verzija je active
is_deprecated BOOLEAN DEFAULT false
);
-- Primer: Purchase Order entity ima 3 verzije
INSERT INTO pmfa_meta_models VALUES
('uuid-1', 'PurchaseOrder', '1.0', '{...v1 definition...}', '2023-01-01', 'admin', false, false),
('uuid-2', 'PurchaseOrder', '1.5', '{...v1.5 definition...}', '2023-06-15', 'admin', false, false),
('uuid-3', 'PurchaseOrder', '2.0', '{...v2 definition...}', '2024-01-10', 'admin', true, false);
Key concept: PMFA nikad ne briše stare verzije. Sve ostaje u bazi zauvek.
2. Document-Level Version Binding
Svaki dokument pamti svoju verziju:
-- Business dokument tabela
CREATE TABLE purchase_orders (
id UUID PRIMARY KEY,
-- Business data
supplier_id UUID,
total_amount DECIMAL(15,2),
status VARCHAR(50),
-- Version tracking
meta_model_version VARCHAR(20), -- "1.0", "2.0"...
workflow_version VARCHAR(20),
ui_version VARCHAR(20),
created_at TIMESTAMP,
updated_at TIMESTAMP
);
Kada se kreira novi dokument:
// PMFA automatski vezuje current active version
const newPurchaseOrder = await pmfa.create('PurchaseOrder', {
supplier_id: 'supplier-123',
total_amount: 15000,
// meta_model_version se automatski setuje na "2.0" (current active)
// workflow_version se automatski setuje na "2.0"
// ui_version se automatski setuje na "2.0"
});
Kada se učitava stari dokument:
// PMFA učitava dokument sa njegovom original version
const oldPurchaseOrder = await pmfa.findOne('PurchaseOrder', 'old-doc-id');
// oldPurchaseOrder.meta_model_version = "1.0"
// oldPurchaseOrder.workflow_version = "1.0"
// PMFA koristi v1.0 workflow definiciju za ovaj dokument
// Nema breaking changes
3. Workflow Version Isolation
Stari i novi workflow žive paralelno:
# Workflow v1.0 (za stare dokumente)
workflow:
version: "1.0"
states:
- name: draft
transitions: [submit]
- name: approved
- name: rejected
# Workflow v2.0 (za nove dokumente)
workflow:
version: "2.0"
states:
- name: draft
transitions: [submit]
- name: pending_manager
transitions: [manager_approve]
- name: pending_director
transitions: [director_approve]
- name: approved
- name: rejected
PMFA runtime:
// Za stari dokument (v1.0)
const oldDoc = await pmfa.findOne('PurchaseOrder', 'old-id');
const availableTransitions = pmfa.workflow.getTransitions(oldDoc);
// Returns: ['submit'] (samo v1.0 transitions)
// Za novi dokument (v2.0)
const newDoc = await pmfa.findOne('PurchaseOrder', 'new-id');
const availableTransitions = pmfa.workflow.getTransitions(newDoc);
// Returns: ['submit', 'manager_approve', 'director_approve'] (v2.0 transitions)
Nema konflikt. Sve radi paralelno.
Real-World Use Case: 3 Generacije Workflow-a
Scenario: Banka ima kreditne zahteve iz 2021, 2023, i 2024. Svaka godina ima drugačija pravila odobravanja.
2021 Proces (v1.0)
workflow:
version: "1.0"
states:
- name: submitted
transitions: [approve, reject]
approval_limit: 50000 # Jedan approver do €50K
2023 Proces (v2.0)
workflow:
version: "2.0"
states:
- name: submitted
transitions: [risk_check]
- name: risk_approved
transitions: [manager_approve, manager_reject]
- name: approved
approval_limit: 30000 # Dodatni risk check, niži limit
2024 Proces (v3.0)
workflow:
version: "3.0"
states:
- name: submitted
transitions: [ai_risk_assessment]
- name: ai_approved
transitions: [auto_approve] # Auto-approval do €10K
- name: manual_review
transitions: [director_approve]
- name: approved
approval_limit: 10000 # AI automation, ručno samo >€10K
U SAP-u?
→ Moraš migrirati SVE stare dokumente na novi proces
→ Ili imati 3 različita modula (technical debt nightmare)
→ Ili kompromis: "hybrid" rešenje koje nikad ne radi kako treba
U PMFA?
→ Sve 3 verzije žive paralelno
→ Svaki dokument zna svoj workflow_version
→ Zero migracija. Zero problema.
SELECT
id,
created_at,
workflow_version,
status
FROM loan_applications
ORDER BY created_at;
-- Results:
-- 2021 documents: workflow_version = "1.0"
-- 2023 documents: workflow_version = "2.0"
-- 2024 documents: workflow_version = "3.0"
Sve radi. Bez downtime-a. Bez migracija.
UI Verzionisanje: Stari Dokumenti = Stari UI
Problem: Nova verzija workflow-a često zahteva novi UI. Šta sa starim dokumentima?
PMFA pristup:
# UI v1.0 (za stare dokumente)
ui:
version: "1.0"
layout: simple-form
fields:
- amount
- supplier
- status
# UI v2.0 (za nove dokumente)
ui:
version: "2.0"
layout: wizard # Multi-step form
steps:
- step: basic_info
fields: [amount, supplier]
- step: approval_chain
fields: [manager, director]
- step: review
readonly: true
PMFA automatski:
- Stari dokument otvoren u browser-u → prikazuje v1.0 UI
- Novi dokument otvoren u browser-u → prikazuje v2.0 UI
Nema "UI nije kompatibilan sa starim podacima" problema.
API Verzionisanje: Backward Compatibility Built-In
PMFA automatski generiše versionovane API endpoint-e:
# v1.0 API (za legacy klijente)
GET /api/v1/purchase-orders/:id
POST /api/v1/purchase-orders/:id/approve
# v2.0 API (za nove klijente)
GET /api/v2/purchase-orders/:id
POST /api/v2/purchase-orders/:id/manager-approve
POST /api/v2/purchase-orders/:id/director-approve
Stari mobilni app koristi v1 API. Novi web app koristi v2 API. Sve radi.
Rollback: Samo Flip Flag
Ako se nova verzija pokaže buggy:
-- Deaktiviraj v2.0
UPDATE pmfa_meta_models
SET is_active = false
WHERE entity_name = 'PurchaseOrder' AND version = '2.0';
-- Aktiviraj v1.0
UPDATE pmfa_meta_models
SET is_active = true
WHERE entity_name = 'PurchaseOrder' AND version = '1.0';
Instant rollback. Nema deployment-a. Nema restarta servera.
Benefiti: Zašto Ovo Čini PMFA Nepobedivom
1. Zero-Risk Deployments
Tradicionalno:
- Deploy nove verzije = rizik od breaking production
- Moraš testirati sve edge case-ove
- Moraš imati rollback plan
PMFA:
- Deploy nove verzije = samo dodaj novu version entry
- Stara verzija i dalje radi za stare dokumente
- Rollback = flip flag
2. Nema Migracija
Tradicionalno:
- Svaka schema izmena = migracija podataka
- Migracije traju satima/danima
- Downtime obavezan
PMFA:
- Nema migracija
- Stari podaci ostaju na staroj verziji
- Zero downtime
3. Parallelne Verzije
Tradicionalno:
- Samo jedna verzija može biti aktivna
- Stari dokumenti moraju biti migrirani
PMFA:
- 10+ verzija može živeti paralelno
- Svaki dokument zna svoju verziju
4. Perfect Audit Trail
SELECT
version,
created_at,
created_by,
changes
FROM pmfa_meta_models
WHERE entity_name = 'PurchaseOrder'
ORDER BY created_at;
-- Rezultat: Kompletna istorija svih izmena
-- Ko je promenio? Kada? Šta?
Zaključak
SAP/Oracle/Dynamics:
- Migracije ubijaju projekte
- Downtime neizbežan
- Rizik visok
- Cost astronomical
PMFA:
- Zero migracije
- Zero downtime
- Zero rizik
- Instant deployment
Verzionisanje je superpower koji PMFA ima built-in.
Rezultat?
- ✅ Deploy nove verzije za 5 minuta umesto 3 meseca
- ✅ Rollback za 2 sekunde umesto 2 dana
- ✅ Zero rizik za produkciju
- ✅ 10+ verzija workflow-a može živeti paralelno
Ovo je razlog zašto PMFA može da bude 100x brža od SAP-a.
Zainteresovani za PMFA? Kontaktirajte nas na office@nonnotech.com za early access program.