"""Entry point for the model generated from 'pricing_calculator.xlsx'. ``compute(book)`` fills in every formula cell of the workbook in dependency order and returns the same Book. Start from ``load_inputs()`` for the workbook's own input values, or build a Book with your own. """ from __future__ import annotations import json from pathlib import Path from .xl import Book from .sheets import ( economics, inputs, rate_card, schedule, sensitivity, summary, ) _HERE = Path(__file__).parent def load_inputs(path: str | Path | None = None) -> Book: """Load the workbook's input cells and defined names into a Book.""" return Book.from_json(str(path or _HERE / "inputs.json")) def compute(book: Book) -> Book: """Run every logic block in dependency order.""" inputs.financed_amount_north(book) inputs.balloon_gbp_north(book) inputs.days_to_first_payment(book) inputs.first_payment_date(book) inputs.term_years_30_360(book) inputs.term_years_actual(book) rate_card.selected_margin_bps(book) rate_card.base_rate(book) rate_card.customer_apr(book) rate_card.monthly_rate(book) schedule.date(book) schedule.closing(book) schedule.cashflow(book) schedule.date_b3(book) schedule.opening(book) schedule.payment(book) schedule.interest(book) schedule.principal(book) schedule.closing_g3(book) schedule.cumulative_interest(book) schedule.cashflow_i3(book) schedule.opening_c4(book) schedule.closing_g4(book) schedule.opening_c5(book) schedule.closing_g5(book) schedule.opening_c6(book) schedule.closing_g6(book) schedule.opening_c7(book) schedule.closing_g7(book) schedule.cell_c8(book) schedule.cell_g8(book) schedule.cell_c9(book) schedule.cell_g9(book) schedule.cell_c10(book) schedule.cell_g10(book) schedule.cell_c11(book) schedule.cell_g11(book) schedule.cell_c12(book) schedule.cell_g12(book) schedule.cell_c13(book) schedule.cell_g13(book) schedule.cell_c14(book) schedule.cell_g14(book) schedule.cell_c15(book) schedule.cell_g15(book) schedule.cell_c16(book) schedule.cell_g16(book) schedule.cell_c17(book) schedule.cell_g17(book) schedule.cell_c18(book) schedule.cell_g18(book) schedule.cell_c19(book) schedule.cell_g19(book) schedule.cell_c20(book) schedule.cell_g20(book) schedule.cell_c21(book) schedule.cell_g21(book) schedule.cell_c22(book) schedule.cell_g22(book) schedule.cell_c23(book) schedule.cell_g23(book) schedule.cell_c24(book) schedule.cell_g24(book) schedule.cell_c25(book) schedule.cell_g25(book) schedule.cell_c26(book) schedule.cell_g26(book) schedule.cell_c27(book) schedule.cell_g27(book) schedule.cell_c28(book) schedule.cell_g28(book) schedule.cell_c29(book) schedule.cell_g29(book) schedule.cell_c30(book) schedule.cell_g30(book) schedule.cell_c31(book) schedule.range_e31_e74(book) schedule.cumulative_interest_h4(book) schedule.cell_g31(book) schedule.cell_c32(book) schedule.cell_g32(book) schedule.cell_c33(book) schedule.cell_g33(book) schedule.cell_c34(book) schedule.cell_g34(book) schedule.cell_c35(book) schedule.cell_g35(book) schedule.cell_c36(book) schedule.cell_g36(book) schedule.cell_c37(book) schedule.cell_g37(book) schedule.cell_c38(book) schedule.cell_g38(book) schedule.cell_c39(book) schedule.cell_g39(book) schedule.cell_c40(book) schedule.cell_g40(book) schedule.cell_c41(book) schedule.cell_g41(book) schedule.cell_c42(book) schedule.cell_g42(book) schedule.cell_c43(book) schedule.cell_g43(book) schedule.cell_c44(book) schedule.cell_g44(book) schedule.cell_c45(book) schedule.cell_g45(book) schedule.cell_c46(book) schedule.cell_g46(book) schedule.cell_c47(book) schedule.cell_g47(book) schedule.cell_c48(book) schedule.cell_g48(book) schedule.cell_c49(book) schedule.cell_g49(book) schedule.cell_c50(book) schedule.cell_g50(book) schedule.cell_c51(book) schedule.cell_g51(book) schedule.cell_c52(book) schedule.cell_g52(book) schedule.cell_c53(book) schedule.cell_g53(book) schedule.cell_c54(book) schedule.cell_g54(book) schedule.cell_c55(book) schedule.cell_g55(book) schedule.cell_c56(book) schedule.cell_g56(book) schedule.cell_c57(book) schedule.cell_g57(book) schedule.cell_c58(book) schedule.cell_g58(book) schedule.cell_c59(book) schedule.cell_g59(book) schedule.cell_c60(book) schedule.cell_g60(book) schedule.cell_c61(book) schedule.cell_g61(book) schedule.cell_c62(book) schedule.cell_g62(book) schedule.cell_c63(book) schedule.cell_g63(book) schedule.cell_c64(book) schedule.cell_g64(book) schedule.cell_c65(book) schedule.cell_g65(book) schedule.cell_c66(book) schedule.cell_g66(book) schedule.cell_c67(book) schedule.cell_g67(book) schedule.cell_c68(book) schedule.cell_g68(book) schedule.cell_c69(book) schedule.cell_g69(book) schedule.cell_c70(book) schedule.cell_g70(book) schedule.cell_c71(book) schedule.cell_g71(book) schedule.cell_c72(book) schedule.cell_g72(book) schedule.cell_c73(book) schedule.cell_g73(book) schedule.cell_c74(book) schedule.cell_g74(book) economics.monthly_payment(book) economics.total_interest(book) economics.interest_in_first_12_months(book) economics.largest_interest_payment(book) economics.npv_at_hurdle(book) economics.deal_irr_annual(book) economics.break_even_apr(book) economics.present_value_of_payments(book) economics.future_value_of_deposit_at_hurdle(book) economics.months_to_repay_half(book) economics.commission(book) economics.interest_30_360_approximation(book) economics.fee_yield(book) sensitivity.range_b3_f7(book) sensitivity.cell_b8(book) sensitivity.cell_c8(book) sensitivity.cell_d8(book) sensitivity.cell_e8(book) sensitivity.cell_f8(book) sensitivity.cheapest_option(book) sensitivity.options_under_1_000_month(book) summary.grade_band(book) summary.product_description(book) summary.quote_line(book) summary.payments_above_900(book) summary.within_policy(book) summary.approval(book) summary.days_in_schedule(book) summary.average_balance(book) return book