Port certificate lifecycle (parse/encrypt/upload/deactivate) and FiscalSeries CRUD from the auto, adapted to (product_id, tenant_ref, branch_ref) tenancy. Closes the "guard retroativo" PATCH /v1/series next_number regression check that Task 3 deferred to this task. Routes: POST/GET/DELETE /v1/certificados, POST/GET/PATCH /v1/series.
47 lines
1.3 KiB
TOML
47 lines
1.3 KiB
TOML
[project]
|
|
name = "sowai-fiscal-svc"
|
|
version = "0.1.0"
|
|
description = "SowAI shared fiscal service: NF-e/NFC-e/NFS-e issuance as a multi-product REST API"
|
|
requires-python = ">=3.11"
|
|
dependencies = [
|
|
"alembic>=1.18.5",
|
|
"asyncpg>=0.31.0",
|
|
"bcrypt<4.1",
|
|
"cryptography>=49.0.0",
|
|
"erpbrasil-assinatura>=1.8.0",
|
|
"fastapi>=0.139.0",
|
|
"passlib[bcrypt]>=1.7.4",
|
|
"pydantic-settings>=2.0",
|
|
"pydantic>=2.13.4",
|
|
"python-multipart>=0.0.20",
|
|
"sowai-fiscal",
|
|
"sqlalchemy[asyncio]>=2.0",
|
|
"uvicorn[standard]>=0.49.0",
|
|
]
|
|
|
|
[dependency-groups]
|
|
dev = [
|
|
"httpx>=0.28.1",
|
|
"pytest>=9.1.1",
|
|
"pytest-asyncio>=1.4.0",
|
|
]
|
|
|
|
[tool.pytest.ini_options]
|
|
asyncio_default_fixture_loop_scope = "session"
|
|
asyncio_default_test_loop_scope = "session"
|
|
|
|
[tool.uv.sources]
|
|
sowai-fiscal = { git = "https://git.sowai.com.br/jonatan/sowai-fiscal.git", rev = "v0.1.0" }
|
|
|
|
# src-layout (mirrors sowai-fiscal's own pyproject.toml): `fiscal_svc` is
|
|
# installed editable by `uv sync` via hatchling, so `import fiscal_svc`
|
|
# works regardless of cwd (Docker's deps-cache layer runs `uv sync
|
|
# --no-install-project` BEFORE `COPY . .`, then a second `uv sync` after —
|
|
# see the Dockerfile's comment for why).
|
|
[build-system]
|
|
requires = ["hatchling"]
|
|
build-backend = "hatchling.build"
|
|
|
|
[tool.hatch.build.targets.wheel]
|
|
packages = ["src/fiscal_svc"]
|