- Created by Tobias Bulai, last updated on Dec 15, 2025 7 minute read
You are viewing an old version of this page. View the current version.
Compare with Current View Page History
« Previous Version 6 Next »
Template for ADR, leave at top of page
This page is only for recording decisions! Meeting minutes are to be recorded elsewhere and can linked here. AI created text and drawings will be deleted! Keep content short and concise.
- Date - On what date was the decision made?
- Title - What is the subject? A few words are enough.
- Participants - who was part of the decision?
- Status - What is the status, such as proposed, accepted, rejected, deprecated, superseded, etc.?
- Context - One or two lines of text.
- Decision - What have the architect forum decided? One line of text.
- Consequences - What is the consequences for introducing the decision and not introducing the decision? One or two lines of text.
- Attachment - If a subjects need more elaborating or details, break it out and create a separate page or document that describes the details. Add the link in the attachement field.
2025-11-20
Forum: Meeting - EG Flow - Branching strategy and Azure setup
Git Branching Strategy
Current State
- Feature branches
- Next branch
- Live branch
Proposed New Structure (moving to industry standard)
- development (renamed from "next") - for internal development and integration testing
- staging - for final acceptance testing before production
- main (renamed from "live") - production branch
- Feature branches - short-lived, merge into Development
Deployment Flow
- Feature → Development (integration testing)
- Development → Staging (acceptance testing, internal only)
- Staging → Main (production deployment)
Test Data Strategy
Problem: Production will contain terabytes of data and GDPR-sensitive data that cannot be copied to staging.
Solution Agreed
- NO copying of production data to staging (too costly, too large, GDPR issues)
- Staging must use only synthetic/mock data - no GDPR-sensitive information
- Production data stays in production only
When production bugs occur
- European team member analyzes issue (GDPR compliance - can't send personal data to India)
- Create reproduction scenario with synthetic data in staging
- Development team fixes issue in staging environment
2025-11-13
Forum: Meeting - EG Flow - Data _ Azure Blob, Queue and Tables _ Design Discussions
Topics: Use Azure Blob Storage with hierarchical file structure instead of Table Storage for all data persistence.
Storage Structure
Containers:
| Container Name | Description |
|---|---|
| {org-id}-documents-{year} | Stores invoices and documents with multiple format versions (PDF, HTML, JSON) |
| {org-id}-batches-{year} | Stores batch processing data and metadata |
| {org-id}-data | Stores organization configuration and template files |
Blob Storage Structure
| Container | Blob Name | Description |
|---|---|---|
| {org-id}-documents-{year} | /invoices/{invoice-id}.pdf | Generated invoice in PDF format |
| {org-id}-documents-{year} | /invoices/{invoice-id}.html | Generated invoice in HTML format |
| {org-id}-documents-{year} | /invoices/{invoice-id}.json | Invoice metadata and data in JSON |
| {org-id}-documents-{year} | /documents/{document-id}.pdf | Document in PDF format |
| {org-id}-documents-{year} | /documents/{document-id}.html | Document in HTML format |
| {org-id}-documents-{year} | /documents/{document-id}.json | Document metadata and data in JSON |
| {org-id}-batches-{year} | /batches/{batch-id} | Batch processing information |
| {org-id}-data | organization.json | Organization configuration and settings |
| {org-id}-data | /templates/{template-name}.html | Document/invoice templates |
Rationale
Eliminates Table Storage partition key complexity and cross-partition query costs
Enables year-based partitioning for lifecycle management
2025-11-11
Forum: Biweekly Flow Meeting
Topics: Organization identifier, ID tools
Organization identifier & ID tools
We are not going to use the legal market identifier known as a "organizational number", we will use our own identifying unit - NOT auto incremental as with a relational database.
What was discussed was the probability of a `UUID` (Universally Unique Identifier) or `LUUID` (Lexical Universally Unique Identifier). The latter being easier to read and indexed.
Other
- Print Partners - There will be more than one partner available, but EG will choose which one to use for the organization.
- The `PUT`-method for the organization endpoint was thought to state that the organization has uploaded their data and that the service could trigger the batch process.
2025-10-27
Forum: Biweekly Flow Meeting
Topics: Logging tools, Introduce basic architecture from Axel, structure changes
Project solution will change from _"EGU.EGFlow"_ to _"EGU.Flow"_.
And additionally we will be having console applications to process batch, naming conventions will follow from the above structure.
In regards to logging EG Flow will be using azure application insights for logging. Seri logs for structuring the logs.
EGU.Flow/ ├── EGU.Flow.AppHost/ # Aspire AppHost project │ └── Program.cs # Configures serviceDefaults and service wiring │ ├── EGU.Flow.Core/ # Shared contracts and types │ ├── DTOs/ │ ├── Enums/ │ ├── Interfaces/ │ └── Common/ │ ├── EGU.Flow.Domain/ # Domain models and logic (used by API) │ ├── Models/ │ └── DomainServices/ │ ├── EGU.Flow.BusinessLogic / # Business logic │ ├── Services/ │ └── Mappers/ │ ├── EGU.Flow.CoreApiService/ # ASP.NET Core Web API │ ├── Controllers/ │ └── Program.cs │ ├── EGU.Flow.Web/ # ASP.NET Core Web App (e.g.,Blazor) │ ├── Pages/ or Components/ │ └── Program.cs ``` **Initial architecture from Axel** ``` ┌─────────────────────────────────────────────────────────────────┐ │ INGESTION LAYER │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ ┌──────────────────┐ ┌──────────────────┐ │ │ │ SFTP Gateway │ │ API Gateway │ │ │ │ (Blob Storage) │ │ (Container App) │ │ │ └────────┬─────────┘ └────────┬─────────┘ │ │ │ │ │ └───────────┼──────────────────────────────────┼──────────────────┘ │ │ ▼ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ PROCESSING LAYER │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────────┐ ┌──────────────────┐ │ │ │ Priority Queue │ │ Bulk Queue │ │ │ │ (Azure Queue) │ │ (Azure Queue) │ │ │ └────────┬────────┘ └────────┬─────────┘ │ │ │ │ │ │ ▼ ▼ │ │ ┌─────────────────┐ ┌──────────────────┐ │ │ │ File Processor │ │ File Processor │ │ │ │ (Single Docs) │ │ (Bulk Files) │ │ │ └────────┬────────┘ └────────┬─────────┘ │ │ │ │ │ │ └───────────┬─────────────┘ │ │ ▼ │ │ ┌──────────────────────┐ │ │ │ Template Engine │ │ │ │ (Handlebars + PDF) │ │ │ └──────────┬───────────┘ │ │ ▼ │ │ ┌──────────────────────┐ │ │ │ Channel Router │ │ │ └──────────┬───────────┘ │ │ │ │ └──────────────────────┼──────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ DELIVERY LAYER │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ Postal │ │ Email │ │ Kivra │ │E-faktura│ ... │ │ │Exporter │ │ Sender │ │ Client │ │ Client │ │ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ │ │ └─────────────────────────────────────────────────────────────────┘
- No labels