App lokal aktualisiert

This commit is contained in:
dfuhrmann3 2026-07-02 12:39:18 +02:00
parent 11830c060a
commit 9523c7a74d
1 changed files with 6 additions and 8 deletions

14
app.py
View File

@ -5,8 +5,8 @@ import re
import xml.etree.ElementTree as ET
from xml.dom import minidom
from datetime import datetime, timedelta
from decimal import Decimal, ROUND_HALF_UP # Für finanzmathematisch exaktes Runden
import fitz # PyMuPDF
from decimal import Decimal, ROUND_HALF_UP
import fitz
from pydantic import BaseModel, Field
from llama_cpp import Llama, LlamaGrammar
@ -27,7 +27,7 @@ class InvoiceMetadata(BaseModel):
# ==========================================
# 2. PRÄZISE MATHEMATISCHE FUNKTIONEN
# 2. MATHEMATISCHE FUNKTIONEN
# ==========================================
def kaufmaennisches_runden(betrag, nachkommastellen=2):
"""
@ -128,7 +128,6 @@ def generate_compliant_xrechnung(data):
root = ET.Element(f"{{{INVOICE_NS}}}Invoice")
# BT-24 ID angepasst auf den exakten Core-String
ET.SubElement(root, f"{{{CBC}}}CustomizationID").text = "urn:cen.eu:en16931:2017#compliant#urn:xoev-de:kosit:standard:xrechnung_3.0"
ET.SubElement(root, f"{{{CBC}}}ProfileID").text = "urn:fdc:peppol.eu:poacc:bis:invoice:3"
ET.SubElement(root, f"{{{CBC}}}ID").text = str(data["invoice_number"])
@ -170,7 +169,6 @@ def generate_compliant_xrechnung(data):
legal_supp = ET.SubElement(party_supp, f"{{{CAC}}}PartyLegalEntity")
ET.SubElement(legal_supp, f"{{{CBC}}}RegistrationName").text = "scitech it solutions GmbH"
# FIX: Hinzufügen der Gruppe "SELLER CONTACT" (BG-6) zur Behebung von BR-DE-2
contact_supp = ET.SubElement(party_supp, f"{{{CAC}}}Contact")
ET.SubElement(contact_supp, f"{{{CBC}}}Name").text = "Geschäftsführung"
ET.SubElement(contact_supp, f"{{{CBC}}}Telephone").text = "+49 3302 4940537"
@ -245,7 +243,7 @@ def generate_compliant_xrechnung(data):
# ==========================================
# 3. ABSOLUTE MODELL-LADUNG (QWEN 3.5 INSTRUCT)
# 3. KI MODELL (QWEN 3.5 INSTRUCT)
# ==========================================
def get_cached_llm():
if "llm_instance" not in st.session_state:
@ -328,7 +326,7 @@ with col2:
edited_items = st.data_editor(data.get("items", []), num_rows="dynamic", width="stretch")
vat_rate = st.number_input("Steuersatz (%)", value=float(data.get("vat_rate_percent") or 19.0))
# Live-Berechnung inklusive kaufmännischem Runden auf Positionsebene
# Berechnung inklusive kaufmännischem Runden auf Positionsebene
for item in edited_items:
raw_total = float(item.get("quantity") or 0.0) * float(item.get("unit_price") or 0.0)
item["total_amount"] = kaufmaennisches_runden(raw_total)
@ -339,7 +337,7 @@ with col2:
raw_vat_amount = computed_net_amount * (vat_rate / 100.0)
computed_vat_amount = kaufmaennisches_runden(raw_vat_amount)
# Brutto setzt sich sauber aus den gerundeten Netto- und MwSt-Werten zusammen
# Brutto aus den gerundeten Netto- und MwSt-Werten
computed_gross_amount = kaufmaennisches_runden(computed_net_amount + computed_vat_amount)
st.markdown("**Berechnete Summen:**")