{% extends "base.html" %} {% block title %}Analisis Rasio Keuangan - FinansialApp{% endblock %} {% block page_title %}Analisis Rasio Keuangan{% endblock %} {% block content %}
{% include '_rasio_help_modal.html' %} {% macro badge(status) -%} {% if status == 'Sehat' %} Sehat {% elif status == 'Cukup' %} Cukup {% else %} Perlu Perhatian {% endif %} {%- endmacro %} {% macro trend(curr_val, prev_val, suffix='', decimals=2, lower_better=False) -%} {% if prev is not none %} {% set delta = curr_val - prev_val %} {% set better = (delta < 0) if lower_better else (delta > 0) %} {% if delta|abs < 0.01 %} sama {% else %} {{ '%.2f' % (delta|abs) }}{{ suffix }} {% endif %} {% endif %} {%- endmacro %} {% macro ratio_card(label, value, status, fmt, prev_val=None, lower_better=False, desc='', formula='') -%}
{{ label }}
{{ badge(status) }}
{{ fmt }}
{{ formula }} {% if prev is not none and prev_val is not none %} {% set delta = value - prev_val %} {% set better = (delta < 0) if lower_better else (delta > 0) %} {% if delta|abs < 0.01 %} sama {% else %} {{ '%.2f' % (delta|abs) }} {% endif %} {% endif %}
{% if desc %}
{{ desc }}
{% endif %}
{%- endmacro %}
s/d
{% if prev %}
Pembanding: {{ prev_sd }} s/d {{ prev_ed }} (rentang sama panjang sebelum periode ini)
{% endif %}
Likuiditas
{{ '%.2f' % cur.current_ratio }}x
Current Ratio · {{ cur.current_int }}
Solvabilitas
{{ '%.2f' % cur.der }}x
DER · {{ cur.der_int }}
Profitabilitas
{{ '%.1f' % cur.roe }}%
ROE · {{ cur.roe_int }}
Margin Bersih
{{ '%.1f' % cur.npm }}%
NPM · {{ cur.npm_int }}
Rasio Likuiditas Kemampuan bayar hutang jangka pendek
{{ ratio_card( 'Current Ratio', cur.current_ratio, cur.current_int, ('%.2f' % cur.current_ratio) ~ 'x', prev.current_ratio if prev else None, False, 'Setiap Rp1 hutang jangka pendek dijamin Rp' ~ ('%.2f' % cur.current_ratio) ~ ' aset lancar.', 'Aset Lancar ÷ Liab Lancar') }}
{{ ratio_card( 'Quick Ratio', cur.quick_ratio, cur.quick_int, ('%.2f' % cur.quick_ratio) ~ 'x', prev.quick_ratio if prev else None, False, 'Likuiditas tanpa mengandalkan penjualan persediaan.', '(Aset Lancar − Persediaan) ÷ Liab Lancar') }}
{{ ratio_card( 'Cash Ratio', cur.cash_ratio, cur.cash_int, ('%.2f' % cur.cash_ratio) ~ 'x', prev.cash_ratio if prev else None, False, 'Hanya kas & bank vs hutang jangka pendek, paling konservatif.', 'Kas & Bank ÷ Liab Lancar') }}
Rasio Solvabilitas Struktur modal & beban hutang
{{ ratio_card( 'Debt to Equity (DER)', cur.der, cur.der_int, ('%.2f' % cur.der) ~ 'x', prev.der if prev else None, True, 'Setiap Rp1 modal pemilik diimbangi Rp' ~ ('%.2f' % cur.der) ~ ' hutang.', 'Total Liabilitas ÷ Total Ekuitas') }}
{{ ratio_card( 'Debt to Asset', cur.debt_to_asset, cur.dta_int, ('%.1f' % (cur.debt_to_asset*100)) ~ '%', prev.debt_to_asset if prev else None, True, 'Porsi aset yang dibiayai hutang.', 'Total Liabilitas ÷ Total Aset') }}
{{ ratio_card( 'Equity Ratio', cur.equity_ratio, cur.eqr_int, ('%.1f' % (cur.equity_ratio*100)) ~ '%', prev.equity_ratio if prev else None, False, 'Porsi aset yang dibiayai modal sendiri.', 'Total Ekuitas ÷ Total Aset') }}
Rasio Profitabilitas Kemampuan menghasilkan laba
{{ ratio_card( 'Gross Profit Margin', cur.gpm, cur.gpm_int, ('%.1f' % cur.gpm) ~ '%', prev.gpm if prev else None, False, 'Sisa pendapatan setelah HPP.', 'Laba Kotor ÷ Pendapatan') }}
{{ ratio_card( 'Operating Profit Margin', cur.opm, cur.opm_int, ('%.1f' % cur.opm) ~ '%', prev.opm if prev else None, False, 'Margin setelah HPP & beban operasional.', 'Laba Operasional ÷ Pendapatan') }}
{{ ratio_card( 'Net Profit Margin', cur.npm, cur.npm_int, ('%.1f' % cur.npm) ~ '%', prev.npm if prev else None, False, 'Margin akhir setelah semua beban.', 'Laba Bersih ÷ Pendapatan') }}
{{ ratio_card( 'Return on Assets (ROA)', cur.roa, cur.roa_int, ('%.1f' % cur.roa) ~ '%', prev.roa if prev else None, False, 'Seberapa efektif aset menghasilkan laba.', 'Laba Bersih ÷ Total Aset') }}
{{ ratio_card( 'Return on Equity (ROE)', cur.roe, cur.roe_int, ('%.1f' % cur.roe) ~ '%', prev.roe if prev else None, False, 'Return untuk modal pemilik.', 'Laba Bersih ÷ Total Ekuitas') }}
Rasio Aktivitas Efisiensi pemanfaatan aset
{{ ratio_card( 'Inventory Turnover', cur.inv_turnover, cur.inv_int, ('%.2f' % cur.inv_turnover) ~ 'x', prev.inv_turnover if prev else None, False, 'Berapa kali persediaan terjual habis dalam periode.', 'HPP ÷ Persediaan') }}
{{ ratio_card( 'Asset Turnover', cur.asset_turnover, cur.at_int, ('%.2f' % cur.asset_turnover) ~ 'x', prev.asset_turnover if prev else None, False, 'Setiap Rp1 aset menghasilkan Rp' ~ ('%.2f' % cur.asset_turnover) ~ ' penjualan.', 'Pendapatan ÷ Total Aset') }}
{{ ratio_card( 'Receivables Turnover', cur.receivables_turnover, cur.recv_int, ('%.2f' % cur.receivables_turnover) ~ 'x', prev.receivables_turnover if prev else None, False, 'Kecepatan piutang tertagih.', 'Pendapatan ÷ Piutang') }}
Data Sumber Snapshot per {{ ed }}
Total Aset{{ cur.bs.total_aset|rp }}
› Aset Lancar{{ cur.bs.aset_lancar|rp }}
› Aset Tetap (net){{ cur.bs.aset_tetap|rp }}
   Persediaan{{ cur.bs.persediaan|rp }}
   Piutang{{ cur.bs.piutang|rp }}
   Kas & Bank{{ cur.bs.kas_bank|rp }}
Total Liabilitas{{ cur.bs.total_liab|rp }}
› Liabilitas Lancar{{ cur.bs.liab_lancar|rp }}
› Liabilitas Jangka Panjang{{ cur.bs.liab_jp|rp }}
Total Ekuitas{{ cur.bs.total_ekuitas|rp }}
Pendapatan ({{ sd }} – {{ ed }}){{ cur.pnl.rev|rp }}
› HPP{{ cur.pnl.hpp|rp }}
› Laba Kotor{{ cur.pnl.laba_kotor|rp }}
› Laba Operasional{{ cur.pnl.laba_op|rp }}
› Laba Bersih{{ cur.pnl.laba_bersih|rp }}
Cara membaca: Label Sehat, Cukup, dan Perlu Perhatian menggunakan rule of thumb umum yang berlaku lintas industri. Setiap industri punya benchmark berbeda, gunakan angka pembanding (periode sebelumnya) sebagai indikator tren bisnis Anda sendiri.
{% endblock %}