Back to technical notes
7 min

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.

PHP · market rules
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
ERPLaravelSymfonyVue 3PHP