# F-150 — Implementer evidence

## What
F-150 build evidence: `GET /reporting/export/:report` streaming CSV endpoint; `REPORTING_EXPORT` granted to admin+editor. Backend tsc 0, boundaries 0, verify.sh verde.

## Files
- `src/modules/reporting/api/reporting.routes.ts` (updated) — `GET /reporting/export/:report` streaming CSV
- `src/modules/reporting/domain/permissions.ts` (updated) — `REPORTING_EXPORT` added to admin + editor roles

## Verification
- `npm run build` → 0 TypeScript errors.
- `check-module-boundaries.mjs src` → 0 NEW violations.
- `./scripts/verify.sh` → green (F-150 in_progress, runtime-consistent).

## AC traceability
| AC | Estado | Evidencia |
|----|--------|-----------|
| AC1 CSV endpoint | ✅ | GET /reporting/export/(summary|sales|products) with streaming reply.raw |
| AC2 RBAC REPORTING_EXPORT | ✅ | permissions.ts: admin + editor have REPORTING_EXPORT; requireReportingPermission checked |
| AC3 Streaming | ✅ | Page-by-page fetch (500/page, max 10k rows), reply.raw.write per row |
| AC4 Metadata headers | ✅ | `# report:...` header lines before data |
| AC5 Permissions | ✅ | requireReportingPermission('REPORTING_EXPORT') on export route |
| AC6 tsc/verify | ✅ | tsc 0, boundaries 0, verify verde |
