1. Architecture and where data lives
Client data lives in a PostgreSQL database managed by Supabase on Amazon Web Services, São Paulo region (sa-east-1). No component that processes data runs outside Brazil, except the AI assistant, which receives only summaries (section 5).
| Component | Provider and region | What it stores or processes | How it is verified |
|---|---|---|---|
| Database, authentication and files | Supabase on AWS, São Paulo (sa-east-1) | All client data | The region appears in the project dashboard and in the database host |
| Upload service | Google Cloud Run, São Paulo (southamerica-east1) | Antivirus scanning and reading of uploaded files | Google Cloud console. No public access: invoked by an internal scheduler with its own service account |
| Web | Static page | No data: reads from the database after login | The web code stores no figures |
| Encryption at rest | AES-256 | Database, files and backups | Stated by Supabase on its security page |
| Encryption in transit | TLS | Every browser–database and service–database connection | Visible in the browser |
| Backups | Daily, handled by Supabase (paid plan) | Full database | Pending restore test in a separate project with identical figures |
Provider certifications. Supabase holds a SOC 2 Type 2 report, ISO 27001 and HIPAA compliance. They belong to Supabase as a company; ADN has no certifications of its own.
Why Supabase and not AWS directly? The data is already on AWS. Supabase adds MFA authentication, per-company isolation in the database (Row Level Security), a secrets vault (Vault) and private file storage on top. On “plain” AWS each of those pieces is built by hand. If the client’s policy requires its own database in its AWS account, it is standard PostgreSQL and can be migrated.
2. Bronze, silver and gold layers
Data moves through three layers (medallion architecture), and users see only the last one, and only once it is certified.
| Layer | What it holds | Rule |
|---|---|---|
| Bronze | The ERP export exactly as received | Never modified: it is the source evidence |
| Silver | The same data in a standard format: dates, accounts, customers and products mapped | Passes quality controls before moving on |
| Gold | Management outputs: close, P&L, balance sheet, cash flow | Published only as a certified run |
Before bronze, an isolated test zone. Every upload passes 9 controls: lost rows, duplicate invoices or entries, unbalanced entries, a balance sheet that doesn’t tie, impossible dates and unknown customers. If it fails, it is blocked with the reason shown and never touches certified data.
No figure changes without human approval. An administrator at the client company approves the move into the numbers, with a second factor, and the approval is recorded in the audit log.
Enforced by the database, not the web. Gold tables have Row Level Security with two policies: one that only allows reading certified runs and a restrictive one that requires a second-factor session (aal2 level). The views the web consumes are security_invoker and inherit that filter.
3. Access and isolation between companies
Every row in the database carries its company, and the database itself prevents crossing it: a test that enters as another company through every path returns zero rows.
| Control | Status | How it is verified |
|---|---|---|
| Sign-up by invitation only, with a role (reader, analyst, administrator). Invitations expire after 7 days and are single-use | Active | An expired or used invitation does not open the account |
| Mandatory second factor (MFA) to see figures | Active | Without aal2, RLS policies return no rows |
| Leaked-password blocking | Active | Supabase rejects passwords found in known leaks |
| Sign-out after 30 minutes of inactivity, with prior warning | Active | Visible in the session |
| Per-company isolation with Row Level Security | Active | Automated test as a user from another company across sheets, drill-down to source, chat, emails and downloads: zero rows. Sweep of the live database on 10/29/2026: zero crossed data |
| “Your security” panel: open sessions with device and IP, remote sign-out, own activity | Active | Visible to every user |
| Email alert on sign-in from a new device and lockout after failed attempts | Pending | — |
| Captcha at login | Pending | — |
| Live isolation test with a real user from another company | Pending | — |
Confidentiality and data protection agreement. Before receiving any data, ADN signs a confidentiality and personal data processing agreement with the client, under Argentina’s Personal Data Protection Law 25,326.
ADN staff. Only those working on the client’s account, with their own user, MFA and activity logging, just like the client’s users, and bound by confidentiality.
4. File quarantine and antivirus
Every file the client uploads is quarantined and goes through format validation and antivirus before any process reads it.
- Quarantine. The file is stored in separate private storage. No process opens it yet.
- Validation by content, not by extension. Only macro-free .xlsx and CSV, with a size limit. Files with macros (.xlsm), embedded files, password protection or that inflate when decompressed (zip bombs) are rejected.
- Antivirus. ClamAV, with its signature database updated weekly, running in the Cloud Run upload service. An infected file is deleted and rejected with the name of the detected signature.
- Test zone. Only then does the file enter the isolated load with its 9 controls (section 2).
How it is verified. On every code change, an automated test confirms the antivirus detects the standard EICAR test file. On 10/31/2026 it was tested with a real Odoo Excel file: it passed the antivirus and entered the test zone in about 90 seconds.
What we don’t do: client files are never sent to services like VirusTotal, which share what they receive with third parties.
Inside the upload service. No public endpoint; credentials in Google Secret Manager, readable only by the service; its own least-privilege database user, with no read or write access to certified figures; deployment with no stored passwords, accepted only from ADN’s repository.
Pending the same circuit for files that arrive as email attachments.
5. Artificial intelligence, audit and exit
What the AI sees. The assistant reads only summarized views of the gold layer, never raw ERP data or personal data. An automated test fails if anyone adds a column with personal data to those views. To propose how to read a new file, it receives only column names and formats, never values. Below every answer, “What the assistant saw” shows the exact text that was sent.
AI provider. Anthropic API (United States). Under its commercial terms, it may not train models on content received through the API and deletes it within 30 days, except content flagged for a possible usage-policy violation (up to 2 years). Anthropic holds ISO 27001, ISO/IEC 42001 and SOC 2 Type I and II.
Tamper-evident audit log. It records sign-ins (with or without MFA), sheets viewed, downloads, exports, questions to the assistant and emails sent. Each row carries the hash of the previous one: if one is modified or deleted, the chain breaks at that exact point.
If the client leaves. It receives a full export, one file per table, with a manifest of row counts and the hash of each file. Then everything is deleted and a certificate is delivered showing before and after at zero. Only the audit log is kept, for a period to be defined.
External review. Pending review by an independent expert scheduled for 11/30/2026. Until then, reviews are internal: Supabase’s security advisor and the automated tests.
What we don’t promise. ADN’s own certifications (ISO 27001, SOC 2): it has none. Contractually guaranteed availability: it depends on Supabase. If the database or the AI don’t respond, the web says so and never shows partial figures.
Does your IT team have more questions?
We set up a technical meeting and go through whatever your security policy requires.
Talk to ADN