Files
ArchiTools/src/modules/registratura/services/deadline-catalog.ts
T
AI Assistant f5e19ce3d1 feat(registratura): add Conex (reply) + Inchide buttons, reorder completari last
- Conex button on table rows (Reply icon, blue) — opens new entry with threadParentId pre-set + flipped direction
- Conex button on detail panel — same behavior
- Inchide button on table rows (CheckCircle2 icon, green) — only for open entries
- replyTo prop on RegistryEntryForm: pre-sets threadParentId + direction flip (intrat→iesit, iesit→intrat)
- Card header shows "Conex la BTG-0042/2026" with blue badge when replying
- Completari moved to last position in deadline category order

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 20:40:12 +02:00

686 lines
26 KiB
TypeScript

import type {
DeadlineTypeDef,
DeadlineCategory,
RegistryDirection,
} from "../types";
export const DEADLINE_CATALOG: DeadlineTypeDef[] = [
// ═══════════════════════════════════════════════════════════════
// CERTIFICAT DE URBANISM
// ═══════════════════════════════════════════════════════════════
// ── Auto-tracked (system creates automatically, not user-selectable) ──
{
id: "cu-verificare",
label: "Verificare cerere CU",
description:
"Verificare operativa a documentatiei depuse. Dupa acest termen institutia nu mai are dreptul legal sa solicite clarificari sau sa returneze documentatia.",
days: 10,
dayType: "working",
startDateLabel: "Data depunerii cererii",
requiresCustomStartDate: false,
tacitApprovalApplicable: false,
category: "certificat",
legalReference: "Legea 50/1991, art. 6^1 alin. (1)",
autoTrack: true,
directionFilter: ["iesit"],
},
{
id: "cu-suport-tehnic",
label: "Suport tehnic interinstitutional",
description:
"Termen in care autoritatile locale acorda suport tehnic de specialitate institutiilor din SNAOPSN — stabilirea cerintelor urbanistice.",
days: 10,
dayType: "working",
startDateLabel: "Data solicitarii",
requiresCustomStartDate: true,
startDateHint: "Data la care institutia SNAOPSN a solicitat suportul tehnic",
tacitApprovalApplicable: false,
category: "certificat",
legalReference: "Legea 50/1991, art. 8 alin. (2)",
autoTrack: true,
directionFilter: ["iesit"],
},
// ── CJ sub-deadlines (auto-created when CJ toggle is on) ──
{
id: "cu-cj-solicitare-aviz",
label: "Arhitect-sef solicita aviz primar",
description:
"La depunerea cererii CU la Consiliul Judetean, arhitectul-sef solicita avizul structurii de specialitate a primariei in 3 zile calendaristice.",
days: 3,
dayType: "calendar",
startDateLabel: "Data depunerii cererii CU la CJ",
requiresCustomStartDate: false,
tacitApprovalApplicable: false,
chainNextTypeId: "cu-cj-aviz-primar",
chainNextActionLabel: "Adauga termen emitere aviz primar (5 zile)",
category: "certificat",
legalReference: "Legea 50/1991, art. 4 alin. (1^1)",
autoTrack: true,
directionFilter: ["iesit"],
},
{
id: "cu-cj-aviz-primar",
label: "Primar emite aviz",
description:
"Primarul emite avizul structurii de specialitate in 5 zile calendaristice de la solicitarea arhitectului-sef.",
days: 5,
dayType: "calendar",
startDateLabel: "Data solicitarii avizului",
requiresCustomStartDate: true,
startDateHint: "Data la care arhitectul-sef a solicitat avizul",
tacitApprovalApplicable: false,
category: "certificat",
legalReference: "Legea 50/1991, art. 4 alin. (1^1)",
autoTrack: true,
directionFilter: ["iesit"],
},
// ── Comunicare — auto-tracked for all deadline types ──
{
id: "comunicare-aviz-beneficiar",
label: "Comunicare documente catre beneficiar",
description:
"Entitatile emitente de avize au obligatia sa transmita beneficiarului avizele, solicitarile de completare sau respingerea prin mijloace electronice, in ziua eliberarii actului.",
days: 1,
dayType: "calendar",
startDateLabel: "Data eliberarii actului",
requiresCustomStartDate: false,
tacitApprovalApplicable: false,
category: "certificat",
legalReference: "Legea 350/2001, art. 44 alin. (4)",
autoTrack: true,
directionFilter: ["iesit"],
},
// ── User-selectable CU deadlines ──
{
id: "cu-emitere-l50",
label: "Emitere CU (constructii — L50)",
description:
"Termen de emitere a Certificatului de Urbanism pentru documentatii de constructii. NU se aplica avizarea tacita.",
days: 15,
dayType: "working",
startDateLabel: "Data inregistrarii cererii",
requiresCustomStartDate: false,
tacitApprovalApplicable: false,
category: "certificat",
legalReference: "Legea 50/1991, art. 6^1 alin. (1)",
directionFilter: ["iesit"],
},
{
id: "cu-emitere-l350",
label: "Emitere CU (urbanism — L350)",
description:
"Termen de emitere a Certificatului de Urbanism pentru documentatii de urbanism (PUG/PUZ/PUD). NU se aplica avizarea tacita.",
days: 30,
dayType: "calendar",
startDateLabel: "Data inregistrarii cererii",
requiresCustomStartDate: false,
tacitApprovalApplicable: false,
category: "certificat",
legalReference: "Legea 350/2001, art. 29 alin. (2)",
directionFilter: ["iesit"],
},
{
id: "cu-prelungire-emitere",
label: "Emitere prelungire CU",
description:
"Termen de emitere a prelungirii CU de la depunerea cererii de prelungire. Termen din practica administrativa (nu e explicit in lege).",
days: 30,
dayType: "calendar",
startDateLabel: "Data depunerii cererii de prelungire",
requiresCustomStartDate: true,
startDateHint:
"Data la care s-a depus cererea de prelungire a CU",
tacitApprovalApplicable: false,
category: "certificat",
legalReference: "Practica administrativa",
directionFilter: ["iesit"],
},
// ═══════════════════════════════════════════════════════════════
// AVIZE
// ═══════════════════════════════════════════════════════════════
{
id: "aviz-ac-15",
label: "Aviz pt AC (standard)",
description:
"Termen general de emitere a avizelor si acordurilor necesare Autorizatiei de Construire. Avizul isi pastreaza valabilitatea pe toata durata de valabilitate a CU.",
days: 15,
dayType: "calendar",
startDateLabel: "Data depunerii solicitarii",
requiresCustomStartDate: false,
tacitApprovalApplicable: true,
category: "avize",
legalReference: "Legea 50/1991, art. 7 alin. (1)",
directionFilter: ["iesit"],
},
{
id: "aviz-urbanism-30",
label: "Aviz pt urbanism (PUG/PUZ/PUD)",
description:
"Termen de emitere a avizelor/acordurilor pentru documentatii de urbanism.",
days: 30,
dayType: "calendar",
startDateLabel: "Data depunerii solicitarii",
requiresCustomStartDate: false,
tacitApprovalApplicable: true,
category: "avize",
legalReference: "Legea 350/2001, art. 44 alin. (4)",
directionFilter: ["iesit"],
},
{
id: "aviz-mediu",
label: "Aviz Protectia Mediului",
description:
"Actul administrativ de mediu se emite in maximum 15 zile de la data incheierii procedurilor specifice de mediu.",
days: 15,
dayType: "calendar",
startDateLabel: "Data finalizare proceduri mediu",
requiresCustomStartDate: true,
startDateHint: "Data finalizarii procedurii de evaluare de mediu",
tacitApprovalApplicable: true,
category: "avize",
legalReference: "Legea 50/1991, art. 7 alin. (3)",
directionFilter: ["iesit"],
},
{
id: "aviz-cultura-comisie",
label: "Aviz Cultura (dupa comisie)",
description:
"Termen de emitere a avizului de la Comisia nationala/zonala a monumentelor istorice, de la data analizarii documentatiei in comisie.",
days: 30,
dayType: "calendar",
startDateLabel: "Data sedinta comisie",
requiresCustomStartDate: true,
startDateHint: "Data sedintei comisiei monumentelor istorice",
tacitApprovalApplicable: true,
category: "avize",
legalReference: "Legea 50/1991, art. 7 alin. (3)",
directionFilter: ["iesit"],
},
{
id: "aviz-cultura-mc",
label: "Aviz Min. Culturii (faza AC)",
description:
"Termen de emitere a avizului Ministerului Culturii la faza de autorizare, de la primirea documentatiei complete.",
days: 30,
dayType: "working",
startDateLabel: "Data primirii documentatiei complete",
requiresCustomStartDate: true,
startDateHint:
"Data la care Min. Culturii a primit documentatia completa",
tacitApprovalApplicable: true,
category: "avize",
legalReference: "Legea 50/1991, art. 7 alin. (3^1)",
directionFilter: ["iesit"],
},
{
id: "aviz-aeronautica",
label: "Aviz Aeronautica Civila",
description:
"Termen de emitere a avizului de la Autoritatea Aeronautica Civila Romana.",
days: 30,
dayType: "calendar",
startDateLabel: "Data depunerii documentatiei",
requiresCustomStartDate: false,
tacitApprovalApplicable: true,
category: "avize",
legalReference: "Legea 50/1991, art. 7 alin. (3)",
directionFilter: ["iesit"],
},
{
id: "aviz-isu",
label: "Aviz ISU (Situatii de Urgenta)",
description:
"Termen de emitere a avizului ISU pentru documentatii de urbanism.",
days: 15,
dayType: "calendar",
startDateLabel: "Data depunerii",
requiresCustomStartDate: false,
tacitApprovalApplicable: true,
category: "avize",
legalReference: "Legea 50/1991, art. 7 alin. (3)",
directionFilter: ["iesit"],
},
{
id: "aviz-transport-eu",
label: "Aviz infrastructura transeuropeana",
description:
"Avize/acorduri de principiu sau de amplasament pentru proiecte de infrastructura transeuropeana de transport.",
days: 10,
dayType: "calendar",
startDateLabel: "Data solicitarii",
requiresCustomStartDate: false,
tacitApprovalApplicable: true,
category: "avize",
legalReference: "Legea 50/1991, art. 7 alin. (3)",
directionFilter: ["iesit"],
},
{
id: "aviz-comisie-agenda",
label: "Punere pe agenda comisie",
description:
"Institutiile care emit avize prin comisie de specialitate sunt obligate sa introduca documentatia pe agenda si sa o analizeze in acest termen.",
days: 30,
dayType: "calendar",
startDateLabel: "Data depunerii solicitarii",
requiresCustomStartDate: false,
tacitApprovalApplicable: false,
category: "avize",
legalReference: "Legea 350/2001, art. 44 alin. (4)",
directionFilter: ["iesit"],
},
{
id: "aviz-comisie-emitere",
label: "Emitere dupa comisie (autoritati centrale)",
description:
"Pentru autoritatile centrale, avizul se emite in maximum 15 zile de la data analizarii in comisie.",
days: 15,
dayType: "calendar",
startDateLabel: "Data analizarii in comisie",
requiresCustomStartDate: true,
startDateHint:
"Data la care documentatia a fost analizata in comisia de specialitate",
tacitApprovalApplicable: true,
category: "avize",
legalReference: "Legea 350/2001, art. 44 alin. (4)",
directionFilter: ["iesit"],
},
{
id: "aviz-oportunitate-comisie",
label: "Aviz oportunitate — analiza",
description:
"Termen de analiza in comisia tehnica si/sau verificare completari pentru avizul de oportunitate (initiere PUZ). NU se aplica avizarea tacita!",
days: 30,
dayType: "calendar",
startDateLabel: "Data depunerii",
requiresCustomStartDate: false,
tacitApprovalApplicable: false,
category: "avize",
legalReference: "Legea 350/2001, art. 32 alin. (1^1)",
directionFilter: ["iesit"],
},
{
id: "aviz-oportunitate-emitere",
label: "Aviz oportunitate — emitere",
description:
"Termen de emitere a avizului de oportunitate de la data analizarii in comisie. NU se aplica avizarea tacita!",
days: 15,
dayType: "calendar",
startDateLabel: "Data analizarii in comisie",
requiresCustomStartDate: true,
startDateHint: "Data sedintei comisiei tehnice in care s-a analizat",
tacitApprovalApplicable: false,
category: "avize",
legalReference: "Legea 350/2001, art. 32 alin. (1^1)",
directionFilter: ["iesit"],
},
{
id: "aviz-reconfirmare",
label: "Reconfirmare avize PUZ/PUD",
description:
"Termen de reconfirmare a avizelor (fara modificari la solutia tehnica). Lipsa raspunsului inseamna reconfirmare tacita.",
days: 5,
dayType: "working",
startDateLabel: "Data solicitarii reconfirmarii",
requiresCustomStartDate: true,
startDateHint: "Data la care s-a solicitat reconfirmarea avizelor",
tacitApprovalApplicable: true,
category: "avize",
legalReference: "Legea 350/2001, art. 44 alin. (4)",
directionFilter: ["iesit"],
},
{
id: "aviz-primar",
label: "Aviz primar (cand CJ emite)",
description:
"Cand Consiliul Judetean emite certificatul/autorizatia, arhitectul-sef il solicita in 3 zile, iar primarul il emite in 5 zile.",
days: 5,
dayType: "calendar",
startDateLabel: "Data primirii solicitarii de catre primar",
requiresCustomStartDate: true,
startDateHint: "Data la care primarul a primit solicitarea de aviz",
tacitApprovalApplicable: false,
category: "avize",
legalReference: "Legea 50/1991, art. 4 alin. (1^1)",
directionFilter: ["iesit"],
},
{
id: "aviz-monument-fara-ac",
label: "Acord lucrari minore la monumente",
description:
"Acord scris al serviciului deconcentrat de cultura pentru lucrari minore la monumente ce nu necesita AC. Depasirea termenului = acord tacit.",
days: 30,
dayType: "calendar",
startDateLabel: "Data notificarii",
requiresCustomStartDate: true,
startDateHint:
"Data la care s-a notificat serviciul deconcentrat de cultura",
tacitApprovalApplicable: true,
category: "avize",
legalReference: "Legea 50/1991, art. 11 alin. (1)",
directionFilter: ["iesit"],
},
// ═══════════════════════════════════════════════════════════════
// COMPLETARI
// ═══════════════════════════════════════════════════════════════
{
id: "completare-notificare-5",
label: "Solicitare completari (fara comisie)",
description:
"Pentru avizele care nu trec prin comisii, solicitarea de completari dupa primele 5 zile lucratoare nu este permisa.",
days: 5,
dayType: "working",
startDateLabel: "Data depunerii documentatiei",
requiresCustomStartDate: false,
tacitApprovalApplicable: false,
category: "completari",
legalReference: "Norme metodologice Legea 50/1991",
directionFilter: ["iesit"],
},
{
id: "completare-beneficiar-60",
label: "Termen beneficiar depunere completari",
description:
"Beneficiarul are 60 zile de la primirea notificarii pentru a depune documentatia revizuita. Depasirea inchide dosarul si necesita reluarea procesului.",
days: 60,
dayType: "calendar",
startDateLabel: "Data notificarii",
requiresCustomStartDate: false,
tacitApprovalApplicable: false,
chainNextTypeId: "completare-emitere-15",
chainNextActionLabel: "Adauga termen emitere dupa completari (15 zile)",
category: "completari",
legalReference: "Legea 350/2001, art. 44 alin. (4)",
directionFilter: ["iesit"],
},
{
id: "completare-emitere-15",
label: "Emitere dupa completari",
description:
"Dupa depunerea completarilor, entitatile emit avizul sau il resping justificat in 15 zile. Depasirea = aviz tacit.",
days: 15,
dayType: "calendar",
startDateLabel: "Data depunerii completarilor",
requiresCustomStartDate: true,
startDateHint: "Data la care beneficiarul a depus completarile",
tacitApprovalApplicable: true,
category: "completari",
legalReference: "Legea 350/2001, art. 44 alin. (4)",
directionFilter: ["iesit"],
},
{
id: "completare-ac-beneficiar",
label: "Completari AC — termen beneficiar",
description:
"Termenul de care dispune solicitantul AC pentru a elabora si depune completarile/modificarile cerute. In caz contrar, documentatia se restituie.",
days: 90,
dayType: "calendar",
startDateLabel: "Data notificarii de completare",
requiresCustomStartDate: true,
startDateHint: "Data primirii notificarii de completare de la autoritate",
tacitApprovalApplicable: false,
category: "completari",
legalReference: "Legea 50/1991, art. 7 alin. (1^1)",
directionFilter: ["iesit"],
},
// ═══════════════════════════════════════════════════════════════
// URBANISM (PUD/PUZ/PUG) — renamed from "Analiza"
// ═══════════════════════════════════════════════════════════════
{
id: "ctatu-analiza",
label: "Analiza CTATU",
description:
"Termen de analiza in Comisia Tehnica de Amenajare a Teritoriului si Urbanism.",
days: 30,
dayType: "calendar",
startDateLabel: "Data depunerii",
requiresCustomStartDate: false,
tacitApprovalApplicable: false,
category: "urbanism",
legalReference: "Legea 350/2001",
directionFilter: ["iesit"],
},
{
id: "consiliu-promovare",
label: "Promovare Consiliu Local",
description: "Termen de promovare in sedinta Consiliului Local.",
days: 30,
dayType: "calendar",
startDateLabel: "Data depunerii",
requiresCustomStartDate: false,
tacitApprovalApplicable: false,
category: "urbanism",
legalReference: "Legea 350/2001",
directionFilter: ["iesit"],
},
{
id: "consiliu-vot",
label: "Vot Consiliu Local",
description:
"Termen de vot in Consiliu Local de la finalizarea dezbaterii publice.",
days: 45,
dayType: "calendar",
startDateLabel: "Data finalizare dezbatere",
requiresCustomStartDate: true,
startDateHint: "Data finalizarii dezbaterii publice",
tacitApprovalApplicable: false,
category: "urbanism",
legalReference: "Legea 350/2001",
directionFilter: ["iesit"],
},
// ═══════════════════════════════════════════════════════════════
// AUTORIZARE (AD/AC)
// ═══════════════════════════════════════════════════════════════
{
id: "ac-verificare",
label: "Verificare documentatie AC",
description:
"Autoritatea verifica operativ documentatia depusa pentru AC. Daca e incompleta, notifica solicitantul in scris in acest termen.",
days: 5,
dayType: "working",
startDateLabel: "Data depunerii",
requiresCustomStartDate: false,
tacitApprovalApplicable: false,
category: "autorizare",
legalReference: "Legea 50/1991, art. 7 alin. (1)",
directionFilter: ["iesit"],
},
{
id: "ac-emitere",
label: "Emitere AC (standard)",
description:
"Termen standard de emitere a Autorizatiei de Construire de la data depunerii documentatiei complete.",
days: 30,
dayType: "calendar",
startDateLabel: "Data depunerii documentatiei complete",
requiresCustomStartDate: false,
tacitApprovalApplicable: false,
category: "autorizare",
legalReference: "Legea 50/1991, art. 7 alin. (1)",
directionFilter: ["iesit"],
},
{
id: "ac-emitere-urgenta",
label: "Emitere AC (urgenta)",
description:
"Termen de emitere a AC in regim de urgenta, la solicitarea beneficiarului si cu perceperea unei taxe suplimentare stabilite de consiliul local/judetean.",
days: 7,
dayType: "working",
startDateLabel: "Data depunerii (urgenta)",
requiresCustomStartDate: false,
tacitApprovalApplicable: false,
category: "autorizare",
legalReference: "Legea 50/1991, art. 7 alin. (1^2)",
directionFilter: ["iesit"],
},
{
id: "ac-emitere-agricol",
label: "Emitere AC (anexe agricole)",
description:
"Termen de emitere a AC pentru constructii reprezentand anexe gospodaresti ale exploatatiilor agricole.",
days: 15,
dayType: "calendar",
startDateLabel: "Data depunerii",
requiresCustomStartDate: false,
tacitApprovalApplicable: false,
category: "autorizare",
legalReference: "Legea 50/1991, art. 7 alin. (1^3)",
directionFilter: ["iesit"],
},
{
id: "ac-prelungire",
label: "Depunere prelungire AC",
description:
"Cererea de prelungire trebuie depusa cu minim 45 zile lucratoare INAINTE de expirarea AC. Se calculeaza inapoi.",
days: 45,
dayType: "working",
startDateLabel: "Data expirare AC",
requiresCustomStartDate: true,
startDateHint: "Data de expirare a Autorizatiei de Construire",
tacitApprovalApplicable: false,
category: "autorizare",
isBackwardDeadline: true,
legalReference: "Legea 50/1991, art. 7 alin. (8)",
directionFilter: ["iesit"],
},
// ═══════════════════════════════════════════════════════════════
// CONTESTATIE
// ═══════════════════════════════════════════════════════════════
{
id: "plangere-prealabila",
label: "Plangere prealabila",
description:
"Inainte de a va adresa instantei, trebuie sa solicitati autoritatii revocarea actului. Procedura este scutita de taxa de timbru.",
days: 30,
dayType: "calendar",
startDateLabel: "Data ultimei publicitati",
requiresCustomStartDate: true,
startDateHint:
"Data la care actul a fost adus la cunostinta publicului (ultima operatiune de publicitate: notare in CF, ziar, panou etc.)",
tacitApprovalApplicable: false,
chainNextTypeId: "contestare-ac",
chainNextActionLabel: "Adauga termen contestare in instanta (60 zile)",
category: "contestatie",
legalReference: "Legea 554/2004, art. 7",
directionFilter: ["intrat"],
},
{
id: "contestare-ac",
label: "Contestare AC in instanta",
description:
"Cererea de anulare/suspendare la instanta de contencios administrativ. Termenul curge de la primirea raspunsului la plangerea prealabila sau de la expirarea termenului de raspuns.",
days: 60,
dayType: "calendar",
startDateLabel: "Data raspuns plangere / expirare termen",
requiresCustomStartDate: true,
startDateHint:
"Data primirii raspunsului la plangerea prealabila (sau data la care a expirat termenul de raspuns)",
tacitApprovalApplicable: false,
category: "contestatie",
legalReference: "Legea 50/1991, art. 12",
directionFilter: ["intrat"],
},
{
id: "contestare-urbanism",
label: "Contestare doc urbanism (5 ani)",
description:
"Dreptul de a ataca in instanta hotararile de aprobare PUG/PUZ/PUD se prescrie in 5 ani de la data aprobarii. Exceptie: 1 an pentru ONG-uri.",
days: 1825,
dayType: "calendar",
startDateLabel: "Data aprobarii HCL/HCJ",
requiresCustomStartDate: true,
startDateHint: "Data hotararii de aprobare a documentatiei de urbanism",
tacitApprovalApplicable: false,
category: "contestatie",
legalReference: "Legea 350/2001, art. 64 alin. (3)",
directionFilter: ["intrat"],
},
{
id: "contestare-contraventie",
label: "Plangere contraventionala",
description:
"Plangere impotriva PV de amenda la judecatorie. Suspenda obligatia platii amenzii, dar NU suspenda masura opririi/desfiintarii lucrarilor.",
days: 15,
dayType: "calendar",
startDateLabel: "Data comunicarii PV",
requiresCustomStartDate: true,
startDateHint:
"Data inmanarii sau comunicarii procesului-verbal de contraventie",
tacitApprovalApplicable: false,
category: "contestatie",
legalReference: "OG 2/2001, art. 31 alin. (1)",
directionFilter: ["intrat"],
},
];
export const CATEGORY_LABELS: Record<DeadlineCategory, string> = {
certificat: "Certificat de Urbanism",
avize: "Avize",
completari: "Completari",
urbanism: "Urbanism (PUD/PUZ/PUG)",
autorizare: "Autorizare (AD/AC)",
contestatie: "Contestatie",
};
/** Which categories are shown for each direction */
export const DIRECTION_CATEGORIES: Record<
RegistryDirection,
DeadlineCategory[]
> = {
iesit: ["certificat", "avize", "urbanism", "autorizare", "completari"],
intrat: ["contestatie"],
};
/**
* Get the ordered list of categories for a given direction.
*/
export function getCategoriesForDirection(
direction: RegistryDirection,
): DeadlineCategory[] {
return DIRECTION_CATEGORIES[direction];
}
/**
* Get user-selectable deadlines for a category (excludes autoTrack deadlines).
*/
export function getSelectableDeadlines(
category: DeadlineCategory,
): DeadlineTypeDef[] {
return DEADLINE_CATALOG.filter(
(d) => d.category === category && !d.autoTrack,
);
}
/**
* Get auto-track deadlines that should be created automatically.
*/
export function getAutoTrackDeadlines(
category: DeadlineCategory,
): DeadlineTypeDef[] {
return DEADLINE_CATALOG.filter(
(d) => d.category === category && d.autoTrack === true,
);
}
export function getDeadlineType(typeId: string): DeadlineTypeDef | undefined {
return DEADLINE_CATALOG.find((d) => d.id === typeId);
}
export function getDeadlinesByCategory(
category: DeadlineCategory,
): DeadlineTypeDef[] {
return DEADLINE_CATALOG.filter((d) => d.category === category);
}