feat(registratura): revert intrat full categories + add urbanism deadlines

- Revert: only iesit+cerere/aviz gets full permitting categories
- Urbanism: furnizare date retele (15z cal, doar autoritati publice)
- Urbanism: aviz oportunitate PUZ — verificare (30z) + convocare CTATU
  (30z, chain) + emitere dupa comisie (15z, auto-track)
- Urbanism: aviz arhitect sef PUD/PUZ — convocare CTATU (30z, chain)
  + emitere (15z, auto-track)
- Urbanism: promovare CL (30z) + vot CL (45z dupa dezbatere publica)
- None of the urbanism deadlines have tacit approval

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
AI Assistant
2026-03-10 23:45:25 +02:00
parent 8bcb0bcc81
commit a96dce56a2
@@ -510,13 +510,31 @@ export const DEADLINE_CATALOG: DeadlineTypeDef[] = [
},
// ═══════════════════════════════════════════════════════════════
// URBANISM (PUD/PUZ/PUG) — renamed from "Analiza"
// URBANISM (PUD/PUZ/PUG) — nu se aplica acordul tacit
// ═══════════════════════════════════════════════════════════════
{
id: "ctatu-analiza",
label: "Analiza CTATU",
id: "retele-furnizare-date",
label: "Furnizare date detinatori retele",
description:
"Termen de analiza in Comisia Tehnica de Amenajare a Teritoriului si Urbanism.",
"Detinatorii de retele tehnico-edilitare furnizeaza gratuit datele solicitate de autoritate, in 15 zile de la solicitare. Aplicabil doar proiectelor cu autoritati publice.",
days: 15,
dayType: "calendar",
startDateLabel: "Data solicitarii de la autoritate",
requiresCustomStartDate: true,
startDateHint:
"Data la care autoritatea a solicitat datele de la detinatorii de retele",
tacitApprovalApplicable: false,
category: "urbanism",
legalReference: "Legea 350/2001",
directionFilter: ["iesit"],
},
// ── Aviz de oportunitate (PUZ privat) ──
{
id: "aviz-oportunitate-verificare",
label: "Aviz oportunitate — verificare / completare",
description:
"Autoritatea verifica documentatia si solicita completari in max. 30 de zile de la depunere. Daca nu solicita completari, documentatia intra in comisie.",
days: 30,
dayType: "calendar",
startDateLabel: "Data depunerii",
@@ -527,9 +545,10 @@ export const DEADLINE_CATALOG: DeadlineTypeDef[] = [
directionFilter: ["iesit"],
},
{
id: "consiliu-promovare",
label: "Promovare Consiliu Local",
description: "Termen de promovare in sedinta Consiliului Local.",
id: "aviz-oportunitate-ctatu",
label: "Aviz oportunitate — convocare CTATU",
description:
"Documentatia trebuie introdusa in Comisia Tehnica (CTATU) in maximum 30 de zile de la depunere. Se inchide cu event de tip Convocare sedinta.",
days: 30,
dayType: "calendar",
startDateLabel: "Data depunerii",
@@ -538,17 +557,89 @@ export const DEADLINE_CATALOG: DeadlineTypeDef[] = [
category: "urbanism",
legalReference: "Legea 350/2001",
directionFilter: ["iesit"],
chainNextTypeId: "aviz-oportunitate-emitere",
chainNextActionLabel:
"Adauga termen emitere aviz oportunitate (15 zile cal.)",
},
{
id: "aviz-oportunitate-emitere",
label: "Aviz oportunitate — emitere dupa comisie",
description:
"Se emite avizul de oportunitate in maximum 15 zile de la analiza favorabila in comisia tehnica CTATU.",
days: 15,
dayType: "calendar",
startDateLabel: "Data analizei in comisie",
requiresCustomStartDate: true,
startDateHint:
"Data la care comisia CTATU a analizat favorabil documentatia",
tacitApprovalApplicable: false,
category: "urbanism",
legalReference: "Legea 350/2001",
directionFilter: ["iesit"],
autoTrack: true,
},
// ── Aviz arhitect sef PUD/PUZ ──
{
id: "aviz-arh-sef-ctatu",
label: "Aviz arhitect sef — convocare CTATU",
description:
"Documentatia PUD/PUZ trebuie introdusa in Comisia Tehnica (CTATU) in maximum 30 de zile de la depunere. Se inchide cu event de tip Convocare sedinta.",
days: 30,
dayType: "calendar",
startDateLabel: "Data depunerii",
requiresCustomStartDate: false,
tacitApprovalApplicable: false,
category: "urbanism",
legalReference: "Legea 350/2001",
directionFilter: ["iesit"],
chainNextTypeId: "aviz-arh-sef-emitere",
chainNextActionLabel: "Adauga termen emitere aviz arh. sef (15 zile cal.)",
},
{
id: "aviz-arh-sef-emitere",
label: "Aviz arhitect sef — emitere dupa comisie",
description:
"Se emite avizul arhitectului sef in maximum 15 zile de la analiza in comisia tehnica CTATU.",
days: 15,
dayType: "calendar",
startDateLabel: "Data analizei in comisie",
requiresCustomStartDate: true,
startDateHint:
"Data la care comisia CTATU a analizat documentatia PUD/PUZ",
tacitApprovalApplicable: false,
category: "urbanism",
legalReference: "Legea 350/2001",
directionFilter: ["iesit"],
autoTrack: true,
},
// ── Consiliul Local ──
{
id: "consiliu-promovare",
label: "Promovare Consiliu Local",
description:
"Primarul promoveaza documentatia completa si avizata catre Consiliul Local in maximum 30 de zile de la inregistrare.",
days: 30,
dayType: "calendar",
startDateLabel: "Data inregistrarii documentatiei complete",
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.",
"Consiliul Local emite hotararea (aprobare sau respingere) in maximum 45 de zile de la finalizarea dezbaterii publice si inaintarea rapoartelor.",
days: 45,
dayType: "calendar",
startDateLabel: "Data finalizare dezbatere",
startDateLabel: "Data finalizare dezbatere publica",
requiresCustomStartDate: true,
startDateHint: "Data finalizarii dezbaterii publice",
startDateHint:
"Data finalizarii dezbaterii publice si inaintarii rapoartelor catre Consiliu",
tacitApprovalApplicable: false,
category: "urbanism",
legalReference: "Legea 350/2001",
@@ -710,22 +801,12 @@ export const CATEGORY_LABELS: Record<DeadlineCategory, string> = {
contestatie: "Contestatie",
};
/** All permitting categories — shown for cerere/aviz doc types regardless of direction */
const ALL_PERMITTING_CATEGORIES: DeadlineCategory[] = [
"certificat",
"avize",
"urbanism",
"autorizare",
"completari",
"contestatie",
];
/** Restricted categories per direction (for non-permitting doc types) */
/** Full categories available per direction (before doc type filtering) */
export const DIRECTION_CATEGORIES: Record<
RegistryDirection,
DeadlineCategory[]
> = {
iesit: ["completari"],
iesit: ["certificat", "avize", "urbanism", "autorizare", "completari"],
intrat: ["completari", "contestatie"],
};
@@ -737,19 +818,21 @@ const FULL_DEADLINE_DOC_TYPES = new Set(["cerere", "aviz"]);
/**
* Get the ordered list of deadline categories for a given direction + document type.
* - "cerere" / "aviz" doc types → full permitting set (certificat, avize, urbanism, autorizare, completari, contestatie)
* - All other doc types (scrisoare, notificare, etc.) → direction-dependent limited set
* - iesit + cerere/aviz → full set (certificat, avize, urbanism, autorizare, completari)
* - intrat → completari + contestatie (always, regardless of doc type)
* - iesit + other doc types → only completari
*/
export function getCategoriesForDirection(
direction: RegistryDirection,
documentType?: string,
): DeadlineCategory[] {
// cerere / aviz unlock ALL permitting categories regardless of direction
const all = DIRECTION_CATEGORIES[direction];
// If doc type triggers full permitting flow, show all categories for this direction
if (!documentType || FULL_DEADLINE_DOC_TYPES.has(documentType)) {
return ALL_PERMITTING_CATEGORIES;
return all;
}
// Other doc types get direction-specific limited categories
return DIRECTION_CATEGORIES[direction];
// Otherwise, only completari + contestatie
return all.filter((c) => c === "completari" || c === "contestatie");
}
/**