MEGA-BOQ-WEBAPP/boq_engine
MEGA INFRA f965e0cc93 Make the consultant profile actually apply, and show the build
The profile store was write-only: the app saved each consultant's detected
column map and displayed it, but every run re-detected from scratch. So the
original promise - drop their file in and it knows the format - wasn't kept,
and worse, the sidebar could show a stale map that didn't match the file in
front of you.

Now the saved map is applied, with two guards:
- it is only used when the columns it names still exist and still make sense
  for THIS file, so a template that changed shape falls back to detection
- 'Re-detect from scratch' in the sidebar overrides it deliberately

The hint path runs the same data verification and description-run derivation as
the fresh path. Without that a warm run placed 194 lines and a cold one placed
192 - both defensible, but a converter that gives two answers to the same pair
of files cannot be trusted on a tender. Cold and warm are now identical on both
sample pairs.

Also: the build SHA is baked in at image build time and shown in the sidebar,
because 'is my deploy current?' is otherwise unanswerable from outside -
Streamlit serves a client-rendered shell, so curl cannot see which commit is
serving.
2026-10-02 20:54:02 +02:00
..
__init__.py MEGA INFRA BOQ Converter — Candy PDF to consultant Excel 2026-10-01 02:32:13 +02:00
extract.py Put a person on the lines the tool cannot place 2026-10-02 14:19:24 +02:00
populate.py MEGA INFRA BOQ Converter — Candy PDF to consultant Excel 2026-10-01 02:32:13 +02:00
profiles.py Make the consultant profile actually apply, and show the build 2026-10-02 20:54:02 +02:00
template.py Make the consultant profile actually apply, and show the build 2026-10-02 20:54:02 +02:00
theme.py MEGA INFRA BOQ Converter — Candy PDF to consultant Excel 2026-10-01 02:32:13 +02:00
validate.py MEGA INFRA BOQ Converter — Candy PDF to consultant Excel 2026-10-01 02:32:13 +02:00
verify.py Gate the download on proof read back from the file 2026-10-02 13:58:01 +02:00