92 lines
2.6 KiB
Python
92 lines
2.6 KiB
Python
# backend/app/modules/trial_balance/sql.py
|
|
|
|
TRIAL_BALANCE_SQL = """
|
|
WITH accounts_base AS (
|
|
SELECT
|
|
a.account_id,
|
|
a.account_code,
|
|
a.account_name,
|
|
a.account_type
|
|
FROM accounts a
|
|
WHERE a.is_active = true
|
|
),
|
|
|
|
opening AS (
|
|
SELECT
|
|
jl.account_id,
|
|
SUM(jl.debit) AS opening_debit,
|
|
SUM(jl.credit) AS opening_credit
|
|
FROM journal_entries je
|
|
JOIN journal_lines jl ON jl.journal_entry_id = je.journal_entry_id
|
|
WHERE je.description = '前期残高'
|
|
AND je.entry_date = %(start_date)s
|
|
AND je.is_deleted = false
|
|
GROUP BY jl.account_id
|
|
),
|
|
|
|
period AS (
|
|
SELECT
|
|
jl.account_id,
|
|
SUM(jl.debit) AS period_debit,
|
|
SUM(jl.credit) AS period_credit
|
|
FROM journal_entries je
|
|
JOIN journal_lines jl ON jl.journal_entry_id = je.journal_entry_id
|
|
LEFT JOIN journal_entries child ON child.parent_entry_id = je.journal_entry_id
|
|
WHERE je.entry_date BETWEEN %(start_date)s AND %(end_date)s
|
|
AND je.description <> '前期残高'
|
|
AND je.is_deleted = false
|
|
-- 逆仕訳を除外([逆仕訳]プレフィックスを持つ仕訳)
|
|
AND je.description NOT LIKE '[逆仕訳]%'
|
|
-- 子仕訳(修正後仕訳)を持つ修正前の仕訳を除外
|
|
AND child.journal_entry_id IS NULL
|
|
GROUP BY jl.account_id
|
|
)
|
|
|
|
SELECT
|
|
a.account_code,
|
|
a.account_name,
|
|
a.account_type,
|
|
|
|
COALESCE(o.opening_debit, 0) AS opening_debit,
|
|
COALESCE(o.opening_credit, 0) AS opening_credit,
|
|
COALESCE(p.period_debit, 0) AS period_debit,
|
|
COALESCE(p.period_credit, 0) AS period_credit,
|
|
|
|
CASE
|
|
WHEN (
|
|
COALESCE(o.opening_debit, 0)
|
|
- COALESCE(o.opening_credit, 0)
|
|
+ COALESCE(p.period_debit, 0)
|
|
- COALESCE(p.period_credit, 0)
|
|
) > 0
|
|
THEN (
|
|
COALESCE(o.opening_debit, 0)
|
|
- COALESCE(o.opening_credit, 0)
|
|
+ COALESCE(p.period_debit, 0)
|
|
- COALESCE(p.period_credit, 0)
|
|
)
|
|
ELSE 0
|
|
END AS closing_debit,
|
|
|
|
CASE
|
|
WHEN (
|
|
COALESCE(o.opening_debit, 0)
|
|
- COALESCE(o.opening_credit, 0)
|
|
+ COALESCE(p.period_debit, 0)
|
|
- COALESCE(p.period_credit, 0)
|
|
) < 0
|
|
THEN ABS(
|
|
COALESCE(o.opening_debit, 0)
|
|
- COALESCE(o.opening_credit, 0)
|
|
+ COALESCE(p.period_debit, 0)
|
|
- COALESCE(p.period_credit, 0)
|
|
)
|
|
ELSE 0
|
|
END AS closing_credit
|
|
|
|
FROM accounts_base a
|
|
LEFT JOIN opening o ON o.account_id = a.account_id
|
|
LEFT JOIN period p ON p.account_id = a.account_id
|
|
ORDER BY a.account_code;
|
|
"""
|