Files
leocrm/app/models/tax.py
T
Agent Zero 5ec1fc9b05 Phase 1: Fix all critical release blockers (B1-B10)
B1: Remove duplicate get_redis() — singleton no longer overwritten
B2: Plugin routes now enforce activation status via require_active_plugin()
B3: Fix UploadFile ForwardRef error — remove functools.wraps from wrap_plugin_route
B4: DMS upload uses true streaming via save_stream() instead of RAM accumulation
B5: Worker on_startup registers plugin event handlers + webhook dispatcher
B6: Implement send_password_reset_email job, remove raw token logging
B7: Webhook SSRF protection (IP validation, no redirects), secret removed from response
B8: RLS repair migration 0044 + separate crm_runtime DB user (NOSUPERUSER, NOBYPASSRLS)
B9: Fix .env.docker.example AUTH_SECRET → SECRET_KEY
B10: Remove Redis default password, remove exposed DB/Redis ports

Also: add frontend_url to config, add SMTP settings to .env.docker.example,
update prestart.sh to use MIGRATION_DATABASE_URL for alembic.
2026-07-26 20:45:42 +02:00

32 lines
1.1 KiB
Python

"""Tax rate model — ERP tax configuration."""
from __future__ import annotations
import uuid
from datetime import datetime
from decimal import Decimal
from sqlalchemy import Boolean, DateTime, Index, Numeric, String
from sqlalchemy.dialects.postgresql import UUID as PGUUID
from sqlalchemy.orm import Mapped, mapped_column
from app.core.db import Base, TenantMixin
class TaxRate(Base, TenantMixin):
"""Tax rate entity — e.g. 'Mehrwertsteuer 19%'."""
__tablename__ = "tax_rates"
__table_args__ = (
Index("ix_tax_rates_tenant_name", "tenant_id", "name"),
Index("ix_tax_rates_tenant_default", "tenant_id", "is_default"),
)
id: Mapped[uuid.UUID] = mapped_column(
PGUUID(as_uuid=True), primary_key=True, default=uuid.uuid4
)
name: Mapped[str] = mapped_column(String(100), nullable=False)
rate: Mapped[Decimal] = mapped_column(Numeric(5, 2), nullable=False)
is_default: Mapped[bool] = mapped_column(Boolean, nullable=False, default=False)
country: Mapped[str | None] = mapped_column(String(2), nullable=True)