Reads our Candy PDF (deterministically, no OCR or model needed) and populates the consultant's own workbook using their formulas, column layout and PAYMENT column. Nothing is ever silently overwritten: every disagreement is reported, can be settled inside the app, and regenerated. - extract Candy text PDF -> tree (x-position column detection) - template layout detect, sequence align, write, totals, overrides - validate qty x rate and children-vs-subtotal reconciliation - profiles per-consultant layout profiles, stored on a volume Shipped with a Dockerfile + docker-compose for Coolify.
41 lines
1.3 KiB
YAML
41 lines
1.3 KiB
YAML
# MEGA INFRA · BOQ Converter
|
|
#
|
|
# Deploy on Coolify: New Resource -> Docker Compose -> point it at this repo
|
|
# and set the compose file to `docker-compose.yml`. Coolify builds the image
|
|
# from the Dockerfile, publishes the port, and puts its own HTTPS in front.
|
|
|
|
services:
|
|
boq-converter:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
image: mega-infra/boq-converter:latest
|
|
container_name: mega-boq-converter
|
|
restart: unless-stopped
|
|
|
|
# Coolify routes to the first exposed port. Declaring it explicitly stops
|
|
# it guessing from the Dockerfile.
|
|
expose:
|
|
- "8501"
|
|
|
|
environment:
|
|
# Where the per-consultant layout profiles are written. MUST be on the
|
|
# volume below or every redeploy forgets who is who.
|
|
BOQ_PROFILES: /data/profiles
|
|
STREAMLIT_BROWSER_GATHER_USAGE_STATS: "false"
|
|
TZ: Africa/Johannesburg
|
|
|
|
volumes:
|
|
# Named volume, so saved consultant profiles survive a rebuild. Without
|
|
# this the "remember this consultant's layout" feature resets every deploy.
|
|
- boq-profiles:/data/profiles
|
|
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-fsS", "http://localhost:8501/_stcore/health"]
|
|
interval: 30s
|
|
timeout: 5s
|
|
retries: 3
|
|
start_period: 20s
|
|
|
|
volumes:
|
|
boq-profiles:
|