@accounter/server
Version:
Accounter GraphQL server
95 lines • 5.17 kB
JavaScript
import { GraphQLError } from 'graphql';
import { generateReport } from '../../../../../shaam6111-generator/src/index.js';
import { AdminContextProvider } from '../../admin-context/providers/admin-context.provider.js';
import { ScopeProvider } from '../../auth/providers/scope.provider.js';
import { BusinessesProvider } from '../../financial-entities/providers/businesses.provider.js';
import { convertLocalReportDataToShaam6111ReportData, getShaam6111Data, } from '../helpers/shaam6111.helper.js';
export const shaam6111Resolvers = {
Query: {
shaam6111: async (_, { year, businessId: requestedBusinessId }, { injector }) => {
// Per-business report: a requested business must be within the read scope;
// default to the request's primary business otherwise.
let businessId;
if (requestedBusinessId) {
// Validates the id is within the read scope (throws otherwise).
await injector.get(ScopeProvider).getReadScope([requestedBusinessId]);
businessId = requestedBusinessId;
}
else {
const { ownerId } = await injector.get(AdminContextProvider).getVerifiedAdminContext();
businessId = ownerId;
}
const reportData = await getShaam6111Data(injector, businessId, year);
return {
businessId,
reportData,
};
},
},
Shaam6111Report: {
id: ({ reportData }) => {
return `shaam6111-${reportData.header.idNumber}-${reportData.header.taxYear}`;
},
business: ({ businessId }, _, context) => {
return context.injector
.get(BusinessesProvider)
.getBusinessByIdLoader.load(businessId)
.then(business => {
if (!business) {
throw new GraphQLError(`Report business not found (ID: ${businessId})`);
}
return business;
});
},
data: ({ reportData }) => reportData,
file: ({ reportData }) => {
const adjustedReportData = convertLocalReportDataToShaam6111ReportData(reportData);
const reportContent = generateReport(adjustedReportData, true);
return {
id: `shaam6111-${reportData.header.idNumber}-${reportData.header.taxYear}-file`,
reportContent,
diffContent: '', // TODO: implement diff content
fileName: `shaam6111-${reportData.header.idNumber}-${reportData.header.taxYear}-file`, // TODO: check if specific file name format is required
};
},
year: ({ reportData }) => parseInt(reportData.header.taxYear, 10),
},
Shaam6111Data: {
id: reportData => `shaam6111-${reportData.header.idNumber}-${reportData.header.taxYear}-file`,
header: reportData => {
return {
taxFileNumber: reportData.header.taxFileNumber,
taxYear: reportData.header.taxYear,
idNumber: reportData.header.idNumber,
vatFileNumber: reportData.header.vatFileNumber,
withholdingTaxFileNumber: reportData.header.withholdingTaxFileNumber,
industryCode: reportData.header.industryCode,
businessDescription: reportData.header.businessDescription,
businessType: reportData.header.businessType,
reportingMethod: reportData.header.reportingMethod,
accountingMethod: reportData.header.accountingMethod,
accountingSystem: reportData.header.accountingSystem,
isPartnership: reportData.header.isPartnership,
includesProfitLoss: reportData.header.includesProfitLoss,
includesTaxAdjustment: reportData.header.includesTaxAdjustment,
includesBalanceSheet: reportData.header.includesBalanceSheet,
profitLossEntryCount: reportData.profitAndLoss.length,
taxAdjustmentEntryCount: reportData.taxAdjustment.length,
balanceSheetEntryCount: reportData.balanceSheet?.length ?? 0,
ifrsImplementationYear: reportData.header.ifrsImplementationYear,
ifrsReportingOption: reportData.header.ifrsReportingOption,
softwareRegistrationNumber: reportData.header.softwareRegistrationNumber,
partnershipCount: reportData.header.partnershipCount,
partnershipProfitShare: reportData.header.partnershipProfitShare,
currencyType: reportData.header.currencyType,
auditOpinionType: reportData.header.auditOpinionType,
amountsInThousands: reportData.header.amountsInThousands,
};
},
profitAndLoss: reportData => reportData.profitAndLoss,
taxAdjustment: reportData => reportData.taxAdjustment,
balanceSheet: reportData => reportData.balanceSheet ?? null,
individualOrCompany: reportData => reportData.individualOrCompany ?? null,
},
};
//# sourceMappingURL=shaam6111.resolver.js.map