page:blueprints:accounting firms:form collection:django

Accounting firms: Form collection using Django

Summary

A form collection blueprint for accounting firms built with Django on Ample. Domain schema:

Public Information

Kept Out of Scope Until Handling is Reviewed

Tax identifiers and financial statements, bank and payroll records, identity documents. Financial records and tax identifiers are regulated in most jurisdictions; the portal flows here model authorization only and claim no compliance.

Technical Basis

Verified on Django: content-type and size validation that rejects disallowed files, an object written to a private bucket and a row linking the record to the object key (reject=ok upload=ok linked=ok).

Resource Requirements

Infrastructure Requirements

  1. Compute: Apps run in isolated x86_64 Firecracker microVMs that auto-pause when idle and wake on request; sizes are the priced VM sizes.
  2. Postgres: Managed PostgreSQL 16 runs in its own microVM and is auto-provisioned when an app needs a database and no DATABASE_URL is supplied.
  3. S3-compatible object storage: Buckets are S3-compatible with issued credentials; PutObject and GetObject are verified by canary. Other S3 operations are not verified.

Workflow Steps

  1. Model the accounting firms domain: Create the tables client_entities, engagements, document_requests, deliverables, uploads.
  2. Model document requests per engagement with due dates and status.
  3. Validate uploaded files (type, size) before storing them in the private bucket and linking them to the request.
  4. Authorize uploads by client entity.
  5. Deploy and verify rejection of disallowed files and a linked upload.
  6. Run the synchronous deploy once and read the result. Re-running with no change is a no-op.

Examples

Django Pattern Fixture

Success Checks

Limitations

Cost Estimate

Monthly Amount: 10.0 USD

Evidence Summary

Django pattern fixture deployed on Ample; checks passed: content-type and size validation that rejects disallowed files, an object written to a private bucket.

Next Actions