import { Injectable } from '@nestjs/common';
import type { FiscalProvider,FiscalProviderCapabilities } from './fiscal-provider';
@Injectable()
export class MockFiscalProvider implements FiscalProvider {
readonly key='mock-fiscal';
readonly capabilities:FiscalProviderCapabilities={
supportsCloudTSE:true,supportsHardwareTSE:false,supportsOfflineBuffer:false,
supportsTransactionUpdate:true,supportsCancel:true,supportsReceiptQr:true,
supportsRecovery:true,supportsWebhooks:false,supportsPolling:true,
supportsMultiRegister:true,supportsMultiLocation:true,
};
async startTransaction(_ctx:any,input:any) {
return {
providerTransactionId:input.providerTransactionId,
providerStatus:'ACTIVE',state:'started' as const,revision:1,
startTime:new Date().toISOString(),
};
}
async updateTransaction(_ctx:any,input:any) {
return {
providerTransactionId:input.providerTransactionId,
providerStatus:'ACTIVE',state:'started' as const,revision:input.revision,
};
}
async finishTransaction(ctx:any,input:any) {
return {
providerTransactionId:input.providerTransactionId,
providerStatus:'FINISHED',state:'completed' as const,revision:input.revision,
fiscalTransactionNumber:1,signatureCounter:1,
startTime:new Date(Date.now()-1000).toISOString(),endTime:new Date().toISOString(),
signatureValue:'mock-signature',signatureAlgorithm:'ecdsa-plain-SHA384',
signaturePublicKey:'mock-public-key',
deviceSerial:ctx.providerDeviceId,clientSerial:ctx.providerClientId,
qrPayload:'V0;KassenSichV;mock',
};
}
async cancelTransaction(_ctx:any,input:any) {
return {
providerTransactionId:input.providerTransactionId,
providerStatus:'CANCELLED',state:'cancelled' as const,revision:input.revision,
};
}
async getTransactionStatus(_ctx:any,input:any) {
return {
providerTransactionId:input.providerTransactionId,
providerStatus:'ACTIVE',state:'started' as const,revision:1,
};
}
async healthCheck(){return {ok:true,status:200};}
async getDeviceStatus(ctx:any){return {
status:'available' as const,providerDeviceSerial:ctx.providerDeviceId,
providerClientSerial:ctx.providerClientId,
};}
}
