BR-CEN — Regole di business del dominio Census / Censimento
Regole di business estratte dal flusso pilota FLOW-CEN-001 (salvataggio di una compilazione / rilevazione di censimento) e dai sorgenti correlati. Il dominio Census / CensusCenter gestisce le compilazioni (rilevazioni compilate a partire da una scheda di valutazione
Evalsheet) associate a un'entità di patrimonio (Edificio, Piano, UI). Le risposte compilate dall'operatore vengono serializzate in un documento XML e persistite nella tabellaCENSUS_XMLdi OracleINFOCAD_TEST38tramite stored procedure (nessun ORM):CNS_NEWCOMPILATION_XML(create),CNS_UPDATECOMPILATION_XML(update condizionale per campo),CNS_LOADCOMPILATION_XML/CNS_LOADCOMPILATION_BYENTITY(read),CNS_DELETECOMPILATION_XML(cancellazione logica).Sistema: Infocad (Descor) — backend Oracle
INFOCAD_TEST38, ASP.NET Web Forms (C#, moduloCensusCenterWeb) + controller serverDescor.Census.CensusControllersrisolti via .NET Remoting (Service_Compilation), non in-process. Il layer BL (CompilationBL) delega al DAL (CompilationDAL) che invoca le stored procedure viaExecute*StoredProcedure.Le regole sono classificate per tipo, enforcement point (UI / BL / DB / mixed) e confidence (VERIFIED / SUPPORTED / INFERRED). Gli identificatori tecnici NON sono tradotti.
Note di metodo e provenienza dell'evidenza
- Evidenza di codice: percorsi relativi alla radice del repository
Documentation/(es.InfocadServer/CensusDAL/OracleODP/CompilationDAL.cs:42). - Evidenza DB: letta in sola lettura (
USER_SOURCE,USER_TRIGGERS,USER_CONSTRAINTS,USER_TAB_COLUMNS) suINFOCAD_TEST38, limitatamente alle procedureCNS_*COMPILATION*, alla tabellaCENSUS_XML, al suo trigger e ai suoi vincoli. Nessuna lettura di dati applicativi, nessuna DML/DDL. - La verifica DB live conferma le regole del flusso e ne aggiunge alcune non documentate nel flusso
pilota: cancellazione logica (BR-CEN-006), filtro
ISCANCELLED = 0in lettura (BR-CEN-007), generazione dell'IDvia trigger + sequenza (BR-CEN-003), normalizzazione degli alias diENTITYin lettura (BR-CEN-015) e assenza di FK/CHECK sui campi di business (BR-CEN-017).
Registro delle regole (register)
| id | regola | tipo | enforcement | conf |
|---|---|---|---|---|
| BR-CEN-001 | Editing/salvataggio consentito solo a SuperAdmin o utente con grant 20200 (CanEdit) |
permission | UI | VERIFIED |
| BR-CEN-002 | Create-vs-update pilotato da IdCompilation: <1 ⇒ Save_XML (INSERT), >0 ⇒ Update_XML |
state-transition | mixed | VERIFIED |
| BR-CEN-003 | ID compilazione generato dalla sequenza SEQ_CENSUS_XML via trigger BEFORE INSERT (sempre) |
calculation | DB | VERIFIED |
| BR-CEN-004 | COMPILATION_DATE = SYSDATE impostata dal DB, non dall'applicazione |
date-logic | DB | VERIFIED |
| BR-CEN-005 | Nuova compilazione sempre attiva: ISCANCELLED prende il DEFAULT 0 (INSERT non lo tocca) |
config-flag | DB | VERIFIED |
| BR-CEN-006 | Cancellazione logica: CNS_DELETECOMPILATION_XML esegue SET ISCANCELLED = 1 (non DELETE fisico) |
state-transition | DB | VERIFIED |
| BR-CEN-007 | Visibilità in lettura filtrata a ISCANCELLED = 0: le compilazioni cancellate non sono restituite |
validation | DB | VERIFIED |
| BR-CEN-008 | Domande obbligatorie non bloccanti al salvataggio: cambiano solo il messaggio, non impediscono l'INSERT | validation | UI | VERIFIED |
| BR-CEN-009 | Update condizionale per campo: aggiorna solo i parametri non-NULL (PIDENTITY > 0 per identity); su PXML aggiorna anche COMPILATION_DATE=SYSDATE |
state-transition | DB | VERIFIED |
| BR-CEN-010 | Salvataggio della sola nota: Update_XML(id, Guid.Empty, 0, null, null, Description) aggiorna il solo DESCRIPTION |
state-transition | mixed | VERIFIED |
| BR-CEN-011 | Serializzazione risposte in XML <compilation>/<entity>/<user>/<answers>, una <answer> per Check/Open answer |
calculation | UI | VERIFIED |
| BR-CEN-012 | linkedToTable derivato dall'Entity se l'answer non lo specifica: UI→"UI_", EDIFICIO→"EDIFICI_", PIANO→"" (vuoto) |
calculation | UI | VERIFIED |
| BR-CEN-013 | Confine di processo Web↔BL via .NET Remoting (Activator.GetObject, Service_Compilation), non in-process |
architecture | BL | VERIFIED |
| BR-CEN-014 | Interpretazione esito lato UI: successo se result (update) o (isNew && IdCompilation > 0); Save_XML ritorna -1 su errore DAL |
state-transition | mixed | VERIFIED |
| BR-CEN-015 | Normalizzazione alias ENTITY in lettura per-entità: EDIFICI/EDIFICIO/BUILDING→EDIFICIO, PIANI/PIANO/FLOOR→PIANO, UI→UI |
calculation | DB | VERIFIED |
| BR-CEN-016 | Validazione wizard: richiede selezione di un'entità (Edificio/Piano/UI) e di una scheda Evalsheet per procedere |
validation | UI | VERIFIED |
| BR-CEN-017 | Il DB non presidia i valori di business: solo NOT NULL + PK; nessun CHECK su ENTITY, nessuna FK verso EDIFICI_/PIANI_/UI_ |
validation | DB | VERIFIED |
| BR-CEN-018 | Copia di una compilazione: querystring IDCOMPILATION precarica l'XML esistente e lo salva come nuova compilazione |
state-transition | UI | SUPPORTED |
| BR-CEN-019 | Scheda "statica" custom via setting CENSUS/Compilation/Compilation: carica controlli da cartella (variante cliente ATER) |
config-flag | mixed | SUPPORTED |
Dettaglio delle regole
BR-CEN-001 — Autorizzazione all'editing/salvataggio (grant 20200)
- Regola: i pulsanti Salva/Aggiungi nota della scheda e quindi la possibilità di salvare una compilazione sono abilitati solo se l'utente è SuperAdmin oppure possiede il grant
20200. - Tipo: permission · Enforcement: UI · Confidence: VERIFIED
- Evidenza (UI):
public bool CanEdit { get { return WS.SessionProfile.SuperAdmin || HasUserGrant(20200); } }—InfocadWeb/WebMachine/CASSANDRA/CensusCenterWeb/UserControls/Compilation/CompilationView.ascx.cs:132-138; applicazione alla toolbarsaveItem.Visible = CanEdit; addNoteItem.Visible = CanEdit;—:351,353. - Flag: controllo UI-only (visibilità pulsanti); la procedura
CNS_NEWCOMPILATION_XMLnon riverifica alcun grant → il gate è puramente applicativo. Magic number20200hard-coded nel codice.
BR-CEN-002 — Create vs Update pilotato da IdCompilation
- Regola: al click su Salva la UI discrimina: se
IdCompilation < 1(nuova) chiamaSave_XML(INSERT suCENSUS_XML); seIdCompilation > 0chiamaUpdate_XML(aggiornamento della riga esistente). - Tipo: state-transition · Enforcement: mixed (UI decide, DB esegue) · Confidence: VERIFIED
- Evidenza (UI):
bool isNew = IdCompilation < 1; if (IdCompilation > 0) result = ctrl.Update_XML(...); else IdCompilation = ctrl.Save_XML(...);—CompilationView.ascx.cs:648-653. - Evidenza (DB): create =
CNS_NEWCOMPILATION_XML(INSERT) —CompilationDAL.cs:42; update =CNS_UPDATECOMPILATION_XML—CompilationDAL.cs:79.
BR-CEN-003 — ID compilazione da SEQ_CENSUS_XML via trigger
- Regola: l'
IDdella compilazione non è passato dall'applicazione: alla INSERT il trigger BEFORE INSERTTRG_SEQ_CENSUS_XMLvalorizza sempre:new.IDdaSEQ_CENSUS_XML.NEXTVAL; l'id prodotto è restituito dallaINSERT ... RETURNING ID INTO PIDCOMPILATION. - Tipo: calculation · Enforcement: DB (trigger BEFORE ROW + sequenza) · Confidence: VERIFIED
- Evidenza (DB): trigger
TRG_SEQ_CENSUS_XML(USER_TRIGGERS,BEFORE EACH ROW, eventoINSERT) bodyBEGIN SELECT "SEQ_CENSUS_XML".nextval INTO :new."ID" FROM DUAL; END;;RETURNING ID INTO PIDCOMPILATION—USER_SOURCE CNS_NEWCOMPILATION_XML. - Evidenza (DAL):
PIDCOMPILATIONOUT ritornato via((OracleDecimal)outparam.Value).ToInt32()—CompilationDAL.cs:31,43. - Flag: regola enforced solo in SQL (identity via sequenza + trigger, non colonna IDENTITY); il trigger è incondizionato (non testa
:new.ID IS NULL) quindi un eventualeIDfornito verrebbe comunque sovrascritto.
BR-CEN-004 — COMPILATION_DATE = SYSDATE lato DB
- Regola: la data di compilazione è impostata dalla procedura al momento dell'INSERT con
SYSDATE(orologio del server DB), non da un valore applicativo. - Tipo: date-logic · Enforcement: DB · Confidence: VERIFIED
- Evidenza (DB):
INSERT INTO CENSUS_XML (..., COMPILATION_DATE, ...) VALUES (..., SYSDATE, ...)—USER_SOURCE CNS_NEWCOMPILATION_XML. ColonnaCOMPILATION_DATE DATE NOT NULL—USER_TAB_COLUMNS(CENSUS_XML). - Flag: date-logic dipendente dal fuso/orologio del server Oracle; anche l'update di
PXMLrisettlaCOMPILATION_DATE=SYSDATE(vedi BR-CEN-009).
BR-CEN-005 — ISCANCELLED default 0 alla creazione
- Regola: la INSERT non elenca la colonna
ISCANCELLED, che assume il DEFAULT0(NOT NULL): ogni nuova compilazione nasce attiva/non cancellata. - Tipo: config-flag (hidden flag) · Enforcement: DB · Confidence: VERIFIED
- Evidenza (DB):
ISCANCELLED NUMBER NOT NULL DEFAULT '0'—USER_TAB_COLUMNS(CENSUS_XML); vincoloSYS_C001717555 = "ISCANCELLED" IS NOT NULL—USER_CONSTRAINTS(CENSUS_XML); l'INSERT elenca soloIDENTITY, ENTITY, IDUSER, COMPILATION_DATE, XML, DESCRIPTION—USER_SOURCE CNS_NEWCOMPILATION_XML. - Flag: hidden flag
ISCANCELLEDnon gestito dall'applicazione in create/update, solo dalla delete (BR-CEN-006) e dalle read (BR-CEN-007).
BR-CEN-006 — Cancellazione logica (ISCANCELLED = 1)
- Regola: la cancellazione di una compilazione è logica, non fisica: la procedura
CNS_DELETECOMPILATION_XMLesegueUPDATE CENSUS_XML SET ISCANCELLED = 1 WHERE ID = PID. La riga resta in tabella. - Tipo: state-transition · Enforcement: DB · Confidence: VERIFIED
- Evidenza (DB):
PROCEDURE "CNS_DELETECOMPILATION_XML" (PID IN NUMBER) AS BEGIN UPDATE CENSUS_XML SET ISCANCELLED = 1 WHERE ID = PID; END;—USER_SOURCE CNS_DELETECOMPILATION_XML. - Evidenza (DAL):
dl.ExecuteNonQueryStoredProcedure("CNS_DELETECOMPILATION_XML")con soloPID—CompilationDAL.cs:159-169. - Flag: risolve l'open question del flusso pilota (logica vs fisica): cancellazione logica confermata. Nessuna procedura di ripristino (
ISCANCELLED=0) è esposta dal DALCompilationDAL.
BR-CEN-007 — Filtro ISCANCELLED = 0 in lettura
- Regola: entrambe le procedure di lettura restituiscono solo le compilazioni attive (
ISCANCELLED = 0); le compilazioni cancellate logicamente (BR-CEN-006) non compaiono nelle liste né in caricamento per id. - Tipo: validation (filtro visibilità) · Enforcement: DB · Confidence: VERIFIED
- Evidenza (DB):
CNS_LOADCOMPILATION_XML—WHERE cx.ISCANCELLED = 0 AND cx.ID = PID(ramoPID > 0) eWHERE cx.ISCANCELLED = 0(ramo lista);CNS_LOADCOMPILATION_BYENTITY—WHERE cx.ISCANCELLED = 0 AND cx.ENTITY = tmpEntity AND cx.IDENTITY = PIDENTITY—USER_SOURCE. - Flag: coppia coerente con BR-CEN-006 (soft-delete + filtro in lettura). Le read fanno JOIN cross-schema con
ASPNET_TEST38.ORA_ASPNET_USERSper risolvere lo username dall'IDUSER.
BR-CEN-008 — Domande obbligatorie non bloccanti
- Regola: la validazione delle domande obbligatorie (
Required) non blocca il salvataggio.ValidateRequiredQuestioncolora di rosso le domande obbligatorie non compilate e determina solo il messaggio mostrato ("DocumentSaved" se tutte compilate, "WarningDocumentSaved" altrimenti); l'INSERT/UPDATE avviene comunque prima della validazione. - Tipo: validation · Enforcement: UI · Confidence: VERIFIED
- Evidenza (UI): salvataggio eseguito a
:650-653, poiif (ValidateRequiredQuestion(pnlContentCenter)) NotifyMessage(...DocumentSaved...) else NotifyMessage(...WarningDocumentSaved...)—CompilationView.ascx.cs:655-660; il metodo colora e ritorna il conteggio ma non annulla il salvataggio:q.ForeColor = Color.Red; ... return questions.Count == 0;—:554-562; una domanda è "mancante" se nessuna risposta check èCheckedné alcuna risposta open ha testo —GetAllRequiredQuestion:525-552. - Flag: controllo UI-only e non bloccante — l'obbligatorietà è puramente cosmetica; è possibile salvare compilazioni incomplete. Nessun presidio DB corrispondente.
BR-CEN-009 — Update condizionale per campo
- Regola: l'aggiornamento aggiorna solo i campi valorizzati:
IDUSERsePIDUSER IS NOT NULL,IDENTITYsePIDENTITY > 0,ENTITYsePENTITY IS NOT NULL,XML(+COMPILATION_DATE=SYSDATE) sePXML IS NOT NULL,DESCRIPTIONsePNOTE IS NOT NULL. Ogni campo è un UPDATE separato suID = PID. - Tipo: state-transition · Enforcement: DB · Confidence: VERIFIED
- Evidenza (DB):
IF PIDUSER IS NOT NULL THEN ...; IF PIDENTITY > 0 THEN ...; IF PENTITY IS NOT NULL THEN ...; IF PXML IS NOT NULL THEN UPDATE ... SET XML=PXML, COMPILATION_DATE=SYSDATE ...; IF PNOTE IS NOT NULL THEN ...—USER_SOURCE CNS_UPDATECOMPILATION_XML. - Evidenza (DAL): 6 parametri
PID/PIDUSER/PIDENTITY/PENTITY/PXML/PNOTE—CompilationDAL.cs:60-79. - Flag: l'uso di
PIDENTITY > 0(invece di IS NOT NULL) rende impossibile azzerareIDENTITYvia update; è il meccanismo che abilita l'aggiornamento parziale (es. sola nota, BR-CEN-010).
BR-CEN-010 — Salvataggio della sola nota
- Regola: il salvataggio della sola nota descrittiva passa da
Update_XML(IdCompilation, Guid.Empty, 0, null, null, Description): il DAL traduceGuid.EmptyinPIDUSER = NULL, e conPIDENTITY = 0,PENTITY = NULL,PXML = NULLla procedura aggiorna il soloDESCRIPTION(per la regola condizionale BR-CEN-009). - Tipo: state-transition · Enforcement: mixed (UI/BL costruisce, DB filtra) · Confidence: VERIFIED
- Evidenza (UI):
ucNote_onDescriptionSaved→ctrl.Update_XML(IdCompilation, Guid.Empty, 0, null, null, Description)—CompilationView.ascx.cs:699-707. - Evidenza (DAL):
if (provUserKey.Equals(Guid.Empty)) idUserParam = new OracleParameter("PIDUSER", OracleDbType.Raw, null, ...)—CompilationDAL.cs:62-65. - Flag: hidden coupling tra
Guid.Empty/0/nulle la logica condizionale della procedura; la nota è salvabile solo seIdCompilation > 0(compilazione già persistita).
BR-CEN-011 — Serializzazione delle risposte in XML
- Regola: al salvataggio le risposte sono serializzate in un documento
<compilation>con:<entity id=IdEntity value=Entity>,<user id=ProviderUserKey value=UserName>, e<answers>contenente una<answer>per ogni controlloCensusRadCheckAnswer(attributiid/type/value(Checked)/text/linkedToField/linkedToTable) e per ogniCensusRadOpenAnswer(type="OPEN",value="",text). L'XML è passato comeXmlTypeaPXML. - Tipo: calculation (serializzazione) · Enforcement: UI · Confidence: VERIFIED
- Evidenza (UI):
CreateCensusXML(...)costruisce<compilation>/<entity>/<user>/<answers>—CompilationView.ascx.cs:572-633(check answer:600-614, open answer:616-630). - Evidenza (DAL):
new OracleParameter("PXML", OracleDbType.XmlType, xml, ...)—CompilationDAL.cs:29; colonnaXML XMLTYPE(nullable) —USER_TAB_COLUMNS(CENSUS_XML). - Flag: contenuto schema-libero (struttura risposte variabile per scheda); il DB non valida lo schema XML. In rilettura le risposte vengono rimappate per
idsui controlli (LoadXml:367-395).
BR-CEN-012 — Derivazione di linkedToTable dall'Entity
- Regola: se il controllo risposta non specifica
LinkedToTable, l'attributolinkedToTabledell'<answer>è derivato dall'Entitycorrente:UI→"UI_",EDIFICIO→"EDIFICI_",PIANO→""(stringa vuota, il ramo di assegnazione è commentato). - Tipo: calculation (mapping) · Enforcement: UI · Confidence: VERIFIED
- Evidenza (UI):
if (Entity.Equals("PIANO")) { //table = "PIANI_"; } else if (Entity.Equals("UI")) { table = "UI_"; } else if (Entity.Equals("EDIFICIO")) { table = "EDIFICI_"; }—CompilationView.ascx.cs:574-586; fallbackif (String.IsNullOrEmpty(a.LinkedToTable)) answer_el.SetAttribute("linkedToTable", table);—:608-611,624-627. - Flag: magic strings di nomi tabella; per
PIANOil valore resta vuoto (ramo commentato) → per le compilazioni di piano, le risposte senzaLinkedToTableesplicito ottengonolinkedToTable="". Potenziale incoerenza a valle (mapping risposta→tabella patrimoniale).
BR-CEN-013 — Confine di processo Web↔BL via .NET Remoting
- Regola: il controller
CompilationControllernon chiama la BL in-process ma tramite un proxy .NET Remoting ottenuto daActivator.GetObject(typeof(ICompilationBL), <channel>://<server>/Service_Compilation). Tutte le operazioni (Save/Update/Load/Delete) attraversano questo confine. - Tipo: architecture · Enforcement: BL · Confidence: VERIFIED
- Evidenza (controller): costruttore
this.DaoActivate(enControllers.Ctrl_Compilation);e((ICompilationBL)base.DAO).Save_XML(...)—InfocadServer/CensusControllers/CompilationController.cs:15-22. - Evidenza (BL):
CompilationBL.Save_XMLdelega aCensus.CensusDAL.CensusDALFactory.GetCompilationDAL().Save_XML(...)—InfocadServer/CensusBL/CompilationBL.cs:13-16. - Flag: contratto remoto
ICompilationBL; la configurazione del canale (CHANNEL/SERVERADDRESS/Service_Compilation) è a runtime da config server (open question del flusso).CompilationBLespone anche metodiInsert/Update/SelectAll/...non implementati (throw NotImplementedException) —CompilationBL.cs:38-73.
BR-CEN-014 — Interpretazione dell'esito lato UI
- Regola: il salvataggio è considerato riuscito se
result == true(ramo update) oppure seisNew && IdCompilation > 0(ramo create con id valido restituito). In caso contrario viene mostratoErrorCensusSaved. Il DALSave_XMLritorna-1seExecuteNonQueryStoredProcedurefallisce. - Tipo: state-transition (esito) · Enforcement: mixed · Confidence: VERIFIED
- Evidenza (UI):
if (result || (isNew && IdCompilation > 0)) { ... } else NotifyMessage(...ErrorCensusSaved...)—CompilationView.ascx.cs:655-666. - Evidenza (DAL):
if (dl.ExecuteNonQueryStoredProcedure("CNS_NEWCOMPILATION_XML")) return ...ToInt32(); else return -1;—CompilationDAL.cs:42-45; le eccezioni vengono loggate e rilanciate —:48-52. - Flag: magic number
-1come sentinella di errore;-1non è> 0, quindi cade correttamente nel ramo errore. Le eccezioni DAL (rilanciate) risalgono attraverso il Remoting fino alla UI.
BR-CEN-015 — Normalizzazione degli alias di ENTITY in lettura
- Regola: la lettura per entità normalizza i sinonimi del parametro
PENTITYprima del filtro:EDIFICI/EDIFICIO/BUILDING→EDIFICIO,PIANI/PIANO/FLOOR→PIANO,UI→UI. Il filtro applicato ècx.ENTITY = tmpEntity. - Tipo: calculation (mapping) · Enforcement: DB · Confidence: VERIFIED
- Evidenza (DB): blocco
IF PENTITY = 'EDIFICI' OR ... THEN tmpEntity := 'EDIFICIO'; ELSIF PENTITY = 'PIANI' OR ... THEN tmpEntity := 'PIANO'; ELSIF PENTITY = 'UI' THEN tmpEntity := 'UI';—USER_SOURCE CNS_LOADCOMPILATION_BYENTITY. - Evidenza (UI create): il wizard salva sempre i valori canonici
"EDIFICIO"/"PIANO"/"UI"—CompilationCreate.aspx.cs:395,401,406. - Flag: la normalizzazione esiste in lettura ma non in scrittura: la colonna
CENSUS_XML.ENTITYmemorizza il valore grezzo ricevuto (dal path standard sempre canonico). Se un chiamante scrivesse"EDIFICI"/"BUILDING", non sarebbe più letto dal ramoEDIFICIOper id (BR-CEN-007 usacx.ENTITY = 'EDIFICIO'letterale nei JOIN).
BR-CEN-016 — Validazione del wizard di creazione
- Regola: per avanzare oltre il primo step del wizard occorre aver selezionato un'entità (Edificio o Piano o UI) e una scheda
Evalsheet; altrimenti il wizard resta sullo stesso step. - Tipo: validation · Enforcement: UI · Confidence: VERIFIED
- Evidenza (UI):
private bool validateData() { return ((cmbBuilding.SelectedIndex > -1 || cmbFloor.SelectedIndex > -1 || cmbUI.SelectedIndex > -1) && cmbEvalsheet.SelectedIndex > -1); }—CompilationCreate.aspx.cs:348-351; blocco navigazione:if (validateData()) {...} else ((RadWizard)sender).ActiveStepIndex = e.CurrentStepIndex;—:388,425-428. La scelta determinaEntity("PIANO"/"UI"/"EDIFICIO") eIdEntity—:394-407. - Flag: controllo UI-only; priorità di selezione: Piano prima di UI, UI prima di Edificio (
if/else if), quindi selezionando più combo prevale il Piano.
BR-CEN-017 — Assenza di presidio DB sui campi di business
- Regola: gli unici vincoli su
CENSUS_XMLsono i NOT NULL (ID,IDENTITY,ENTITY,IDUSER,COMPILATION_DATE,ISCANCELLED) e la primary key suID. Non esistono CHECK sui valori ammessi diENTITY, né foreign key versoEDIFICI_/PIANI_/UI_. - Tipo: validation (assenza di presidio) · Enforcement: DB · Confidence: VERIFIED
- Evidenza (DB):
USER_CONSTRAINTS(CENSUS_XML)→ 6 check NOT NULL (SYS_C001717550..555) + PKKey10(tipoP); nessun vincoloR(FK) né CHECK di dominio;USER_TAB_COLUMNS:XMLeDESCRIPTIONnullable, tutte le altre NOT NULL. - Flag: l'integrità referenziale (compilazione ↔ entità patrimoniale) e la validità di
ENTITYdipendono interamente dall'applicazione; una compilazione conIDENTITYinesistente oENTITYfuori dominio verrebbe accettata dal DB (risulterebbe però "orfana" nelle LOAD, i cui JOIN sono LEFT).
BR-CEN-018 — Copia di una compilazione come nuova
- Regola: passando
IDCOMPILATIONin querystring al wizard, l'XML della compilazione esistente viene precaricato nei controlli, ma al salvataggio la compilazione è persistita come nuova (il controlCompilationViewmantieneIdCompilation = 0, quindi il ramoSave_XML/INSERT). - Tipo: state-transition · Enforcement: UI · Confidence: SUPPORTED
- Evidenza (UI): lettura
IdCompilationCopy = int.Parse(Request.QueryString.Get("IDCOMPILATION"))—CompilationCreate.aspx.cs:84-85; precaricamento XMLCVUserControl.LoadXml(cSet)conLoadCompilations_XML(IdCompilationCopy, true)—:417-423; il controlCVUserControl.IdCompilationnon viene impostato dalla copia → resta0→ BR-CEN-002 sceglie il ramo INSERT. - Flag: SUPPORTED perché il ramo di persistenza (Save vs Update) dipende dallo stato
IdCompilationdel control, valorizzato altrove; qui è evidente l'intento "salva come nuova".
BR-CEN-019 — Scheda statica custom (variante cliente)
- Regola: oltre alle
Evalsheetdinamiche, esiste una scheda "statica" custom definita dal settingCENSUS/Compilation/Compilation: quando presente, viene aggiunta l'opzione"STATIC"nel wizard e, alla selezione, vengono caricati controlli utente da una cartella (Building.ascx/BuildingSystem.ascxper Edificio,Accomodation.ascx/AccomodationSystem.ascxper Piano/UI) sotto namespaceATER. - Tipo: config-flag · Enforcement: mixed (setting DB/config + rendering UI) · Confidence: SUPPORTED
- Evidenza (UI): caricamento setting
sCtrl.GetStringSetting(new SettingDataArgs("CENSUS", "Compilation", "Compilation"))e aggiunta item"STATIC"—CompilationCreate.aspx.cs:326-331;CVUserControl.Static = cmbEvalsheet.SelectedValue.Equals("STATIC")—:412; rendering staticoAddBuildingControls/AddAccomodationControlsda~/CensusCenterWeb/{StaticFolder}/...—CompilationView.ascx.cs:291-303,430-452. - Flag: variante cliente (
customer_specific): il namespaceATERe i controlli statici sono specifici di installazioni ATER (edilizia residenziale pubblica); l'attivazione dipende dal setting per cliente. La branchStaticdisattiva il caricamento delleEvalsheetdinamiche.
Confidence complessiva
VERIFIED per la maggior parte delle regole: doppia evidenza indipendente e concordante — codice
applicativo C# (UI → controller → BL → DAL, con nomi di stored procedure e parametri) e sorgente/schema
Oracle (USER_SOURCE, USER_TRIGGERS, USER_CONSTRAINTS, USER_TAB_COLUMNS). Le regole BR-CEN-018 e
BR-CEN-019 sono SUPPORTED (dipendono da stato/configurazione risolti fuori dal path pilota).
Open questions
- Uso a valle dell'XML delle risposte: mapping
linkedToField/linkedToTableverso le tabelle patrimoniali (chi consuma le compilazioni salvate) — fuori dallo scope del solo WRITE. - Configurazione runtime del canale .NET Remoting (
CHANNEL/SERVERADDRESS/Service_Compilation). - Elenco completo delle installazioni/clienti che usano la scheda statica
ATER(BR-CEN-019).