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:
@@ -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]);
|
setTrackedDeadlines((prev) => [...prev, ...newDeadlines]);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -787,6 +797,32 @@ export function RegistryEntryForm({
|
|||||||
nr. secvențial.
|
nr. secvențial.
|
||||||
</p>
|
</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>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -1138,11 +1174,13 @@ export function RegistryEntryForm({
|
|||||||
</div>
|
</div>
|
||||||
</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">
|
<div className="rounded-md border border-muted p-3 space-y-3">
|
||||||
<Label className="flex items-center gap-1.5 text-sm font-medium">
|
<Label className="flex items-center gap-1.5 text-sm font-medium">
|
||||||
<Calendar className="h-3.5 w-3.5" />
|
<Calendar className="h-3.5 w-3.5" />
|
||||||
Valabilitate document
|
Valabilitate act administrativ
|
||||||
<TooltipProvider>
|
<TooltipProvider>
|
||||||
<Tooltip>
|
<Tooltip>
|
||||||
<TooltipTrigger asChild>
|
<TooltipTrigger asChild>
|
||||||
@@ -1150,8 +1188,8 @@ export function RegistryEntryForm({
|
|||||||
</TooltipTrigger>
|
</TooltipTrigger>
|
||||||
<TooltipContent side="right" className="max-w-xs">
|
<TooltipContent side="right" className="max-w-xs">
|
||||||
<p className="text-xs">
|
<p className="text-xs">
|
||||||
Pentru documente cu termen de valabilitate (CU, AC etc.).
|
Pentru acte administrative cu termen de valabilitate (CU,
|
||||||
Sistemul va genera alerte înainte de expirare.
|
AC, avize). Sistemul genereaza alerte inainte de expirare.
|
||||||
</p>
|
</p>
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
@@ -1217,6 +1255,8 @@ export function RegistryEntryForm({
|
|||||||
onChange={setAcValidity}
|
onChange={setAcValidity}
|
||||||
entryDate={date}
|
entryDate={date}
|
||||||
/>
|
/>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
|
||||||
{/* Web scraping prep — external tracking */}
|
{/* Web scraping prep — external tracking */}
|
||||||
<div className="grid gap-4 sm:grid-cols-2">
|
<div className="grid gap-4 sm:grid-cols-2">
|
||||||
|
|||||||
@@ -79,6 +79,24 @@ export const DEADLINE_CATALOG: DeadlineTypeDef[] = [
|
|||||||
directionFilter: ["iesit"],
|
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 ──
|
// ── User-selectable CU deadlines ──
|
||||||
|
|
||||||
{
|
{
|
||||||
@@ -537,37 +555,6 @@ export const DEADLINE_CATALOG: DeadlineTypeDef[] = [
|
|||||||
directionFilter: ["iesit"],
|
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
|
// CONTESTATIE
|
||||||
// ═══════════════════════════════════════════════════════════════
|
// ═══════════════════════════════════════════════════════════════
|
||||||
@@ -644,7 +631,6 @@ export const CATEGORY_LABELS: Record<DeadlineCategory, string> = {
|
|||||||
completari: "Completari",
|
completari: "Completari",
|
||||||
urbanism: "Urbanism (PUD/PUZ/PUG)",
|
urbanism: "Urbanism (PUD/PUZ/PUG)",
|
||||||
autorizare: "Autorizare (AD/AC)",
|
autorizare: "Autorizare (AD/AC)",
|
||||||
publicitate: "Publicitate / Comunicare",
|
|
||||||
contestatie: "Contestatie",
|
contestatie: "Contestatie",
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -657,16 +643,13 @@ export const DIRECTION_CATEGORIES: Record<
|
|||||||
intrat: ["contestatie"],
|
intrat: ["contestatie"],
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Categories always visible regardless of direction */
|
|
||||||
export const SHARED_CATEGORIES: DeadlineCategory[] = ["publicitate"];
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the ordered list of categories for a given direction.
|
* Get the ordered list of categories for a given direction.
|
||||||
*/
|
*/
|
||||||
export function getCategoriesForDirection(
|
export function getCategoriesForDirection(
|
||||||
direction: RegistryDirection,
|
direction: RegistryDirection,
|
||||||
): DeadlineCategory[] {
|
): DeadlineCategory[] {
|
||||||
return [...DIRECTION_CATEGORIES[direction], ...SHARED_CATEGORIES];
|
return DIRECTION_CATEGORIES[direction];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -121,7 +121,6 @@ export type DeadlineCategory =
|
|||||||
| "completari"
|
| "completari"
|
||||||
| "urbanism"
|
| "urbanism"
|
||||||
| "autorizare"
|
| "autorizare"
|
||||||
| "publicitate"
|
|
||||||
| "contestatie";
|
| "contestatie";
|
||||||
|
|
||||||
export interface DeadlineTypeDef {
|
export interface DeadlineTypeDef {
|
||||||
|
|||||||
Reference in New Issue
Block a user