feat: implement tax switch functionality with Nama adapter

- Add DTOs for tax switch operations including payloads and results.
- Create SalesInvoiceFiscalSwitchService to handle sending and retrieving tax data.
- Implement SalesInvoiceFiscalService for managing invoice tax submissions and results persistence.
- Develop NamaTaxSwitchAdapter for interfacing with the external tax service.
- Introduce NamaTaxRequestDto and related classes for structured tax requests.
This commit is contained in:
2026-04-30 16:27:46 +03:30
parent 58a7c359d8
commit a68a7f594d
38 changed files with 2678 additions and 287 deletions
@@ -0,0 +1,2 @@
-- AlterTable
ALTER TABLE `partners` ADD COLUMN `fiscal_switch_type` ENUM('NAMA', 'SUN') NOT NULL DEFAULT 'NAMA';
+6 -5
View File
@@ -15,11 +15,12 @@ model PartnerAccount {
}
model Partner {
id String @id @default(ulid())
name String
code String @unique()
status PartnerStatus @default(ACTIVE)
logo_url String?
id String @id @default(ulid())
name String
code String @unique()
status PartnerStatus @default(ACTIVE)
fiscal_switch_type PartnerFiscalSwitchType
logo_url String?
created_at DateTime @default(now()) @db.Timestamp(0)
updated_at DateTime @default(now()) @updatedAt @db.Timestamp(0)
+11
View File
@@ -155,3 +155,14 @@ enum ConsumerType {
INDIVIDUAL
LEGAL
}
enum PartnerFiscalSwitchType {
NAMA
SUN
}
enum FiscalResponseStatus {
SUCCESS
FAILURE
NOT_SEND
}
+20
View File
@@ -107,6 +107,26 @@ model SalesInvoicePayment {
invoice_id String
invoice SalesInvoice @relation(fields: [invoice_id], references: [id])
terminal_info SalesInvoicePaymentTerminalInfo?
@@index([invoice_id])
@@map("sales_invoice_payments")
}
model SalesInvoicePaymentTerminalInfo {
id String @id @default(ulid())
terminal_id String
stan String
rrn String
transaction_date_time DateTime
customer_card_no String?
description String?
created_at DateTime @default(now()) @db.Timestamp(0)
payment_id String @unique
payment SalesInvoicePayment @relation(fields: [payment_id], references: [id])
@@unique([terminal_id, stan, rrn, payment_id])
@@map("sales_invoice_payment_terminal_info")
}
+7 -1
View File
@@ -1,6 +1,11 @@
import { PasswordUtil } from '@/common/utils/password.util'
import { generateTrackingCode } from '@/common/utils/tracking-code-generator.util'
import { ConsumerType, GoodPricingModel, UnitType } from '@/generated/prisma/enums'
import {
ConsumerType,
GoodPricingModel,
PartnerFiscalSwitchType,
UnitType,
} from '@/generated/prisma/enums'
import { GoodCreateInput, GoodCreateManyInput } from '@/generated/prisma/models'
import { prisma } from '../src/lib/prisma'
@@ -250,6 +255,7 @@ async function main() {
name: 'تیس',
code: 'TIS',
status: 'ACTIVE',
fiscal_switch_type: PartnerFiscalSwitchType.NAMA,
accounts: {
create: {
role: 'OWNER',