{# ── Macros ── #} {% macro comp_label(n) -%} {%- if "{n}" in style.comp_numbering -%}{{ style.comp_numbering.replace("{n}", n|string) }} {%- elif "{alpha}" in style.comp_numbering -%}{{ style.comp_numbering.replace("{alpha}", "ABCDEFGHIJ"[n-1]) }} {%- else -%}{{ style.comp_numbering }} {{ n }} {%- endif -%} {%- endmacro %} {%- macro section_num(n) -%}{%- if style.show_section_numbers -%}{{ n }}. {%- endif -%}{%- endmacro -%} {# ══════════════ TITLE ══════════════ #} {% if style.show_header_banner %}

{{ lang.title }}

{% else %}

{{ lang.title }}

{% endif %}

{{ lang.date_label }}: {{ report.generated_at.strftime(lang.date_format) }}
{{ lang.parcel_label }}: {{ v.subject.parcel_number }}


{# ══════════════ SUBJECT PROPERTY ══════════════ #}

{{ section_num(1) }}{{ lang.subject_heading }}

{% if style.subject_layout == "prose" %}

{{ lang.subject_prose_intro }} {{ v.subject.address }}, {{ lang.parcel_label|lower }} {{ v.subject.parcel_number }} (Block {{ v.subject.block }}, Lot {{ v.subject.lot }}). {{ lang.subject_prose_type }} {{ v.subject.use_definition or v.subject.use_code }}{{ lang.subject_prose_with }} {{ v.subject.bedrooms }} {{ lang.bedrooms_word }} {{ lang.and_word }} {{ v.subject.bathrooms }} {{ lang.bathrooms_word }}, {{ "{:,.0f}".format(v.subject.property_area) }} {{ lang.sqft_word }} {{ lang.of_living_space }}{{ lang.subject_prose_lot }} {{ "{:,.0f}".format(v.subject.lot_area) }} {{ lang.sqft_word }}. {{ lang.built_in }} {{ v.subject.year_built }}. {{ lang.located_in }} {{ v.subject.assessor_neighborhood or v.subject.analysis_neighborhood }}.

{% elif style.subject_layout == "two_column" %}

{{ lang.address_label }}: {{ v.subject.address }}
{{ lang.parcel_label }}: {{ v.subject.parcel_number }}
{{ lang.type_label }}: {{ v.subject.use_definition or v.subject.use_code }}
{{ lang.neighborhood_label }}: {{ v.subject.assessor_neighborhood or v.subject.analysis_neighborhood }}
{{ lang.year_built_label }}: {{ v.subject.year_built }}

{{ lang.bedrooms_label }}: {{ v.subject.bedrooms }}
{{ lang.bathrooms_label }}: {{ v.subject.bathrooms }}
{{ lang.living_area_label }}: {{ "{:,.0f}".format(v.subject.property_area) }} sqft
{{ lang.lot_area_label }}: {{ "{:,.0f}".format(v.subject.lot_area) }} sqft

{% elif style.subject_layout == "inline" %}

{{ v.subject.address }} — {{ v.subject.use_definition or v.subject.use_code }} • {{ v.subject.bedrooms }}bd/{{ v.subject.bathrooms }}ba • {{ "{:,.0f}".format(v.subject.property_area) }} sqft • {{ "{:,.0f}".format(v.subject.lot_area) }} sqft lot • Built {{ v.subject.year_built }} • {{ v.subject.assessor_neighborhood or v.subject.analysis_neighborhood }} • {{ lang.parcel_label }} {{ v.subject.parcel_number }}

{% else %}
{{ lang.field_label }}{{ lang.value_label }}
{{ lang.address_label }}{{ v.subject.address }}
{{ lang.parcel_label }}{{ v.subject.parcel_number }} (Block {{ v.subject.block }}, Lot {{ v.subject.lot }})
{{ lang.type_label }}{{ v.subject.use_definition or v.subject.use_code }}
{{ lang.bedrooms_label }}{{ v.subject.bedrooms }}
{{ lang.bathrooms_label }}{{ v.subject.bathrooms }}
{{ lang.living_area_label }}{{ "{:,.0f}".format(v.subject.property_area) }} sqft
{{ lang.lot_area_label }}{{ "{:,.0f}".format(v.subject.lot_area) }} sqft
{{ lang.year_built_label }}{{ v.subject.year_built }}
{{ lang.neighborhood_label }}{{ v.subject.assessor_neighborhood or v.subject.analysis_neighborhood }}
{% endif %}

{{ lang.assessment_heading }} ({{ lang.roll_year_label }} {{ v.subject.roll_year }})

{{ lang.component_label }}{{ lang.value_label }}
{{ lang.land_label }}${{ "{:,.0f}".format(v.subject.assessed_land_value) }}
{{ lang.improvements_label }}${{ "{:,.0f}".format(v.subject.assessed_improvement_value) }}
{{ lang.total_assessed_label }}${{ "{:,.0f}".format(v.assessed_value) }}
{{ lang.assessed_per_sqft_label }}${{ "{:,.0f}".format(v.subject.assessed_price_per_sqft) if v.subject.assessed_price_per_sqft else "N/A" }}

{# ══════════════ RATIONALE ══════════════ #}

{{ section_num(2) }}{{ lang.rationale_heading }}

{{ v.rationale_summary }}


{# ══════════════ COMPARABLE SALES ══════════════ #}

{{ section_num(3) }}{{ lang.comps_heading }}

{# ── 1. TABLES ── #} {% if style.layout_mode == "tables" %} {% for comp in v.selected_comps %}

{{ comp_label(loop.index) }} {{ comp.address }}

{% if comp.lot_area %}{% endif %} {% if comp.distance_miles is not none %}{% endif %}
{{ lang.field_label }}{{ lang.value_label }}
{{ lang.sale_price_label }}${{ "{:,.0f}".format(comp.sale_price) }}
{{ lang.sale_date_label }}{{ comp.sale_date.strftime(lang.date_format) if comp.sale_date else "N/A" }}
{{ lang.bed_bath_label }}{{ comp.bedrooms }} / {{ comp.bathrooms }}
{{ lang.living_area_label }}{{ "{:,.0f}".format(comp.property_area) }} sqft
{{ lang.lot_area_label }}{{ "{:,.0f}".format(comp.lot_area) }} sqft
{{ lang.distance_label }}{{ "{:.2f}".format(comp.distance_miles) }} {{ lang.miles_word }}
{{ lang.raw_psf_label }}${{ "{:,.0f}".format(comp.raw_price_per_sqft) if comp.raw_price_per_sqft else "N/A" }}
{{ lang.adj_psf_label }}${{ "{:,.0f}".format(comp.adjusted_price_per_sqft) if comp.adjusted_price_per_sqft else "N/A" }}
{% if comp.adjustments %}

{{ lang.adjustments_label }}:

{% else %}

{{ lang.no_adjustments }}

{% endif %}
{% endfor %} {# ── 2. PROSE ── #} {% elif style.layout_mode == "prose" %} {% for comp in v.selected_comps %}

{{ comp_label(loop.index) }} {{ comp.address }}

{{ lang.prose_comp_sold }} ${{ "{:,.0f}".format(comp.sale_price) }} {{ lang.prose_comp_on }} {{ comp.sale_date.strftime(lang.date_format) if comp.sale_date else "N/A" }}. {{ lang.prose_comp_property }} {{ "{:,.0f}".format(comp.property_area) }} {{ lang.sqft_word }}{{ lang.subject_prose_with }} {{ comp.bedrooms }} {{ lang.bedrooms_word }} {{ lang.and_word }} {{ comp.bathrooms }} {{ lang.bathrooms_word }}{% if comp.lot_area %}, {{ lang.on_a_word }} {{ "{:,.0f}".format(comp.lot_area) }} {{ lang.sqft_word }} {{ lang.lot_word }}{% endif %}.{% if comp.distance_miles is not none %} {{ lang.prose_comp_located }} {{ "{:.2f}".format(comp.distance_miles) }} {{ lang.miles_word }} {{ lang.from_subject }}.{% endif %} {{ lang.prose_comp_raw }} ${{ "{:,.0f}".format(comp.raw_price_per_sqft) if comp.raw_price_per_sqft else "N/A" }}/sqft{{ lang.prose_comp_adjusted }} ${{ "{:,.0f}".format(comp.adjusted_price_per_sqft) if comp.adjusted_price_per_sqft else "N/A" }}/sqft.

{% if comp.adjustments %}

{{ lang.adjustments_label }}: {% for adj in comp.adjustments %}{{ adj.description }} ({{ "{:+.0f}".format(adj.amount_per_sqft) }}){% if not loop.last %}; {% endif %}{% endfor %}.

{% endif %}
{% endfor %} {# ── 3. SUMMARY TABLE ── #} {% elif style.layout_mode == "summary_table" %} {% for comp in v.selected_comps %} {% endfor %}
{{ lang.address_label }}{{ lang.sale_price_label }}{{ lang.sale_date_label }}SqftBd/Ba{{ lang.raw_psf_label }}{{ lang.adj_psf_label }}
{{ comp.address }}${{ "{:,.0f}".format(comp.sale_price) }}{{ comp.sale_date.strftime('%m/%d/%y') if comp.sale_date else "N/A" }}{{ "{:,.0f}".format(comp.property_area) }}{{ comp.bedrooms }}/{{ comp.bathrooms }}${{ "{:,.0f}".format(comp.raw_price_per_sqft) if comp.raw_price_per_sqft else "N/A" }}${{ "{:,.0f}".format(comp.adjusted_price_per_sqft) if comp.adjusted_price_per_sqft else "N/A" }}
{% for comp in v.selected_comps %}{% if comp.adjustments %}

{{ comp.address }}: {% for adj in comp.adjustments %}{{ adj.description }} ({{ "{:+.0f}".format(adj.amount_per_sqft) }}){% if not loop.last %}; {% endif %}{% endfor %}.

{% endif %}{% endfor %} {# ── 4. CARDS ── #} {% elif style.layout_mode == "cards" %} {% for comp in v.selected_comps %}

{{ comp_label(loop.index) }} {{ comp.address }}

${{ "{:,.0f}".format(comp.sale_price) }} — {{ comp.sale_date.strftime(lang.date_format) if comp.sale_date else "N/A" }}
{{ comp.bedrooms }}bd / {{ comp.bathrooms }}ba • {{ "{:,.0f}".format(comp.property_area) }} sqft{% if comp.lot_area %} • {{ "{:,.0f}".format(comp.lot_area) }} sqft lot{% endif %}{% if comp.distance_miles is not none %} • {{ "{:.2f}".format(comp.distance_miles) }} mi{% endif %}
{{ lang.raw_psf_label }}: ${{ "{:,.0f}".format(comp.raw_price_per_sqft) if comp.raw_price_per_sqft else "N/A" }} → {{ lang.adj_psf_label }}: ${{ "{:,.0f}".format(comp.adjusted_price_per_sqft) if comp.adjusted_price_per_sqft else "N/A" }}

{% if comp.adjustments %}

{% for adj in comp.adjustments %}{{ adj.description }}: {{ "{:+.0f}".format(adj.amount_per_sqft) }}{% if not loop.last %} • {% endif %}{% endfor %}

{% endif %}
{% endfor %} {# ── 5. DEFINITION LIST ── #} {% elif style.layout_mode == "definition_list" %} {% for comp in v.selected_comps %}

{{ comp_label(loop.index) }} {{ comp.address }}

{{ lang.sale_price_label }}
${{ "{:,.0f}".format(comp.sale_price) }}
{{ lang.sale_date_label }}
{{ comp.sale_date.strftime(lang.date_format) if comp.sale_date else "N/A" }}
{{ lang.bed_bath_label }}
{{ comp.bedrooms }} / {{ comp.bathrooms }}
{{ lang.living_area_label }}
{{ "{:,.0f}".format(comp.property_area) }} sqft
{% if comp.lot_area %}
{{ lang.lot_area_label }}
{{ "{:,.0f}".format(comp.lot_area) }} sqft
{% endif %} {% if comp.distance_miles is not none %}
{{ lang.distance_label }}
{{ "{:.2f}".format(comp.distance_miles) }} {{ lang.miles_word }}
{% endif %}
{{ lang.raw_psf_label }}
${{ "{:,.0f}".format(comp.raw_price_per_sqft) if comp.raw_price_per_sqft else "N/A" }}
{{ lang.adj_psf_label }}
${{ "{:,.0f}".format(comp.adjusted_price_per_sqft) if comp.adjusted_price_per_sqft else "N/A" }}
{% if comp.adjustments %}

{{ lang.adjustments_label }}: {% for adj in comp.adjustments %}{{ adj.description }} ({{ "{:+.0f}".format(adj.amount_per_sqft) }}){% if not loop.last %}, {% endif %}{% endfor %}

{% endif %}
{% endfor %} {# ── 6. TEXT ONLY (no tables, no boxes, no formatting) ── #} {% elif style.layout_mode == "text_only" %} {% for comp in v.selected_comps %}

{{ comp_label(loop.index) }} {{ comp.address }}

{{ lang.sale_price_label }}: ${{ "{:,.0f}".format(comp.sale_price) }}
{{ lang.sale_date_label }}: {{ comp.sale_date.strftime(lang.date_format) if comp.sale_date else "N/A" }}
{{ lang.bed_bath_label }}: {{ comp.bedrooms }} / {{ comp.bathrooms }}
{{ lang.living_area_label }}: {{ "{:,.0f}".format(comp.property_area) }} sqft
{% if comp.lot_area %}{{ lang.lot_area_label }}: {{ "{:,.0f}".format(comp.lot_area) }} sqft
{% endif %} {% if comp.distance_miles is not none %}{{ lang.distance_label }}: {{ "{:.2f}".format(comp.distance_miles) }} {{ lang.miles_word }}
{% endif %} {{ lang.raw_psf_label }}: ${{ "{:,.0f}".format(comp.raw_price_per_sqft) if comp.raw_price_per_sqft else "N/A" }}
{{ lang.adj_psf_label }}: ${{ "{:,.0f}".format(comp.adjusted_price_per_sqft) if comp.adjusted_price_per_sqft else "N/A" }}

{% if comp.adjustments %}

{{ lang.adjustments_label }}: {% for adj in comp.adjustments %}{{ adj.description }} ({{ "{:+.0f}".format(adj.amount_per_sqft) }} $/sqft){% if not loop.last %}; {% endif %}{% endfor %}

{% endif %}
{% endfor %} {# ── 7. CONCISE (one line per comp) ── #} {% elif style.layout_mode == "concise" %} {% for comp in v.selected_comps %}

{{ comp_label(loop.index) }} {{ comp.address }} — ${{ "{:,.0f}".format(comp.sale_price) }} ({{ comp.sale_date.strftime('%m/%y') if comp.sale_date else "?" }}) — {{ "{:,.0f}".format(comp.property_area) }}sf, {{ comp.bedrooms }}/{{ comp.bathrooms }} — Raw ${{ "{:,.0f}".format(comp.raw_price_per_sqft) if comp.raw_price_per_sqft else "?" }}/sf → Adj ${{ "{:,.0f}".format(comp.adjusted_price_per_sqft) if comp.adjusted_price_per_sqft else "?" }}/sf{% if comp.adjustments %} [{% for adj in comp.adjustments %}{{ "{:+.0f}".format(adj.amount_per_sqft) }}{% if not loop.last %}, {% endif %}{% endfor %}]{% endif %}

{% endfor %} {# ── 8. BULLET LIST ── #} {% elif style.layout_mode == "bullet_list" %} {% for comp in v.selected_comps %}

{{ comp_label(loop.index) }} {{ comp.address }}

{% endfor %} {# ── 9. NUMBERED PROSE ── #} {% elif style.layout_mode == "numbered_prose" %} {% for comp in v.selected_comps %}

({{ loop.index }}) {{ comp.address }} sold for ${{ "{:,.0f}".format(comp.sale_price) }} on {{ comp.sale_date.strftime(lang.date_format) if comp.sale_date else "N/A" }}. This {{ "{:,.0f}".format(comp.property_area) }}-sqft property has {{ comp.bedrooms }} {{ lang.bedrooms_word }} and {{ comp.bathrooms }} {{ lang.bathrooms_word }}{% if comp.lot_area %} on a {{ "{:,.0f}".format(comp.lot_area) }}-sqft {{ lang.lot_word }}{% endif %}.{% if comp.distance_miles is not none %} It is {{ "{:.2f}".format(comp.distance_miles) }} {{ lang.miles_word }} {{ lang.from_subject }}.{% endif %} The raw price per square foot is ${{ "{:,.0f}".format(comp.raw_price_per_sqft) if comp.raw_price_per_sqft else "N/A" }}{% if comp.adjustments %}, with adjustments of {% for adj in comp.adjustments %}{{ "{:+.0f}".format(adj.amount_per_sqft) }} ({{ adj.description|lower }}){% if not loop.last %}, {% endif %}{% endfor %}{% endif %}, yielding an adjusted price of ${{ "{:,.0f}".format(comp.adjusted_price_per_sqft) if comp.adjusted_price_per_sqft else "N/A" }}/sqft.

{% endfor %} {# ── 10. GRID (two-column card grid) ── #} {% elif style.layout_mode == "grid" %}
{% for comp in v.selected_comps %}

{{ comp_label(loop.index) }} {{ comp.address }}

${{ "{:,.0f}".format(comp.sale_price) }} • {{ comp.sale_date.strftime('%m/%d/%y') if comp.sale_date else "?" }}
{{ comp.bedrooms }}bd/{{ comp.bathrooms }}ba • {{ "{:,.0f}".format(comp.property_area) }}sf{% if comp.distance_miles is not none %} • {{ "{:.1f}".format(comp.distance_miles) }}mi{% endif %}
Raw: ${{ "{:,.0f}".format(comp.raw_price_per_sqft) if comp.raw_price_per_sqft else "?" }} → Adj: ${{ "{:,.0f}".format(comp.adjusted_price_per_sqft) if comp.adjusted_price_per_sqft else "?" }}

{% if comp.adjustments %}

{% for adj in comp.adjustments %}{{ "{:+.0f}".format(adj.amount_per_sqft) }} {{ adj.description|lower }}{% if not loop.last %}; {% endif %}{% endfor %}

{% endif %}
{% endfor %}
{% endif %}
{# ══════════════ VALUATION ══════════════ #}

{{ section_num(4) }}{{ lang.valuation_heading }}

{% if v.appeal_recommended %} {% endif %}
{{ lang.metric_label }}{{ lang.value_label }}
{{ lang.median_psf_label }}${{ "{:,.0f}".format(v.median_adjusted_price_per_sqft) }}
{{ lang.subject_area_label }}{{ "{:,.0f}".format(v.subject.property_area) }} sqft
{{ lang.estimated_mv_label }}${{ "{:,.0f}".format(v.estimated_market_value) }}
{{ lang.current_av_label }}${{ "{:,.0f}".format(v.assessed_value) }}
{{ lang.overassessment_label }}${{ "{:,.0f}".format(v.assessed_value - v.estimated_market_value) }}

{# ══════════════ METHODOLOGY ══════════════ #}

{{ section_num(5) }}{{ lang.methodology_heading }}

{{ v.methodology_notes }}

{{ lang.methodology_selection }}

{{ lang.methodology_median }}