Files
Nexora/app/Helpers/ProjectNamingSchema.php
Javi 88e526cf6c
Some checks failed
linter / quality (push) Has been cancelled
tests / ci (push) Has been cancelled
mejoras en la gestión de nombres y códigos de proyectos y documentos según la norma ISO 19650
2025-10-25 11:30:59 +02:00

48 lines
1.5 KiB
PHP

<?php
namespace App\Helpers;
class ProjectNamingSchema
{
/**
* Generate a project name based on ISO 19650 schema.
*
* @param array $fields Associative array of required and optional fields.
* @return string Generated project name.
*/
public static function generate(array $fields): string
{
// Validate required fields
$requiredFields = ['project', 'creator', 'volume', 'level', 'documentType', 'discipline', 'number'];
foreach ($requiredFields as $field) {
if (empty($fields[$field])) {
throw new \InvalidArgumentException("The field '{$field}' is required.");
}
}
// Build the project name
$projectName = [
strtoupper($fields['project']),
strtoupper($fields['creator']),
strtoupper($fields['volume']),
strtoupper($fields['level']),
strtoupper($fields['documentType']),
strtoupper($fields['discipline']),
str_pad($fields['number'], 3, '0', STR_PAD_LEFT),
];
// Add optional fields if provided
if (!empty($fields['description'])) {
$projectName[] = $fields['description'];
}
if (!empty($fields['status'])) {
$projectName[] = strtoupper($fields['status']);
}
if (!empty($fields['revision'])) {
$projectName[] = str_pad($fields['revision'], 4, '0', STR_PAD_LEFT);
}
return implode('-', $projectName);
}
}