Table of Contents

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 tabella CENSUS_XML di Oracle INFOCAD_TEST38 tramite 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#, modulo CensusCenterWeb) + controller server Descor.Census.CensusControllers risolti via .NET Remoting (Service_Compilation), non in-process. Il layer BL (CompilationBL) delega al DAL (CompilationDAL) che invoca le stored procedure via Execute*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) su INFOCAD_TEST38, limitatamente alle procedure CNS_*COMPILATION*, alla tabella CENSUS_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 = 0 in lettura (BR-CEN-007), generazione dell'ID via trigger + sequenza (BR-CEN-003), normalizzazione degli alias di ENTITY in 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: <1Save_XML (INSERT), >0Update_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/BUILDINGEDIFICIO, PIANI/PIANO/FLOORPIANO, UIUI 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 toolbar saveItem.Visible = CanEdit; addNoteItem.Visible = CanEdit;:351,353.
  • Flag: controllo UI-only (visibilità pulsanti); la procedura CNS_NEWCOMPILATION_XML non riverifica alcun grant → il gate è puramente applicativo. Magic number 20200 hard-coded nel codice.

BR-CEN-002 — Create vs Update pilotato da IdCompilation

  • Regola: al click su Salva la UI discrimina: se IdCompilation < 1 (nuova) chiama Save_XML (INSERT su CENSUS_XML); se IdCompilation > 0 chiama Update_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_XMLCompilationDAL.cs:79.

BR-CEN-003 — ID compilazione da SEQ_CENSUS_XML via trigger

  • Regola: l'ID della compilazione non è passato dall'applicazione: alla INSERT il trigger BEFORE INSERT TRG_SEQ_CENSUS_XML valorizza sempre :new.ID da SEQ_CENSUS_XML.NEXTVAL; l'id prodotto è restituito dalla INSERT ... 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, evento INSERT) body BEGIN SELECT "SEQ_CENSUS_XML".nextval INTO :new."ID" FROM DUAL; END;; RETURNING ID INTO PIDCOMPILATIONUSER_SOURCE CNS_NEWCOMPILATION_XML.
  • Evidenza (DAL): PIDCOMPILATION OUT 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 eventuale ID fornito 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. Colonna COMPILATION_DATE DATE NOT NULLUSER_TAB_COLUMNS(CENSUS_XML).
  • Flag: date-logic dipendente dal fuso/orologio del server Oracle; anche l'update di PXML risettla COMPILATION_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 DEFAULT 0 (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); vincolo SYS_C001717555 = "ISCANCELLED" IS NOT NULLUSER_CONSTRAINTS(CENSUS_XML); l'INSERT elenca solo IDENTITY, ENTITY, IDUSER, COMPILATION_DATE, XML, DESCRIPTIONUSER_SOURCE CNS_NEWCOMPILATION_XML.
  • Flag: hidden flag ISCANCELLED non 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_XML esegue UPDATE 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 solo PIDCompilationDAL.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 DAL CompilationDAL.

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_XMLWHERE cx.ISCANCELLED = 0 AND cx.ID = PID (ramo PID > 0) e WHERE cx.ISCANCELLED = 0 (ramo lista); CNS_LOADCOMPILATION_BYENTITYWHERE cx.ISCANCELLED = 0 AND cx.ENTITY = tmpEntity AND cx.IDENTITY = PIDENTITYUSER_SOURCE.
  • Flag: coppia coerente con BR-CEN-006 (soft-delete + filtro in lettura). Le read fanno JOIN cross-schema con ASPNET_TEST38.ORA_ASPNET_USERS per risolvere lo username dall'IDUSER.

BR-CEN-008 — Domande obbligatorie non bloccanti

  • Regola: la validazione delle domande obbligatorie (Required) non blocca il salvataggio. ValidateRequiredQuestion colora 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, poi if (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 è Checked né 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: IDUSER se PIDUSER IS NOT NULL, IDENTITY se PIDENTITY > 0, ENTITY se PENTITY IS NOT NULL, XML (+ COMPILATION_DATE=SYSDATE) se PXML IS NOT NULL, DESCRIPTION se PNOTE IS NOT NULL. Ogni campo è un UPDATE separato su ID = 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/PNOTECompilationDAL.cs:60-79.
  • Flag: l'uso di PIDENTITY > 0 (invece di IS NOT NULL) rende impossibile azzerare IDENTITY via 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 traduce Guid.Empty in PIDUSER = NULL, e con PIDENTITY = 0, PENTITY = NULL, PXML = NULL la procedura aggiorna il solo DESCRIPTION (per la regola condizionale BR-CEN-009).
  • Tipo: state-transition · Enforcement: mixed (UI/BL costruisce, DB filtra) · Confidence: VERIFIED
  • Evidenza (UI): ucNote_onDescriptionSavedctrl.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/null e la logica condizionale della procedura; la nota è salvabile solo se IdCompilation > 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 controllo CensusRadCheckAnswer (attributi id/type/value(Checked)/text/linkedToField/linkedToTable) e per ogni CensusRadOpenAnswer (type="OPEN", value="", text). L'XML è passato come XmlType a PXML.
  • 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; colonna XML 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 id sui controlli (LoadXml :367-395).

BR-CEN-012 — Derivazione di linkedToTable dall'Entity

  • Regola: se il controllo risposta non specifica LinkedToTable, l'attributo linkedToTable dell'<answer> è derivato dall'Entity corrente: 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; fallback if (String.IsNullOrEmpty(a.LinkedToTable)) answer_el.SetAttribute("linkedToTable", table);:608-611,624-627.
  • Flag: magic strings di nomi tabella; per PIANO il valore resta vuoto (ramo commentato) → per le compilazioni di piano, le risposte senza LinkedToTable esplicito ottengono linkedToTable="". Potenziale incoerenza a valle (mapping risposta→tabella patrimoniale).

BR-CEN-013 — Confine di processo Web↔BL via .NET Remoting

  • Regola: il controller CompilationController non chiama la BL in-process ma tramite un proxy .NET Remoting ottenuto da Activator.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_XML delega a Census.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). CompilationBL espone anche metodi Insert/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 se isNew && IdCompilation > 0 (ramo create con id valido restituito). In caso contrario viene mostrato ErrorCensusSaved. Il DAL Save_XML ritorna -1 se ExecuteNonQueryStoredProcedure fallisce.
  • 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 -1 come sentinella di errore; -1 non è > 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 PENTITY prima del filtro: EDIFICI/EDIFICIO/BUILDINGEDIFICIO, PIANI/PIANO/FLOORPIANO, UIUI. 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.ENTITY memorizza il valore grezzo ricevuto (dal path standard sempre canonico). Se un chiamante scrivesse "EDIFICI"/"BUILDING", non sarebbe più letto dal ramo EDIFICIO per id (BR-CEN-007 usa cx.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 determina Entity ("PIANO"/"UI"/"EDIFICIO") e IdEntity: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_XML sono i NOT NULL (ID, IDENTITY, ENTITY, IDUSER, COMPILATION_DATE, ISCANCELLED) e la primary key su ID. Non esistono CHECK sui valori ammessi di ENTITY, né foreign key verso EDIFICI_/PIANI_/UI_.
  • Tipo: validation (assenza di presidio) · Enforcement: DB · Confidence: VERIFIED
  • Evidenza (DB): USER_CONSTRAINTS(CENSUS_XML) → 6 check NOT NULL (SYS_C001717550..555) + PK Key10 (tipo P); nessun vincolo R (FK) né CHECK di dominio; USER_TAB_COLUMNS: XML e DESCRIPTION nullable, tutte le altre NOT NULL.
  • Flag: l'integrità referenziale (compilazione ↔ entità patrimoniale) e la validità di ENTITY dipendono interamente dall'applicazione; una compilazione con IDENTITY inesistente o ENTITY fuori 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 IDCOMPILATION in querystring al wizard, l'XML della compilazione esistente viene precaricato nei controlli, ma al salvataggio la compilazione è persistita come nuova (il control CompilationView mantiene IdCompilation = 0, quindi il ramo Save_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 XML CVUserControl.LoadXml(cSet) con LoadCompilations_XML(IdCompilationCopy, true):417-423; il control CVUserControl.IdCompilation non viene impostato dalla copia → resta 0 → BR-CEN-002 sceglie il ramo INSERT.
  • Flag: SUPPORTED perché il ramo di persistenza (Save vs Update) dipende dallo stato IdCompilation del control, valorizzato altrove; qui è evidente l'intento "salva come nuova".

BR-CEN-019 — Scheda statica custom (variante cliente)

  • Regola: oltre alle Evalsheet dinamiche, esiste una scheda "statica" custom definita dal setting CENSUS/Compilation/Compilation: quando presente, viene aggiunta l'opzione "STATIC" nel wizard e, alla selezione, vengono caricati controlli utente da una cartella (Building.ascx/BuildingSystem.ascx per Edificio, Accomodation.ascx/AccomodationSystem.ascx per Piano/UI) sotto namespace ATER.
  • 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 statico AddBuildingControls/AddAccomodationControls da ~/CensusCenterWeb/{StaticFolder}/...CompilationView.ascx.cs:291-303,430-452.
  • Flag: variante cliente (customer_specific): il namespace ATER e i controlli statici sono specifici di installazioni ATER (edilizia residenziale pubblica); l'attivazione dipende dal setting per cliente. La branch Static disattiva il caricamento delle Evalsheet dinamiche.

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/linkedToTable verso 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).