Corectii SQL
This commit is contained in:
216
queries.py
216
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,
|
||||
|
||||
Reference in New Issue
Block a user