Skip to content
CAI
Software that uses CAICheck a score

proophsoftware/fee-office

43.8

Weak · 21 September 2026

6.6k

lines of production code

PHP

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a domain-driven, event-sourced application called 'Fee Office' that manages real estate and administrative operations. It provides APIs for contact administration, contract management, and realty registration, each with their own database schemas and event streams. The architecture leverages CQRS and an event machine to handle commands, events, and queries across these distinct business domains.

Features

Add Swagger UI for API documentation

Added Swagger UI to the public directory, providing an interactive documentation interface for the API. The configuration includes endpoints for 'Realty Messagebox', 'Contact Administration', and 'Contract Messagebox', enabling users to explore and test these specific API modules directly through the browser.

public · high confidence

Add Swagger support for CRUD modules

The application now includes utility classes for generating Swagger/OpenAPI documentation from FastRoute definitions, including \Swagger\, \Operation\, \Parameter\, and \Path\ classes that convert route patterns into structured operation definitions. Additionally, a \ContractContactAdministrationProxy\ and its factory are introduced to bridge the contract layer with the contact administration module, and the \ConfigProvider\ is updated to register the new dependencies and delegators for application configuration.

src/App · high confidence

Add contact card management API and persistence

The Contact Administration module now exposes a full CRUD API for managing contact cards (representing persons or companies) and their associated bank accounts. Users can create, retrieve, and search for contact cards, as well as attach bank accounts to existing cards. The module includes a document store for persistence and a script to import initial contact data from a JSON file. Additionally, a Swagger schema endpoint is provided to expose the API's OpenAPI specification.

src/ContactAdministration · high confidence

Add contract management domain and API

Introduced the ContractManagement module, providing the infrastructure for managing rental contracts. This includes the domain model for contracts and contacts, a context provider to resolve superior and subordinate parties, and an API layer defining commands (AddContract), events (ContractAdded), and queries (HealthCheck). The module also registers HTTP endpoints for a message box and schema generation, wired via a config provider and service factories for the event machine, document store, and event store.

src/ContractManagement · high confidence

Added database schemas and RabbitMQ configuration for new domain services

The environment now includes initial database schemas and user permissions for six new domains: realty, contact, fee, payment, accounting, and contract. Each domain receives its own PostgreSQL schema with event stream and projection tables, along with dedicated database users and grants. Additionally, a RabbitMQ broker definition and configuration are added, establishing the 'event-machine' vhost, 'ui-queue' and 'ui-exchange' bindings, and SSL-enabled management and STOMP interfaces.

env · high confidence

Introduce realty registration domain with commands, events, and queries

Added the initial structure for the realty registration feature, including command and event definitions for buildings, entrances, and apartments, along with corresponding query resolvers and pre-processors that validate the existence of related entities. The change also includes the event machine configuration, HTTP middleware for message handling, and import data files for testing.

src/RealtyRegistration · high confidence

Behavioural changes

Add book template structure and styling

The book template now includes a complete set of PHP templates (head, body, nav, footer, etc.) that define the HTML structure, CSS styling, and helper functions for rendering the documentation site. This change introduces the visual and structural foundation for the book's appearance and layout.

book/template · medium confidence

Configuration providers for contact, contract, and realty registration added

The application's configuration has been updated to include new service providers for Contact Administration, Contract Management, and Realty Registration, alongside the Zend Problem Details library. This enables the application to recognize and initialize these specific functional areas through their respective configuration providers.

config · high confidence

Replaced Zend Expressive skeleton with Fee Office DDD/CQRS/ES demo

The project has been refactored from a generic PHP application skeleton to a specific domain-driven design, CQRS, and event sourcing demo application called 'Fee Office'. This change updates the README to reflect the new purpose, introduces a Docker Compose configuration to run the application and its dependencies (PostgreSQL, PHP, Nginx), and adds a test script for the new domain logic. Additionally, the license header was updated from Zend Technologies to prooph software GmbH.

(repo-wide) · high confidence

Dependencies

Introduce Fee Office domain modules and update root dependencies

Added three new domain modules—Contact Administration, Contract Management, and Realty Registration—each with their own composer.json defining dependencies like proophsoftware/event-machine and zendframework components. The root composer.json was updated to include these local path repositories and require the new packages, while also adding bookdown and commonmark extensions for documentation. The root project name and description were changed to reflect the Fee Office API Gateway.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 48 → 44 (-4.2)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 98 → 98 (+0.1)
  • Architecture 100 → 71 (-29.0)
  • Maturity 54 → 56 (+2.8)
  • Readiness 17 → 15 (-2.4)
  • Security 96 → 96 (+0.4)

Resolved (12)

  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • Duplicated block (22 lines × 2) (src/ContractManagement/src/Http/MessageSchemaMiddleware.php)
  • Duplicated block (8 lines × 2) (src/ContractManagement/src/Http/MessageSchemaMiddleware.php)
  • Duplicated block (9 lines × 3) (src/ContactAdministration/src/Infrastructure/System/ServiceFactory.php)
  • High CVE: [GHSA redacted] (composer.lock)
  • High vulnerability: [GHSA redacted] (composer.lock)
  • No exposed public API
  • Test reliability not included
  • The README is a one-paragraph project description with no installation or setup steps for the demo application itself. (README.md)
  • early-stage repository — too little history to judge knowledge freshness
  • single-maintainer — knowledge-concentration (bus factor) risk

New (33)

  • Abandoned package: zendframework/zend-component-installer
  • Abandoned package: zendframework/zend-config-aggregator
  • Abandoned package: zendframework/zend-diactoros
  • Abandoned package: zendframework/zend-expressive
  • Abandoned package: zendframework/zend-expressive-fastroute
  • Abandoned package: zendframework/zend-expressive-helpers
  • Abandoned package: zendframework/zend-servicemanager
  • Abandoned package: zendframework/zend-stdlib
  • Coverage not measured — no coverage collector is wired up
  • Duplicated block (10 lines × 3) (src/ContactAdministration/src/Infrastructure/System/ServiceFactory.php)
  • Duplicated block (11 lines × 2) (src/ContractManagement/src/Infrastructure/System/ServiceFactory.php)
  • Duplicated block (19 lines × 2) (src/ContractManagement/src/Http/MessageSchemaMiddleware.php)
  • Duplicated block (25 lines × 2) (src/ContractManagement/src/Model/Realty/ApartmentId.php)
  • Duplicated block (30 lines × 2) (src/ContractManagement/src/Http/MessageSchemaMiddleware.php)
  • Duplicated block (5 lines × 2) (src/ContractManagement/src/Model/Contract/EndDate.php)
  • Duplicated block (6 lines × 2) (src/ContractManagement/src/Infrastructure/System/ServiceFactory.php)
  • Duplicated block (6 lines × 2) (src/ContractManagement/src/Infrastructure/System/ServiceFactory.php)
  • Duplicated block (6 lines × 2) (src/ContractManagement/src/Infrastructure/System/ServiceFactory.php)
  • Duplicated block (6 lines × 2) (src/ContractManagement/src/Infrastructure/System/ServiceFactory.php)
  • Duplicated block (6 lines × 2) (src/ContractManagement/src/Infrastructure/System/ServiceFactory.php)
  • …and 13 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

proophsoftware/fee-office was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 21 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 480a8b71489d35b17069f5c79f3712f66ce06c75 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-fa71c66cabd8.