| # Contract Risk Analyzer (CRA) Stack — Current State Specification |
|
|
| This document presents the detailed architectural blueprint, directory layout, subsystem specifications, and runtime configuration of the current **SYDECO Contract Risk Analyzer (CRA)** system. |
|
|
| --- |
|
|
| ## 1. System Architecture Overview |
|
|
| The Contract Risk Analyzer is a secure, containerized, multi-tenant contract auditing platform. It is engineered with a **local-first, privacy-respecting posture** that operates fully offline, preventing legal document assets from traversing external networks. |
|
|
| ```mermaid |
| graph TD |
| Client[Client Browser / Frontend] -->|HTTPS / Port 443| Nginx[Nginx Reverse Proxy] |
| Nginx -->|Port 5000| Flask[Flask Backend / Gunicorn] |
| Flask -->|Memory/TCP| Redis[Redis Rate Limiter] |
| Flask -->|Disk Reads/Writes| SQLite[(SQLite DB: sydeco.db)] |
| Flask -->|Loopback| Worker[In-Process ThreadPool Worker] |
| Flask -->|HTTP / Port 8000| Translator[Translation Service] |
| Translator -->|CTranslate2 INT8 / MarianMT| Models[(Local NMT Model Cache)] |
| ``` |
|
|
| The system consists of four primary nodes: |
| 1. **Ingress & Reverse Proxy (Nginx)**: Terminates TLS, enforces security headers, and routes traffic. |
| 2. **App Server (Flask/Gunicorn)**: Orchestrates the analysis pipeline, handles user authentication, multi-tenant databases, audit logging, and document encryption/decryption. |
| 3. **Background Worker**: In-process single-thread queue (`ThreadPoolExecutor`) that processes heavy ML classification and reasoning tasks without stalling Flask workers. |
| 4. **Translation Microservice (MarianMT)**: Direct and pivoted translation service using optimized CTranslate2 INT8 model formats. |
|
|
| --- |
|
|
| ## 2. Directory Structure |
|
|
| Below is the recursive map of active code directories and configuration assets: |
|
|
| * [datasets/](file:///mnt/c/Users/ADVAN/cra/datasets) — Reference databases compiled by legal experts: |
| * `abusive_clauses.csv`: Abusive clause keywords, impact scores, and recommendations. |
| * `dangerous_clauses.csv`: Dangerous clause indicators. |
| * `dangerous_clauses_MASTERv2.csv`: Fully merged set of dangerous clauses and additions. |
| * `illegal_clauses.csv`: Mandatory criminal/public policy violations. |
| * `leonine_clauses.csv`: Overbearing or one-sided contract clauses. |
| * `required_clauses_MASTER.csv`: Global reference library for expected clauses by contract type. |
| * `legal_citations.csv`: Localized legal code articles (BE, FR, ID, NL, US, EN&W, generic). |
| * `risk_levels.csv`: Score ranges mapping to LOW/MEDIUM/HIGH/CRITICAL categories. |
| * [deploy/](file:///mnt/c/Users/ADVAN/cra/deploy) — System configuration and orchestration templates: |
| * `nginx.conf`: Hardware headers, SSL certificate routing, and Gunicorn proxy configuration. |
| * `ldv-backup.cron`: Nightly database and upload volume backup cron schedule. |
| * `setup.sh` & `gen-cert.sh`: SSL provisioning script hooks. |
| * [ldv-backend/](file:///mnt/c/Users/ADVAN/cra/ldv-backend) — Primary Flask application package: |
| * `app.py`: REST routes, file ingestion, OCR checks, and process controls. |
| * `auth.py`: Cryptographic password hashing, user roles, bearer token authentication, and MFA hooks. |
| * `crypto.py`: Dynamic symmetric encryption (Fernet / AES-256) at rest for raw text and database variables. |
| * `database.py`: SQLite engine mapping tenant limits, retention times, download links, and durably written audit logs. |
| * `worker.py`: Background job consumer utilizing Python thread-pools. |
| * `pdf_report.py`: Document summary report generator utilizing ReportLab. |
| * `translator.py` & `translator_client.py`: Language gateways coordinating remote Google translate or local Translation Service. |
| * `sydeco_engine.py`: Direct rule-based backup clause classification interface. |
| * [detector/](file:///mnt/c/Users/ADVAN/cra/ldv-backend/detector) — Document scanning engine layers: |
| * `clause_db.py` & `risk_clause_db.py`: Database adapters mapping CSV rows to internal rules. |
| * `citation_db.py`: In-memory index matching citations to flagged clauses. |
| * `detector_rules.py`: Layer 1 deterministic regex rule set. |
| * `detector_distilbert.py`: Layer 2 zero-shot DistilBERT classifier. |
| * `detector_scorer.py`: Layer 3 risk scoring formulas. |
| * `detector_explain.py`: Layer 4 opt-in Qwen explanation prompts. |
| * `detector_profiles.py`: JSON contract profile manager. |
| * [scripts/](file:///mnt/c/Users/ADVAN/cra/ldv-backend/scripts) — Utility scripts: |
| * `import_datasets.py` & `train_mlp.py`: Machine learning training pipeline tools. |
| * `backup.py`: DB backup utility. |
| * [tests/](file:///mnt/c/Users/ADVAN/cra/ldv-backend/tests) — Integration and unit test cases. |
| * [ldv-frontend/](file:///mnt/c/Users/ADVAN/cra/ldv-frontend) — Static single-page dashboard application: |
| * `index.html`: Client upload portal and stepper-guided analysis. |
| * `admin.html`: Organizations and User management dashboard. |
| * `citations.html`: Citation verification portal. |
| * `account.html`: User account, password, and MFA configuration page. |
| * [lightml-translator/](file:///mnt/c/Users/ADVAN/cra/lightml-translator) — Offline translation service container: |
| * `app/`: Cleaner modules, PII masking, glossary lookups, and routing engines. |
| * `config/settings.py`: Port, cache sizes, and HuggingFace directories. |
| * `download_models.py`: Dependency downloader for MarianMT models. |
| * `tests/`: Marian and CTranslate2 stress test suite. |
| * [uiux/](file:///mnt/c/Users/ADVAN/cra/uiux) — HTML mockups and design assets. |
|
|
| --- |
|
|
| ## 3. Subsystem Specifications |
|
|
| ### 3.1. Ingestion & Security Controls |
| * **Upload Limit**: Enforced at 10 MB. Files are read in chunks up to 10 MB + 1 byte; if the limit is exceeded, an HTTP 413 error is returned. |
| * **MIME Validation**: Validated via `python-magic` on the first 4096 bytes. ZIP files mimicking `.docx` are resolved correctly, while malicious or renamed extensions (e.g. `.png` as `.pdf`) are rejected with HTTP 400. |
| * **Rate Limiting**: Configured using `Flask-Limiter` with Redis. Capped at 10 requests/minute on `/login`, 20 requests/minute on `/upload`/`/analyze`, and 60 requests/minute default. |
|
|
| ### 3.2. ML Core Pipeline (4 Layers) |
| * **Layer 1 (Rules)**: Executes regex rules matching 7 jurisdictions and 11 clause types, followed by keyword corroboration in `risk_clause_db.py`. |
| * **Layer 2 (DistilBERT)**: Translates non-English texts to English, splits them into paragraphs, and feeds them to `typeform/distilbert-base-uncased-mnli`. Labels require a confidence threshold of `0.70`. |
| * **Semantic Backfill**: Promotes false negatives. Re-checks missing required clauses with semantic NLI; if text matches above `0.65`, the clause is marked present, avoiding missing-clause penalties. |
| * **Layer 3 (Scorer)**: Adjusts scores using contract profiles. Critical omissions drop scores by up to 20 points, and red flags trigger deductions of 25 (HIGH) or 10 (MEDIUM) points. |
| * **Layer 4 (Qwen)**: Generates detailed explanation summaries using Qwen3-1.7B, triggered with the `explain=1` parameter. |
|
|
| ### 3.3. Isolation, Security at Rest, and Auditing |
| * **Data Encryption**: AES-256 encryption via Fernet keys (`LDV_ENCRYPTION_KEY`). File uploads, extracted text, and results are encrypted before being written to disk. |
| * **Purging & Retention**: Analyses are assigned an expiration date based on organizational policies. Purging is executed via `manage.py purge` (vacuuming the database to completely wipe data). |
| * **Durable Audit Trails**: Key system events write to the SQLite `audit_log` table and are double-written to `audit_durable.log` in append-only mode. |
|
|
| ### 3.4. Offline NMT Pipeline |
| * **Translator microservice**: Uses Helsinki-NLP MarianMT models converted to CTranslate2 INT8 format, caching translated segments using a thread-safe LRU cache. Non-English language pairs translate by pivoting through English. |
|
|
| --- |
|
|
| ## 4. Hardware and Environment Configurations |
|
|
| * **Host OS**: Ubuntu (WSL2 / Linux). |
| * **Container Limits**: |
| * `cra-app-1`: 2.0 CPU cores, 1500 MB RAM limit. |
| * `cra-lightml-translator-1`: 2.0 CPU cores, 1000 MB RAM limit. |
| * `cra-redis-1`: 0.5 CPU cores, 256 MB RAM limit. |
| * **GPU availability**: NVIDIA RTX 4050 Laptop (5 GB VRAM) is present and available via CUDA, though CPU execution is currently set as the default for compatibility. |
|
|