Corectii SQL

This commit is contained in:
2026-02-17 13:10:37 +02:00
parent 99219f6d4d
commit c9b43c4e6e

View File

@@ -750,30 +750,26 @@ ORDER BY sold_curent DESC
# =============================================================================
# FIX: Filter by last closed calendar period to avoid duplicate invoices
AGING_CREANTE = """
WITH ultima_luna AS (
SELECT EXTRACT(YEAR FROM (:data_referinta - 1)) AS anul,
EXTRACT(MONTH FROM (:data_referinta - 1)) AS luna
FROM dual
),
WITH
solduri_clienti AS (
SELECT
r.id_part,
r.nume AS client,
r.serie_act || ' ' || r.nract AS nr_factura,
r.dataact AS data_factura,
r.datascad,
nvl(r.datascad, r.dataact+30) as datascad,
(r.precdeb + r.debit) AS valoare_factura,
(r.preccred + r.credit) AS valoare_achitata,
(r.precdeb + r.debit) - (r.preccred + r.credit) AS sold_ramas,
CASE
WHEN r.datascad IS NULL THEN 0
WHEN r.datascad >= :data_referinta THEN 0
ELSE ROUND((:data_referinta - 1) - r.datascad)
WHEN nvl(r.datascad, r.dataact+30) >= :data_referinta THEN 0
ELSE ROUND((:data_referinta - 1) - nvl(r.datascad, r.dataact+30))
END AS zile_restante
FROM vireg_parteneri r, ultima_luna ul
WHERE (r.cont LIKE '4111%' OR r.cont LIKE '461%')
FROM vireg_parteneri r
WHERE r.an = EXTRACT(YEAR FROM (:data_referinta - 1))
AND r.luna = EXTRACT(MONTH FROM (:data_referinta - 1))
AND (r.cont LIKE '4111%' OR r.cont LIKE '461%')
AND (r.precdeb + r.debit) - (r.preccred + r.credit) <> 0
AND r.an = ul.anul AND r.luna = ul.luna
)
SELECT
client,
@@ -794,24 +790,20 @@ ORDER BY total_sold DESC
# =============================================================================
# FIX: Filter by last closed calendar period to avoid duplicate invoices
FACTURI_RESTANTE = """
WITH ultima_luna AS (
SELECT EXTRACT(YEAR FROM (:data_referinta - 1)) AS anul,
EXTRACT(MONTH FROM (:data_referinta - 1)) AS luna
FROM dual
)
SELECT
r.nume AS client,
r.serie_act || ' ' || r.nract AS nr_factura,
r.dataact AS data_factura,
r.datascad AS data_scadenta,
ROUND((:data_referinta - 1) - r.datascad) AS zile_intarziere,
nvl(r.datascad, r.dataact+30) AS datascad,
ROUND((:data_referinta - 1) - nvl(r.datascad, r.dataact+30)) AS zile_intarziere,
ROUND((r.precdeb + r.debit) - (r.preccred + r.credit), 2) AS suma_restanta
FROM vireg_parteneri r, ultima_luna ul
WHERE (r.cont LIKE '4111%' OR r.cont LIKE '461%')
FROM vireg_parteneri r
WHERE r.an = EXTRACT(YEAR FROM (:data_referinta - 1))
AND r.luna = EXTRACT(MONTH FROM (:data_referinta - 1))
AND (r.cont LIKE '4111%' OR r.cont LIKE '461%')
AND (r.precdeb + r.debit) - (r.preccred + r.credit) <> 0
AND r.datascad IS NOT NULL
AND r.datascad < :data_referinta
AND r.an = ul.anul AND r.luna = ul.luna
ORDER BY zile_intarziere DESC
FETCH FIRST 100 ROWS ONLY
"""
@@ -822,30 +814,25 @@ FETCH FIRST 100 ROWS ONLY
# =============================================================================
# FIX: Filter by last closed calendar period to avoid duplicate invoices
AGING_DATORII = """
WITH ultima_luna AS (
SELECT EXTRACT(YEAR FROM (:data_referinta - 1)) AS anul,
EXTRACT(MONTH FROM (:data_referinta - 1)) AS luna
FROM dual
),
solduri_furnizori AS (
WITH solduri_furnizori AS (
SELECT
r.id_part,
r.nume AS furnizor,
r.serie_act || ' ' || r.nract AS nr_factura,
r.dataact AS data_factura,
r.datascad,
nvl(r.datascad, r.dataact+30) as datascad,
(r.preccred + r.credit) AS valoare_factura,
(r.precdeb + r.debit) AS valoare_achitata,
(r.preccred + r.credit) - (r.precdeb + r.debit) AS sold_ramas,
CASE
WHEN r.datascad IS NULL THEN 0
WHEN r.datascad >= :data_referinta THEN 0
ELSE ROUND((:data_referinta - 1) - r.datascad)
WHEN nvl(r.datascad, r.dataact+30) >= :data_referinta THEN 0
ELSE ROUND((:data_referinta - 1) - nvl(r.datascad, r.dataact+30))
END AS zile_restante
FROM vireg_parteneri r, ultima_luna ul
WHERE (r.cont LIKE '401%' OR r.cont LIKE '404%' OR r.cont LIKE '462%')
FROM vireg_parteneri r
WHERE r.an = EXTRACT(YEAR FROM (:data_referinta - 1))
AND r.luna = EXTRACT(MONTH FROM (:data_referinta - 1))
AND (r.cont LIKE '401%' OR r.cont LIKE '404%' OR r.cont LIKE '462%')
AND (r.preccred + r.credit) - (r.precdeb + r.debit) <> 0
AND r.an = ul.anul AND r.luna = ul.luna
)
SELECT
furnizor,
@@ -866,24 +853,20 @@ ORDER BY total_sold DESC
# =============================================================================
# FIX: Filter by last closed calendar period to avoid duplicate invoices
FACTURI_RESTANTE_FURNIZORI = """
WITH ultima_luna AS (
SELECT EXTRACT(YEAR FROM (:data_referinta - 1)) AS anul,
EXTRACT(MONTH FROM (:data_referinta - 1)) AS luna
FROM dual
)
SELECT
r.nume AS furnizor,
r.serie_act || ' ' || r.nract AS nr_factura,
r.dataact AS data_factura,
r.datascad AS data_scadenta,
ROUND((:data_referinta - 1) - r.datascad) AS zile_intarziere,
nvl(r.datascad, r.dataact+30) AS data_scadenta,
ROUND((:data_referinta - 1) - nvl(r.datascad, r.dataact+30)) AS zile_intarziere,
ROUND((r.preccred + r.credit) - (r.precdeb + r.debit), 2) AS suma_restanta
FROM vireg_parteneri r, ultima_luna ul
WHERE (r.cont LIKE '401%' OR r.cont LIKE '404%' OR r.cont LIKE '462%')
FROM vireg_parteneri r
WHERE r.an = EXTRACT(YEAR FROM (:data_referinta - 1))
AND r.luna = EXTRACT(MONTH FROM (:data_referinta - 1))
AND (r.cont LIKE '401%' OR r.cont LIKE '404%' OR r.cont LIKE '462%')
AND (r.preccred + r.credit) - (r.precdeb + r.debit) <> 0
AND r.datascad IS NOT NULL
AND r.datascad < :data_referinta
AND r.an = ul.anul AND r.luna = ul.luna
ORDER BY zile_intarziere DESC
FETCH FIRST 100 ROWS ONLY
"""
@@ -917,8 +900,8 @@ WITH vanzari_12_luni AS (
sold_clienti AS (
-- Sold creanțe clienți (cont 4111)
SELECT SUM(CASE WHEN b.solddeb > b.soldcred THEN b.solddeb - b.soldcred ELSE 0 END) AS total_creante
FROM vbalanta_parteneri b
WHERE b.cont LIKE '4111%'
FROM vbal b
WHERE (b.cont LIKE '4111%' OR b.cont LIKE '461%')
AND b.an = EXTRACT(YEAR FROM (:data_referinta - 1))
AND b.luna = EXTRACT(MONTH FROM (:data_referinta - 1))
),
@@ -954,8 +937,8 @@ achizitii_12_luni AS (
sold_furnizori AS (
-- Sold datorii furnizori (cont 401)
SELECT SUM(CASE WHEN b.soldcred > b.solddeb THEN b.soldcred - b.solddeb ELSE 0 END) AS total_datorii
FROM vbalanta_parteneri b
WHERE b.cont LIKE '401%'
FROM vbal b
WHERE (b.cont LIKE '401%' OR b.cont LIKE '404%' OR b.cont LIKE '462%')
AND b.an = EXTRACT(YEAR FROM (:data_referinta - 1))
AND b.luna = EXTRACT(MONTH FROM (:data_referinta - 1))
)
@@ -1033,8 +1016,8 @@ WITH metrici AS (
AND f.data_act < :data_referinta) AS cogs_12_luni,
-- Creanțe clienți
(SELECT SUM(CASE WHEN b.solddeb > b.soldcred THEN b.solddeb - b.soldcred ELSE 0 END)
FROM vbalanta_parteneri b
WHERE b.cont LIKE '4111%'
FROM vbal b
WHERE (b.cont LIKE '4111%' OR b.cont LIKE '461%')
AND b.an = EXTRACT(YEAR FROM (:data_referinta - 1))
AND b.luna = EXTRACT(MONTH FROM (:data_referinta - 1))) AS creante,
-- Vânzări 12 luni din jurnal TVA vânzări (vjv2025)
@@ -1057,8 +1040,8 @@ WITH metrici AS (
AND EXTRACT(MONTH FROM dataireg) = luna) AS vanzari_12_luni,
-- Datorii furnizori
(SELECT SUM(CASE WHEN b.soldcred > b.solddeb THEN b.soldcred - b.solddeb ELSE 0 END)
FROM vbalanta_parteneri b
WHERE b.cont LIKE '401%'
FROM vbal b
WHERE (b.cont LIKE '401%' or b.cont LIKE '404%' OR b.cont LIKE '462%')
AND b.an = EXTRACT(YEAR FROM (:data_referinta - 1))
AND b.luna = EXTRACT(MONTH FROM (:data_referinta - 1))) AS datorii_furnizori,
-- Achiziții 12 luni din jurnal TVA cumpărări (vjc2025)
@@ -1129,9 +1112,10 @@ INDICATORI_AGREGATI_VENITURI = """
WITH vanzari_detaliate AS (
SELECT /*+ LEADING(f d) USE_NL(d) INDEX(f IDX_VANZARI_NR) */
CASE
WHEN d.cont IN ('341', '345') THEN 'Productie proprie'
WHEN d.cont = '301' THEN 'Materii prime'
ELSE 'Marfa revanduta'
WHEN d.cont IN ('341', '345') THEN 'Productie'
WHEN d.cont = '371' THEN 'Marfa'
WHEN d.cont is null THEN 'Servicii/Transport/Discount'
ELSE 'Materii prime'
END AS linie_business,
d.cantitate * ((CASE WHEN d.pret_cu_tva = 1 THEN round((ROUND(NVL(c.curs, 1) * ROUND(NVL(d.pret, 0), 4) / NVL(c.multiplicator, 1), 4)) / d.proc_tvav, 4) ELSE (ROUND(NVL(c.curs, 1) * ROUND(NVL(d.pret, 0), 4) / NVL(c.multiplicator, 1), 4)) END) - ROUND(NVL(c.curs, 1) * NVL(d.discount_unitar, 4) / NVL(c.multiplicator, 1), 4)) AS vanzare,
d.cantitate * (((CASE WHEN d.pret_cu_tva = 1 THEN round((ROUND(NVL(c.curs, 1) * ROUND(NVL(d.pret, 0), 4) / NVL(c.multiplicator, 1), 4)) / d.proc_tvav, 4) ELSE (ROUND(NVL(c.curs, 1) * ROUND(NVL(d.pret, 0), 4) / NVL(c.multiplicator, 1), 4)) END) - ROUND(NVL(c.curs, 1) * NVL(d.discount_unitar, 4) / NVL(c.multiplicator, 1), 4)) - d.pret_achizitie) AS marja
@@ -1530,31 +1514,68 @@ WITH
capitaluri AS (
SELECT SUM(b.soldcred - b.solddeb) AS capital_propriu
FROM vbal b
WHERE (b.cont LIKE '101%' OR b.cont LIKE '104%' OR b.cont LIKE '105%'
OR b.cont LIKE '106%' OR b.cont LIKE '117%' OR b.cont LIKE '121%')
WHERE (
cont LIKE '10%' -- capital social
OR cont LIKE '11%' -- prime
OR cont LIKE '12%' -- rezerve
OR cont LIKE '13%' -- rezultat reportat
OR cont LIKE '14%' -- subventii capital
)
AND b.an = EXTRACT(YEAR FROM (:data_referinta - 1))
AND b.luna = EXTRACT(MONTH FROM (:data_referinta - 1))
),
AND b.luna = EXTRACT(MONTH FROM (:data_referinta - 1))),
-- Datorii totale (16x, 40x, 42x, 44x, 46x)
datorii AS (
SELECT SUM(b.soldcred - b.solddeb) AS datorii_totale
FROM vbal b
WHERE (b.cont LIKE '16%' OR b.cont LIKE '40%' OR b.cont LIKE '42%'
OR b.cont LIKE '44%' OR b.cont LIKE '46%')
WHERE (
-- IMPRUMUTURI
cont LIKE '16%'
-- FURNIZORI SI ASIMILATE
OR cont IN ('401','403','404','405','408','419')
-- DATORII PERSONAL
OR cont IN ('421','423','424','426','427','4281')
-- DATORII BUGET
OR cont LIKE '43%'
OR cont IN ('4423','444','446','447')
-- DATORII GRUP / DIVERSE
OR cont IN ('451','453','455','456')
OR cont IN ('462','466','467','473')
-- VENITURI IN AVANS
OR cont = '472')
AND b.an = EXTRACT(YEAR FROM (:data_referinta - 1))
AND b.luna = EXTRACT(MONTH FROM (:data_referinta - 1))
),
AND b.luna = EXTRACT(MONTH FROM (:data_referinta - 1))),
-- Total activ (sold debitor toate conturile de activ)
activ AS (
SELECT SUM(b.solddeb - b.soldcred) AS total_activ
FROM vbal b
WHERE (b.cont LIKE '1%' OR b.cont LIKE '2%' OR b.cont LIKE '3%'
OR b.cont LIKE '4%' OR b.cont LIKE '5%')
AND b.cont NOT LIKE '16%' AND b.cont NOT LIKE '40%' AND b.cont NOT LIKE '42%'
AND b.cont NOT LIKE '44%' AND b.cont NOT LIKE '46%' AND b.cont NOT LIKE '47%'
WHERE (
-- IMOBILIZARI
cont LIKE '2%'
-- STOCURI
OR cont LIKE '3%'
-- CREANTE COMERCIALE SI DIVERSE (NUMAI ACTIV)
OR cont IN (
'409', -- furnizori debitori
'411','413','418', -- clienti
'425', -- avansuri personal
'4282', -- alte creante personal
'431','437','438', -- creante contributii
'441','4424', -- TVA de recuperat
'445','448', -- subventii/alte creante
'451','453', -- grup (creante)
'461' -- debitori diversi
)
-- TREZORERIE
OR cont LIKE '50%'
OR cont LIKE '51%'
OR cont LIKE '53%'
OR cont LIKE '54%'
OR cont LIKE '58%'
-- CHELTUIELI IN AVANS
OR cont = '471')
AND b.an = EXTRACT(YEAR FROM (:data_referinta - 1))
AND b.luna = EXTRACT(MONTH FROM (:data_referinta - 1))
),
AND b.luna = EXTRACT(MONTH FROM (:data_referinta - 1))),
-- Vanzari si profit din ultimele 12 luni
vanzari_calc AS (
SELECT /*+ LEADING(f d) USE_NL(d) INDEX(f IDX_VANZARI_NR) */
@@ -1594,7 +1615,7 @@ SELECT
WHEN NVL(cp.capital_propriu, 0) / NULLIF(ac.total_activ, 0) < 0.5 THEN 'ATENTIE'
ELSE 'OK'
END AS status,
'Capital Propriu / Total Active (cont 10x,11x,12x,117 / Active clasa 1-5)' AS formula,
'Capital Propriu / Total Active (cont 10x,11x,12x,117 / Active clasa 2-5)' AS formula,
'> 0.5 = bine, < 0.3 = risc' AS interpretare,
CASE
WHEN NVL(cp.capital_propriu, 0) / NULLIF(ac.total_activ, 0) < 0.3 THEN 'Dependenta prea mare de creditori'
@@ -1611,7 +1632,7 @@ SELECT
WHEN NVL(dt.datorii_totale, 0) / NULLIF(ac.total_activ, 0) > 0.5 THEN 'ATENTIE'
ELSE 'OK'
END AS status,
'Datorii / Total Active (cont 16x,40x,42x,44x,46x / Active clasa 1-5)' AS formula,
'Datorii / Total Active (cont 16x,40x,42x,44x,46x / Active clasa 2-5)' AS formula,
'< 0.5 = bine, > 0.7 = risc' AS interpretare,
CASE
WHEN NVL(dt.datorii_totale, 0) / NULLIF(ac.total_activ, 0) > 0.7 THEN 'Risc de insolventa - reduceti datoriile'
@@ -1785,14 +1806,16 @@ WITH datorii_scadenta AS (
r.datascad,
(r.preccred + r.credit) - (r.precdeb + r.debit) AS sold_ramas,
CASE
WHEN r.datascad IS NULL THEN 'TERMEN_NEDEFINIT'
WHEN r.datascad <= (:data_referinta - 1) + 30 THEN 'TERMEN_SCURT'
WHEN r.datascad <= (:data_referinta - 1) + 90 THEN 'TERMEN_MEDIU'
WHEN nvl(r.datascad, r.dataact+30) <= (:data_referinta - 1) + 30 THEN 'TERMEN_SCURT'
WHEN nvl(r.datascad, r.dataact+30) <= (:data_referinta - 1) + 90 THEN 'TERMEN_MEDIU'
ELSE 'TERMEN_LUNG'
END AS clasificare
FROM vireg_parteneri r
WHERE (r.cont LIKE '401%' OR r.cont LIKE '404%' OR r.cont LIKE '462%')
WHERE r.an = EXTRACT(YEAR FROM (:data_referinta - 1))
AND r.luna = EXTRACT(MONTH FROM (:data_referinta - 1))
AND (r.cont LIKE '401%' OR r.cont LIKE '404%' OR r.cont LIKE '462%')
AND (r.preccred + r.credit) - (r.precdeb + r.debit) <> 0
)
SELECT
'Datorii termen scurt (<= 30 zile)' AS categorie,
@@ -1844,21 +1867,25 @@ cash_curent AS (
),
incasari_asteptate AS (
SELECT
ROUND(SUM(CASE WHEN r.datascad <= (:data_referinta - 1) + 30 THEN (r.precdeb + r.debit) - (r.preccred + r.credit) ELSE 0 END), 0) AS incasari_30,
ROUND(SUM(CASE WHEN r.datascad <= (:data_referinta - 1) + 60 THEN (r.precdeb + r.debit) - (r.preccred + r.credit) ELSE 0 END), 0) AS incasari_60,
ROUND(SUM(CASE WHEN r.datascad <= (:data_referinta - 1) + 90 THEN (r.precdeb + r.debit) - (r.preccred + r.credit) ELSE 0 END), 0) AS incasari_90
ROUND(SUM(CASE WHEN nvl(r.datascad, r.dataact+30) <= (:data_referinta - 1) + 30 THEN (r.precdeb + r.debit) - (r.preccred + r.credit) ELSE 0 END), 0) AS incasari_30,
ROUND(SUM(CASE WHEN nvl(r.datascad, r.dataact+30) <= (:data_referinta - 1) + 60 THEN (r.precdeb + r.debit) - (r.preccred + r.credit) ELSE 0 END), 0) AS incasari_60,
ROUND(SUM(CASE WHEN nvl(r.datascad, r.dataact+30) <= (:data_referinta - 1) + 90 THEN (r.precdeb + r.debit) - (r.preccred + r.credit) ELSE 0 END), 0) AS incasari_90
FROM vireg_parteneri r
WHERE (r.cont LIKE '4111%' OR r.cont LIKE '461%')
AND (r.precdeb + r.debit) - (r.preccred + r.credit) <> 0
AND r.an = EXTRACT(YEAR FROM (:data_referinta - 1))
AND r.luna = EXTRACT(MONTH FROM (:data_referinta - 1))
),
plati_scadente AS (
SELECT
ROUND(SUM(CASE WHEN r.datascad <= (:data_referinta - 1) + 30 THEN (r.preccred + r.credit) - (r.precdeb + r.debit) ELSE 0 END), 0) AS plati_30,
ROUND(SUM(CASE WHEN r.datascad <= (:data_referinta - 1) + 60 THEN (r.preccred + r.credit) - (r.precdeb + r.debit) ELSE 0 END), 0) AS plati_60,
ROUND(SUM(CASE WHEN r.datascad <= (:data_referinta - 1) + 90 THEN (r.preccred + r.credit) - (r.precdeb + r.debit) ELSE 0 END), 0) AS plati_90
ROUND(SUM(CASE WHEN nvl(r.datascad, r.dataact+30) <= (:data_referinta - 1) + 30 THEN (r.preccred + r.credit) - (r.precdeb + r.debit) ELSE 0 END), 0) AS plati_30,
ROUND(SUM(CASE WHEN nvl(r.datascad, r.dataact+30) <= (:data_referinta - 1) + 60 THEN (r.preccred + r.credit) - (r.precdeb + r.debit) ELSE 0 END), 0) AS plati_60,
ROUND(SUM(CASE WHEN nvl(r.datascad, r.dataact+30) <= (:data_referinta - 1) + 90 THEN (r.preccred + r.credit) - (r.precdeb + r.debit) ELSE 0 END), 0) AS plati_90
FROM vireg_parteneri r
WHERE (r.cont LIKE '401%' OR r.cont LIKE '404%' OR r.cont LIKE '462%')
AND (r.preccred + r.credit) - (r.precdeb + r.debit) <> 0
AND r.an = EXTRACT(YEAR FROM (:data_referinta - 1))
AND r.luna = EXTRACT(MONTH FROM (:data_referinta - 1))
)
SELECT
'Cash disponibil' AS indicator,
@@ -1924,21 +1951,25 @@ cash_curent AS (
),
incasari_programate AS (
SELECT
SUM(CASE WHEN r.datascad <= (:data_referinta - 1) + 30 THEN (r.precdeb + r.debit) - (r.preccred + r.credit) ELSE 0 END) AS incasari_30,
SUM(CASE WHEN r.datascad > (:data_referinta - 1) + 30 AND r.datascad <= (:data_referinta - 1) + 60 THEN (r.precdeb + r.debit) - (r.preccred + r.credit) ELSE 0 END) AS incasari_31_60,
SUM(CASE WHEN r.datascad > (:data_referinta - 1) + 60 AND r.datascad <= (:data_referinta - 1) + 90 THEN (r.precdeb + r.debit) - (r.preccred + r.credit) ELSE 0 END) AS incasari_61_90
SUM(CASE WHEN nvl(r.datascad, r.dataact+30) <= (:data_referinta - 1) + 30 THEN (r.precdeb + r.debit) - (r.preccred + r.credit) ELSE 0 END) AS incasari_30,
SUM(CASE WHEN nvl(r.datascad, r.dataact+30) > (:data_referinta - 1) + 30 AND nvl(r.datascad, r.dataact+30) <= (:data_referinta - 1) + 60 THEN (r.precdeb + r.debit) - (r.preccred + r.credit) ELSE 0 END) AS incasari_31_60,
SUM(CASE WHEN nvl(r.datascad, r.dataact+30) > (:data_referinta - 1) + 60 AND nvl(r.datascad, r.dataact+30) <= (:data_referinta - 1) + 90 THEN (r.precdeb + r.debit) - (r.preccred + r.credit) ELSE 0 END) AS incasari_61_90
FROM vireg_parteneri r
WHERE (r.cont LIKE '4111%' OR r.cont LIKE '461%')
AND (r.precdeb + r.debit) - (r.preccred + r.credit) <> 0
AND r.an = EXTRACT(YEAR FROM (:data_referinta - 1))
AND r.luna = EXTRACT(MONTH FROM (:data_referinta - 1))
),
plati_programate AS (
SELECT
SUM(CASE WHEN r.datascad <= (:data_referinta - 1) + 30 THEN (r.preccred + r.credit) - (r.precdeb + r.debit) ELSE 0 END) AS plati_30,
SUM(CASE WHEN r.datascad > (:data_referinta - 1) + 30 AND r.datascad <= (:data_referinta - 1) + 60 THEN (r.preccred + r.credit) - (r.precdeb + r.debit) ELSE 0 END) AS plati_31_60,
SUM(CASE WHEN r.datascad > (:data_referinta - 1) + 60 AND r.datascad <= (:data_referinta - 1) + 90 THEN (r.preccred + r.credit) - (r.precdeb + r.debit) ELSE 0 END) AS plati_61_90
SUM(CASE WHEN nvl(r.datascad, r.dataact+30) <= (:data_referinta - 1) + 30 THEN (r.preccred + r.credit) - (r.precdeb + r.debit) ELSE 0 END) AS plati_30,
SUM(CASE WHEN nvl(r.datascad, r.dataact+30) > (:data_referinta - 1) + 30 AND nvl(r.datascad, r.dataact+30) <= (:data_referinta - 1) + 60 THEN (r.preccred + r.credit) - (r.precdeb + r.debit) ELSE 0 END) AS plati_31_60,
SUM(CASE WHEN nvl(r.datascad, r.dataact+30) > (:data_referinta - 1) + 60 AND nvl(r.datascad, r.dataact+30) <= (:data_referinta - 1) + 90 THEN (r.preccred + r.credit) - (r.precdeb + r.debit) ELSE 0 END) AS plati_61_90
FROM vireg_parteneri r
WHERE (r.cont LIKE '401%' OR r.cont LIKE '404%' OR r.cont LIKE '462%')
AND (r.preccred + r.credit) - (r.precdeb + r.debit) <> 0
AND r.an = EXTRACT(YEAR FROM (:data_referinta - 1))
AND r.luna = EXTRACT(MONTH FROM (:data_referinta - 1))
)
SELECT
'Sold initial (azi)' AS perioada,
@@ -2330,11 +2361,12 @@ FROM combined
# OPTIMIZED: Single 24-month scan with CASE-based period partitioning, no FULL OUTER JOIN needed
INDICATORI_AGREGATI_VENITURI_YOY = """
WITH base_data AS (
SELECT
SELECT /*+ LEADING(f d) USE_NL(d) INDEX(f IDX_VANZARI_NR) */
CASE
WHEN d.cont IN ('341', '345') THEN 'Productie proprie'
WHEN d.cont = '301' THEN 'Materii prime'
ELSE 'Marfa revanduta'
WHEN d.cont IN ('341', '345') THEN 'Productie'
WHEN d.cont = '371' THEN 'Marfa'
WHEN d.cont is null THEN 'Servicii/Transport/Discount'
ELSE 'Materii prime'
END AS linie_business,
CASE WHEN f.data_act >= ADD_MONTHS(:data_referinta, -12) THEN 'CURENT' ELSE 'ANTERIOR' END AS perioada,
d.cantitate * ((CASE WHEN d.pret_cu_tva = 1 THEN round((ROUND(NVL(c.curs, 1) * ROUND(NVL(d.pret, 0), 4) / NVL(c.multiplicator, 1), 4)) / d.proc_tvav, 4) ELSE (ROUND(NVL(c.curs, 1) * ROUND(NVL(d.pret, 0), 4) / NVL(c.multiplicator, 1), 4)) END) - ROUND(NVL(c.curs, 1) * NVL(d.discount_unitar, 4) / NVL(c.multiplicator, 1), 4)) AS vanzare,