PHPackages                             demai/business-process - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. demai/business-process

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

demai/business-process
======================

Package for fast business process logic creation and realization

v1.0.0(3w ago)06GPL-3.0-onlyPHPPHP &gt;=8.1CI passing

Since May 11Pushed 3w agoCompare

[ Source](https://github.com/ArtemIsamiddinov/businessprocess)[ Packagist](https://packagist.org/packages/demai/business-process)[ RSS](/packages/demai-business-process/feed)WikiDiscussions main Synced 1w ago

READMEChangelog (1)Dependencies (3)Versions (9)Used By (0)

Компонент бизнес-процессов Demai (Business Process Component)
=============================================================

[](#компонент-бизнес-процессов-demai-business-process-component)

Легковесная и гибкая библиотека для создания бизнес-процессов на вашей платформе. Проект использует строгую типизацию, полностью соответствует стандартам PSR-4 и PSR-12, а также интегрирован с диспетчером событий PSR-14.

Особенности
-----------

[](#особенности)

- **Интерфейсный подход**: Полная свобода реализации для ваших сущностей и состояний.
- **Безопасность и надежность**: Защита от ошибок неинициализированных свойств (Fatal Error) благодаря встроенному паттерну *Null Object*.
- **Разделение логики**: Легкое подключение кастомной валидации переходов через привязку уникальных валидаторов к конкретным состояниям.
- **Событийная архитектура**: Автоматическая отправка стандартизированного события `StateChangedEvent` после каждого успешного перехода при использовании любого PSR-14 совместимого диспетчера.
- **Fluent API**: Поддержка цепочек вызовов для быстрой настройки конфигурации состояний.

Установка
---------

[](#установка)

Установите пакет с помощью Composer:

```
composer require demai/business-process
```

Быстрый старт
-------------

[](#быстрый-старт)

### 1. Реализация сущности

[](#1-реализация-сущности)

Создайте класс вашей бизнес-модели (например, Заказ или Задача), унаследовав его от `BaseEntity`:

```
use Demai\BusinessProcess\Entity\BaseEntity;

class Order extends BaseEntity
{
    public function __construct(
        private int $id
    ) {
        // До явной установки статуса свойство state автоматически
        // защищено объектом NullState
    }

    public function getId(): int
    {
        return $this->id;
    }
}
```

### 2. Создание состояний и разрешенных маршрутов

[](#2-создание-состояний-и-разрешенных-маршрутов)

Определите ваши состояния, унаследовав их от `BaseState`. Метод `getNext()` диктует карту разрешенных переходов:

```
use Demai\BusinessProcess\State\BaseState;

class NewOrderState extends BaseState
{
    public function getNext(): array
    {
        // Возвращаем объекты состояний, на которые разрешен переход
        return [
            new ProcessingOrderState(),
            new CancelledOrderState()
        ];
    }
}
```

### 3. Управление переходами через StateRouter

[](#3-управление-переходами-через-staterouter)

Используйте `StateRouter` для безопасного перевода сущности из одного состояния в другое с полной поддержкой валидации и сквозного контекста:

```
use Demai\BusinessProcess\StateRouter;

$order = new Order(123);
$order->setState(new NewOrderState()); // Задаем начальное состояние

// Инициализируем роутер (опционально вторым аргументом можно передать ваш PSR-14 EventDispatcher)
$router = new StateRouter($order);

// Выполняем переход с передачей контекста (например, ID пользователя)
$context = ['actor_id' => 42];
$result = $router->setState(new ProcessingOrderState(), false, $context);

if ($result === true) {
    echo "Состояние заказа успешно обновлено!";
} else {
    echo "Переход заблокирован: " . $result; // Например: "incorrect state" или текст ошибки из валидатора
}
```

Обработка событий
-----------------

[](#обработка-событий)

Каждый раз, когда состояние сущности успешно меняется (и в роутер был передан диспетчер), генерируется событие `StateChangedEvent`. Вы можете перехватить его в слушателях вашего приложения:

```
use Demai\BusinessProcess\StateChangedEvent;

class OrderNotificationListener
{
    public function __invoke(StateChangedEvent $event): void
    {
        $entity = $event->entity;       // Сама сущность (Order)
        $from = $event->fromState;     // Предыдущее состояние
        $to = $event->toState;         // Новое состояние
        $context = $event->context;   // Переданные метаданные (например, ['actor_id' => 42])

        // Ваша логика (отправка писем, логирование действия в аудит-лог и т.д.)
    }
}
```

Разработка и тестирование
-------------------------

[](#разработка-и-тестирование)

Если вы хотите внести изменения в саму библиотеку, убедитесь, что все тесты и проверки стиля кода проходят успешно.

Запуск тестов PHPUnit:

```
./vendor/bin/phpunit
```

Запуск линтера PHP CodeSniffer (стандарт PSR-12):

```
./vendor/bin/phpcs
```

Автоматическое исправление мелких ошибок форматирования:

```
./vendor/bin/phpcbf
```

Лицензия
--------

[](#лицензия)

Этот проект распространяется под лицензией GNU General Public License v3 (GPL-3.0-only). Подробности см. в файле [LICENSE](LICENSE).

###  Health Score

41

—

FairBetter than 87% of packages

Maintenance96

Actively maintained with recent releases

Popularity6

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity47

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

21d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/6aa697091aee9a5ceb117dc8e73617dbff6700cc77a801958e6f5cb3f6f237a3?d=identicon)[ArtemIsamiddinov](/maintainers/ArtemIsamiddinov)

---

Top Contributors

[![ArtemIsamiddinov](https://avatars.githubusercontent.com/u/283284672?v=4)](https://github.com/ArtemIsamiddinov "ArtemIsamiddinov (60 commits)")

###  Code Quality

TestsPHPUnit

Code StylePHP\_CodeSniffer

### Embed Badge

![Health badge](/badges/demai-business-process/health.svg)

```
[![Health](https://phpackages.com/badges/demai-business-process/health.svg)](https://phpackages.com/packages/demai-business-process)
```

###  Alternatives

[symfony/symfony

The Symfony PHP framework

31.4k86.9M2.2k](/packages/symfony-symfony)[symfony/event-dispatcher-contracts

Generic abstractions related to dispatching event

3.4k789.4M558](/packages/symfony-event-dispatcher-contracts)[phpro/soap-client

A general purpose SoapClient library

8955.9M52](/packages/phpro-soap-client)[deptrac/deptrac

Deptrac is a static code analysis tool that helps to enforce rules for dependencies between software layers.

2.9k7.9M99](/packages/deptrac-deptrac)[mcp/sdk

Model Context Protocol SDK for Client and Server applications in PHP

1.5k937.5k65](/packages/mcp-sdk)[akeneo/pim-community-dev

Akeneo PIM, the future of catalog management is open!

1.0k620.8k86](/packages/akeneo-pim-community-dev)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
