From dabe614fded9a375e660155f5400de6261da044d Mon Sep 17 00:00:00 2001 From: Sadrinho27 Date: Thu, 2 Oct 2025 23:20:56 +0200 Subject: [PATCH] Added RhData --- lib/4nk/models/RhData.ts | 135 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 lib/4nk/models/RhData.ts diff --git a/lib/4nk/models/RhData.ts b/lib/4nk/models/RhData.ts new file mode 100644 index 0000000..f2cb504 --- /dev/null +++ b/lib/4nk/models/RhData.ts @@ -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 { + 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: [] + } + } +};