Metadata-Version: 2.4
Name: openconstructionerp
Version: 6.2.2
Summary: Open-source construction cost estimation — multi-currency BOQ, AI vector matching, CAD/BIM takeoff without IfcOpenShell, resource-based cost DB import with example templates, 48 regional catalogues, 24 languages. AGPL-3.0. After install, run: openconstructionerp
Project-URL: Homepage, https://datadrivenconstruction.io/erp
Project-URL: Documentation, https://openconstructionerp.com/docs
Project-URL: Repository, https://github.com/datadrivenconstruction/OpenConstructionERP
Project-URL: Issues, https://github.com/datadrivenconstruction/OpenConstructionERP/issues
Project-URL: Changelog, https://github.com/datadrivenconstruction/OpenConstructionERP/blob/main/CHANGELOG.md
Author-email: Artem Boiko <info@datadrivenconstruction.io>
Maintainer-email: Data Driven Construction <info@datadrivenconstruction.io>
License-Expression: AGPL-3.0-or-later
Keywords: ERP,bim,boq,construction,construction-management,cost-estimation,cwicr,din276,dxf,estimation,gaeb,ifc,openconstructionerp,takeoff
Classifier: Development Status :: 4 - Beta
Classifier: Framework :: FastAPI
Classifier: Intended Audience :: End Users/Desktop
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Office/Business :: Financial
Classifier: Topic :: Scientific/Engineering
Requires-Python: >=3.12
Requires-Dist: aiosqlite>=0.20.0
Requires-Dist: alembic<2,>=1.14.0
Requires-Dist: asyncpg>=0.30.0
Requires-Dist: bcrypt>=4.0.0
Requires-Dist: defusedxml>=0.7.1
Requires-Dist: duckdb<2,>=1.2.0
Requires-Dist: email-validator>=2.1.0
Requires-Dist: ezdxf>=0.18.0
Requires-Dist: fastapi<1,>=0.116.0
Requires-Dist: httpx<1,>=0.28.0
Requires-Dist: openpyxl>=3.1.0
Requires-Dist: orjson>=3.10.0
Requires-Dist: pandas<4,>=2.2.0
Requires-Dist: pdfplumber>=0.11.0
Requires-Dist: pixeltable-pgserver<0.6,>=0.5.1
Requires-Dist: psycopg2-binary>=2.9.10
Requires-Dist: pyarrow<25,>=18.0.0
Requires-Dist: pydantic-settings<3,>=2.6.0
Requires-Dist: pydantic<3,>=2.10.0
Requires-Dist: python-dateutil>=2.9.0
Requires-Dist: python-jose[cryptography]>=3.3.0
Requires-Dist: python-multipart>=0.0.26
Requires-Dist: pyyaml>=6.0
Requires-Dist: rapidfuzz>=3.0.0
Requires-Dist: reportlab>=4.0.0
Requires-Dist: sqlalchemy[asyncio]<2.1,>=2.0.36
Requires-Dist: structlog>=24.4.0
Requires-Dist: trimesh>=4.0.0
Requires-Dist: uvicorn[standard]<1,>=0.32.0
Provides-Extra: ai
Requires-Dist: flagembedding>=1.3.0; extra == 'ai'
Requires-Dist: polars>=1.0.0; extra == 'ai'
Requires-Dist: qdrant-client>=1.12.0; extra == 'ai'
Requires-Dist: sentence-transformers>=3.3.0; extra == 'ai'
Provides-Extra: all
Requires-Dist: aioboto3>=12.0.0; extra == 'all'
Requires-Dist: boto3>=1.35.0; extra == 'all'
Requires-Dist: celery[redis]>=5.4.0; extra == 'all'
Requires-Dist: fastembed>=0.4.0; extra == 'all'
Requires-Dist: flagembedding>=1.3.0; extra == 'all'
Requires-Dist: lancedb>=0.17.0; extra == 'all'
Requires-Dist: opencv-python-headless>=4.10.0; extra == 'all'
Requires-Dist: paddleocr>=2.9.0; extra == 'all'
Requires-Dist: pillow>=12.1.1; extra == 'all'
Requires-Dist: polars>=1.0.0; extra == 'all'
Requires-Dist: pymupdf>=1.25.0; extra == 'all'
Requires-Dist: qdrant-client>=1.12.0; extra == 'all'
Requires-Dist: sentence-transformers>=3.3.0; extra == 'all'
Requires-Dist: ultralytics>=8.3.0; extra == 'all'
Provides-Extra: analytics
Provides-Extra: cv
Requires-Dist: opencv-python-headless>=4.10.0; extra == 'cv'
Requires-Dist: paddleocr>=2.9.0; extra == 'cv'
Requires-Dist: pillow>=12.1.1; extra == 'cv'
Requires-Dist: pymupdf>=1.25.0; extra == 'cv'
Requires-Dist: ultralytics>=8.3.0; extra == 'cv'
Provides-Extra: dev
Requires-Dist: factory-boy>=3.3.0; extra == 'dev'
Requires-Dist: httpx>=0.28.0; extra == 'dev'
Requires-Dist: mypy>=1.13.0; extra == 'dev'
Requires-Dist: pre-commit>=4.0.0; extra == 'dev'
Requires-Dist: pyinstaller>=6.0.0; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.24.0; extra == 'dev'
Requires-Dist: pytest-cov>=6.0.0; extra == 'dev'
Requires-Dist: pytest-xdist>=3.5.0; extra == 'dev'
Requires-Dist: pytest>=8.3.0; extra == 'dev'
Requires-Dist: ruff>=0.8.0; extra == 'dev'
Provides-Extra: s3
Requires-Dist: aioboto3>=12.0.0; extra == 's3'
Provides-Extra: semantic
Requires-Dist: flagembedding>=1.3.0; extra == 'semantic'
Requires-Dist: polars>=1.0.0; extra == 'semantic'
Requires-Dist: qdrant-client>=1.12.0; extra == 'semantic'
Requires-Dist: sentence-transformers>=3.3.0; extra == 'semantic'
Provides-Extra: server
Requires-Dist: boto3>=1.35.0; extra == 'server'
Requires-Dist: celery[redis]>=5.4.0; extra == 'server'
Provides-Extra: vector
Requires-Dist: fastembed>=0.4.0; extra == 'vector'
Requires-Dist: lancedb>=0.17.0; extra == 'vector'
Description-Content-Type: text/markdown

# OpenConstructionERP

**Open-source construction cost estimation — BOQ, AI matching, CAD/BIM takeoff.**

> ### ▶ After `pip install`, type one command: **`openconstructionerp`**
>
> That's the only thing you need to remember. It prints a welcome,
> asks **press `o` + Enter** to open the app in your browser, then
> starts the server at **http://127.0.0.1:8080** (and shows a login).

---

## Install

```bash
pip install openconstructionerp
```

Python 3.12+ required. That's it — no Docker, no Postgres, no Redis.

## First run

```bash
openconstructionerp
```

This single command:

1. Creates a local SQLite database in your home data folder
2. Seeds demo data (projects, BOQs, cost catalogues)
3. Starts the API + UI at **http://127.0.0.1:8080**
4. Prints demo login credentials

No config files. No environment variables. It just works.

## Subsequent runs

```bash
openconstructionerp
```

Same command every time. Your data persists between runs.

## Other commands

```bash
openconstructionerp init-db    # create the local database
openconstructionerp serve      # start the server
openconstructionerp doctor     # health check if anything looks wrong
openconstructionerp welcome    # re-print the welcome screen
```

## CLI reference

```bash
openconstructionerp serve   [--host HOST] [--port PORT] [--data-dir DIR] [--open] [--quiet]
openconstructionerp init-db [--data-dir DIR]    # Create local SQLite DB + data dirs
openconstructionerp doctor  [--port PORT]       # Run installation health checks
openconstructionerp seed    [--demo]            # Load demo project data
openconstructionerp version                     # Show version
```

## What you get

- **BOQ editor** — hierarchical bill of quantities with assemblies, formulas, multi-currency
- **Cost database** — import your own rates (Excel/CSV) or use the bundled example templates
- **AI estimation** — vector search matches line items to historical cost data
- **CAD/BIM takeoff** — quantities from DWG/DXF and IFC/Revit (via DDC, no IfcOpenShell)
- **4D / 5D** — cost-loaded schedule, earned value (SPI/CPI), cash-flow, what-if scenarios
- **Validation** — DIN 276, GAEB, NRM, MasterFormat rule packs flag issues at import
- **Reporting** — PDF/Excel exports, dashboards, BCF issue exchange

## Configuration (optional)

Everything works with zero config. To customize, pass flags or set environment variables:

```bash
openconstructionerp serve --port 9000 --data-dir /var/lib/oce

# Or via environment:
DATABASE_URL=postgresql+asyncpg://user:pass@host/db   # Use Postgres instead of SQLite
OE_CLI_PORT=9000                                       # Change the port
OE_CLI_DATA_DIR=/var/lib/oce                           # Change the data location
```

## Links

- Docs: https://openconstructionerp.com
- Issues: https://github.com/DataDrivenConstruction/OpenConstructionERP/issues
- Source: https://github.com/DataDrivenConstruction/OpenConstructionERP

## License

AGPL-3.0-or-later. Commercial licensing available — contact info@datadrivenconstruction.io
