""" HSEQ Kennisbank — Flask Web Application JvG Consultancy — HSEQ Intelligence Monitor """ import os import sys from flask import Flask, render_template, request, jsonify, redirect, url_for from indexer import init_db, index_directory, DB_PATH from search import ( search_documents, get_document, get_categories, get_authors, get_recent_documents, get_stats, get_all_documents ) app = Flask(__name__) app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY', 'hseq-kennisbank-2026') @app.template_filter('cat_class') def cat_class(category): if not category: return 'overig' cat = category.lower() if any(w in cat for w in ['intern', 'procedure']): return 'procedures' if any(w in cat for w in ['wet', 'regel', 'arbo']): return 'wetgeving' if any(w in cat for w in ['scrap']): return 'scraped' if any(w in cat for w in ['arbeidsgroep', 'specifiek']): return 'arbeidsgroepen' return 'overig' @app.before_request def ensure_db(): """Initialize DB on first request if needed""" if not os.path.exists(DB_PATH): init_db() @app.route('/') def index(): stats = get_stats() categories = get_categories() category = request.args.get('category', '').strip() page = request.args.get('page', 1, type=int) if page < 1: page = 1 documents = get_all_documents(category=category or None, page=page, per_page=20) return render_template('index.html', stats=stats, categories=categories, category=category, documents=documents) @app.route('/search') def search(): q = request.args.get('q', '').strip() category = request.args.get('category', '').strip() page = request.args.get('page', 1, type=int) if page < 1: page = 1 categories = get_categories() authors = get_authors() results_data = search_documents(q, category, page=page, per_page=20) return render_template('search.html', q=q, category=category, categories=categories, authors=authors, results=results_data) @app.route('/document/') def document(doc_id): data = get_document(doc_id) if not data: return render_template('base.html'), 404 highlight_q = request.args.get('q', '').strip() return render_template('document.html', doc=data['document'], chunks=data['chunks'], highlight_q=highlight_q) @app.route('/api/index', methods=['POST']) def api_index(): path = request.json.get('path', '/root/Documents/HSEQ_kennis/') if request.is_json else '/root/Documents/HSEQ_kennis/' init_db() result = index_directory(path) return jsonify(result) @app.route('/api/stats') def api_stats(): return jsonify(get_stats()) @app.route('/api/categories') def api_categories(): return jsonify(get_categories()) if __name__ == '__main__': port = 5052 for arg in sys.argv[1:]: if arg.startswith('--port'): val = arg.split('=', 1)[1] if '=' in arg else (sys.argv[sys.argv.index(arg)+1] if sys.argv.index(arg)+1 < len(sys.argv) else '5052') port = int(val) break init_db() print(f"HSEQ Kennisbank starting on http://0.0.0.0:{port}") app.run(host='0.0.0.0', port=port, debug=False)