feat(registratura): remove publicitate category, auto-track comunicare, late receipt badge, AC validity conditional

- Remove publicitate/comunicare category entirely (AC publicity handled by AC validity tracker)
- comunicare-aviz-beneficiar moved to auto-track: created alongside any iesit deadline
- Late receipt badge on incoming aviz entries: shows "Primit cu X zile intarziere" when document date < today
- Valabilitate document + AC Validity Tracker visible only when documentType is "aviz" (act administrativ)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
AI Assistant
2026-03-10 19:26:05 +02:00
parent b2519a3b9c
commit f01fe47af4
3 changed files with 63 additions and 41 deletions
@@ -282,6 +282,16 @@ export function RegistryEntryForm({
}
}
// Auto-create comunicare catre beneficiar for all iesit deadlines
// (legal obligation: institution must communicate on the day of issuance)
if (direction === "iesit") {
const comunicare = createTrackedDeadline(
"comunicare-aviz-beneficiar",
startDate,
);
if (comunicare) newDeadlines.push(comunicare);
}
setTrackedDeadlines((prev) => [...prev, ...newDeadlines]);
}
};
@@ -787,6 +797,32 @@ export function RegistryEntryForm({
nr. secvențial.
</p>
)}
{/* Late receipt indicator for incoming admin acts */}
{direction === "intrat" &&
documentType === "aviz" &&
date &&
(() => {
const docDate = new Date(date);
const today = new Date();
docDate.setHours(0, 0, 0, 0);
today.setHours(0, 0, 0, 0);
const diffDays = Math.floor(
(today.getTime() - docDate.getTime()) / (1000 * 60 * 60 * 24),
);
if (diffDays > 0) {
return (
<p className="text-[10px] text-orange-600 dark:text-orange-400 mt-0.5 flex items-center gap-1">
<span>
Actul are data emiterii cu {diffDays}{" "}
{diffDays === 1 ? "zi" : "zile"} in urma primit cu
intarziere fata de obligatia de comunicare in ziua
emiterii (L350 art. 44).
</span>
</p>
);
}
return null;
})()}
</div>
</div>
@@ -1138,11 +1174,13 @@ export function RegistryEntryForm({
</div>
</div>
{/* Document Expiry — CU/AC validity tracking */}
{/* Document Expiry — CU/AC validity tracking (only for act administrativ) */}
{documentType === "aviz" && (
<>
<div className="rounded-md border border-muted p-3 space-y-3">
<Label className="flex items-center gap-1.5 text-sm font-medium">
<Calendar className="h-3.5 w-3.5" />
Valabilitate document
Valabilitate act administrativ
<TooltipProvider>
<Tooltip>
<TooltipTrigger asChild>
@@ -1150,8 +1188,8 @@ export function RegistryEntryForm({
</TooltipTrigger>
<TooltipContent side="right" className="max-w-xs">
<p className="text-xs">
Pentru documente cu termen de valabilitate (CU, AC etc.).
Sistemul va genera alerte înainte de expirare.
Pentru acte administrative cu termen de valabilitate (CU,
AC, avize). Sistemul genereaza alerte inainte de expirare.
</p>
</TooltipContent>
</Tooltip>
@@ -1217,6 +1255,8 @@ export function RegistryEntryForm({
onChange={setAcValidity}
entryDate={date}
/>
</>
)}
{/* Web scraping prep — external tracking */}
<div className="grid gap-4 sm:grid-cols-2">
@@ -79,6 +79,24 @@ export const DEADLINE_CATALOG: DeadlineTypeDef[] = [
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 ──
{
@@ -537,37 +555,6 @@ export const DEADLINE_CATALOG: DeadlineTypeDef[] = [
directionFilter: ["iesit"],
},
// ═══════════════════════════════════════════════════════════════
// PUBLICITATE
// ═══════════════════════════════════════════════════════════════
{
id: "publicitate-ac",
label: "Publicitate AC",
description: "Termen de publicitate a Autorizatiei de Construire.",
days: 30,
dayType: "calendar",
startDateLabel: "Data emitere AC",
requiresCustomStartDate: true,
startDateHint: "Data emiterii Autorizatiei de Construire",
tacitApprovalApplicable: false,
category: "publicitate",
legalReference: "Legea 50/1991, art. 7 alin. (2^1)",
},
{
id: "comunicare-aviz-beneficiar",
label: "Comunicare aviz 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: true,
startDateHint: "Data la care avizul/actul a fost eliberat de autoritate",
tacitApprovalApplicable: false,
category: "publicitate",
legalReference: "Legea 350/2001, art. 44 alin. (4)",
},
// ═══════════════════════════════════════════════════════════════
// CONTESTATIE
// ═══════════════════════════════════════════════════════════════
@@ -644,7 +631,6 @@ export const CATEGORY_LABELS: Record<DeadlineCategory, string> = {
completari: "Completari",
urbanism: "Urbanism (PUD/PUZ/PUG)",
autorizare: "Autorizare (AD/AC)",
publicitate: "Publicitate / Comunicare",
contestatie: "Contestatie",
};
@@ -657,16 +643,13 @@ export const DIRECTION_CATEGORIES: Record<
intrat: ["contestatie"],
};
/** Categories always visible regardless of direction */
export const SHARED_CATEGORIES: DeadlineCategory[] = ["publicitate"];
/**
* Get the ordered list of categories for a given direction.
*/
export function getCategoriesForDirection(
direction: RegistryDirection,
): DeadlineCategory[] {
return [...DIRECTION_CATEGORIES[direction], ...SHARED_CATEGORIES];
return DIRECTION_CATEGORIES[direction];
}
/**
-1
View File
@@ -121,7 +121,6 @@ export type DeadlineCategory =
| "completari"
| "urbanism"
| "autorizare"
| "publicitate"
| "contestatie";
export interface DeadlineTypeDef {