e-bon
e-bon.ro
SDK TypeScript

client.reports

Referință pentru ReportsResource — citiri live de pe dispozitiv (capabilități, telemetrie, memorie fiscală, jurnal electronic), tipăriri X/Z/periodice și exportul arhivei ANAF, oglindind /api/v1/devices/{deviceId}/reports.

client.reports

client.reports împachetează /api/v1/devices/{deviceId}/reports/* — fiecare metodă trimite o comandă către dispozitiv prin releu-ul cloud și returnează răspunsul dispozitivului. Nu există un model de rapoarte stocate; memoria fiscală și jurnalul electronic ale dispozitivului sunt sursa de adevăr. Vezi documentația REST corespunzătoare la API Rapoarte.

Dispozitivul trebuie să fie online; dispozitivele offline apar ca EBonApiError cu un cod de conectivitate 503. Citirile lente (readMf, readEj, printPeriodic, exportAnaf) folosesc timeout-uri extinse per-cerere, aliniate cu bugetele de comandă ale serverului.

Tipul de interval

type ReportRange =
  | { fromDate: string; toDate: string } // YYYY-MM-DD, inclusiv
  | { fromZ: number; toZ: number };      // numere Z, inclusiv

client.reports.getCapabilities(deviceId)

Ce operațiuni de raportare live suportă driverul dispozitivului.

async getCapabilities(deviceId: string): Promise<ReportCapabilitiesResponse>

Returnează { capabilities: FiscalReportingCapabilities, deviceId, timestamp }. Condiționează UI-ul pe aceste flag-uri.

const { capabilities } = await client.reports.getCapabilities('dev_01HZ...');
if (capabilities.canReadMfStructured) { /* afișează istoricul Z */ }

client.reports.getTelemetry(deviceId)

Telemetria contoarelor din memoria fiscală + jurnalul electronic.

async getTelemetry(deviceId: string): Promise<ReportTelemetryResponse>

Returnează { mfInfo: FiscalMfInfo, ejInfo: FiscalEjInfo, deviceId, timestamp }.

client.reports.readMf(deviceId, range)

Citește rândurile de închidere Z din memoria fiscală (istoric Z).

async readMf(deviceId: string, range: ReportRange): Promise<MfReadResponse>

Returnează { mf: FiscalMfReadResult, deviceId, timestamp } — câte o intrare { date, zNumber, grossTotalCents } pentru fiecare închidere Z din interval.

const { mf } = await client.reports.readMf('dev_01HZ...', {
  fromDate: '2026-06-01',
  toDate: '2026-06-30',
});

client.reports.readEj(deviceId, range)

Citește blocurile de text din jurnalul electronic.

async readEj(deviceId: string, range: ReportRange): Promise<EjReadResponse>

Returnează { ej: FiscalEjReadResult, deviceId, timestamp } — lines verbatim per bloc Z plus totalLines.

client.reports.printX(deviceId)

Produce un raport X (totaluri curente zilnice) pe dispozitiv.

async printX(deviceId: string): Promise<XZReportResponse>

Returnează { report: DeviceReportSummary | null, deviceId, timestamp }.

client.reports.runZ(deviceId)

Rulează o închidere Z (sfârșit de zi). Destructiv — resetează contoarele zilnice și avansează memoria fiscală.

async runZ(deviceId: string): Promise<XZReportResponse>

client.reports.printPeriodic(deviceId, range)

Tipărește un raport periodic din memoria fiscală pe hârtia dispozitivului.

async printPeriodic(deviceId: string, range: ReportRange): Promise<PrintPeriodicResponse>

Returnează { success: true, deviceId, timestamp }.

client.reports.exportAnaf(deviceId, request)

Exportă arhiva lunară ANAF (ZIP base64) de pe dispozitiv.

async exportAnaf(deviceId: string, request: AnafExportRequest): Promise<AnafExportResponse>

request este un ReportRange plus un storageTarget: 'ramdisk' | 'sdcard' opțional. Returnează { export: { filename, base64, sizeBytes }, deviceId, timestamp } — decodează base64 și salvează ca .zip.

const { export: archive } = await client.reports.exportAnaf('dev_01HZ...', {
  fromDate: '2026-06-01',
  toDate: '2026-06-30',
});
await fs.writeFile(archive.filename, Buffer.from(archive.base64, 'base64'));

Eșecurile la nivel HTTP apar ca EBonApiError — vezi Erori și /ro/api/errors.