From c9b43c4e6eb5a5729fd28291cc75b942997fd8f5 Mon Sep 17 00:00:00 2001 From: Marius Mutu Date: Tue, 17 Feb 2026 13:10:37 +0200 Subject: [PATCH] Corectii SQL --- queries.py | 216 ++++++++++++++++++++++++++++++----------------------- 1 file changed, 124 insertions(+), 92 deletions(-) diff --git a/queries.py b/queries.py index 4fa198e..cab59d2 100644 --- a/queries.py +++ b/queries.py @@ -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,