@ericrisco/rsc 3.7.4 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -9
- package/manifest.json +49 -40
- package/package.json +1 -1
- package/scripts/lib/domains.js +1 -1
- package/scripts/lib/onboarding-apply.js +1 -1
- package/scripts/lib/onboarding.js +7 -7
- package/scripts/lib/retired-skills.js +4 -0
- package/scripts/lib/review-findings.js +3 -0
- package/scripts/lib/review-ledger.js +185 -0
- package/scripts/lib/risk.js +65 -0
- package/scripts/lib/spec-gate.js +10 -1
- package/scripts/rsc.js +91 -6
- package/skills/analyze/SKILL.md +3 -3
- package/skills/asdd/SKILL.md +159 -0
- package/skills/{sdd → asdd}/evals/README.md +10 -10
- package/skills/{sdd → asdd}/evals/cases.yaml +4 -4
- package/skills/{sdd → asdd}/references/model-routing.md +2 -2
- package/skills/building-agents/SKILL.md +1 -1
- package/skills/clarify/SKILL.md +48 -55
- package/skills/clarify/evals/cases.yaml +6 -7
- package/skills/connect-tool/SKILL.md +119 -21
- package/skills/connect-tool/THIRD_PARTY.md +43 -0
- package/skills/connect-tool/bridge-kit/01-TOOLS-plantilla/test_connection.sh +33 -0
- package/skills/connect-tool/bridge-kit/LICENSE +27 -0
- package/skills/connect-tool/bridge-kit/README.md +48 -0
- package/skills/connect-tool/bridge-kit/UPSTREAM.json +8 -0
- package/skills/connect-tool/bridge-kit/access/access_a_sqlite.py +82 -0
- package/skills/connect-tool/bridge-kit/dbhub/dbhub.toml.ejemplo +65 -0
- package/skills/connect-tool/bridge-kit/red/cloudflared-config.yml.ejemplo +18 -0
- package/skills/connect-tool/bridge-kit/red/tailscale-grants.hujson +22 -0
- package/skills/connect-tool/bridge-kit/sqlserver/01-login-servidor.sql +25 -0
- package/skills/connect-tool/bridge-kit/sqlserver/02-usuario-y-vistas.sql +69 -0
- package/skills/connect-tool/bridge-kit/sqlserver/03-prueba-solo-lectura.sql +65 -0
- package/skills/connect-tool/bridge-kit/sqlserver/copia-nocturna.ps1 +68 -0
- package/skills/connect-tool/evals/cases.yaml +41 -4
- package/skills/connect-tool/references/connect-or-migrate.md +96 -0
- package/skills/connect-tool/references/database-bridge.md +159 -0
- package/skills/connect-tool/references/file-exchange.md +103 -0
- package/skills/connect-tool/references/messages.md +120 -0
- package/skills/connect-tool/references/program-types.md +97 -0
- package/skills/connect-tool/references/spain.md +103 -0
- package/skills/connect-tool/references/what-to-find-out.md +57 -0
- package/skills/constitution/SKILL.md +21 -8
- package/skills/constitution/evals/README.md +1 -1
- package/skills/debug/SKILL.md +1 -1
- package/skills/fastapi/SKILL.md +1 -1
- package/skills/flutter/SKILL.md +1 -1
- package/skills/ftd/SKILL.md +26 -10
- package/skills/ftd/evals/cases.yaml +1 -1
- package/skills/ftd/evals/routing.json +4 -4
- package/skills/go/SKILL.md +1 -1
- package/skills/implement/SKILL.md +126 -113
- package/skills/implement/evals/cases.yaml +4 -2
- package/skills/implement/references/per-task-review.md +19 -26
- package/skills/nextjs/SKILL.md +1 -1
- package/skills/parallel/SKILL.md +1 -1
- package/skills/plan/SKILL.md +2 -2
- package/skills/postgresdb/SKILL.md +1 -1
- package/skills/react/SKILL.md +1 -1
- package/skills/review/SKILL.md +58 -31
- package/skills/sdd-init/SKILL.md +6 -6
- package/skills/ship/SKILL.md +38 -18
- package/skills/specify/SKILL.md +32 -33
- package/skills/specify/evals/cases.yaml +1 -1
- package/skills/specify/references/spec-template.md +27 -5
- package/skills/suggest/SKILL.md +4 -4
- package/skills/tasks/SKILL.md +37 -33
- package/skills/tasks/evals/README.md +1 -1
- package/skills/tasks/evals/cases.yaml +2 -2
- package/skills/verify/SKILL.md +30 -15
- package/skills/verify/evals/README.md +2 -2
- package/skills/verify/evals/cases.yaml +1 -0
- package/skills/worktrees/SKILL.md +1 -1
- package/targets/clone-bootstrap.mjs +1 -1
- package/targets/hook-once.mjs +2 -2
- package/targets/sello.mjs +1 -1
- package/skills/sdd/SKILL.md +0 -250
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# Database bridge: reading an installed program, read-only
|
|
2
|
+
|
|
3
|
+
Goal: the agent **reads** the data of a desktop or office program (SQL Server or Access) **without
|
|
4
|
+
being able to write**, **without opening ports** and **without losing the vendor's support**. Writing
|
|
5
|
+
never goes through the bridge: it goes through the [official import file](file-exchange.md).
|
|
6
|
+
|
|
7
|
+
The real "read-only" guarantee lives **in the database**: a login with minimal permissions over
|
|
8
|
+
curated views. The "read-only mode" of an MCP server is almost always a statement filter. It helps;
|
|
9
|
+
it is not enough.
|
|
10
|
+
|
|
11
|
+
The scripts are in [`../bridge-kit/`](../bridge-kit/README.md), shipped unmodified from their source
|
|
12
|
+
(Spanish comments and file names; see `../THIRD_PARTY.md`). This page is how to use them.
|
|
13
|
+
|
|
14
|
+
## Architecture
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
[Program's server or PC] [Agent]
|
|
18
|
+
SQL Server (production)
|
|
19
|
+
└─ nightly backup → restore into ERP_IA (copy) ┌─ Claude Code on a laptop ── Tailscale (grant to the MCP port only)
|
|
20
|
+
└─ schema "ia": curated views │
|
|
21
|
+
└─ login ia_lectura (SELECT on "ia") │
|
|
22
|
+
└─ DBHub (readonly, predefined SQL) ─┤
|
|
23
|
+
listening on 127.0.0.1 └─ claude.ai connector / cloud n8n ── Cloudflare Tunnel + Access
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Step by step
|
|
27
|
+
|
|
28
|
+
### 0. Permission first
|
|
29
|
+
|
|
30
|
+
Ask the distributor (Sage, ICG, Prevengos, CONTPAQi, Wolters Kluwer…) whether creating a login and
|
|
31
|
+
views affects support, **in writing** ([messages](messages.md), B). If it does, work **only on the
|
|
32
|
+
copy** (step 1). Some vendors put database reading outside support altogether (Prevengos, for one).
|
|
33
|
+
|
|
34
|
+
### 1. Isolate the data: a nightly copy
|
|
35
|
+
|
|
36
|
+
- **SQL Server, Express included.** Express has **no SQL Server Agent**. The pattern is the Windows
|
|
37
|
+
Task Scheduler plus `sqlcmd`: a `BACKUP ... WITH COPY_ONLY` of production (it does not break the
|
|
38
|
+
program's own backup chain) and a `RESTORE` into a separate database, `ERP_IA`, every night off
|
|
39
|
+
hours. `bridge-kit/sqlserver/copia-nocturna.ps1` does it: backup, restore with the file moves,
|
|
40
|
+
recreate the user and views (the restore wipes them), run the acceptance test, keep three days
|
|
41
|
+
of backups, log every step.
|
|
42
|
+
- **Access** (`.mdb`/`.accdb`, e.g. FactuSOL local): copy the file off hours and convert the copy to
|
|
43
|
+
SQLite: `bridge-kit/access/access_a_sqlite.py --origen <file> --destino <file.sqlite>`. It copies
|
|
44
|
+
first, skips binary attachments and replaces the target atomically. **Never** connect an MCP to
|
|
45
|
+
the live `.mdb`.
|
|
46
|
+
- **Production** only when real time is truly needed, and then with the login of step 2 and row and
|
|
47
|
+
time limits.
|
|
48
|
+
|
|
49
|
+
Schedule the copy with an account that administers SQL Server, **never** with the reader:
|
|
50
|
+
|
|
51
|
+
```powershell
|
|
52
|
+
$accion = New-ScheduledTaskAction -Execute "powershell.exe" -Argument '-ExecutionPolicy Bypass -File C:\KitPuente\sqlserver\copia-nocturna.ps1 -Origen "<PROGRAM_DB>"'
|
|
53
|
+
$cuando = New-ScheduledTaskTrigger -Daily -At 2am
|
|
54
|
+
Register-ScheduledTask -TaskName "KitPuente copia nocturna" -Action $accion -Trigger $cuando -RunLevel Highest
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### 2. A read-only login over views
|
|
58
|
+
|
|
59
|
+
`bridge-kit/sqlserver/01-login-servidor.sql` (once, server level) and `02-usuario-y-vistas.sql`
|
|
60
|
+
(database level, idempotent):
|
|
61
|
+
|
|
62
|
+
1. A schema `ia` with **curated views**: only the columns needed. No IBANs, no health data, no
|
|
63
|
+
payroll. One view per business question.
|
|
64
|
+
2. A login `ia_lectura` that is **not** `sa`, `db_owner` or `sysadmin`, with a long random password
|
|
65
|
+
kept only on the server.
|
|
66
|
+
3. `GRANT SELECT ON SCHEMA::ia`. The views belong to `dbo`, so ownership chaining lets the login read
|
|
67
|
+
the tables **through** them without any permission on the tables. Plus `db_denydatawriter` and
|
|
68
|
+
`DENY CREATE TABLE/VIEW/PROCEDURE/FUNCTION`.
|
|
69
|
+
4. The view templates use placeholders (`<tabla_facturas_emitidas>`, `<columna_fecha>`…). Table and
|
|
70
|
+
column names depend on the program and its version and are **not public**: confirm them with the
|
|
71
|
+
distributor.
|
|
72
|
+
|
|
73
|
+
If the server only allows Windows authentication, use a dedicated Windows account instead of the
|
|
74
|
+
SQL login.
|
|
75
|
+
|
|
76
|
+
### 3. The acceptance test
|
|
77
|
+
|
|
78
|
+
`bridge-kit/sqlserver/03-prueba-solo-lectura.sql` impersonates `ia_lectura` inside a transaction it
|
|
79
|
+
rolls back, and checks: it **can** read the `ia` views; it **cannot** read the tables directly,
|
|
80
|
+
delete, update or create a table. It must end in `RESULTADO: OK`. Without it, the agent is not
|
|
81
|
+
connected.
|
|
82
|
+
|
|
83
|
+
> **Check this before trusting an OK.** The script counts *any* error on the forbidden statements
|
|
84
|
+
> as a pass. If a placeholder such as `<tabla_facturas_emitidas>` was not replaced, or the table
|
|
85
|
+
> name is wrong, those statements fail with "invalid object name", not with a permission error,
|
|
86
|
+
> and the test reports OK without proving anything. Replace every placeholder with a real table,
|
|
87
|
+
> and confirm that the errors are permission errors (`Msg 229` / `Msg 262`), the same rule as the
|
|
88
|
+
> `test_connection` probes in SKILL.md.
|
|
89
|
+
|
|
90
|
+
### 4. The database MCP server
|
|
91
|
+
|
|
92
|
+
| Option | When | Read-only | Limiting tables | Notes |
|
|
93
|
+
|---|---|---|---|---|
|
|
94
|
+
| **DBHub** (Bytebase, MIT) — the kit's choice | SQL Server, PostgreSQL, MySQL/MariaDB, Oracle, SQLite | `readonly=true` per tool in `dbhub.toml`: only SELECT, SHOW, DESCRIBE, EXPLAIN, PRAGMA. A filter: combine it with the login | **Predefined SQL tools** with typed parameters | npx or Docker; several sources in one TOML; `max_rows`; SSH tunnel. Over HTTP, a shared bearer token. No Windows integrated auth |
|
|
95
|
+
| **SQL MCP Server** (Microsoft, Data API builder 2.x, MIT) | SQL Server, Azure SQL, PostgreSQL, MySQL | Per-role permissions (e.g. `anonymous:read`), no free SQL | Only the entities declared in `dab-config.json` | Over HTTP everything enters as **anonymous** by default: put JWT/Entra ID or Cloudflare Access in front. Needs .NET |
|
|
96
|
+
| **mcpFirebird** (MIT) | Firebird | `allowedOperations=['SELECT']`, no free SQL | `allowedTables` | Low-to-medium maturity |
|
|
97
|
+
| Access | — | — | — | No mature MCP: **copy → SQLite → DBHub** |
|
|
98
|
+
|
|
99
|
+
SQL Server MCP servers with no read-only mode do not belong in the bridge.
|
|
100
|
+
|
|
101
|
+
`bridge-kit/dbhub/dbhub.toml.ejemplo` has one tool per business question ("sales per day",
|
|
102
|
+
"pending collections", "stock below minimum"), each a `SELECT` on the `ia` views, so the agent does
|
|
103
|
+
not improvise SQL against the program. `execute_sql` cannot be removed according to DBHub's docs:
|
|
104
|
+
it stays `readonly` with a row cap. The file holds the reader's password: keep it on the program's
|
|
105
|
+
server, readable only by the account that runs DBHub, never in git or on a laptop. **DBHub listens
|
|
106
|
+
on `0.0.0.0` by default: always pass `--host`**, and pin the npm version.
|
|
107
|
+
|
|
108
|
+
### 5. The network: no open ports
|
|
109
|
+
|
|
110
|
+
**Rule:** port 1433 (and any database or MCP port) is **never** opened on the router. MS-SQL servers
|
|
111
|
+
exposed to the internet are a classic ransomware entry for small businesses.
|
|
112
|
+
|
|
113
|
+
| If the agent is… | Use | How it is limited | Indicative cost |
|
|
114
|
+
|---|---|---|---|
|
|
115
|
+
| Claude Code on the owner's laptop | **Tailscale** | Tag `tag:erp` on the server and a grant that lets only the owner reach **the MCP port** (not 1433). `bridge-kit/red/tailscale-grants.hujson` | Standard plan per user per month; the Personal plan is non-commercial only. Check current pricing |
|
|
116
|
+
| A claude.ai remote connector, Cowork or cloud n8n | **Cloudflare Tunnel + Access** in front of the MCP's HTTP endpoint | Access application with an email policy, service tokens for machines; the MCP listens on 127.0.0.1 with its own token. `bridge-kit/red/cloudflared-config.yml.ejemplo` | Zero Trust has a free tier (check the current limit). Needs a domain on Cloudflare |
|
|
117
|
+
|
|
118
|
+
Remote claude.ai connectors leave from Anthropic's infrastructure and **do not reach a VPN or
|
|
119
|
+
Tailscale**. Using the bridge from claude.ai or Cowork needs the Cloudflare tunnel.
|
|
120
|
+
|
|
121
|
+
### 6. In the harness
|
|
122
|
+
|
|
123
|
+
`01-TOOLS/<PROGRAM>/`, from `bridge-kit/01-TOOLS-plantilla/`:
|
|
124
|
+
|
|
125
|
+
- `.env`: the MCP URL and token (`ERP_MCP_URL`, `ERP_MCP_TOKEN`), **not** the database password,
|
|
126
|
+
which stays on the program's server. The kit's README mentions an `.env.example` that the source
|
|
127
|
+
does not ship: write it with those two variables.
|
|
128
|
+
- `test_connection.sh`: initialises the MCP, lists its tools and warns about any tool the kit did
|
|
129
|
+
not expect. It proves the bridge answers; the read-only proof is test 03 on the server.
|
|
130
|
+
- `CREDENTIALS.md`: who created the login, where the copy lives, when the token rotates (every
|
|
131
|
+
quarter).
|
|
132
|
+
|
|
133
|
+
Plus the entry in `.mcp.json`.
|
|
134
|
+
|
|
135
|
+
## Plan B: an export folder
|
|
136
|
+
|
|
137
|
+
When no database is reachable: a nightly CSV export to a folder (Task Scheduler with `sqlcmd`/`bcp`
|
|
138
|
+
over the views, or the program's own export) and the harness reads the folder. Details in
|
|
139
|
+
[file exchange](file-exchange.md). With n8n: version 2 disables the Local File Trigger and Execute
|
|
140
|
+
Command by default; re-enable them deliberately and restrict paths with
|
|
141
|
+
`N8N_RESTRICT_FILE_ACCESS_TO`, and keep n8n updated.
|
|
142
|
+
|
|
143
|
+
## When to pay instead of building: unified APIs
|
|
144
|
+
|
|
145
|
+
| Service | Spanish coverage (check current list) | Local or cloud | MCP | Watch for |
|
|
146
|
+
|---|---|---|---|---|
|
|
147
|
+
| **Chift** | Holded, ContaSOL (cloud only), a3ERP, Sage 200 ES, Odoo, Ágora, Revo, Business Central… | Both: Sage 200 ES and a3ERP through a local Windows agent (outbound, no ports) | Yes, official | Asks for broad permissions (read and write). Price not public |
|
|
148
|
+
| Apideck | Holded, Odoo | Cloud | Yes | Expensive for a small business |
|
|
149
|
+
| Unified.to | Holded, Odoo, Sage 200 (beta) | Cloud | Yes | — |
|
|
150
|
+
|
|
151
|
+
For a single small business the own bridge is usually cheaper. Check coverage and prices at the
|
|
152
|
+
source before recommending one.
|
|
153
|
+
|
|
154
|
+
## What the bridge does not do
|
|
155
|
+
|
|
156
|
+
- It does not write into the program: that is the import file.
|
|
157
|
+
- It ships no table schemas of commercial programs.
|
|
158
|
+
- It does not replace the vendor's support: when the program updates and changes its tables, the
|
|
159
|
+
views need review. Test 03 and `test_connection` detect it.
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# File exchange: reading exports, generating imports
|
|
2
|
+
|
|
3
|
+
A route of its own, with its method and its proof. Most small-business programs export to Excel or
|
|
4
|
+
CSV and import an official file, even when they have no API. **To read**, the program exports to a
|
|
5
|
+
folder and the agent reads. **To write**, the agent generates the program's official import file and
|
|
6
|
+
a person imports it.
|
|
7
|
+
|
|
8
|
+
Reading this way is often the best first route for an installed program: it needs no database
|
|
9
|
+
access, keeps the vendor's support, and takes an afternoon. Writing this way is the **only** safe
|
|
10
|
+
way to write into an installed accounting or invoicing program.
|
|
11
|
+
|
|
12
|
+
## Reading: an export to a folder
|
|
13
|
+
|
|
14
|
+
1. **Choose what comes out.** Few, useful things: sales of the day, pending invoices, stock, open
|
|
15
|
+
jobs. Only the columns needed (GDPR).
|
|
16
|
+
2. **Find the function in the program.** Almost every program exports its list screens to Excel or
|
|
17
|
+
CSV. Some export by FTP, set up by the distributor. Construction software exports BC3, a plain
|
|
18
|
+
text standard any script can read.
|
|
19
|
+
3. **Schedule it.** The program's own scheduler if it has one; otherwise the Windows Task Scheduler
|
|
20
|
+
or a script run by the IT person. If it cannot be automated, a weekly manual export is a valid
|
|
21
|
+
start.
|
|
22
|
+
4. **Choose the folder.** A folder on a server or synced with OneDrive or Google Drive. The program
|
|
23
|
+
only writes there; the agent only reads.
|
|
24
|
+
|
|
25
|
+
Rules for the folder:
|
|
26
|
+
|
|
27
|
+
- The exporter writes to a temporary name and **renames at the end**: a half-written file must
|
|
28
|
+
never be read.
|
|
29
|
+
- File events are not reliable on network shares (SMB/NFS) or Docker volumes on Windows: read on a
|
|
30
|
+
schedule instead of on change.
|
|
31
|
+
- **Validate the structure of every file** against the described format, and warn when it changes:
|
|
32
|
+
a program update breaks a parser silently.
|
|
33
|
+
- The data is as fresh as the last export. Say so to the user.
|
|
34
|
+
|
|
35
|
+
## Writing: the official import file
|
|
36
|
+
|
|
37
|
+
The agent does not write in the program. It reads the source (invoices, tickets, an Excel), proposes
|
|
38
|
+
the records, and generates the program's **official import file** in `01-TOOLS/<TOOL>/out/`
|
|
39
|
+
(gitignored). A person reviews it, runs the program's own validation, and imports it with the
|
|
40
|
+
program's button. So the program's integrity and support stay intact, the Spanish Veri\*factu record
|
|
41
|
+
chain is never touched, and a person always says "yes" before anything enters the books.
|
|
42
|
+
|
|
43
|
+
Rules:
|
|
44
|
+
|
|
45
|
+
1. **Sample file first.** Before generating anything, get a file exported from the user's own
|
|
46
|
+
program, or the vendor's official examples, and copy its structure exactly. Fixed-width
|
|
47
|
+
positions change between versions.
|
|
48
|
+
2. **Existing accounts only.** The file uses accounts from the current chart of accounts. A missing
|
|
49
|
+
one is flagged for review, never invented. (Some programs **create** an unknown account on
|
|
50
|
+
import: a typo becomes a new sub-account.)
|
|
51
|
+
3. **Totals balance.** Base + tax = total on every invoice; debit = credit on every entry. If it does
|
|
52
|
+
not balance, it does not leave.
|
|
53
|
+
4. **No duplicates.** A batch log (supplier + number + amount + batch) in
|
|
54
|
+
`01-TOOLS/<TOOL>/out/lotes.csv`, checked before every new file.
|
|
55
|
+
5. **The person imports.** After the program's validation and a backup.
|
|
56
|
+
6. **Never issue.** The agent does not create **issued** invoices in an invoicing program. It
|
|
57
|
+
prepares data or drafts; a person issues from the program.
|
|
58
|
+
|
|
59
|
+
## Describe the format
|
|
60
|
+
|
|
61
|
+
In `01-TOOLS/<TOOL>/README.md`, for every file read or generated:
|
|
62
|
+
|
|
63
|
+
| Property | Example |
|
|
64
|
+
|---|---|
|
|
65
|
+
| Columns, in order, with type | `fecha` date · `cuenta` text(10) · `debe` decimal · `haber` decimal |
|
|
66
|
+
| Encoding | Windows-1252 (common in Spanish desktop programs) or UTF-8, with or without BOM |
|
|
67
|
+
| Separator | `;` (Spanish Excel default), `,`, tab, or fixed width |
|
|
68
|
+
| Decimal mark | `,` or `.`; thousands separator, if any |
|
|
69
|
+
| Date format | `dd/mm/yyyy`, `yyyymmdd`… |
|
|
70
|
+
| Fixed widths | positions and lengths, for fixed-width formats |
|
|
71
|
+
| Line ending | CRLF or LF |
|
|
72
|
+
|
|
73
|
+
## The proof
|
|
74
|
+
|
|
75
|
+
`test_connection` for this route checks:
|
|
76
|
+
|
|
77
|
+
- **Reading:** the latest export exists, is **recent** (within the expected schedule) and **matches
|
|
78
|
+
the described format** (columns, encoding, separator). A stale or changed file fails the test.
|
|
79
|
+
- **Writing:** a generated file validates: structure, balances, existing accounts, no duplicates.
|
|
80
|
+
- **The first import** is done in the program's **test company** (most accounting programs have
|
|
81
|
+
one, or the user creates one), never in the real books. Only after that test import looks right
|
|
82
|
+
does the route go live.
|
|
83
|
+
|
|
84
|
+
## Formats of common Spanish accounting programs
|
|
85
|
+
|
|
86
|
+
Checked against vendor documentation on 2026-10-09 (source: see `../THIRD_PARTY.md`). Formats and
|
|
87
|
+
positions change between versions: always generate a sample from the user's own program and
|
|
88
|
+
compare.
|
|
89
|
+
|
|
90
|
+
| Program | Format | What it imports | Paid? | Main risks |
|
|
91
|
+
|---|---|---|---|---|
|
|
92
|
+
| **A3 (a3asesor eco/con)** | **SUENLACE.DAT**: fixed-width ASCII, 512-byte records. Type at position 15: 0 entry without VAT, 1 invoice with VAT, 2 corrective, 9 VAT detail, C new accounts, V/B due dates, A/D analytics | Entries, issued and received invoices with VAT and SII, corrective invoices, accounts, due dates, analytics | No (standard). Excel-to-link importers are separate | An unknown account is **created automatically**. Always run the **Chequeo**. Official examples in the install: `SUENLAC5.TXT`, `SUENLAC5.EJE` |
|
|
93
|
+
| **a3innuva Contabilidad** | **Importia** (Excel with a column wizard and .zip templates) or the **API** with entries and invoices in **Draft** | Issued and received invoices, entries, chart of accounts, payroll link | Yes: Importia and Conectia (API) are separate subscriptions | Re-importing without "undo" duplicates. A wrong VAT operation code misclassifies |
|
|
94
|
+
| **Sage 50 (Spain)** | Free **entry import/export** add-on: three files (sub-accounts, journal, notes) as fixed-width .txt, .csv or .dbf, ContaPlus-compatible | Entries (VAT in the journal), sub-accounts, notes. **Not** invoices as sales documents | No (enable it in Add-ons) | Import in order: accounts → entries → notes. Shorter account codes are zero-padded and can land on the wrong sub-account. No blank template: export a sample entry and copy it |
|
|
95
|
+
| **Sage 200 (Spain)** | **Import manager** with Excel guides (entries, invoices plugin) | Customers and items (official); entries and invoices as entries through guides or plugins | Probably (partner guides) | Empty invoice type after import → incomplete VAT books. With its Veri\*factu module, invoices certified by other software are not imported |
|
|
96
|
+
| **ContaSOL** (and FactuSOL → ContaSOL) | Excel books with fixed names: **APU** (journal), **FRE + LFR** (received), **FAC + LFA** (issued), **PLA + LPL** (templates). Also ContaPlus ASCII and the ASCII Connector | Entries, invoices (VAT books), master data, opening | No (Utilities > Imports) | Different account lengths fail. Fields too long are **dropped silently**; text in a numeric field becomes 0. The Connector writes straight into the DATOS folder: back up first |
|
|
97
|
+
| **ContaPlus** (legacy) | XDiario, XSubCta, XDatAsi (fixed-width .txt or .dbf) | Entries, sub-accounts, comments | No | No official support for years. Still an exchange format Sage 50 and ContaSOL accept, but VAT may not reach the books and form 303 correctly |
|
|
98
|
+
| **Holded** | Excel/CSV templates: Journal, Accounts, Sales, Purchases, Contacts | Entries, chart of accounts, sales and purchase invoices, contacts | No | Widen account digits **before** creating data. Contacts must exist (matched by tax ID). Undo is not documented |
|
|
99
|
+
| **Odoo** | Generic importer (CSV/XLSX) on `account.move` and its lines | Entries, invoices, contacts, statements | No | **Imports are permanent**: use "Test" and small batches, with External IDs to avoid duplicates. Entries stay in **draft** (good for review). With Veri\*factu active, posting a customer invoice sends it to the tax agency |
|
|
100
|
+
|
|
101
|
+
Other programs: ask the distributor which import format they accept, and get a sample.
|
|
102
|
+
|
|
103
|
+
What changes with Spanish B2B e-invoicing, and why import files are unaffected: [Spain](spain.md).
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# Messages: asking whoever holds the key
|
|
2
|
+
|
|
3
|
+
Used in option 2, when the connection depends on someone else. Write the message in the user's
|
|
4
|
+
language and register, change what is between `<…>`, remove what does not apply, and add no
|
|
5
|
+
requests that are not needed. Every message keeps four things: **read-only**, **a dedicated user**,
|
|
6
|
+
**nothing open to the internet**, and **the cost question**. If `unslop` is installed, pass the
|
|
7
|
+
message through it.
|
|
8
|
+
|
|
9
|
+
The person on the other side does not need to know what an "AI harness" is. Ask for concrete,
|
|
10
|
+
familiar things: a read-only credential, in the name of an integration, with the least access.
|
|
11
|
+
|
|
12
|
+
## Before writing: five facts
|
|
13
|
+
|
|
14
|
+
1. The exact name and version of the program ("Sage 200 2025", "ContaSOL 2026").
|
|
15
|
+
2. Where it is installed: the vendor's cloud, an office server, someone's PC, the distributor.
|
|
16
|
+
3. Who maintains it: own IT person, distributor, vendor, accounting firm.
|
|
17
|
+
4. Exactly which data: "issued and received invoices for the last 12 months", not "everything".
|
|
18
|
+
5. Read only, or also write. Start with read.
|
|
19
|
+
|
|
20
|
+
## A. Installed program → IT person or distributor
|
|
21
|
+
|
|
22
|
+
> Hi `<name>`. I want to automate `<sales and collections reports / entering invoices>` with an AI
|
|
23
|
+
> tool. It needs to read data from `<program and version>`. In order of preference:
|
|
24
|
+
>
|
|
25
|
+
> 1. Do you or the vendor have an **API or integration module** for this program, or a cloud
|
|
26
|
+
> edition with an API? What does it cost?
|
|
27
|
+
> 2. If not, can the program **export automatically** every night `<invoices, customers, stock>`
|
|
28
|
+
> to CSV or Excel in a folder?
|
|
29
|
+
> 3. If not, can you create a **read-only database user** limited to `<these views>`, reachable
|
|
30
|
+
> only through a VPN?
|
|
31
|
+
>
|
|
32
|
+
> I do not need to write anything in the program. I do not want to open ports to the internet or
|
|
33
|
+
> use the administrator account. Which option do you see, and what would it cost?
|
|
34
|
+
|
|
35
|
+
## B. The vendor itself (no reply from the distributor, or no distributor)
|
|
36
|
+
|
|
37
|
+
> Subject: Integration enquiry for `<program>` version `<version>`
|
|
38
|
+
>
|
|
39
|
+
> Hello. We are licensed customers (`<licence number or tax ID>`). We want to connect `<program>`
|
|
40
|
+
> to an analysis tool of our own, **only to read data** (`<sales / invoices / customers / jobs>`).
|
|
41
|
+
>
|
|
42
|
+
> 1. Is there a module, API, web service or automatic export? For which version and licence?
|
|
43
|
+
> 2. If not, can we have a **read-only database user** on views without losing support? Please
|
|
44
|
+
> confirm in writing.
|
|
45
|
+
> 3. Is there technical documentation? What does it cost (setup, fee, hours)?
|
|
46
|
+
> 4. Do you have a cloud edition with an API?
|
|
47
|
+
>
|
|
48
|
+
> Thank you. `<name, phone>`
|
|
49
|
+
|
|
50
|
+
Asking also leaves in writing whether support is kept.
|
|
51
|
+
|
|
52
|
+
## C. Program hosted by the distributor (remote desktop, Citrix)
|
|
53
|
+
|
|
54
|
+
> Hi `<name>`. We use `<program>` on your hosted service. We want an AI tool to read
|
|
55
|
+
> `<invoices, customers, stock>` for internal reports. Since the program runs on your side:
|
|
56
|
+
>
|
|
57
|
+
> 1. Can you schedule an **automatic export** of that data to a folder we can reach (SFTP or a
|
|
58
|
+
> shared drive)? How often?
|
|
59
|
+
> 2. Do you offer an **API or integration module** for the hosted version?
|
|
60
|
+
> 3. Could you give us a **read-only user** on a copy of our data, on your side?
|
|
61
|
+
>
|
|
62
|
+
> We do not need to write anything. What does each option cost?
|
|
63
|
+
|
|
64
|
+
## D. Accounting firm (the program is theirs)
|
|
65
|
+
|
|
66
|
+
> Hi `<name>`. We are automating our internal reports. Could you leave in a shared folder, every
|
|
67
|
+
> `<week / month>`, `<the balance sheet, the customer and supplier ledgers, filed tax returns>` in
|
|
68
|
+
> Excel? If your program can give the company read-only access to its own data, that works too.
|
|
69
|
+
|
|
70
|
+
When the program belongs to the accounting firm, the owner asks the firm, not their own IT person.
|
|
71
|
+
|
|
72
|
+
## E. Web tool run by someone else (accounting firm, agency, partner)
|
|
73
|
+
|
|
74
|
+
> Hi `<name>`. Could you create in `<tool>` a **read-only API key or integration user** named
|
|
75
|
+
> "rsc-read"? It is for automatic reports. If the tool cannot limit permissions, tell me before and
|
|
76
|
+
> we discuss it.
|
|
77
|
+
|
|
78
|
+
## F. Google Workspace → administrator
|
|
79
|
+
|
|
80
|
+
> Hi `<name>`. I need to authorise an app with **read-only permissions**
|
|
81
|
+
> `<gmail.readonly / drive.file / spreadsheets.readonly / calendar.events.readonly>`. In API
|
|
82
|
+
> controls, keep it under "Specific Google data" and, if possible, limit it to `<this folder or
|
|
83
|
+
> sheet>` by sharing it with a service account without domain-wide delegation. Consent screen
|
|
84
|
+
> "Internal".
|
|
85
|
+
|
|
86
|
+
## G. Microsoft 365 → administrator
|
|
87
|
+
|
|
88
|
+
> Hi `<name>`. I need to register an app in **Entra ID** with read-only delegated permissions
|
|
89
|
+
> (`User.Read`, `Mail.Read`, `Files.Read`…) or, if it runs without a user, `Sites.Selected` with
|
|
90
|
+
> the "read" role on the site `<name>` only. It needs admin consent and "Assignment required" for
|
|
91
|
+
> my user only. No write permissions on the whole tenant.
|
|
92
|
+
|
|
93
|
+
If the company only authorises Copilot, do not force another AI: suggest Copilot Studio or Power
|
|
94
|
+
Automate, or ask for the exception in writing.
|
|
95
|
+
|
|
96
|
+
## H. WhatsApp Business → provider (BSP or Tech Provider)
|
|
97
|
+
|
|
98
|
+
> Hello. We want to register our number on the WhatsApp Business Platform in **coexistence**, so we
|
|
99
|
+
> keep using the app on the phone. Do you do that? What does it cost per month and per
|
|
100
|
+
> conversation? Do we get API and webhook access, or only your dashboard? We need a system user
|
|
101
|
+
> with access to our WABA only.
|
|
102
|
+
|
|
103
|
+
The WhatsApp Business *app* has no API. Unofficial tools that read WhatsApp Web get the number
|
|
104
|
+
blocked.
|
|
105
|
+
|
|
106
|
+
## When they say "that cannot be done"
|
|
107
|
+
|
|
108
|
+
Ask:
|
|
109
|
+
|
|
110
|
+
1. "Can it **export** to Excel or CSV, even by hand?" If yes, there is a starting point.
|
|
111
|
+
2. "Does the vendor have **partners or integrators** who connect it?"
|
|
112
|
+
3. "Is there a **cloud edition** of the program?" They usually come with an API.
|
|
113
|
+
4. "What would it take for it to be **read-only and with nothing open to the internet**?"
|
|
114
|
+
|
|
115
|
+
## What is not accepted
|
|
116
|
+
|
|
117
|
+
- The administrator's password, or another person's user.
|
|
118
|
+
- Opening the database or remote desktop port to the internet "so it works".
|
|
119
|
+
- A key that can do everything when a limited option exists.
|
|
120
|
+
- Credentials sent by email or WhatsApp. They are pasted directly into `01-TOOLS/<TOOL>/.env`.
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Program types: recognise the program, know what it allows, know who to ask
|
|
2
|
+
|
|
3
|
+
Option 2 starts here: the user has a program with no API, no MCP and no usable docs, and does not
|
|
4
|
+
know what kind of program it is. Their answers to the diagnosis questions place it in one of these
|
|
5
|
+
types. **They are a guide, not a closed list.** A program can sit between two types (a desktop
|
|
6
|
+
program with a cloud backup, a hosted program that also exports files). Say which type it looks
|
|
7
|
+
like, how sure you are, and what would confirm it.
|
|
8
|
+
|
|
9
|
+
## The diagnosis questions, and what each answer tells you
|
|
10
|
+
|
|
11
|
+
| Question (plain words) | If yes | If no |
|
|
12
|
+
|---|---|---|
|
|
13
|
+
| Do you log in with a username and password on a website? | Vendor web app. Docs exist more often than the user thinks: back to research | Installed somewhere |
|
|
14
|
+
| Does it keep working when the internet goes down? | The data is local: on this PC or an office server | Web app, or hosted by the distributor |
|
|
15
|
+
| Do several computers see the same data? | Client-server: a database on an office server or one shared PC | Single-PC desktop program |
|
|
16
|
+
| Do you open it through remote desktop, Citrix, or an icon that connects elsewhere? | **Hosted by the distributor**: the data is not in the office | Installed in the office |
|
|
17
|
+
| What extension do the files in its data folder have? | `.mdf` SQL Server · `.mdb`/`.accdb` Access · `.fdb`/`.gdb` Firebird · `.dbf` dBase · `.btr`/`.dat` Btrieve · `.db` Paradox or SQLite | (unknown: ask whoever installed it) |
|
|
18
|
+
| Who do you call when it breaks? | That person or company **holds the key** | Nobody: the owner decides alone, and support may be over |
|
|
19
|
+
|
|
20
|
+
Help the user answer: the data folder is usually under the program's install folder or a path in
|
|
21
|
+
its settings; *Help > About* gives the exact version; the vendor's invoice names the distributor.
|
|
22
|
+
|
|
23
|
+
## The types
|
|
24
|
+
|
|
25
|
+
### Vendor web app (SaaS)
|
|
26
|
+
|
|
27
|
+
- **Recognise it:** a website with a login, works from any computer, monthly subscription.
|
|
28
|
+
- **What it allows:** almost always an API, an official integration or an export. If research
|
|
29
|
+
found nothing, search again with the vendor's other product names, and look for an
|
|
30
|
+
"Integrations", "API" or "Developers" page inside the app's settings.
|
|
31
|
+
- **Who holds the key:** the account administrator. Sometimes that is the accounting firm or an
|
|
32
|
+
agency, not the owner.
|
|
33
|
+
- **Ask:** an API key or integration user, read-only, in the name of an integration, not a person.
|
|
34
|
+
|
|
35
|
+
### Desktop program with a local database
|
|
36
|
+
|
|
37
|
+
- **Recognise it:** works offline, one PC, data folder on that PC. Common engines: SQL Server
|
|
38
|
+
Express (`.\SQLEXPRESS`), Access, Firebird.
|
|
39
|
+
- **What it allows:** file exchange (exports and official imports), or a read-only copy of the
|
|
40
|
+
database ([database bridge](database-bridge.md)).
|
|
41
|
+
- **Who holds the key:** the owner for the PC; the distributor for whether reading the database
|
|
42
|
+
keeps support.
|
|
43
|
+
- **Ask:** the database engine, whether exports can be scheduled, and the support terms in writing.
|
|
44
|
+
|
|
45
|
+
### Client-server in the office
|
|
46
|
+
|
|
47
|
+
- **Recognise it:** several PCs see the same data; one machine (a server or "the main PC") must be
|
|
48
|
+
on. The database is on that machine.
|
|
49
|
+
- **What it allows:** the same as a desktop program, with the copy and the reader on the server.
|
|
50
|
+
- **Who holds the key:** the IT person who looks after the server, and the distributor for support.
|
|
51
|
+
- **Ask:** a read-only user on a nightly copy, reached only privately; never a port open to the
|
|
52
|
+
internet.
|
|
53
|
+
|
|
54
|
+
### Hosted by the distributor (remote desktop, Citrix)
|
|
55
|
+
|
|
56
|
+
- **Recognise it:** the user opens a remote desktop or a Citrix icon; nothing of the program is in
|
|
57
|
+
the office; it may keep working from home.
|
|
58
|
+
- **What it allows:** **no database to copy and no folder the agent reaches.** The only door is the
|
|
59
|
+
provider: an export they schedule to a folder the client can reach (SFTP, a shared drive), an
|
|
60
|
+
integration module, or a read-only user on their side.
|
|
61
|
+
- **Who holds the key:** the distributor or hosting provider, always.
|
|
62
|
+
- **Ask:** whether they can drop a scheduled export somewhere the client can read; whether they
|
|
63
|
+
offer an API or integration module; what it costs. Never try to reach their servers any other way.
|
|
64
|
+
|
|
65
|
+
### Old file database (dBase, Btrieve, Paradox)
|
|
66
|
+
|
|
67
|
+
- **Recognise it:** an old program, many small data files (`.dbf`, `.btr`, `.dat`), often a
|
|
68
|
+
Windows program from the 1990s or 2000s, sometimes still running under compatibility mode.
|
|
69
|
+
- **What it allows:** reading **a copy** of the files with a library for that format (dBase reads
|
|
70
|
+
easily; Btrieve needs its engine or the vendor's description of the records). The program's own
|
|
71
|
+
export is safer when it exists.
|
|
72
|
+
- **Who holds the key:** often nobody: the vendor may no longer exist. The person who uses it daily
|
|
73
|
+
knows its exports.
|
|
74
|
+
- **Ask:** what exports the program has; whether the vendor still supports it. This type is a
|
|
75
|
+
strong candidate for [connect or migrate](connect-or-migrate.md).
|
|
76
|
+
|
|
77
|
+
### Linux server or AS/400 (IBM i)
|
|
78
|
+
|
|
79
|
+
- **Recognise it:** green-screen terminal, or a program the IT person describes as "the server".
|
|
80
|
+
Common in larger or older companies, distribution and manufacturing.
|
|
81
|
+
- **What it allows:** a database that is usually queryable (Db2 for i on AS/400; PostgreSQL,
|
|
82
|
+
MySQL or a proprietary engine on Linux) and scheduled exports, both set up by the IT person.
|
|
83
|
+
- **Who holds the key:** the IT person or the company that maintains the system.
|
|
84
|
+
- **Ask:** a read-only user on the views needed, or a scheduled export; how they reach it
|
|
85
|
+
privately.
|
|
86
|
+
|
|
87
|
+
### Not a program: Excel or a shared folder
|
|
88
|
+
|
|
89
|
+
- **Recognise it:** "our ERP is an Excel".
|
|
90
|
+
- **What it allows:** move the file to OneDrive or Google Drive and connect that; or read a copy
|
|
91
|
+
from a synced folder. No bridge needed.
|
|
92
|
+
|
|
93
|
+
## After placing it
|
|
94
|
+
|
|
95
|
+
Tell the user, in short sentences: the type it looks like, what can be tried, what they must
|
|
96
|
+
confirm, and who to ask. Then the closed questions for that person (SKILL.md, option 2, step 3),
|
|
97
|
+
and the case left open in `02-DOCS`.
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# Spain: invoicing rules and the files Spanish programs exchange
|
|
2
|
+
|
|
3
|
+
Load this only when the business is in Spain. Dates and rules below were checked on 2026-10-09
|
|
4
|
+
(sources at the end). **They move: check the tax agency (AEAT) and the BOE before quoting any date
|
|
5
|
+
to the user**, and say which date you checked.
|
|
6
|
+
|
|
7
|
+
## The line that matters: prepare vs issue
|
|
8
|
+
|
|
9
|
+
- **Preparing** an invoice (gathering what to bill, computing amounts, a draft, a payment reminder)
|
|
10
|
+
can be done by the agent, a spreadsheet or a script.
|
|
11
|
+
- **Issuing** it (numbering, signing, chaining, recording, and in Veri\*factu mode sending to the
|
|
12
|
+
AEAT) is done by **invoicing software that complies with the regulation**, with a person who
|
|
13
|
+
presses the button.
|
|
14
|
+
|
|
15
|
+
| Piece | Who can do it |
|
|
16
|
+
|---|---|
|
|
17
|
+
| Gather and compute what to invoice | Agent, Excel, script |
|
|
18
|
+
| Create the invoice as a **draft** in the program | Agent through the API, with a dedicated user and approval |
|
|
19
|
+
| **Issue** it (number, chain, sign, send to the AEAT) | **The invoicing program**, with a person pressing |
|
|
20
|
+
| Warn about collections and overdue invoices | Agent (read-only, plus drafts of the messages) |
|
|
21
|
+
| Build its own issuing system | Only when assuming full compliance; not recommended for a small business |
|
|
22
|
+
|
|
23
|
+
An agent never "connects to Veri\*factu" by itself. It drafts; the compliant program issues and
|
|
24
|
+
sends the record.
|
|
25
|
+
|
|
26
|
+
## Veri\*factu (invoicing systems regulation)
|
|
27
|
+
|
|
28
|
+
- **What it requires** (RD 1007/2023): the software that issues invoices guarantees integrity,
|
|
29
|
+
conservation, accessibility, legibility, traceability and inalterability of the records. Each
|
|
30
|
+
invoice carries a fingerprint chained to the previous one: a numbered, stamped invoice book where
|
|
31
|
+
no page can be torn out or rewritten without a trace. In **Veri\*factu** mode the program also
|
|
32
|
+
sends every record to the AEAT almost as it issues it; the other mode keeps its own signature and
|
|
33
|
+
event log.
|
|
34
|
+
- **Responsible declaration**: the software producer signs one per version, visible inside the
|
|
35
|
+
program (Orden HAC/1177/2024). **The AEAT does not certify programs**: there is no "approved by
|
|
36
|
+
Hacienda" seal. Ask for the declaration and the exact version, in writing.
|
|
37
|
+
- **Dates, as checked on 2026-10-09**: before **1 January 2027** for corporate income tax payers and
|
|
38
|
+
**1 July 2027** for everyone else, self-employed included (RDL 15/2025). On 5 October 2026 the
|
|
39
|
+
Treasury **announced** a postponement to October 2028; no published rule formalised it at the date
|
|
40
|
+
checked. Plan with the legal dates and treat the postponement as possible, not certain.
|
|
41
|
+
- **Out of scope**: businesses in the SII, and the foral territories with TicketBAI or Batuz.
|
|
42
|
+
- **Software vendors** may only sell adapted systems with a declaration since 29 July 2025.
|
|
43
|
+
- **Own software**: the regulation applies to any taxpayer using an invoicing system, own or third
|
|
44
|
+
party. An app built with Claude Code that stores, numbers and issues invoices **is** an invoicing
|
|
45
|
+
system and must meet all of the above. The AEAT has FAQs on own software: read them before
|
|
46
|
+
deciding.
|
|
47
|
+
- **Never** let an agent edit invoices in an invoicing program's database: it breaks the chain.
|
|
48
|
+
|
|
49
|
+
## B2B e-invoicing
|
|
50
|
+
|
|
51
|
+
- **RD 238/2026** and **Orden HAC/1028/2026** (BOE of 5 October 2026): e-invoicing between
|
|
52
|
+
businesses becomes mandatory on **6 October 2027** for those invoicing more than €8M and on
|
|
53
|
+
**6 October 2028** for everyone else.
|
|
54
|
+
- Structured format following EN 16931 (UBL, CII, EDIFACT or Facturae); the AEAT's public solution
|
|
55
|
+
uses UBL. A PDF no longer counts between businesses. A private platform must send a UBL copy to
|
|
56
|
+
the public solution.
|
|
57
|
+
- Each invoice is identified by issuer tax ID + series + number + date.
|
|
58
|
+
- The receiver reports acceptance, rejection and payment; the issuer can report collection or
|
|
59
|
+
non-payment. Reporting statuses becomes a new, mandatory write: a good candidate to automate,
|
|
60
|
+
with human approval.
|
|
61
|
+
- It is the real migration trigger for old programs: the program must issue and receive UBL or
|
|
62
|
+
Facturae. Ask the vendor in writing ([connect or migrate](connect-or-migrate.md)).
|
|
63
|
+
|
|
64
|
+
Effects on connections:
|
|
65
|
+
|
|
66
|
+
1. **Accounting import files are not invoices** and do not change. They remain the right way for a
|
|
67
|
+
person to validate an entry ([file exchange](file-exchange.md)).
|
|
68
|
+
2. **Received invoices will arrive as structured XML.** The agent reads tax IDs, bases and taxes
|
|
69
|
+
without OCR and keeps the XML as the supporting document.
|
|
70
|
+
3. **Issued invoices**: the agent does not generate or sign UBL or Facturae on its own, nor call
|
|
71
|
+
issuing endpoints. It leaves data or drafts for the adapted program.
|
|
72
|
+
4. **An invoice already issued elsewhere only enters accounting.** It is never re-issued by
|
|
73
|
+
importing it into another program's invoicing module.
|
|
74
|
+
|
|
75
|
+
## File formats Spanish programs exchange
|
|
76
|
+
|
|
77
|
+
| Format | What it is | Where it appears |
|
|
78
|
+
|---|---|---|
|
|
79
|
+
| **SUENLACE.DAT** | A3's accounting link file: fixed-width ASCII, 512-byte records | a3asesor imports; accounting firms that use A3. Details in [file exchange](file-exchange.md) |
|
|
80
|
+
| **ContaPlus files** (XDiario, XSubCta) | Legacy fixed-width or dBase exchange format | Still accepted by Sage 50 and ContaSOL |
|
|
81
|
+
| **ContaSOL books** (APU, FAC/LFA, FRE/LFR) | Excel books with fixed names | ContaSOL imports; FactuSOL passes invoices to ContaSOL |
|
|
82
|
+
| **Norma 43** | The Spanish banking standard (AEB/CSB 43) for account statements: fixed-width text | Exported by every Spanish bank's online banking; imported by accounting programs for bank reconciliation. A clean read-only source of movements |
|
|
83
|
+
| **Facturae** | Spain's structured XML e-invoice, mandatory with the public administration (FACe) | Invoicing programs; accepted for B2B e-invoicing |
|
|
84
|
+
| **UBL** (EN 16931) | The European structured e-invoice | The AEAT public solution for B2B e-invoicing |
|
|
85
|
+
| **BC3** (FIEBDC-3) | The construction standard for budgets, price databases and measurements: plain text | Presto and construction software; installer software imports it |
|
|
86
|
+
| **SII** | Immediate VAT information supply to the AEAT | Larger companies; A3 and others carry SII fields in their import files |
|
|
87
|
+
|
|
88
|
+
Norma 43, Facturae and BC3 are public standards: a script reads them without the program that wrote
|
|
89
|
+
them. Still copy the structure from a real sample.
|
|
90
|
+
|
|
91
|
+
## Sources
|
|
92
|
+
|
|
93
|
+
Checked on 2026-10-09; adapted from Executive Lab's guides (see `../THIRD_PARTY.md`).
|
|
94
|
+
|
|
95
|
+
1. AEAT, Sistemas informáticos de facturación y Veri\*factu: https://sede.agenciatributaria.gob.es/Sede/iva/sistemas-informaticos-facturacion-verifactu.html
|
|
96
|
+
2. AEAT, note on the extended adaptation period: https://sede.agenciatributaria.gob.es/Sede/iva/sistemas-informaticos-facturacion-verifactu/nota-informativa-ampliacion-plazo-adaptacion-facturacion.html
|
|
97
|
+
3. BOE, Orden HAC/1028/2026: https://www.boe.es/diario_boe/txt.php?id=BOE-A-2026-20587
|
|
98
|
+
4. BOE, Real Decreto 1007/2023: https://www.boe.es/buscar/act.php?id=BOE-A-2023-24840
|
|
99
|
+
5. BOE, Orden HAC/1177/2024: https://www.boe.es/buscar/act.php?id=BOE-A-2024-22138
|
|
100
|
+
6. BOE-A-2026-7295, cited by the source guide for B2B e-invoicing: https://www.boe.es/diario_boe/txt.php?id=BOE-A-2026-7295
|
|
101
|
+
|
|
102
|
+
Not verified at that date: the AEAT FAQ text on own software, the full text of RD 238/2026, a rule
|
|
103
|
+
formalising the postponement, penalties.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# What to find out, where to look, how to write it down
|
|
2
|
+
|
|
3
|
+
Research replaces any catalogue. A list of vendors is out of date within months: prices, plans,
|
|
4
|
+
endpoints and MCP servers change, and it only covers what someone already entered. The fields below
|
|
5
|
+
are what such a catalogue held. Fill them for **this** tool, now, from primary sources, and write
|
|
6
|
+
them into `01-TOOLS/<TOOL>/README.md`. That file is the catalogue entry for this project.
|
|
7
|
+
|
|
8
|
+
## The fields
|
|
9
|
+
|
|
10
|
+
| Field | The question | Where to look first |
|
|
11
|
+
|---|---|---|
|
|
12
|
+
| **API** | Is there a documented API? REST, GraphQL, SOAP web service? Which plan includes it? | Vendor developer portal; "API", "Developers", "Integrations" in the app's settings |
|
|
13
|
+
| **MCP** | Is there an official MCP server? A maintained community one? Read-only mode? | `registry.modelcontextprotocol.io`; the vendor's docs; the vendor's GitHub |
|
|
14
|
+
| **Other routes** | Cloud edition with an API, vendor or distributor integration module, unified API (e.g. Chift), built-in Zapier/Make/n8n connector | Vendor site, distributor site, the unified API's coverage list |
|
|
15
|
+
| **Exports** | What can it export, in which format, and can it be scheduled or dropped to a folder or FTP? | The user manual; the program's list screens ("Export to Excel") |
|
|
16
|
+
| **Imports** | What official import formats does it accept, for which objects (entries, invoices, customers, items)? | The user manual; vendor support articles |
|
|
17
|
+
| **Database** | Which engine does an installed program use? Is reading it allowed by the support terms? | Install guide; the data folder's file extensions; the distributor |
|
|
18
|
+
| **Scoped permissions** | Can the credential be limited (read scopes, modules, sites, folders)? What **cannot** be limited? | Token or app settings; vendor docs on scopes or roles |
|
|
19
|
+
| **Who to ask, and what** | Who activates it (account admin, distributor, IT person, accounting firm) and the exact request | The vendor's "how to activate" page; the user's answers |
|
|
20
|
+
| **Free trial** | Free tier, trial, sandbox, developer account, test company. Does the trial include the API? | Pricing page; developer portal |
|
|
21
|
+
| **Cost** | Minimum cost with API access; module or connector fees | Pricing page; ask the distributor in writing |
|
|
22
|
+
| **Migration** | Is the product near end-of-life? Does a successor exist? | Vendor roadmap, end-of-support notices |
|
|
23
|
+
| **Spain** | Veri\*factu declaration for the exact version; B2B e-invoicing readiness | The vendor's responsible declaration; see [Spain](spain.md) |
|
|
24
|
+
| **Sources and confidence** | URL and date for every claim; "verified", "secondary source" or "not verified" | — |
|
|
25
|
+
|
|
26
|
+
Leave a field as **unknown** rather than guessing. "Not found after searching X, Y and Z on
|
|
27
|
+
<date>" is a result; an invented endpoint is a week lost.
|
|
28
|
+
|
|
29
|
+
## Where to look, in order
|
|
30
|
+
|
|
31
|
+
1. The vendor's own domain: developer docs, help centre, pricing, legal pages.
|
|
32
|
+
2. Official registries: the MCP registry; app marketplaces of the platform (Google Workspace
|
|
33
|
+
Marketplace, Microsoft AppSource, Shopify App Store…).
|
|
34
|
+
3. The distributor or partner's site, for modules the vendor does not list.
|
|
35
|
+
4. Secondary sources (forums, blog posts, partner presentations) only to find leads. Mark anything
|
|
36
|
+
that comes only from them as **not verified**.
|
|
37
|
+
|
|
38
|
+
## How to write it down
|
|
39
|
+
|
|
40
|
+
In `01-TOOLS/<TOOL>/README.md`:
|
|
41
|
+
|
|
42
|
+
```markdown
|
|
43
|
+
## Research — checked 2026-11-01
|
|
44
|
+
|
|
45
|
+
| Field | Finding | Source (date) | Confidence |
|
|
46
|
+
|---|---|---|---|
|
|
47
|
+
| API | REST, invoices and contacts read; needs the Pro plan | https://… (2026-11-01) | verified |
|
|
48
|
+
| MCP | None official; community server unmaintained since 2025 | https://… (2026-11-01) | verified |
|
|
49
|
+
| Exports | Scheduled CSV of invoices to a folder | user manual, ch. 12 (2026-11-01) | verified |
|
|
50
|
+
| Free trial | 30 days, API included | https://… (2026-11-01) | not verified: page says "most features" |
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## The 60-day rule
|
|
54
|
+
|
|
55
|
+
Before relying on an existing `README.md`, look at its dates. **More than 60 days old: check the
|
|
56
|
+
sources again** before quoting a price, a plan or an endpoint, and update the dates. This is what
|
|
57
|
+
keeps the research current without anyone maintaining a list.
|