{% extends "base.html" %} {% from "_macros.html" import money, app_pill, item_type_badge, order_status_badge, avatar %} {% block title %}Auswertungen{% endblock %} {% block heading %}Auswertungen{% endblock %} {% block content %} {# ============= DATEV-EXPORT ============= #}

DATEV-Export (Buchungsstapel)

CSV nach DATEV v7.0 — Steuerberater-fertig (SKR03 Default)

Konten: 1400 Forderungen · 4400 Erlöse 19 % · 1776 USt 19 % · 4500 EU-Reverse-Charge · 4530 Drittland-Ausfuhr · 1200 Bank. Override pro Konto möglich via company_settings.datev_account_*.

{# ============= VERKAUF & FINANZEN ============= #} {% if sales_rep %}

Umsatz YTD

{{ money(sales_rep.revenue_total_ytd) }}

{{ sales_rep.revenue_by_month|length }} Monate

Forderungen offen

{{ money(sales_rep.aging.total_open) }}

davon {{ money(sales_rep.aging.bucket_over) }} > 90 T

DSO

{{ sales_rep.dso_days }} T

Days Sales Outstanding

Top-Kunden (A)

{{ sales_rep.top_customers|selectattr('klasse','equalto','A')|list|length }}

≥ 80 % Umsatz

Umsatz pro Monat

Letzte 12 Monate · brutto

Forderungsalter (Aging)

Offene Beträge nach Verzugsdauer

Top-Kunden (ABC-Analyse)

YTD · A = 80 %, B = bis 95 %, C = Rest

{% if sales_rep.top_customers %} {% for c in sales_rep.top_customers[:10] %} {% endfor %}
KlasseKundeUmsatz% kum.
{{ c.klasse }} {{ c.customer }} {{ money(c.revenue) }} {{ "%.1f"|format(c.cum_pct) }} %
{% else %}
Noch keine Kundenumsätze.
{% endif %}

Marge pro Auftrag

Letzte 20 Aufträge — Soll/Ist Stunden + Material

{% if sales_rep.margin_by_order %} {% for m in sales_rep.margin_by_order %} {% endfor %}
AuftragKundeVerkauftKostenMarge
{{ m.order_no }} {{ m.customer }} {{ money(m.sold_net) }} {{ money(m.total_cost) }} {{ money(m.margin) }} ({{ m.margin_pct }} %)
{% else %}
Keine Aufträge.
{% endif %}
{% endif %} {# ============= CONVERSION PRO VERTRIEBLER ============= #} {% if rep_funnel is defined and rep_funnel %}

Conversion pro Vertriebler · 90 Tage

Anfragen → Angebote → Aufträge je Vertriebler — wer schließt am besten ab?

{% for r in rep_funnel %} {% endfor %}
Vertriebler Anfragen Angebote Anfr → Angebot Aufträge Angebot → Auftrag Win-% Auftragsvolumen
{{ r.name }} {{ r.inq_count }} {{ r.q_count }} {% if r.inq_to_q_pct is none %} {% elif r.inq_to_q_pct >= 70 %}{{ r.inq_to_q_pct }}% {% elif r.inq_to_q_pct >= 40 %}{{ r.inq_to_q_pct }}% {% else %}{{ r.inq_to_q_pct }}%{% endif %} {{ r.so_count }} {% if r.q_to_so_pct is none %} {% elif r.q_to_so_pct >= 50 %}{{ r.q_to_so_pct }}% {% elif r.q_to_so_pct >= 25 %}{{ r.q_to_so_pct }}% {% else %}{{ r.q_to_so_pct }}%{% endif %} {% if r.win_pct is none %} {% elif r.win_pct >= 30 %}{{ r.win_pct }}% {% elif r.win_pct >= 15 %}{{ r.win_pct }}% {% else %}{{ r.win_pct }}%{% endif %} {{ money(r.so_volume) }}
{% endif %} {# ============= QUALITÄT & PRODUKTION ============= #} {% if quality_kpis is defined and quality_kpis %}
{% set qk = quality_kpis %}

Liefertreue 90T

{% if qk.ot_delivery_pct is none %}—{% else %}{{ qk.ot_delivery_pct }} %{% endif %}

On-Time-Delivery

NCR-Quote 90T

{% if qk.ncr_rate_pct is none %}—{% else %}{{ qk.ncr_rate_pct }} %{% endif %}

Reklamationen / Aufträge

Reklamationen offen

{{ qk.open_complaints }}

{% if qk.critical_complaints %}{{ qk.critical_complaints }} kritisch{% else %}—{% endif %}

Zertifikate

{{ qk.expiring_certs }}

laufen in 60 T ab

Reklamationen nach Status

Aktueller Snapshot — alle Schweregrade

Maschinenauslastung

Belegung der letzten 30 Tage (geschätzt)

{% endif %} {# ---------- 4 KPI-CHARTS (Werkstatt) ---------- #}

Lagerwert nach Typ

Verteilung in Euro

Bestellungen nach Status

Anzahl & Wert

Top-Lieferanten

Bestellwert in Euro

Prüfmittel-Status

Mess- & Spannmittel

{# ---------- 2 BREITE CHARTS ---------- #}

Bestand-Bewegungen letzte 30 Tage

Eingang · Auslagerung · Verleih

Team-Aktivität (30 Tage)

Verleihe · Auslagerungen · Bestellungen je Mitarbeiter

{# ---------- ALTE TABELLEN BLEIBEN: präzise Zahlen ---------- #}

Lagerwert nach Typ — Details

{% for r in by_type %} {% endfor %}
TypArtikelBestandWert
{{ item_type_badge(r.item_type) }} {{ r.item_count }} {{ r.qty or 0 }} {{ money(r.value) }}

Bestellungen — Details

{% for r in orders %} {% endfor %}
StatusAnzahlWert
{{ order_status_badge(r.status) }} {{ r.order_count }} {{ money(r.total_value) }}

Mindestbestand erreicht

{{ low_stock|length }} Artikel — gesamt-Beschaffungswert: {{ money(low_stock|sum(attribute='reorder_value')) }}

{% if low_stock %} {% for it in low_stock %} {% endfor %}
SKU Beschreibung Bestand Min Bestellt Lieferant Beschaffungswert
{{ app_pill(it.source_app) }} {{ it.ident }} {{ it.description }} {{ it.quantity_total }} {{ it.quantity_min }} {% if it.on_order %}{{ it.on_order }}{% else %}—{% endif %} {{ it.vendor_name or '—' }} {{ money(it.reorder_value) }}
{% else %}
Alle Artikel über Mindestbestand.
{% endif %}
{# ---------- CHART INIT ---------- #} {% endblock %}