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 # FIX: Filter by last closed calendar period to avoid duplicate invoices
AGING_CREANTE = """ AGING_CREANTE = """
WITH ultima_luna AS ( WITH
SELECT EXTRACT(YEAR FROM (:data_referinta - 1)) AS anul,
EXTRACT(MONTH FROM (:data_referinta - 1)) AS luna
FROM dual
),
solduri_clienti AS ( solduri_clienti AS (
SELECT SELECT
r.id_part, r.id_part,
r.nume AS client, r.nume AS client,
r.serie_act || ' ' || r.nract AS nr_factura, r.serie_act || ' ' || r.nract AS nr_factura,
r.dataact AS data_factura, r.dataact AS data_factura,
r.datascad, nvl(r.datascad, r.dataact+30) as datascad,
(r.precdeb + r.debit) AS valoare_factura, (r.precdeb + r.debit) AS valoare_factura,
(r.preccred + r.credit) AS valoare_achitata, (r.preccred + r.credit) AS valoare_achitata,
(r.precdeb + r.debit) - (r.preccred + r.credit) AS sold_ramas, (r.precdeb + r.debit) - (r.preccred + r.credit) AS sold_ramas,
CASE CASE
WHEN r.datascad IS NULL THEN 0 WHEN nvl(r.datascad, r.dataact+30) >= :data_referinta THEN 0
WHEN r.datascad >= :data_referinta THEN 0 ELSE ROUND((:data_referinta - 1) - nvl(r.datascad, r.dataact+30))
ELSE ROUND((:data_referinta - 1) - r.datascad)
END AS zile_restante END AS zile_restante
FROM vireg_parteneri r, ultima_luna ul FROM vireg_parteneri r
WHERE (r.cont LIKE '4111%' OR r.cont LIKE '461%') 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.precdeb + r.debit) - (r.preccred + r.credit) <> 0
AND r.an = ul.anul AND r.luna = ul.luna
) )
SELECT SELECT
client, client,
@@ -794,24 +790,20 @@ ORDER BY total_sold DESC
# ============================================================================= # =============================================================================
# FIX: Filter by last closed calendar period to avoid duplicate invoices # FIX: Filter by last closed calendar period to avoid duplicate invoices
FACTURI_RESTANTE = """ 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 SELECT
r.nume AS client, r.nume AS client,
r.serie_act || ' ' || r.nract AS nr_factura, r.serie_act || ' ' || r.nract AS nr_factura,
r.dataact AS data_factura, r.dataact AS data_factura,
r.datascad AS data_scadenta, nvl(r.datascad, r.dataact+30) AS datascad,
ROUND((:data_referinta - 1) - r.datascad) AS zile_intarziere, 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 ROUND((r.precdeb + r.debit) - (r.preccred + r.credit), 2) AS suma_restanta
FROM vireg_parteneri r, ultima_luna ul FROM vireg_parteneri r
WHERE (r.cont LIKE '4111%' OR r.cont LIKE '461%') 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.precdeb + r.debit) - (r.preccred + r.credit) <> 0
AND r.datascad IS NOT NULL AND r.datascad IS NOT NULL
AND r.datascad < :data_referinta AND r.datascad < :data_referinta
AND r.an = ul.anul AND r.luna = ul.luna
ORDER BY zile_intarziere DESC ORDER BY zile_intarziere DESC
FETCH FIRST 100 ROWS ONLY 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 # FIX: Filter by last closed calendar period to avoid duplicate invoices
AGING_DATORII = """ AGING_DATORII = """
WITH ultima_luna AS ( WITH solduri_furnizori AS (
SELECT EXTRACT(YEAR FROM (:data_referinta - 1)) AS anul,
EXTRACT(MONTH FROM (:data_referinta - 1)) AS luna
FROM dual
),
solduri_furnizori AS (
SELECT SELECT
r.id_part, r.id_part,
r.nume AS furnizor, r.nume AS furnizor,
r.serie_act || ' ' || r.nract AS nr_factura, r.serie_act || ' ' || r.nract AS nr_factura,
r.dataact AS data_factura, r.dataact AS data_factura,
r.datascad, nvl(r.datascad, r.dataact+30) as datascad,
(r.preccred + r.credit) AS valoare_factura, (r.preccred + r.credit) AS valoare_factura,
(r.precdeb + r.debit) AS valoare_achitata, (r.precdeb + r.debit) AS valoare_achitata,
(r.preccred + r.credit) - (r.precdeb + r.debit) AS sold_ramas, (r.preccred + r.credit) - (r.precdeb + r.debit) AS sold_ramas,
CASE CASE
WHEN r.datascad IS NULL THEN 0 WHEN nvl(r.datascad, r.dataact+30) >= :data_referinta THEN 0
WHEN r.datascad >= :data_referinta THEN 0 ELSE ROUND((:data_referinta - 1) - nvl(r.datascad, r.dataact+30))
ELSE ROUND((:data_referinta - 1) - r.datascad)
END AS zile_restante END AS zile_restante
FROM vireg_parteneri r, ultima_luna ul 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 AND (r.preccred + r.credit) - (r.precdeb + r.debit) <> 0
AND r.an = ul.anul AND r.luna = ul.luna
) )
SELECT SELECT
furnizor, furnizor,
@@ -866,24 +853,20 @@ ORDER BY total_sold DESC
# ============================================================================= # =============================================================================
# FIX: Filter by last closed calendar period to avoid duplicate invoices # FIX: Filter by last closed calendar period to avoid duplicate invoices
FACTURI_RESTANTE_FURNIZORI = """ 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 SELECT
r.nume AS furnizor, r.nume AS furnizor,
r.serie_act || ' ' || r.nract AS nr_factura, r.serie_act || ' ' || r.nract AS nr_factura,
r.dataact AS data_factura, r.dataact AS data_factura,
r.datascad AS data_scadenta, nvl(r.datascad, r.dataact+30) AS data_scadenta,
ROUND((:data_referinta - 1) - r.datascad) AS zile_intarziere, 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 ROUND((r.preccred + r.credit) - (r.precdeb + r.debit), 2) AS suma_restanta
FROM vireg_parteneri r, ultima_luna ul 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 AND (r.preccred + r.credit) - (r.precdeb + r.debit) <> 0
AND r.datascad IS NOT NULL AND r.datascad IS NOT NULL
AND r.datascad < :data_referinta AND r.datascad < :data_referinta
AND r.an = ul.anul AND r.luna = ul.luna
ORDER BY zile_intarziere DESC ORDER BY zile_intarziere DESC
FETCH FIRST 100 ROWS ONLY FETCH FIRST 100 ROWS ONLY
""" """
@@ -917,8 +900,8 @@ WITH vanzari_12_luni AS (
sold_clienti AS ( sold_clienti AS (
-- Sold creanțe clienți (cont 4111) -- 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 SELECT SUM(CASE WHEN b.solddeb > b.soldcred THEN b.solddeb - b.soldcred ELSE 0 END) AS total_creante
FROM vbalanta_parteneri b FROM vbal b
WHERE b.cont LIKE '4111%' WHERE (b.cont LIKE '4111%' OR b.cont LIKE '461%')
AND b.an = EXTRACT(YEAR FROM (:data_referinta - 1)) 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))
), ),
@@ -954,8 +937,8 @@ achizitii_12_luni AS (
sold_furnizori AS ( sold_furnizori AS (
-- Sold datorii furnizori (cont 401) -- Sold datorii furnizori (cont 401)
SELECT SUM(CASE WHEN b.soldcred > b.solddeb THEN b.soldcred - b.solddeb ELSE 0 END) AS total_datorii SELECT SUM(CASE WHEN b.soldcred > b.solddeb THEN b.soldcred - b.solddeb ELSE 0 END) AS total_datorii
FROM vbalanta_parteneri b FROM vbal b
WHERE b.cont LIKE '401%' 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.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))
) )
@@ -1033,8 +1016,8 @@ WITH metrici AS (
AND f.data_act < :data_referinta) AS cogs_12_luni, AND f.data_act < :data_referinta) AS cogs_12_luni,
-- Creanțe clienți -- Creanțe clienți
(SELECT SUM(CASE WHEN b.solddeb > b.soldcred THEN b.solddeb - b.soldcred ELSE 0 END) (SELECT SUM(CASE WHEN b.solddeb > b.soldcred THEN b.solddeb - b.soldcred ELSE 0 END)
FROM vbalanta_parteneri b FROM vbal b
WHERE b.cont LIKE '4111%' WHERE (b.cont LIKE '4111%' OR b.cont LIKE '461%')
AND b.an = EXTRACT(YEAR FROM (:data_referinta - 1)) AND b.an = EXTRACT(YEAR FROM (:data_referinta - 1))
AND b.luna = EXTRACT(MONTH FROM (:data_referinta - 1))) AS creante, AND b.luna = EXTRACT(MONTH FROM (:data_referinta - 1))) AS creante,
-- Vânzări 12 luni din jurnal TVA vânzări (vjv2025) -- 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, AND EXTRACT(MONTH FROM dataireg) = luna) AS vanzari_12_luni,
-- Datorii furnizori -- Datorii furnizori
(SELECT SUM(CASE WHEN b.soldcred > b.solddeb THEN b.soldcred - b.solddeb ELSE 0 END) (SELECT SUM(CASE WHEN b.soldcred > b.solddeb THEN b.soldcred - b.solddeb ELSE 0 END)
FROM vbalanta_parteneri b FROM vbal b
WHERE b.cont LIKE '401%' 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.an = EXTRACT(YEAR FROM (:data_referinta - 1))
AND b.luna = EXTRACT(MONTH FROM (:data_referinta - 1))) AS datorii_furnizori, AND b.luna = EXTRACT(MONTH FROM (:data_referinta - 1))) AS datorii_furnizori,
-- Achiziții 12 luni din jurnal TVA cumpărări (vjc2025) -- Achiziții 12 luni din jurnal TVA cumpărări (vjc2025)
@@ -1129,9 +1112,10 @@ INDICATORI_AGREGATI_VENITURI = """
WITH vanzari_detaliate AS ( WITH vanzari_detaliate AS (
SELECT /*+ LEADING(f d) USE_NL(d) INDEX(f IDX_VANZARI_NR) */ SELECT /*+ LEADING(f d) USE_NL(d) INDEX(f IDX_VANZARI_NR) */
CASE CASE
WHEN d.cont IN ('341', '345') THEN 'Productie proprie' WHEN d.cont IN ('341', '345') THEN 'Productie'
WHEN d.cont = '301' THEN 'Materii prime' WHEN d.cont = '371' THEN 'Marfa'
ELSE 'Marfa revanduta' WHEN d.cont is null THEN 'Servicii/Transport/Discount'
ELSE 'Materii prime'
END AS linie_business, 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)) 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 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 ( capitaluri AS (
SELECT SUM(b.soldcred - b.solddeb) AS capital_propriu SELECT SUM(b.soldcred - b.solddeb) AS capital_propriu
FROM vbal b FROM vbal b
WHERE (b.cont LIKE '101%' OR b.cont LIKE '104%' OR b.cont LIKE '105%' WHERE (
OR b.cont LIKE '106%' OR b.cont LIKE '117%' OR b.cont LIKE '121%') 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.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 totale (16x, 40x, 42x, 44x, 46x)
datorii AS ( datorii AS (
SELECT SUM(b.soldcred - b.solddeb) AS datorii_totale SELECT SUM(b.soldcred - b.solddeb) AS datorii_totale
FROM vbal b FROM vbal b
WHERE (b.cont LIKE '16%' OR b.cont LIKE '40%' OR b.cont LIKE '42%' WHERE (
OR b.cont LIKE '44%' OR b.cont LIKE '46%') -- 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.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) -- Total activ (sold debitor toate conturile de activ)
activ AS ( activ AS (
SELECT SUM(b.solddeb - b.soldcred) AS total_activ SELECT SUM(b.solddeb - b.soldcred) AS total_activ
FROM vbal b FROM vbal b
WHERE (b.cont LIKE '1%' OR b.cont LIKE '2%' OR b.cont LIKE '3%' WHERE (
OR b.cont LIKE '4%' OR b.cont LIKE '5%') -- IMOBILIZARI
AND b.cont NOT LIKE '16%' AND b.cont NOT LIKE '40%' AND b.cont NOT LIKE '42%' cont LIKE '2%'
AND b.cont NOT LIKE '44%' AND b.cont NOT LIKE '46%' AND b.cont NOT LIKE '47%' -- 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.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 si profit din ultimele 12 luni
vanzari_calc AS ( vanzari_calc AS (
SELECT /*+ LEADING(f d) USE_NL(d) INDEX(f IDX_VANZARI_NR) */ 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' WHEN NVL(cp.capital_propriu, 0) / NULLIF(ac.total_activ, 0) < 0.5 THEN 'ATENTIE'
ELSE 'OK' ELSE 'OK'
END AS status, 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, '> 0.5 = bine, < 0.3 = risc' AS interpretare,
CASE CASE
WHEN NVL(cp.capital_propriu, 0) / NULLIF(ac.total_activ, 0) < 0.3 THEN 'Dependenta prea mare de creditori' 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' WHEN NVL(dt.datorii_totale, 0) / NULLIF(ac.total_activ, 0) > 0.5 THEN 'ATENTIE'
ELSE 'OK' ELSE 'OK'
END AS status, 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, '< 0.5 = bine, > 0.7 = risc' AS interpretare,
CASE CASE
WHEN NVL(dt.datorii_totale, 0) / NULLIF(ac.total_activ, 0) > 0.7 THEN 'Risc de insolventa - reduceti datoriile' 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.datascad,
(r.preccred + r.credit) - (r.precdeb + r.debit) AS sold_ramas, (r.preccred + r.credit) - (r.precdeb + r.debit) AS sold_ramas,
CASE CASE
WHEN r.datascad IS NULL THEN 'TERMEN_NEDEFINIT' WHEN nvl(r.datascad, r.dataact+30) <= (:data_referinta - 1) + 30 THEN 'TERMEN_SCURT'
WHEN r.datascad <= (:data_referinta - 1) + 30 THEN 'TERMEN_SCURT' WHEN nvl(r.datascad, r.dataact+30) <= (:data_referinta - 1) + 90 THEN 'TERMEN_MEDIU'
WHEN r.datascad <= (:data_referinta - 1) + 90 THEN 'TERMEN_MEDIU'
ELSE 'TERMEN_LUNG' ELSE 'TERMEN_LUNG'
END AS clasificare END AS clasificare
FROM vireg_parteneri r 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 AND (r.preccred + r.credit) - (r.precdeb + r.debit) <> 0
) )
SELECT SELECT
'Datorii termen scurt (<= 30 zile)' AS categorie, 'Datorii termen scurt (<= 30 zile)' AS categorie,
@@ -1844,21 +1867,25 @@ cash_curent AS (
), ),
incasari_asteptate AS ( incasari_asteptate AS (
SELECT 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 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 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 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 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) + 90 THEN (r.precdeb + r.debit) - (r.preccred + r.credit) ELSE 0 END), 0) AS incasari_90
FROM vireg_parteneri r FROM vireg_parteneri r
WHERE (r.cont LIKE '4111%' OR r.cont LIKE '461%') WHERE (r.cont LIKE '4111%' OR r.cont LIKE '461%')
AND (r.precdeb + r.debit) - (r.preccred + r.credit) <> 0 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 ( plati_scadente AS (
SELECT 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 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 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 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 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) + 90 THEN (r.preccred + r.credit) - (r.precdeb + r.debit) ELSE 0 END), 0) AS plati_90
FROM vireg_parteneri r FROM vireg_parteneri r
WHERE (r.cont LIKE '401%' OR r.cont LIKE '404%' OR r.cont LIKE '462%') 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.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 SELECT
'Cash disponibil' AS indicator, 'Cash disponibil' AS indicator,
@@ -1924,21 +1951,25 @@ cash_curent AS (
), ),
incasari_programate AS ( incasari_programate AS (
SELECT 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 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 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 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 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) + 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 FROM vireg_parteneri r
WHERE (r.cont LIKE '4111%' OR r.cont LIKE '461%') WHERE (r.cont LIKE '4111%' OR r.cont LIKE '461%')
AND (r.precdeb + r.debit) - (r.preccred + r.credit) <> 0 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 ( plati_programate AS (
SELECT 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 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 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 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 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) + 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 FROM vireg_parteneri r
WHERE (r.cont LIKE '401%' OR r.cont LIKE '404%' OR r.cont LIKE '462%') 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.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 SELECT
'Sold initial (azi)' AS perioada, '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 # OPTIMIZED: Single 24-month scan with CASE-based period partitioning, no FULL OUTER JOIN needed
INDICATORI_AGREGATI_VENITURI_YOY = """ INDICATORI_AGREGATI_VENITURI_YOY = """
WITH base_data AS ( WITH base_data AS (
SELECT SELECT /*+ LEADING(f d) USE_NL(d) INDEX(f IDX_VANZARI_NR) */
CASE CASE
WHEN d.cont IN ('341', '345') THEN 'Productie proprie' WHEN d.cont IN ('341', '345') THEN 'Productie'
WHEN d.cont = '301' THEN 'Materii prime' WHEN d.cont = '371' THEN 'Marfa'
ELSE 'Marfa revanduta' WHEN d.cont is null THEN 'Servicii/Transport/Discount'
ELSE 'Materii prime'
END AS linie_business, END AS linie_business,
CASE WHEN f.data_act >= ADD_MONTHS(:data_referinta, -12) THEN 'CURENT' ELSE 'ANTERIOR' END AS perioada, 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, 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,