Added RhData

This commit is contained in:
Sadrinho27 2025-10-02 23:20:56 +02:00
parent 8ee7b8a177
commit dabe614fde

135
lib/4nk/models/RhData.ts Normal file
View File

@ -0,0 +1,135 @@
import { isFileBlob, type FileBlob } from "./Data";
import type { RoleDefinition } from "./Roles";
export interface RhData {
folderNumber: string;
name: string;
description: string;
nom_salarie: string;
poste: string;
num_secu: string;
message_private: string;
created_at: string;
updated_at: string;
types_documents: string[];
rhs: string[];
salaries: string[];
notes: string[];
}
export function isRhData(data: any): data is RhData {
if (typeof data !== 'object' || data === null) return false;
const requiredStringFields = [
'folderNumber',
'name',
'description',
'nom_salarie',
'poste',
'num_secu',
'message_private',
'created_at',
'updated_at'
];
for (const field of requiredStringFields) {
if (typeof data[field] !== 'string') return false;
}
const requiredArrayFields = [
'types_documents',
'rhs',
'salaries',
'notes',
];
for (const field of requiredArrayFields) {
if (!Array.isArray(data[field]) || !data[field].every((item: any) => typeof item === 'string')) {
return false;
}
}
return true;
}
const emptyRhData: RhData = {
folderNumber: '',
name: '',
description: '',
nom_salarie: '',
poste: '',
num_secu: '',
message_private: '',
created_at: '',
updated_at: '',
types_documents: [],
rhs: [],
salaries: [],
notes: []
};
const rhDataFields: string[] = Object.keys(emptyRhData);
const RhPublicFields: string[] = [
'nom_salarie',
'poste'
];
// All the attributes are private in that case
export const RhPrivateFields = [
...rhDataFields.filter(key => !RhPublicFields.includes(key))
];
export interface RhCreated {
processId: string,
process: any, // Process
rhData: RhData,
}
export function setDefaultRhRoles(ownerId: string, rhs: string[], salaries: string[]): Record<string, RoleDefinition> {
return {
demiurge: {
members: [ownerId],
validation_rules: [],
storages: []
},
owner: {
members: [ownerId],
validation_rules: [
{
quorum: 0.5,
fields: [...rhDataFields, 'roles'],
min_sig_member: 1,
},
],
storages: []
},
rhs: {
members: rhs,
validation_rules: [
{
quorum: 0.5,
fields: rhDataFields,
min_sig_member: 1,
},
],
storages: []
},
salaries: {
members: salaries,
validation_rules: [
{
quorum: 0.0,
fields: rhDataFields,
min_sig_member: 0.0,
},
],
storages: []
},
apophis: {
members: [ownerId],
validation_rules: [],
storages: []
}
}
};