feat(boc): Complete Business Operations Center v1.0

- Go backend API with full CRUD for all modules (CRM, Sales, Finance, HR, Legal, Marketing, Support, Purchase, Inventory, Projects, Automation, Analytics)
- Rust analytics service with parallel report generation
- C runtime with POSIX shared memory IPC
- PostgreSQL schema with 30+ tables, full migrations
- Redis cache, sessions, pub/sub
- Kafka event streaming with Zookeeper
- WebSocket hub for real-time updates
- Automation engine with cron jobs, workflows, event triggers
- JWT authentication, multi-tenant from start
- Docker Compose with all services
- Nginx reverse proxy with rate limiting
- Integration tests passing
- Feature gap analysis against Fortnox/Odoo/Visma

Refs: BOC-001
This commit is contained in:
Bernt
2026-07-12 12:41:35 +00:00
parent 4789a7fb48
commit 58ca4e68db
26666 changed files with 575891 additions and 2074516 deletions
+68
View File
@@ -0,0 +1,68 @@
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
import type {addSerializer} from 'jest-snapshot';
import {AsymmetricMatchers} from 'expect';
import type {BaseExpect} from 'expect';
import {MatcherContext} from 'expect';
import {MatcherFunction} from 'expect';
import {MatcherFunctionWithContext} from 'expect';
import {Matchers} from 'expect';
import {MatcherState} from 'expect';
import {MatcherUtils} from 'expect';
import type {SnapshotMatchers} from 'jest-snapshot';
export {AsymmetricMatchers};
declare type Inverse<Matchers> = {
/**
* Inverse next matcher. If you know how to test something, `.not` lets you test its opposite.
*/
not: Matchers;
};
export declare type JestExpect = {
<T = unknown>(actual: T): JestMatchers<void, T> &
Inverse<JestMatchers<void, T>> &
PromiseMatchers<T>;
addSnapshotSerializer: typeof addSerializer;
} & BaseExpect &
AsymmetricMatchers &
Inverse<Omit<AsymmetricMatchers, 'any' | 'anything'>>;
export declare const jestExpect: JestExpect;
declare type JestMatchers<R extends void | Promise<void>, T> = Matchers<R, T> &
SnapshotMatchers<R, T>;
export {MatcherContext};
export {MatcherFunction};
export {MatcherFunctionWithContext};
export {Matchers};
export {MatcherState};
export {MatcherUtils};
declare type PromiseMatchers<T = unknown> = {
/**
* Unwraps the reason of a rejected promise so any other matcher can be chained.
* If the promise is fulfilled the assertion fails.
*/
rejects: JestMatchers<Promise<void>, T> &
Inverse<JestMatchers<Promise<void>, T>>;
/**
* Unwraps the value of a fulfilled promise so any other matcher can be chained.
* If the promise is rejected the assertion fails.
*/
resolves: JestMatchers<Promise<void>, T> &
Inverse<JestMatchers<Promise<void>, T>>;
};
export {};
+40
View File
@@ -0,0 +1,40 @@
'use strict';
Object.defineProperty(exports, '__esModule', {
value: true
});
exports.jestExpect = void 0;
function _expect() {
const data = require('expect');
_expect = function () {
return data;
};
return data;
}
function _jestSnapshot() {
const data = require('jest-snapshot');
_jestSnapshot = function () {
return data;
};
return data;
}
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
function createJestExpect() {
_expect().expect.extend({
toMatchInlineSnapshot: _jestSnapshot().toMatchInlineSnapshot,
toMatchSnapshot: _jestSnapshot().toMatchSnapshot,
toThrowErrorMatchingInlineSnapshot:
_jestSnapshot().toThrowErrorMatchingInlineSnapshot,
toThrowErrorMatchingSnapshot: _jestSnapshot().toThrowErrorMatchingSnapshot
});
_expect().expect.addSnapshotSerializer = _jestSnapshot().addSerializer;
return _expect().expect;
}
const jestExpect = createJestExpect();
exports.jestExpect = jestExpect;
+1
View File
@@ -0,0 +1 @@
'use strict';