feat(automation): number formats for raw material and production batches, raw material minimum
- RAW_MATERIAL_LOT_NUMBER_FORMAT / PRODUCTION_BATCH_NUMBER_FORMAT fill in the lot number when it is left empty, like honey batches and bottlings. - RAW_MATERIAL_LOW: task when the total of a raw material kind drops below config.minGrams after consumption, withdrawal or inventory count. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
This commit is contained in:
1 parent
fc887d8431
commit
5408711b2d
18 files changed
+311
-26
No files matched your search
@@ -338,6 +338,60 @@ describe('AutomationService', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('evaluateRawMaterialLow', () => {
|
||||
const rawRule = {
|
||||
id: 'rule-7',
|
||||
triggerType: 'RAW_MATERIAL_LOW',
|
||||
active: true,
|
||||
config: { minGrams: { BEESWAX: 1000 } },
|
||||
actionTemplate: 'Rohstoff unter Mindestmenge',
|
||||
};
|
||||
|
||||
it('creates one task per kind when the kind drops below its minimum', async () => {
|
||||
prisma.automationRule.findUnique.mockResolvedValue(rawRule);
|
||||
|
||||
await service.evaluateRawMaterialLow('BEESWAX', 400);
|
||||
|
||||
const [createArgs] = prisma.task.create.mock.calls[0] as [unknown];
|
||||
expect(createArgs).toMatchObject({
|
||||
data: {
|
||||
relatedType: 'GENERAL',
|
||||
relatedId: 'BEESWAX',
|
||||
sourceAutomationTrigger: 'RAW_MATERIAL_LOW',
|
||||
description:
|
||||
'Bienenwachs: noch 400 g auf Lager, Mindestmenge 1000 g.',
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
it('does not trigger at or above the minimum', async () => {
|
||||
prisma.automationRule.findUnique.mockResolvedValue(rawRule);
|
||||
|
||||
await service.evaluateRawMaterialLow('BEESWAX', 1000);
|
||||
|
||||
expect(prisma.task.create).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('does not trigger for a kind without a minimum', async () => {
|
||||
prisma.automationRule.findUnique.mockResolvedValue(rawRule);
|
||||
|
||||
await service.evaluateRawMaterialLow('PROPOLIS', 0);
|
||||
|
||||
expect(prisma.task.create).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('does not trigger when the rule is inactive', async () => {
|
||||
prisma.automationRule.findUnique.mockResolvedValue({
|
||||
...rawRule,
|
||||
active: false,
|
||||
});
|
||||
|
||||
await service.evaluateRawMaterialLow('BEESWAX', 0);
|
||||
|
||||
expect(prisma.task.create).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
describe('update', () => {
|
||||
it('records an audit log entry with before/after data', async () => {
|
||||
prisma.automationRule.findUnique.mockResolvedValue(varroaRule);
|
||||
|
||||
Reference in new issue
Block a user