feat(registratura): smart defaults per direction, new doc types, expanded cerere templates

- Default doc type: aviz (intrat) / cerere (iesit); auto-switches on direction toggle
- New default doc types: Proces verbal, Notificare, Comunicare (with full seed templates)
- Cerere templates rewritten: emiterea CU/AC, prelungirea valabilitatii, completare
  documentatie, indreptarea erorilor materiale, inaintare dispozitie de santier,
  eliberarea certificatului, aviz, racordare
- Aviz label renamed to "Aviz / Act administrativ"
- Scrisoare label renamed to "Scrisoare / Adresa", raport to "Raport / Studiu"
- Moved PV/notificare/comunicare templates from scrisoare/altele to their own types
- Cleaned up duplicate templates across categories

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
AI Assistant
2026-03-10 14:02:46 +02:00
parent b62e01b153
commit eb7c28ca14
3 changed files with 79 additions and 27 deletions
@@ -153,9 +153,8 @@ export function RegistryEntryForm({
const [direction, setDirection] = useState<RegistryDirection>(
initial?.direction ?? "intrat",
);
const [documentType, setDocumentType] = useState<DocumentType>(
initial?.documentType ?? "scrisoare",
);
const defaultDocType = initial?.documentType ?? (direction === "intrat" ? "aviz" : "cerere");
const [documentType, setDocumentType] = useState<DocumentType>(defaultDocType);
const [customDocType, setCustomDocType] = useState("");
const [subject, setSubject] = useState(initial?.subject ?? "");
const [subjectQuery, setSubjectQuery] = useState(initial?.subject ?? "");
@@ -623,7 +622,11 @@ export function RegistryEntryForm({
<div className="mt-1 flex rounded-lg border bg-muted/30 p-1">
<button
type="button"
onClick={() => setDirection("intrat")}
onClick={() => {
setDirection("intrat");
// Auto-switch doc type if user hasn't customized it
if (documentType === "cerere") setDocumentType("aviz");
}}
className={cn(
"flex flex-1 items-center justify-center gap-1.5 rounded-md px-3 py-2 text-sm font-medium transition-all",
direction === "intrat"
@@ -636,7 +639,11 @@ export function RegistryEntryForm({
</button>
<button
type="button"
onClick={() => setDirection("iesit")}
onClick={() => {
setDirection("iesit");
// Auto-switch doc type if user hasn't customized it
if (documentType === "aviz") setDocumentType("cerere");
}}
className={cn(
"flex flex-1 items-center justify-center gap-1.5 rounded-md px-3 py-2 text-sm font-medium transition-all",
direction === "iesit"
@@ -240,12 +240,20 @@ function fieldWidth(ft: TemplateFieldType): string {
const SEED_TEMPLATES: Record<string, SubjectTemplate[]> = {
cerere: [
// Cereri trimise (iesit)
seedTemplate("Cerere CU nr. {nr}/{an} — {proiect}", "Cerere CU nr. 123/2026 — Farmacie Str. Exemplu"),
seedTemplate("Cerere AC nr. {nr}/{an} — {proiect}", "Cerere AC nr. 456/2026 — Locuinta P+1E"),
seedTemplate("Cerere prelungire CU nr. {nr}/{an} — {proiect}", "Cerere prelungire CU nr. 78/2026 — Bloc D4"),
seedTemplate("Cerere prelungire AC nr. {nr}/{an} — {proiect}", "Cerere prelungire AC nr. 90/2026 — Hala industriala"),
seedTemplate("Cerere completari nr. {nr}/{an} — {proiect}", "Cerere completari nr. 33/2026 — Bloc rezidential"),
// Cereri emitere acte
seedTemplate("Cerere pentru emiterea CU — {proiect}", "Cerere pentru emiterea CU — Farmacie Str. Exemplu"),
seedTemplate("Cerere pentru emiterea AC — {proiect}", "Cerere pentru emiterea AC — Locuinta P+1E"),
seedTemplate("Cerere pentru eliberarea certificatului de {detalii} — {proiect}", "Cerere pentru eliberarea certificatului de urbanism — Bloc rezidential"),
// Cereri prelungire
seedTemplate("Cerere pentru prelungirea valabilitatii CU nr. {nr}/{an} — {proiect}", "Cerere pentru prelungirea valabilitatii CU nr. 78/2026 — Bloc D4"),
seedTemplate("Cerere pentru prelungirea valabilitatii AC nr. {nr}/{an} — {proiect}", "Cerere pentru prelungirea valabilitatii AC nr. 90/2026 — Hala industriala"),
// Cereri completari / corectii
seedTemplate("Cerere completare documentatie nr. {nr}/{an} — {proiect}", "Cerere completare documentatie nr. 33/2026 — Bloc rezidential"),
seedTemplate("Cerere pentru indreptarea erorilor materiale — {proiect}", "Cerere pentru indreptarea erorilor materiale — Cladire birouri"),
// Cereri diverse
seedTemplate("Cerere inaintare dispozitie de santier — {proiect}", "Cerere inaintare dispozitie de santier — Locuinta P+1E"),
seedTemplate("Cerere aviz {detalii} — {proiect}", "Cerere aviz ISU — Gradinita nr. 3"),
seedTemplate("Cerere racordare {detalii} — {proiect}", "Cerere racordare gaz — Bloc rezidential"),
],
aviz: [
// Acte administrative primite (intrat)
@@ -283,13 +291,11 @@ const SEED_TEMPLATES: Record<string, SubjectTemplate[]> = {
],
scrisoare: [
seedTemplate("Adresa nr. {nr}/{an} — {detalii}", "Adresa nr. 45/2026 — Raspuns solicitare informatii"),
seedTemplate("Comunicare {detalii} — {proiect}", "Comunicare rezultat analiza — Bloc rezidential"),
seedTemplate("Comunicare nr. {nr}/{an} — {proiect}", "Comunicare nr. 18/2026 — Farmacie Str. Exemplu"),
seedTemplate("Notificare {detalii} — {proiect}", "Notificare incepere lucrari — Locuinta P+1E"),
seedTemplate("Adresa {detalii} — {proiect}", "Adresa raspuns completari — Bloc rezidential"),
seedTemplate("Adeverinta {detalii} nr. {nr}/{an}", "Adeverinta stagiu practica nr. 3/2026"),
seedTemplate("Raspuns completari nr. {nr}/{an} — {proiect}", "Raspuns completari nr. 33/2026 — Bloc rezidential"),
seedTemplate("Instiintare {detalii} — {proiect}", "Instiintare incepere executie — Locuinta P+1E"),
seedTemplate("Somatie {detalii} — {proiect}", "Somatie plata factura — Cladire birouri"),
seedTemplate("Invitatie {detalii} — {proiect}", "Invitatie sedinta receptie — Cladire birouri"),
],
"nota-de-comanda": [
seedTemplate("Nota de comanda nr. {nr}/{an} — {proiect}", "Nota de comanda nr. 7/2026 — Instalatii electrice"),
@@ -307,6 +313,29 @@ const SEED_TEMPLATES: Record<string, SubjectTemplate[]> = {
seedTemplate("Audit energetic nr. {nr}/{an} — {proiect}", "Audit energetic nr. 4/2026 — Bloc C3"),
seedTemplate("Caiet de sarcini — {proiect}", "Caiet de sarcini — Instalatii electrice"),
],
"proces-verbal": [
seedTemplate("PV receptie nr. {nr}/{an} — {proiect}", "PV receptie nr. 5/2026 — Cladire birouri"),
seedTemplate("PV receptie la terminarea lucrarilor nr. {nr}/{an} — {proiect}", "PV receptie la terminarea lucrarilor nr. 2/2026 — Bloc D4"),
seedTemplate("PV receptie finala nr. {nr}/{an} — {proiect}", "PV receptie finala nr. 1/2026 — Hala logistica"),
seedTemplate("Proces verbal {detalii} nr. {nr}/{an} — {proiect}", "Proces verbal inspectie santier nr. 3/2026 — Bloc rezidential"),
seedTemplate("PV predare documentatie — {proiect}", "PV predare documentatie — Locuinta P+1E"),
seedTemplate("PV constatare {detalii} — {proiect}", "PV constatare neconformitati — Cladire birouri"),
],
notificare: [
seedTemplate("Notificare incepere lucrari — {proiect}", "Notificare incepere lucrari — Locuinta P+1E"),
seedTemplate("Notificare finalizare lucrari — {proiect}", "Notificare finalizare lucrari — Bloc rezidential"),
seedTemplate("Notificare {detalii} — {proiect}", "Notificare reluare lucrari — Hala industriala"),
seedTemplate("Notificare nr. {nr}/{an} — {proiect}", "Notificare nr. 7/2026 — Cladire birouri"),
seedTemplate("Instiintare {detalii} — {proiect}", "Instiintare incepere executie — Bloc D4"),
seedTemplate("Instiintare ISC — {proiect}", "Instiintare ISC — Gradinita nr. 3"),
],
comunicare: [
seedTemplate("Comunicare {detalii} — {proiect}", "Comunicare rezultat analiza — Bloc rezidential"),
seedTemplate("Comunicare nr. {nr}/{an} — {proiect}", "Comunicare nr. 18/2026 — Farmacie Str. Exemplu"),
seedTemplate("Comunicare completari necesare — {proiect}", "Comunicare completari necesare — Locuinta P+1E"),
seedTemplate("Comunicare respingere cerere — {proiect}", "Comunicare respingere cerere — Hala industriala"),
seedTemplate("Comunicare {detalii} nr. {nr}/{an}", "Comunicare programare nr. 5/2026"),
],
"apel-telefonic": [
seedTemplate("Convorbire {detalii} — {proiect}", "Convorbire primarie avize — Bloc D4"),
seedTemplate("Apel {detalii} — {proiect}", "Apel ISU programare — Gradinita nr. 3"),
@@ -317,8 +346,6 @@ const SEED_TEMPLATES: Record<string, SubjectTemplate[]> = {
],
altele: [
seedTemplate("Documentatie {detalii} — {proiect}", "Documentatie PAC+DDE — Locuinta P+M"),
seedTemplate("PV receptie nr. {nr}/{an} — {proiect}", "PV receptie nr. 5/2026 — Cladire birouri"),
seedTemplate("Proces verbal nr. {nr}/{an} — {proiect}", "Proces verbal nr. 3/2026 — Inspectie santier"),
seedTemplate("Referat verificare nr. {nr}/{an} — {proiect}", "Referat verificare nr. 11/2026 — Locuinta P+1E"),
seedTemplate("Memoriu tehnic — {proiect}", "Memoriu tehnic — Hala industriala"),
seedTemplate("Decizie {detalii} nr. {nr}/{an}", "Decizie etapizare nr. 2/2026"),
@@ -334,8 +361,8 @@ const SEED_TEMPLATES: Record<string, SubjectTemplate[]> = {
const SUBJECT_PLACEHOLDERS_MAP: Record<string, Record<string, string>> = {
cerere: {
intrat: "ex: Cerere completari nr. 33/2026 — Proiect X",
iesit: "ex: Cerere CU nr. 123/2026 — Proiect X",
intrat: "ex: Cerere completare documentatie — Proiect X",
iesit: "ex: Cerere pentru emiterea CU — Proiect X",
},
aviz: {
intrat: "ex: CU nr. 312/2026 — Proiect X",
@@ -355,7 +382,7 @@ const SUBJECT_PLACEHOLDERS_MAP: Record<string, Record<string, string>> = {
},
scrisoare: {
intrat: "ex: Adresa nr. 45/2026 — Raspuns informatii",
iesit: "ex: Notificare incepere lucrari — Proiect X",
iesit: "ex: Adresa raspuns completari — Proiect X",
},
"nota-de-comanda": {
intrat: "ex: Nota de comanda nr. 7/2026 — Proiect X",
@@ -365,6 +392,18 @@ const SUBJECT_PLACEHOLDERS_MAP: Record<string, Record<string, string>> = {
intrat: "ex: Expertiza tehnica nr. 7/2026 — Proiect X",
iesit: "ex: Raport nr. 3/2026 — Proiect X",
},
"proces-verbal": {
intrat: "ex: PV receptie nr. 5/2026 — Proiect X",
iesit: "ex: PV predare documentatie — Proiect X",
},
notificare: {
intrat: "ex: Notificare finalizare lucrari — Proiect X",
iesit: "ex: Notificare incepere lucrari — Proiect X",
},
comunicare: {
intrat: "ex: Comunicare completari necesare — Proiect X",
iesit: "ex: Comunicare nr. 18/2026 — Proiect X",
},
"apel-telefonic": {
intrat: "ex: Apel primarie avize — Proiect X",
iesit: "ex: Convorbire ISU programare — Proiect X",
+13 -7
View File
@@ -31,6 +31,9 @@ export const DEFAULT_DOCUMENT_TYPES = [
"nota-de-comanda",
"raport",
"cerere",
"proces-verbal",
"notificare",
"comunicare",
"apel-telefonic",
"videoconferinta",
"altele",
@@ -42,15 +45,18 @@ export type DocumentType = (typeof DEFAULT_DOCUMENT_TYPES)[number] | string;
/** Labels for default document types */
export const DEFAULT_DOC_TYPE_LABELS: Record<string, string> = {
contract: "Contract",
oferta: "Ofertă",
factura: "Factură",
scrisoare: "Scrisoare",
aviz: "Aviz",
"nota-de-comanda": "Notă de comandă",
raport: "Raport",
oferta: "Oferta",
factura: "Factura",
scrisoare: "Scrisoare / Adresa",
aviz: "Aviz / Act administrativ",
"nota-de-comanda": "Nota de comanda",
raport: "Raport / Studiu",
cerere: "Cerere",
"proces-verbal": "Proces verbal",
notificare: "Notificare",
comunicare: "Comunicare",
"apel-telefonic": "Apel telefonic",
videoconferinta: "Videoconferință",
videoconferinta: "Videoconferinta",
altele: "Altele",
};