export type FiscalProviderTransactionState =
| 'started'
| 'completed'
| 'cancelled'
| 'failed'
| 'status_unclear';
export interface FiscalProviderCapabilities {
supportsCloudTSE:boolean;
supportsHardwareTSE:boolean;
supportsOfflineBuffer:boolean;
supportsTransactionUpdate:boolean;
supportsCancel:boolean;
supportsReceiptQr:boolean;
supportsRecovery:boolean;
supportsWebhooks:boolean;
supportsPolling:boolean;
supportsMultiRegister:boolean;
supportsMultiLocation:boolean;
}
export interface FiscalProviderContext {
connectionId:string;
organizationId:string;
locationId:string;
environment:'sandbox'|'production';
credentialReference:string;
config:Record<string,unknown>;
providerDeviceId:string;
providerClientId:string;
}
export interface FiscalNormalizedResult {
providerTransactionId:string;
providerStatus:string;
state:FiscalProviderTransactionState;
revision?:number;
fiscalTransactionNumber?:number;
signatureCounter?:number;
startTime?:string;
endTime?:string;
signatureValue?:string;
signatureAlgorithm?:string;
signaturePublicKey?:string;
deviceSerial?:string;
clientSerial?:string;
qrPayload?:string;
safeReceiptData?:Record<string,unknown>;
}
export interface FiscalProvider {
readonly key:string;
readonly capabilities:FiscalProviderCapabilities;
startTransaction(ctx:FiscalProviderContext,input:{
providerTransactionId:string;
processType:string;
idempotencyKey:string;
}):Promise<FiscalNormalizedResult>;
updateTransaction?(ctx:FiscalProviderContext,input:{
providerTransactionId:string;
revision:number;
processType:string;
processData:Record<string,unknown>;
idempotencyKey:string;
}):Promise<FiscalNormalizedResult>;
finishTransaction(ctx:FiscalProviderContext,input:{
providerTransactionId:string;
revision:number;
processType:string;
processData:Record<string,unknown>;
idempotencyKey:string;
}):Promise<FiscalNormalizedResult>;
cancelTransaction?(ctx:FiscalProviderContext,input:{
providerTransactionId:string;
revision:number;
idempotencyKey:string;
}):Promise<FiscalNormalizedResult>;
getTransactionStatus(ctx:FiscalProviderContext,input:{
providerTransactionId:string;
}):Promise<FiscalNormalizedResult>;
healthCheck(ctx:FiscalProviderContext):Promise<{ok:boolean;status?:number;code?:string}>;
getDeviceStatus(ctx:FiscalProviderContext):Promise<{
status:'available'|'degraded'|'offline'|'locked'|'unknown';
providerDeviceSerial?:string;
providerClientSerial?:string;
safeMetadata?:Record<string,unknown>;
}>;
}
