Un backup util pentru RO e-Factura păstrează pachetul ZIP descărcat din SPV, cu XML-ul facturii și sigiliul Ministerului Finanțelor, într-o copie independentă, verificabilă și recuperabilă. PDF-ul ajută la citire, dar nu înlocuiește originalul electronic. Colectarea periodică, criptarea și un exercițiu de restaurare sunt mai importante decât simplul fapt că ai un bucket S3.
ANAF precizează că documentele sunt disponibile pentru descărcare timp de 60 de zile de la publicarea în sistem, apoi sunt arhivate și eliberate la cerere. Nu sunt declarate șterse după 60 de zile. Regula apare în materialul informativ din august 2024 și în Catalogul serviciilor ANAF 2025. O copie proprie îți permite să lucrezi fără să depinzi de o cerere ulterioară.
Păstrează originalul, nu doar imaginea facturii
Ghidul oficial RO e-Factura descrie originalul drept XML-ul însoțit de sigiliul electronic al Ministerului Finanțelor. Pentru backup, cea mai simplă regulă este să conservi arhiva ZIP exact cum ai primit-o. Nu o dezarhiva pentru a elimina fișiere considerate inutile și nu resalva XML-ul cu altă formatare.
Poți extrage o copie pentru căutare sau genera un PDF într-un director separat. Originalul rămâne neschimbat. Un XML trecut printr-un editor poate primi altă codificare ori alte spații; o arhivă refăcută poate avea alți octeți, chiar dacă documentul pare identic. Separarea originalelor de fișierele de lucru elimină această ambiguitate.
Adaugă fiecărui pachet un mic fișier de metadate: societatea pentru care l-ai colectat, sensul documentului, identificatorul mesajului, momentul descărcării, dimensiunea și hash-ul SHA-256. Hash-ul detectează o schimbare față de copia înregistrată; nu validează singur sigiliul și nu dovedește autenticitatea dacă un atacator poate modifica și arhiva, și registrul.
Folosește identificatori tehnici în denumiri, fără numele persoanelor sau descrieri comerciale. De exemplu, un director intern pentru societate, anul, luna și ID-ul mesajului sunt suficiente. Păstrează corespondența dintre acel director și societate într-un registru cu acces controlat.
Construiește o colectare care poate recupera o zi ratată
Pornește cu o descărcare manuală completă a documentelor accesibile și verifică dacă ai acoperit fiecare societate administrată. Pentru documente mai vechi care lipsesc, folosește procedura ANAF de solicitare a repostării, descrisă în materialul oficial. Notează intervalele lipsă; o automatizare nouă nu demonstrează că istoricul este complet.
- Alege un responsabil. O persoană verifică alertele și are un înlocuitor. Stabilește cine reautorizează conexiunea când accesul expiră sau certificatul se schimbă.
- Rulează o colectare zilnică. Este un punct de pornire operațional, nu un termen legal. Păstrează intervalele suficient de mici pentru limitele serviciului și citește toate paginile răspunsului.
- Reverifică un interval suprapus. De exemplu, caută din nou ultimele câteva zile, în loc să presupui că orice document a apărut în ordinea așteptată. Identificatorul mesajului împiedică salvarea repetată în registru.
- Descarcă în fișiere temporare. Acceptă pachetul numai după un răspuns reușit, o dimensiune plauzibilă și verificarea structurii ZIP. O pagină HTML cu eroare nu devine factură fiindcă are extensia
.zip. - Închide operațiunea după verificarea copiei. Marchează separat „descărcat”, „copiat” și „verificat”. Avansează cursorul de colectare numai după ce ai parcurs lista; păstrează o coadă separată pentru descărcările eșuate.
La o eroare temporară de citire, reîncearcă de un număr limitat de ori, cu pauze crescătoare. La o problemă de autorizare, oprește bucla și alertează responsabilul. O mie de cereri cu un token invalid nu recuperează nimic. Limitele și parametrii exacți se iau din documentația ANAF a serviciului folosit de aplicație.
Monitorizează ora ultimei colectări reușite, numărul documentelor noi, descărcările rămase și vechimea celei mai vechi erori. „Zero facturi azi” poate fi normal; „nicio colectare reușită de trei zile” cere atenție. Compară periodic totalurile și câteva documente cu evidența contabilă și SPV.
Autorizează aplicația fără să distribui certificatul
Procedura OAuth ANAF explică înregistrarea aplicației și autorizarea asociată certificatului calificat. Folosește fluxul oficial sau integrarea documentată a aplicației tale. Nu trimite cheia privată și parola certificatului prin e-mail pentru a obține o automatizare.
Separă credențialele ANAF de cele S3. Stochează tokenurile și secretele într-un mecanism destinat credențialelor, cu acces limitat, și nu le include în exportul unui workflow. Evită salvarea răspunsurilor de autentificare în istoricul execuțiilor. Datele facturilor și linkurile de descărcare pot fi și ele sensibile.
Cere doar permisiunile necesare, acolo unde integrarea le permite. Nu presupune că există un scope OAuth ANAF universal numit „read-only e-Factura”. Dacă autorizarea disponibilă este mai largă, limitează efectiv colectorul la listare și descărcare, separă-l de emiterea facturilor și restrânge cine îi poate modifica pașii. Revocă accesul când schimbi furnizorul sau persoana responsabilă.
Pentru o implementare cu n8n, poți porni de la ghidul de instalare și organizare a automatizărilor n8n. Configurarea conexiunii ANAF rămâne o etapă distinctă, cu autorizare și verificări proprii.
O copie S3 criptată și separată de aplicație
Un director pe același server cu aplicația este util pentru procesare, dar nu rezolvă pierderea serverului sau compromiterea contului administrativ. Pentru backup, folosește o destinație separată, cu credențiale proprii și o politică de acces care nu oferă aplicației drepturi administrative asupra tuturor copiilor.
Înainte de încărcare, stabilește unde se face criptarea și cine păstrează cheile. Criptarea pe serverul furnizorului și criptarea la client au modele diferite. Pentru o copie criptată înainte să plece de pe server, rclone crypt poate înveli un remote S3. Salvează separat configurația, parola și eventualul salt personalizat; pierderea lor poate face copia inutilizabilă.
Configurează interactiv, prin rclone config, un remote S3 numit s3backup, cu endpointul și bucketul tău. Creează apoi remote-ul efactura-crypt de tip crypt, cu destinația s3backup:bucket-backup/efactura. Alege criptarea standard a numelor și criptarea directoarelor. Pentru pașii S3, consultă ghidul rclone pentru stocare compatibilă S3.
Exemplul următor presupune că directorul lunar conține doar originale finalizate și metadatele lor. Înlocuiește căile înainte de utilizare și rulează mai întâi simularea. Comenzile nu configurează automat credențialele sau politica bucketului.
rclone copy /srv/efactura/originale/2026/11 \
efactura-crypt:2026/11 --immutable --dry-run
rclone copy /srv/efactura/originale/2026/11 \
efactura-crypt:2026/11 --immutable
Comanda copy nu șterge fișierele suplimentare din destinație. Opțiunea --immutable refuză modificarea unui fișier existent pe care rclone îl identifică drept schimbat. Nu transformă însă bucketul în stocare WORM și nu împiedică ștergerea cu alte credențiale. Evită un sync care ar propaga ștergerile accidentale.
Dacă activezi versionarea sau o politică de retenție, verifică exact ce oferă furnizorul, cum recuperezi o versiune și cine poate modifica politica. Citește și ghidul despre versionarea obiectelor S3. Nu activa reguli lifecycle care elimină originalele înaintea perioadei stabilite împreună cu contabilul și persoana responsabilă juridic.
Un exercițiu de restaurare pe care îl poți repeta
O dată pe lună, alege un pachet mai vechi și restaurează-l într-un director gol, folosind contul de recuperare. Ideal, persoana care face exercițiul nu depinde de sesiunea deja deschisă pe serverul colectorului. Astfel verifici și accesul la chei, nu doar existența unui fișier.
bash <<'BASH'
set -euo pipefail
umask 077
EXPECTED_SHA256='INLOCUIESTE_CU_HASHUL_DIN_EVIDENTA_PROTEJATA'
restore_dir=$(mktemp -d "${TMPDIR:-/tmp}/efactura-restore.XXXXXXXX")
rclone copyto efactura-crypt:2026/11/mesaj-123456.zip \
"$restore_dir/mesaj-123456.zip"
python3 - "$restore_dir/mesaj-123456.zip" "$EXPECTED_SHA256" <<'PYTHON'
import hashlib
import hmac
import pathlib
import re
import sys
import zipfile
p = pathlib.Path(sys.argv[1])
expected = sys.argv[2].lower()
if not re.fullmatch(r'[0-9a-f]{64}', expected):
raise SystemExit('Completeaza hashul SHA-256 de incredere')
actual = hashlib.sha256(p.read_bytes()).hexdigest()
if not hmac.compare_digest(actual, expected):
raise SystemExit('STOP: hashul nu corespunde')
with zipfile.ZipFile(p) as z:
if z.testzip() is not None:
raise SystemExit('STOP: arhiva contine date corupte')
print('Hash si integritate ZIP: OK')
print('Fisiere:', z.namelist())
print('Copie privata verificata:', p)
PYTHON
BASH
Înlocuiește valoarea EXPECTED_SHA256 cu hashul înregistrat la colectare, preluat dintr-o evidență protejată. Exemplul oprește execuția dacă descărcarea eșuează, hashul nu corespunde sau ZIP-ul este corupt; directorul unic, cu acces doar pentru utilizatorul curent, evită reutilizarea unei copii vechi. Păstrează copia restaurată doar cât este necesar și șterge directorul privat după utilizare. Verifică prezența XML-ului și a fișierului aferent sigiliului, apoi deschide o copie de lucru în instrumentele potrivite. Folosește validarea de semnătură/sigiliu conform instrumentelor și procedurii aprobate; verificarea ZIP din exemplu nu o înlocuiește. Nu extrage arhive necunoscute fără verificarea căilor fișierelor.
Înregistrează documentul ales, rezultatul, timpul necesar și orice dependență lipsă. O restaurare care cere parola unui fost angajat a găsit o problemă reală, chiar dacă toate fișierele sunt intacte. Exercițiul reușește când poți preda documentul corect persoanei autorizate, într-un interval acceptabil pentru firmă.
Întrebări frecvente
Este suficient PDF-ul trimis de furnizor?
Nu pentru obiectivul acestui backup. Păstrează pachetul original din RO e-Factura, cu XML și sigiliu. PDF-ul poate fi o copie de consultare, stocată separat.
Pierd documentele după 60 de zile?
ANAF descrie arhivarea și eliberarea la cerere după intervalul de descărcare, nu ștergerea lor. Dacă lipsește istoricul, urmează procedura oficială de solicitare; nu considera o listă curentă goală dovada inexistenței documentelor.
Un bucket criptat este o arhivă electronică acreditată?
Nu rezultă asta din folosirea S3 sau a criptării. Ghidul descrie o copie tehnică de siguranță. Încadrarea juridică, durata păstrării și eventualele cerințe de arhivare trebuie stabilite separat.
Unde țin cheia de decriptare?
Într-un manager de secrete sau alt mecanism controlat, cu o copie de recuperare separată de server și de contul bucketului. Testează recuperarea ei și documentează persoanele autorizate să o folosească.
Pentru infrastructura fluxului, poți consulta oferta de n8n administrat și stocarea S3 DanubeData. Alege întâi procedura de colectare și recuperare, apoi dimensionează serviciile în funcție de numărul documentelor și copiile necesare.
Surse oficiale și documentație
- ANAF: material informativ RO e-Factura, august 2024
- ANAF: Catalogul serviciilor 2025
- ANAF: ghidul RO e-Factura
- ANAF: înregistrarea aplicațiilor OAuth
- rclone crypt, copy și copyto