spb/air Public MIT
AIR — The Language of Accounting.
Python 100%
1# =============================================================================2# Projet : AIR — Accounting Intermediate Representation3# Auteur : Simon-Pierre Boucher4# Contact : contact@spboucher.ai5# Fichier : compiler.py6# Description : Top-level AIC entry point — AIR document + ALSL policies -> CompiledJournal.7# =============================================================================8"""compile_document(): the deterministic core of AIR.910Same AIR document + same policy set => byte-identical journal, always.11No LLM, no network, no clock inside this function.12"""13from __future__ import annotations1415from aic.diagnostics import Diagnostic16from aic.pass_manager import PassManager17from aic.passes.classification import ClassificationPass18from aic.passes.fx import FxPass19from aic.passes.posting import PostingPass20from aic.passes.tax import TaxPass21from aic.passes.validation import ValidationPass22from aic.unit import CompilationUnit23from alsl.model import PolicySet24from core.events import AirDocument25from core.journal import CompiledJournal2627DEFAULT_PIPELINE = [28 ValidationPass(),29 ClassificationPass(),30 TaxPass(),31 FxPass(),32 PostingPass(),33]343536def _optimized_pipeline() -> list:37 from aic.passes.optimize import (38 DuplicateDetectionPass,39 FusionPass,40 NettingPass,41 )42 return [43 ValidationPass(),44 DuplicateDetectionPass(),45 ClassificationPass(),46 TaxPass(),47 FxPass(),48 PostingPass(),49 NettingPass(),50 FusionPass(),51 ]525354def compile_document(55 document: AirDocument,56 policies: PolicySet,57 pipeline: list | None = None,58 optimize: bool = False,59) -> tuple[CompiledJournal, list[Diagnostic]]:60 """Compile an AIR document into a journal. Raises CompilationError on errors.6162 optimize=True adds the Phase 6 passes (duplicate detection, netting,63 fusion); the invariant is still verified after every pass.64 """65 if pipeline is None:66 pipeline = _optimized_pipeline() if optimize else DEFAULT_PIPELINE67 unit = CompilationUnit(document=document, policies=policies)68 manager = PassManager(pipeline)69 manager.run(unit)70 journal = CompiledJournal(71 entries=list(unit.entries),72 provenance=unit.provenance,73 policy_set=policies.name,74 policy_version=policies.version,75 )76 return journal, unit.diagnostics77