+28
-25
@@ -58,6 +58,11 @@ function validUQC(code) {
|
||||
|
||||
// ── SQL builders ──────────────────────────────────────────────────────────
|
||||
|
||||
// Deemed Export (DE) sales ledgers — invoices posting to any of these GL
|
||||
// accounts are reported as B2B with invoice_type 'DE' and kept out of EXP.
|
||||
// Updated 05-10-2026: added 4110202005, 4110202007 (matches EXCL_EI in reports.js)
|
||||
const DE_LEDGERS = `'4110202001','4110202003','4110202005','4110202007'`;
|
||||
|
||||
function sqlB2B(from, to) {
|
||||
return `
|
||||
WITH TaxData AS (
|
||||
@@ -127,7 +132,7 @@ WITH TaxData AS (
|
||||
FROM TaxData GROUP BY DocEntry, TaxRate
|
||||
)
|
||||
SELECT
|
||||
CASE WHEN EXISTS (SELECT 1 FROM INV1 T_DE WHERE T_DE.DocEntry=T_ODOC.DocEntry AND T_DE.AcctCode IN ('4110202001','4110202003')) THEN 'DE'
|
||||
CASE WHEN EXISTS (SELECT 1 FROM INV1 T_DE WHERE T_DE.DocEntry=T_ODOC.DocEntry AND T_DE.AcctCode IN (${DE_LEDGERS})) THEN 'DE'
|
||||
WHEN T_DOC12.CountryB<>'IN' THEN 'EXP'
|
||||
WHEN T_ODOC.U_CustomerCategory='Indirect Export' THEN 'B2B'
|
||||
WHEN T_DOC12.BpGSTN IS NULL AND T_DOC12.CountryS='IN' THEN 'B2CS'
|
||||
@@ -154,7 +159,7 @@ LEFT JOIN OCST T_OCST_S ON T_OCST_S.Code=T_DOC12.StateS
|
||||
WHERE T_ODOC.CANCELED='N'
|
||||
AND T_ODOC.DocDate>='${from}' AND T_ODOC.DocDate<='${to}'
|
||||
AND (
|
||||
EXISTS (SELECT 1 FROM INV1 T_DE WHERE T_DE.DocEntry=T_ODOC.DocEntry AND T_DE.AcctCode IN ('4110202001','4110202003'))
|
||||
EXISTS (SELECT 1 FROM INV1 T_DE WHERE T_DE.DocEntry=T_ODOC.DocEntry AND T_DE.AcctCode IN (${DE_LEDGERS}))
|
||||
OR (
|
||||
T_DOC12.CountryB='IN'
|
||||
AND (T_DOC12.BpGSTN IS NOT NULL OR T_ODOC.U_CustomerCategory='Indirect Export')
|
||||
@@ -434,7 +439,7 @@ WHERE T_ODOC.CANCELED='N'
|
||||
AND T_ODOC.DocDate>='${from}' AND T_ODOC.DocDate<='${to}'
|
||||
AND T_DOC12.ImpORExp='Y' AND T_DOC12.CountryB<>'IN'
|
||||
AND T_DOC12.BpGSTN IS NULL AND T_OCST_S.GSTCode IS NULL
|
||||
AND NOT EXISTS (SELECT 1 FROM INV1 T_DE WHERE T_DE.DocEntry=T_ODOC.DocEntry AND T_DE.AcctCode IN ('4110202001','4110202003'))
|
||||
AND NOT EXISTS (SELECT 1 FROM INV1 T_DE WHERE T_DE.DocEntry=T_ODOC.DocEntry AND T_DE.AcctCode IN (${DE_LEDGERS}))
|
||||
ORDER BY ITS.DocEntry, ITS.TaxRate`;
|
||||
}
|
||||
|
||||
@@ -447,7 +452,9 @@ function sqlHsn(from, to) {
|
||||
SUM(CASE WHEN staType = '-120' THEN TaxSum ELSE 0 END) AS iamt,
|
||||
SUM(CASE WHEN staType = '-110' THEN TaxSum ELSE 0 END) AS camt,
|
||||
SUM(CASE WHEN staType = '-100' THEN TaxSum ELSE 0 END) AS samt,
|
||||
SUM(CASE WHEN staType = '10' THEN TaxSum ELSE 0 END) AS tcs
|
||||
SUM(CASE WHEN staType = '10' THEN TaxSum ELSE 0 END) AS tcs,
|
||||
-- line GST rate (IGST or CGST+SGST) — excludes TCS, unlike VatPrcnt
|
||||
SUM(CASE WHEN staType IN ('-120','-110','-100') THEN TaxRate ELSE 0 END) AS rt
|
||||
FROM INV4
|
||||
GROUP BY DocEntry, LineNum
|
||||
),
|
||||
@@ -459,7 +466,9 @@ RIN_TAX AS (
|
||||
SUM(CASE WHEN staType = '-120' THEN TaxSum ELSE 0 END) AS iamt,
|
||||
SUM(CASE WHEN staType = '-110' THEN TaxSum ELSE 0 END) AS camt,
|
||||
SUM(CASE WHEN staType = '-100' THEN TaxSum ELSE 0 END) AS samt,
|
||||
SUM(CASE WHEN staType = '10' THEN TaxSum ELSE 0 END) AS tcs
|
||||
SUM(CASE WHEN staType = '10' THEN TaxSum ELSE 0 END) AS tcs,
|
||||
-- line GST rate (IGST or CGST+SGST) — excludes TCS, unlike VatPrcnt
|
||||
SUM(CASE WHEN staType IN ('-120','-110','-100') THEN TaxRate ELSE 0 END) AS rt
|
||||
FROM RIN4
|
||||
GROUP BY DocEntry, LineNum
|
||||
),
|
||||
@@ -486,7 +495,8 @@ HSN_Lines AS (
|
||||
ISNULL(T.iamt, 0) AS iamt,
|
||||
ISNULL(T.camt, 0) AS camt,
|
||||
ISNULL(T.samt, 0) AS samt,
|
||||
ISNULL(T.tcs, 0) AS tcs
|
||||
ISNULL(T.tcs, 0) AS tcs,
|
||||
ISNULL(T.rt, 0) AS rt
|
||||
FROM OINV
|
||||
INNER JOIN INV1
|
||||
ON OINV.DocEntry = INV1.DocEntry
|
||||
@@ -525,7 +535,8 @@ HSN_Lines AS (
|
||||
-ISNULL(T.iamt, 0) AS iamt,
|
||||
-ISNULL(T.camt, 0) AS camt,
|
||||
-ISNULL(T.samt, 0) AS samt,
|
||||
-ISNULL(T.tcs, 0) AS tcs
|
||||
-ISNULL(T.tcs, 0) AS tcs,
|
||||
ISNULL(T.rt, 0) AS rt
|
||||
FROM ORIN
|
||||
INNER JOIN RIN1
|
||||
ON ORIN.DocEntry = RIN1.DocEntry
|
||||
@@ -557,18 +568,9 @@ HSN_Agg AS (
|
||||
SUM(camt) AS camt_n,
|
||||
SUM(samt) AS samt_n,
|
||||
SUM(tcs) AS tcs_n,
|
||||
CASE
|
||||
WHEN SUM(txval) = 0 THEN 0
|
||||
WHEN ROUND(
|
||||
(SUM(iamt) + SUM(camt) + SUM(samt)) * 100.0 / SUM(txval),
|
||||
0
|
||||
) IN (0, 5, 12, 18, 28)
|
||||
THEN ROUND(
|
||||
(SUM(iamt) + SUM(camt) + SUM(samt)) * 100.0 / SUM(txval),
|
||||
0
|
||||
)
|
||||
ELSE 0
|
||||
END AS rate_of_tax_n
|
||||
-- group by the line's own GST rate so 0% exports and 5%/18% supplies
|
||||
-- under the same HSN are separate rows (a blended rate is invalid)
|
||||
rt AS rate_of_tax_n
|
||||
FROM HSN_Lines
|
||||
GROUP BY
|
||||
fp,
|
||||
@@ -576,7 +578,8 @@ HSN_Agg AS (
|
||||
hsn_sc,
|
||||
gstr1Desc,
|
||||
section,
|
||||
uqc
|
||||
uqc,
|
||||
rt
|
||||
)
|
||||
|
||||
SELECT
|
||||
@@ -613,29 +616,29 @@ WITH DocStatus AS (
|
||||
CASE WHEN T0.CANCELED='Y' OR CM.BaseEntry IS NOT NULL THEN 1 ELSE 0 END AS IsCanceled
|
||||
FROM OINV T0
|
||||
LEFT JOIN (SELECT DISTINCT R1.BaseEntry FROM RIN1 R1 INNER JOIN ORIN R0 ON R0.DocEntry=R1.DocEntry WHERE R1.BaseType=13 AND R0.CANCELED='N') CM ON CM.BaseEntry=T0.DocEntry
|
||||
WHERE T0.DocDate>='${from}' AND T0.DocDate<'${to}'
|
||||
WHERE T0.DocDate>='${from}' AND T0.DocDate<='${to}'
|
||||
UNION ALL
|
||||
SELECT D0.DocEntry, D0.DocNum, D0.Series, D0.DocDate, 'Delivery',
|
||||
CASE WHEN D0.CANCELED='Y' THEN 1 ELSE 0 END
|
||||
FROM ODLN D0 INNER JOIN NNM1 N1 ON N1.Series=D0.Series
|
||||
WHERE N1.SeriesName LIKE '%FOC%' AND D0.DocDate>='${from}' AND D0.DocDate<'${to}'
|
||||
WHERE N1.SeriesName LIKE '%FOC%' AND D0.DocDate>='${from}' AND D0.DocDate<='${to}'
|
||||
UNION ALL
|
||||
SELECT W0.DocEntry, W0.DocNum, W0.Series, W0.DocDate,
|
||||
CASE WHEN N1.SeriesName LIKE '%JW%' THEN 'JW' WHEN N1.SeriesName LIKE '%IT%' AND N1.SeriesName NOT LIKE '%ITR%' THEN 'IT' END,
|
||||
CASE WHEN W0.CANCELED='Y' THEN 1 ELSE 0 END
|
||||
FROM OWTR W0 INNER JOIN NNM1 N1 ON N1.Series=W0.Series
|
||||
WHERE (N1.SeriesName LIKE '%JW%' OR (N1.SeriesName LIKE '%IT%' AND N1.SeriesName NOT LIKE '%ITR%'))
|
||||
AND W0.DocDate>='${from}' AND W0.DocDate<'${to}'
|
||||
AND W0.DocDate>='${from}' AND W0.DocDate<='${to}'
|
||||
UNION ALL
|
||||
SELECT P0.DocEntry, P0.DocNum, P0.Series, P0.DocDate, 'AP Invoice (RCM)',
|
||||
CASE WHEN P0.CANCELED='Y' THEN 1 ELSE 0 END
|
||||
FROM OPCH P0 INNER JOIN NNM1 N1 ON N1.Series=P0.Series
|
||||
WHERE N1.SeriesName LIKE '%rev%' AND P0.DocDate>='${from}' AND P0.DocDate<'${to}'
|
||||
WHERE N1.SeriesName LIKE '%rev%' AND P0.DocDate>='${from}' AND P0.DocDate<='${to}'
|
||||
UNION ALL
|
||||
SELECT R0.DocEntry, R0.DocNum, R0.Series, R0.DocDate, 'AR Credit Memo',
|
||||
CASE WHEN R0.CANCELED='Y' THEN 1 ELSE 0 END
|
||||
FROM ORIN R0 INNER JOIN NNM1 N1 ON N1.Series=R0.Series
|
||||
WHERE N1.SeriesName LIKE '%ARCN%' AND R0.DocDate>='${from}' AND R0.DocDate<'${to}'
|
||||
WHERE N1.SeriesName LIKE '%ARCN%' AND R0.DocDate>='${from}' AND R0.DocDate<='${to}'
|
||||
)
|
||||
SELECT CONVERT(char(6),DocDate,112) AS fp, Series, DocumentType,
|
||||
CASE WHEN DocumentType='AR Credit Memo' THEN CONCAT('CN-',MIN(DocNum))
|
||||
|
||||
Reference in New Issue
Block a user