Technical note
Two-market ERP without duplicating the product
Contract at Consorcio Abierto (Jul 2024 – Oct 2025): ConsorcioAbierto (AR) and Properix (CO) on the same ERP with Laravel, Symfony, and Vue 3.
By the numbers
2
Markets
15
Contract months
Full stack
Role
Agile
Delivery
One ERP, two regulations
ConsorcioAbierto (Argentina) and Properix (Colombia) share a business model — condominium and property management — but differ in tax rules, currencies, and operational flows. Duplicating repos would duplicate debt. I worked full stack evolving the existing product, in parallel with my main role at Extendeal.
Market config, not fork
I separated what changes by country (validations, labels, rules) from core (expenses, funds, reconciliations). Backend Laravel/Symfony services expose rules per tenant; Vue 3 frontend consumes market context to decide which fields and flows to show.
public function rulesFor(string $market): array
{
return match ($market) {
'AR' => ['currency' => 'ARS', 'taxFields' => ['iva']],
'CO' => ['currency' => 'COP', 'taxFields' => []],
default => throw new InvalidMarketException($market),
};
}Infra and data
PostgreSQL for relational modeling, Docker/Kubernetes for service deployment, and infrastructure as code (CDK/Terraform) where the team already used it. TDD and SOLID principles to keep code testable in administrative and financial modules — sensitive areas where bugs are expensive.
Concurrent work with another client
Being a contractor while leading another team teaches surgical focus: scoped PRs, clear communication with product/QA, and no big refactors without agreement. I delivered features and targeted performance improvements on high-traffic modules, with reinforced code review on finance.
Takeaways
Multi-country on legacy ERP doesn't require new microservices on day one. It requires configuration discipline, tests on sensitive calculations, and releases that respect the correct market. If AR and CO share code, the risk is mixing rules — not lacking frameworks.
Takeaways
- Market config in backend — avoid codebase forks
- Vue 3 + market context for conditional UI
- PostgreSQL + Docker/K8s + IaC matching team maturity
- Parallel contract → small PRs and negotiated scope
- Double review on financial and administrative modules