docs backend PRIVACY_NOTICE - AlexandreZanata/Abastevo GitHub Wiki
Backend privacy notice (DRAFT — P07-T05)
Status: engineering draft, not a declaration of legal compliance. Review lawful bases, contact details, processor contracts and international transfers with the responsible operator before any pilot. The LGPD text is the legal reference. Contact process and regulatory response deadlines are set by legal review before pilot, not by engineering.
Anonymous installation keys and photographs can still constitute personal data. This notice covers the backend MVP inventory only; account, email, billing, sync and analytics are not collected in MVP (P11 needs a separate inventory/basis/retention review).
Your rights
- Access: request an export of your ownership history; you receive a bounded archive within a 24 h download window.
- Deletion: request erasure; writes revoke immediately, links and payload purge scope by scope, and you keep an auditable receipt. Price facts stay for history with anonymized references (never as your data). Backed-up copies age out with the encrypted backup horizon (35 days max); notices explain this delay accurately.
- After your photo expires: the bytes are gone from storage (backups never held them — database backups carry keys and hashes only), while the price fact you supported stays as history with an anonymized reference and duplicate-detection hashes age out at 90 days. An expired photo is never advertised as still available for audit; reviewers see the retained fact with its confidence explanation instead.
- A powered-off device cannot run its cleanup job: on-device transient copies delete at the next launch/resume/read after the 24 h lifetime, and expiry is enforced server-side regardless, so offline devices never extend what anyone else can access.
- Losing your device key loses the anonymous identity: data cannot be disclosed from unverifiable claims. A support procedure may help with alternate evidence, without disclosing unrelated data.
Inventory: purpose, retention, access, deletion
| Data | Purpose | Retention | Access | Deletion |
|---|---|---|---|---|
| Contributor ID + public keys | Authentication, abuse control | Active lifetime, then rights-request processing | Restricted API/trust operators | Revoke keys, mark deleted, clear attribution token (erasure); no public browsing |
| Attribution token | Link owner rows without exposing identity | Same as contributor | Owning modules only | Cleared on erasure; facts unlink to opaque refs |
| Exact GPS/fix, OCR claims | Short-lived proximity derivation | Deleted after derivation, hard cap 24 h | Worker only | Immediate post-derivation delete (no long-lived store in v1) |
| Quarantine photo | Decoding/verification only | Deleted after sanitization, hard cap 24 h | Worker only | Retention sweeper (evidence-sweep-hourly) |
| Sanitized evidence | Private review | Every copy 24 h from first receipt (P15); reviews never extend it | Restricted moderation via 60 s audited download, denied at the deadline even before cleanup | Sweeper; erasure purges immediately |
| Verified/perceptual hashes, fraud signals | Duplicate detection | 90 days | Restricted trust role | Sweeper; erasure purges immediately |
| Observation facts (product/price/condition/provenance) | Product history | 24 months initially, then anonymization review | Public (source-separated, no identities) | Unlinked on erasure; timed purge needs FK-consistent cascade design (metrics visible, enforcement follows) |
| Confirmations/disputes | Independent support/reporting | Same as observations | Owner history private; aggregates public | Reporter refs unlinked per row on erasure |
| Trust verdicts | Reliability from reviewed outcomes | Current view rebuildable; decisions under review | Restricted operators | Current dropped, history unlinked on erasure |
| Moderation cases/actions | Accountability | 12 months initially | Restricted operators | Closed cases purge after 12 months with audit rows first |
| Upload sessions/intents | Quota, idempotency, verification | 24 h idle/stuck expiry | Owner status only | Sweeper; erasure expires immediately |
| Challenges/nonces | Proof of possession, replay defense | Until expiry (5 min) | Server only | Retention sweeper (privacy-retention-daily) |
| Idempotency windows | Safe mobile retries | 7 days | Server only | Retention sweeper |
| IP digests/quota windows | Abuse/cost bounding | ≤24 h rotating digest | Server only | Self-clean on check; provider edge retention configured consistently |
| Export archives | Rights access | 24 h download window | Owner only | Bytes purged on expiry/erasure; receipts stay |
| Deletion ledger | Restore-safe replay | Backup horizon (35 days) | Restricted operators | Aged out by retention; never payload |
| Operational logs | Diagnosis | 14 days trace data; 12-month aggregates without individual labels | Operators | Rotation (no sensitive bodies/tokens/URLs ever logged) |
| Encrypted backups | Disaster recovery | 7 daily + 4 weekly (35 days max) | Recovery credentials only | Expiry; transient tables excluded so short retention survives backup |
Enforcement
evidence-sweep-hourly: quarantine/final/orphan/hash lifecycle.privacy-retention-daily: challenges, idempotency, closed moderation cases, expired export bytes, aged-out ledger rows, plus per-category overdue metrics in the structured log.- Every sweep purges bounded oldest-first and reports purged counts with the oldest overdue instant; a stuck category fails its job loudly for retry instead of hiding backlog.
Target revision pending P13/P14/P15
This remains an unapproved draft. The media rows above now reflect the P15 forward rule (every copy 24 h, no 14/30-day exception); account/social rows still await their revision. Account and media/location contracts own the remaining changes. Revise the full inventory/table and verify enforcement before public G09/P10-T09 launch; this note is not a claim that current jobs meet the target.