Tax
Estimates, AR sales tax and AP use tax, commit, credits, PendingTax, tax-code mappings, address validation.
PVC Connect Integrations service · documentation hub
PVC documents every service in three layers, and each one answers a different question. All three live in the repository, change in the same pull request as the code, and are published by the service itself.
One image, two roles, ports and adapters. PVC Connect calls in over REST and RabbitMQ; tax and rates come from providers behind ports.
ITaxProvider, IExchangeRateProvider, ...)Architecture tests fail the build if a layer reaches the wrong way, or if the Avalara SDK escapes its adapter.
Read more: architecture overview · resilience · decision records · service card
Each area has three doors: the handbook explains it, the API reference shows how to call it, and the .NET reference shows the code.
Estimates, AR sales tax and AP use tax, commit, credits, PendingTax, tax-code mappings, address validation.
Bank of Canada daily rates, one locked rate per pair per day, conversion with rounding only at the edges.
Party sync behind the NDA gate, CertExpress invites, resale requests per PO, expiry watching.
Sales tax by line and jurisdiction, vendor-charged tax, and the nightly comparison with AvaTax.
Every call names an entity. Feature flags start off, so each entity can go live in stages.
JWT scopes per endpoint, per-entity access, data minimization, the demo-key guard rail.
Health checks, OpenTelemetry, five scheduled jobs, the runbook, Kubernetes and the free demo.
Unit, architecture, contract, integration, end-to-end, accessibility and performance, explained on its own page.
Seven messages come in from PVC Connect and twelve events go out. Each has a page: when it happens, what to do with it, routing, and a field table generated from the contract.
Topology and conventions: event catalog
EF Core migrations in source control, reviewed as SQL with dotnet ef migrations script --idempotent. No .sql files kept just for documentation.
An ER diagram and a table guide in the handbook. Every property is described in the .NET reference.
LINQ next to the code that uses it. The few raw statements carry a -- comment inside the SQL text, so it shows up in database logs too.
-- Scheduled-job leader election: returns false at once if another replica holds the job's lock.
-- Session-level, so it is released on unlock or when this connection drops (pod crash).
SELECT pg_try_advisory_lock(@key)
Documentation follows the same path as code. If it isn't in the pull request, it didn't happen.
CS1591 is an error)CHANGELOG.md entry under UnreleasedDetails: how we document
| Tool | Answers | In this service |
|---|---|---|
| Storybook | "Show me the pieces of the UI." | Not applicable (no UI components) |
| Docusaurus | "Teach me about the product and the system." | Handbook · docs/ |
| OpenAPI | "Tell me exactly how to call the API." | API reference · /openapi/v1.json |
| XML docs / DocFX | "Tell me about the .NET code." | .NET reference · IntelliSense |
| Git | "Tell me what changed and when." | Pull requests ↗ · CHANGELOG ↗ |
| SQL comments | "Tell me what this is doing to the data." | Migrations · query rules |
Everything here is copyable. Start with the cheapest piece that enforces itself, then add the handbook.
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>/docs/api, give every route .WithSummary, and copy ApiDocsTests.build/docfx for the .NET reference at /docs/code/.website/ and start docs/ from the templates: intro, product, architecture overview, service card, ADRs, events, database, developer guide.event-pages.py plus EventDocsTests), and write the prose by hand.The playbook · checklist · templates (service card, event page, ADR, XML docs)