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
@@ -0,0 +1,12 @@
"use strict";
// File generated from our OpenAPI spec
Object.defineProperty(exports, "__esModule", { value: true });
exports.Customers = void 0;
const StripeResource_js_1 = require("../../StripeResource.js");
const stripeMethod = StripeResource_js_1.StripeResource.method;
exports.Customers = StripeResource_js_1.StripeResource.extend({
fundCashBalance: stripeMethod({
method: 'POST',
fullPath: '/v1/test_helpers/customers/{customer}/fund_cash_balance',
}),
});
@@ -0,0 +1,24 @@
"use strict";
// File generated from our OpenAPI spec
Object.defineProperty(exports, "__esModule", { value: true });
exports.Cards = void 0;
const StripeResource_js_1 = require("../../../StripeResource.js");
const stripeMethod = StripeResource_js_1.StripeResource.method;
exports.Cards = StripeResource_js_1.StripeResource.extend({
deliverCard: stripeMethod({
method: 'POST',
fullPath: '/v1/test_helpers/issuing/cards/{card}/shipping/deliver',
}),
failCard: stripeMethod({
method: 'POST',
fullPath: '/v1/test_helpers/issuing/cards/{card}/shipping/fail',
}),
returnCard: stripeMethod({
method: 'POST',
fullPath: '/v1/test_helpers/issuing/cards/{card}/shipping/return',
}),
shipCard: stripeMethod({
method: 'POST',
fullPath: '/v1/test_helpers/issuing/cards/{card}/shipping/ship',
}),
});
@@ -0,0 +1,12 @@
"use strict";
// File generated from our OpenAPI spec
Object.defineProperty(exports, "__esModule", { value: true });
exports.Refunds = void 0;
const StripeResource_js_1 = require("../../StripeResource.js");
const stripeMethod = StripeResource_js_1.StripeResource.method;
exports.Refunds = StripeResource_js_1.StripeResource.extend({
expire: stripeMethod({
method: 'POST',
fullPath: '/v1/test_helpers/refunds/{refund}/expire',
}),
});
@@ -0,0 +1,12 @@
"use strict";
// File generated from our OpenAPI spec
Object.defineProperty(exports, "__esModule", { value: true });
exports.Readers = void 0;
const StripeResource_js_1 = require("../../../StripeResource.js");
const stripeMethod = StripeResource_js_1.StripeResource.method;
exports.Readers = StripeResource_js_1.StripeResource.extend({
presentPaymentMethod: stripeMethod({
method: 'POST',
fullPath: '/v1/test_helpers/terminal/readers/{reader}/present_payment_method',
}),
});
@@ -0,0 +1,29 @@
"use strict";
// File generated from our OpenAPI spec
Object.defineProperty(exports, "__esModule", { value: true });
exports.TestClocks = void 0;
const StripeResource_js_1 = require("../../StripeResource.js");
const stripeMethod = StripeResource_js_1.StripeResource.method;
exports.TestClocks = StripeResource_js_1.StripeResource.extend({
create: stripeMethod({
method: 'POST',
fullPath: '/v1/test_helpers/test_clocks',
}),
retrieve: stripeMethod({
method: 'GET',
fullPath: '/v1/test_helpers/test_clocks/{test_clock}',
}),
list: stripeMethod({
method: 'GET',
fullPath: '/v1/test_helpers/test_clocks',
methodType: 'list',
}),
del: stripeMethod({
method: 'DELETE',
fullPath: '/v1/test_helpers/test_clocks/{test_clock}',
}),
advance: stripeMethod({
method: 'POST',
fullPath: '/v1/test_helpers/test_clocks/{test_clock}/advance',
}),
});
@@ -0,0 +1,20 @@
"use strict";
// File generated from our OpenAPI spec
Object.defineProperty(exports, "__esModule", { value: true });
exports.InboundTransfers = void 0;
const StripeResource_js_1 = require("../../../StripeResource.js");
const stripeMethod = StripeResource_js_1.StripeResource.method;
exports.InboundTransfers = StripeResource_js_1.StripeResource.extend({
fail: stripeMethod({
method: 'POST',
fullPath: '/v1/test_helpers/treasury/inbound_transfers/{id}/fail',
}),
returnInboundTransfer: stripeMethod({
method: 'POST',
fullPath: '/v1/test_helpers/treasury/inbound_transfers/{id}/return',
}),
succeed: stripeMethod({
method: 'POST',
fullPath: '/v1/test_helpers/treasury/inbound_transfers/{id}/succeed',
}),
});
@@ -0,0 +1,20 @@
"use strict";
// File generated from our OpenAPI spec
Object.defineProperty(exports, "__esModule", { value: true });
exports.OutboundPayments = void 0;
const StripeResource_js_1 = require("../../../StripeResource.js");
const stripeMethod = StripeResource_js_1.StripeResource.method;
exports.OutboundPayments = StripeResource_js_1.StripeResource.extend({
fail: stripeMethod({
method: 'POST',
fullPath: '/v1/test_helpers/treasury/outbound_payments/{id}/fail',
}),
post: stripeMethod({
method: 'POST',
fullPath: '/v1/test_helpers/treasury/outbound_payments/{id}/post',
}),
returnOutboundPayment: stripeMethod({
method: 'POST',
fullPath: '/v1/test_helpers/treasury/outbound_payments/{id}/return',
}),
});
@@ -0,0 +1,20 @@
"use strict";
// File generated from our OpenAPI spec
Object.defineProperty(exports, "__esModule", { value: true });
exports.OutboundTransfers = void 0;
const StripeResource_js_1 = require("../../../StripeResource.js");
const stripeMethod = StripeResource_js_1.StripeResource.method;
exports.OutboundTransfers = StripeResource_js_1.StripeResource.extend({
fail: stripeMethod({
method: 'POST',
fullPath: '/v1/test_helpers/treasury/outbound_transfers/{outbound_transfer}/fail',
}),
post: stripeMethod({
method: 'POST',
fullPath: '/v1/test_helpers/treasury/outbound_transfers/{outbound_transfer}/post',
}),
returnOutboundTransfer: stripeMethod({
method: 'POST',
fullPath: '/v1/test_helpers/treasury/outbound_transfers/{outbound_transfer}/return',
}),
});
@@ -0,0 +1,12 @@
"use strict";
// File generated from our OpenAPI spec
Object.defineProperty(exports, "__esModule", { value: true });
exports.ReceivedCredits = void 0;
const StripeResource_js_1 = require("../../../StripeResource.js");
const stripeMethod = StripeResource_js_1.StripeResource.method;
exports.ReceivedCredits = StripeResource_js_1.StripeResource.extend({
create: stripeMethod({
method: 'POST',
fullPath: '/v1/test_helpers/treasury/received_credits',
}),
});
@@ -0,0 +1,12 @@
"use strict";
// File generated from our OpenAPI spec
Object.defineProperty(exports, "__esModule", { value: true });
exports.ReceivedDebits = void 0;
const StripeResource_js_1 = require("../../../StripeResource.js");
const stripeMethod = StripeResource_js_1.StripeResource.method;
exports.ReceivedDebits = StripeResource_js_1.StripeResource.extend({
create: stripeMethod({
method: 'POST',
fullPath: '/v1/test_helpers/treasury/received_debits',
}),
});