Universal Construction Parser (BC3, Presto XML, PZU) for Node.js. Parses construction data into a canonical JSON format.
npm install construparserA robust, zero-dependency* Node.js library for parsing and interchanging standard construction data formats.
It supports BC3 (FIEBDC-3), Presto XML, and Presto PZU files, unifying them into a single, canonical JSON format.
> TRANSFORM YOUR CONSTRUCTION DATA INTO USABLE JSON.
- Universal Support: Handles BC3 (standard and variants), XML (Presto), and PZU (Compressed).
- Robust BC3 Parsing: intelligently handles multi-line records, single-tilde separators, and other common "real-world" format quirks.
- Order Independent: Parses hierarchies correctly even if parent items are defined after their children.
- Expression Evaluation: Built-in math engine (mathjs) to evaluate complex logic in measurements and prices.
- Encoding Safe: Handles windows-1252 (ISO-8859-1) Spanish encodings automatically.
``bash`
npm install construparserpulsing-pioneer
(Note: Replace with your actual package name if different)
`javascript
import ConstructionParser from './src/ConstructionParser.js'; // Adjust path as needed
import fs from 'fs';
// Read ANY supported file (bc3, xml, pzu)
const buffer = fs.readFileSync('path/to/project.bc3');
try {
// 1. Parse content
const result = ConstructionParser.parse(buffer, 'project.bc3');
// 2. Access Data
console.log(Project: ${result.project.summary});Total: ${result.project.price} EUR
console.log();Owner: ${result.metadata.owner}
console.log();
// 3. Traverse Items
result.project.items.forEach(chapter => {
console.log(Chapter: ${chapter.summary} (${chapter.items.length} items));
});
} catch (err) {
console.error("Parsing failed:", err.message);
}
`
The library includes a utility script to convert files directly to JSON.
`bashSyntax
npm run extract --
๐ JSON Data Model
The output follows a strict canonical structure:
`json
{
"metadata": {
"owner": "Software Generator Name",
"date": "01/01/2024",
"encoding": "WINDOWS-1252"
},
"project": {
"code": "PROJECT_ROOT",
"summary": "Full Project Name",
"price": 10000.00,
"unit": "ud",
"type": "0",
"items": [
{
"code": "CHAPTER_01",
"summary": "Earthworks",
"price": 5000.00,
"items": [...]
}
]
}
}
`๐งช Testing
We use Jest for testing.
`bash
npm test
`๐ค Contributing
1. Fork the repository
2. Create your feature branch (
git checkout -b feature/amazing-feature)
3. Commit your changes (git commit -m 'Add some amazing feature')
4. Push to the branch (git push origin feature/amazing-feature)
5. Open a Pull Request๐ License
Distributed under the MIT License. See
LICENSE` for more information.