SPB Git

spb/air Public MIT

AIR — The Language of Accounting.

Python 100%
2.4 KB · 77 lines python
Raw Blame History
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