BR-ECM — Regole di business del dominio ECM / Documentale (DocCenter)
Regole estratte dal dominio ECM / Documentale di Infocad, ancorate al flusso pilota
FLOW-ECM-001(pubblicazione/archiviazione di un documento DocCenter con delega del file fisico a un ECM esterno pluggable — Alfresco / OpenText / Docs — selezionato a runtime, persistenza dell'ID esterno su Oracle, avanzamento workflow DEM). Sistema: Infocad (Descor), backend Oracle, front-end ASP.NET Web Forms (VB.NET) + provider C#, nessun ORM (stored procedure via DALExecute*StoredProcedure).
Legenda enforcement: UI = validato solo lato interfaccia/code-behind · BL = logica applicativa (code-behind/BL/provider) · DB = vincolo/logica in stored procedure o constraint/trigger · mixed = più livelli. Legenda confidence: VERIFIED = catena di codice + controprova indipendente (DB o secondo artefatto) · SUPPORTED = evidenza di codice coerente ma un anello non eseguibile/non isolato · INFERRED = dedotto.
Le stored procedure DOC_* citate sono state confermate con lookup read-only su
USER_SOURCE dello schema INFOCAD_TEST38 (driver oracledb thin, sola lettura del testo
delle procedure — nessun accesso a dati di business, nessuna DML/DDL).
Registro regole
| ID | Regola (sintesi) | Tipo | Enforcement | Conf. |
|---|---|---|---|---|
| BR-ECM-001 | Il salvataggio su ECM esterno è attivo solo se SaveAttachExtMode = true |
config-flag | BL | VERIFIED |
| BR-ECM-002 | Il provider ECM è caricato a runtime da SaveAttachExtDllName (~/bin/{name}.dll → {name}.DocManager) |
config-flag | BL | VERIFIED |
| BR-ECM-003 | L'aggancio ECM (UserProtocol) è persistito solo se resp.Code = "1" |
state-transition | mixed (UI/BL) | VERIFIED |
| BR-ECM-004 | Il codice di successo "1" è mappato in modo diverso da ciascun provider |
validation | BL | VERIFIED |
| BR-ECM-005 | Il salvataggio esterno richiede un allegato principale presente | validation | mixed (UI/BL) | VERIFIED |
| BR-ECM-006 | Per ogni allegato secondario, EXTERNAL_ID è salvato solo se il suo save torna "1" |
state-transition | mixed | VERIFIED |
| BR-ECM-007 | L'ID esterno è persistito in DOCS_DOCUMENT.USER_PROTOCOL via DOC_UPDATEDOCUMENT |
calculation/persistence | DB | VERIFIED |
| BR-ECM-008 | La pubblicazione avanza il workflow DEM (activity.Run + ElementMessage.Create) |
state-transition | BL | SUPPORTED |
| BR-ECM-009 | Con SaveAttachExtMode = false il BLOB resta in Infocad, nessuna chiamata ECM |
config-flag | BL | VERIFIED |
| BR-ECM-010 | L'endpoint ECM è preso dalla chiave URL nell'appSettings del .config del provider |
config-flag | BL | VERIFIED |
| BR-ECM-011 | Il provider Docs decodifica il nome file per posizione fissa (Sigla/Foglio/Sottovoce/Microvoce) | customer-specific | BL | VERIFIED |
| BR-ECM-012 | La conversione MIME è provider-specifica (OpenText sì, Alfresco no, Docs base64) | calculation | BL | VERIFIED |
| BR-ECM-013 | I provider aprono il servizio con quote/buffer 2147483647 (Int32.MaxValue) |
config/magic | BL | VERIFIED |
| BR-ECM-014 | Il provider Docs non restituisce ID → USER_PROTOCOL resta stringa vuota |
data-integrity | BL | VERIFIED |
| BR-ECM-015 | Su errore ECM/DAL il documento resta nello stato precedente (no pubblicazione) | error-handling/state | mixed (UI/BL) | VERIFIED |
| BR-ECM-016 | Categoria documentale obbligatoria se DocCategoryMandatory = true |
config-flag/validation | UI-only | VERIFIED |
| BR-ECM-017 | Non è selezionabile una categoria padre (deve essere foglia) | validation | UI-only | VERIFIED |
| BR-ECM-018 | In stato workflow 24 la UserVersion deve essere modificata |
validation/state | UI-only | VERIFIED |
| BR-ECM-019 | L'update documento è replace-all dei tag (DELETE totale + re-INSERT PIDTAGLIST) |
state-transition | DB | VERIFIED |
| BR-ECM-020 | Notifica mail eseguita solo se MailingType <> "none" |
config-flag | BL | VERIFIED |
| BR-ECM-021 | SaveAttachExtMode richiede anche CONTROLURL = ExternalDocs/DocumentPublishExtControl.ascx sull'activity Pubblica |
config-flag | BL | SUPPORTED |
| BR-ECM-022 | MainConnection: PROD INFOCAD_BIM (commentato) vs TEST INFOCAD_TEST38 attivo |
config | BL | VERIFIED |
| BR-ECM-023 | Doppia definizione del contratto IDocManager (VB attivo String vs C# legacy int) |
config/tech-debt | BL | SUPPORTED |
| BR-ECM-024 | Lo svuotamento fisico del BLOB locale dopo invio ECM è previsto ma commentato (doppia persistenza) | data-integrity | BL | VERIFIED |
Dettaglio regole
BR-ECM-001 — Attivazione salvataggio su ECM esterno
- Regola: la delega del file fisico a un ECM esterno avviene solo se il flag di configurazione
DocCenter/Settings/SaveAttachExtModeètrue; altrimenti il documento è gestito interamente in Infocad. - Tipo: config-flag · Enforcement: BL · Confidence: VERIFIED · customer_specific: false
- Evidenza:
DocumentPublishControl.ascx.vb:365(Dim SaveAttachExtMode As Boolean = CBool(...SaveAttachExtMode)),:368(If SaveAttachExtMode Then); propertyCommonWeb/DocCenter/Configuration/Settings.vb:236; defaultWeb.config:381(<SaveAttachExtMode value="true"/>). - Note: feature-flag nascosto in Web.config, valore di default PROD-like
true.
BR-ECM-002 — Selezione provider ECM a runtime
- Regola: il provider ECM è deciso a runtime dal valore di
SaveAttachExtDllName. Il codice carica~/bin/{SaveAttachExtDllName}.dllviaAssembly.LoadFrome istanzia la classe{SaveAttachExtDllName}.DocManagercon cast aIDocManager. Cambiare provider (Alfresco/Opentext/Docs) non richiede ricompilazione del chiamante. - Tipo: config-flag · Enforcement: BL · Confidence: VERIFIED · customer_specific: false
- Evidenza:
DocumentPublishControl.ascx.vb:286-294—:289leggeSaveAttachExtDllName,:292Assembly.LoadFrom(Server.MapPath("~/bin/{0}.dll")),:294asb.CreateInstance("{0}.DocManager")castIDocManager; propertySettings.vb:242; defaultWeb.config:382(ExternalDocSave.Opentext). - Note: convenzione di naming hard-coded (
{name}= nome DLL = namespace = prefisso classe.DocManager); un nome errato in config provoca eccezione a runtime (nessuna validazione preventiva).
BR-ECM-003 — Persistenza aggancio ECM condizionata a Code = "1"
- Regola: l'ID restituito dall'ECM (
resp.Id) è persistito indoc.UserProtocole salvato su DB solo seresp.Code = "1". Altrimenti si mostraresp.Messagee non avviene né l'update né la pubblicazione. - Tipo: state-transition · Enforcement: mixed (UI/BL) · Confidence: VERIFIED · customer_specific: false
- Evidenza:
DocumentPublishControl.ascx.vb:374(If resp.Code = "1" Then),:376(doc.UserProtocol = usrProtocol),:377(docCtrl.Update(doc)),:406-407(ramo elseShowMessage(resp.Message)). - Note: magic string
"1"come codice di successo (vedi BR-ECM-004).
BR-ECM-004 — Contratto del codice di successo divergente tra provider
- Regola: il chiamante confronta sempre
resp.Code = "1", ma i tre provider producono quel codice con logiche diverse:- OpenText: passa
result["code"]del servizio così com'è (atteso"1"). - Alfresco: se
result["code"] == "OK"→Code = "1", altrimentiCode = "". - Docs: se
result["Esito"]contiene"Succeded"→Code = "1", altrimentiCode = "0".
- OpenText: passa
- Tipo: validation · Enforcement: BL · Confidence: VERIFIED · customer_specific: false
- Evidenza: OpenText
ExternalDocSave.Opentext/DocManager.cs:145-147; AlfrescoExternalDocSave.Alfresco/DocManager.cs:69-74(if (code == "OK") res.Code = "1"); DocsExternalDocSave.Docs/DocManager.cs:59-65(result["Esito"].ToString().Contains("Succeded")). - Note: contratto fragile a stringhe (
"1","OK","Succeded"— refuso di "Succeeded" incluso). Rischio: qualsiasi variazione della stringa lato servizio spezza l'aggancio silenziosamente.
BR-ECM-005 — Allegato principale obbligatorio per il save esterno
- Regola: il salvataggio esterno richiede un allegato principale valorizzato; se
doc.Attachmentè nullo o senzaFileNameviene lanciataException("Allegato mancante!"). - Tipo: validation · Enforcement: mixed (UI/BL) · Confidence: VERIFIED · customer_specific: false
- Evidenza:
DocumentPublishControl.ascx.vb:237(If doc.Attachment IsNot Nothing AndAlso Not String.IsNullOrEmpty(doc.Attachment.FileName)),:254(Throw New Exception("Allegato mancante!")). - Note: messaggio hard-coded in italiano (non da resource dictionary).
BR-ECM-006 — Allegati secondari: EXTERNAL_ID salvato solo su esito positivo
- Regola: se
doc.NumAttach > 0, ogni allegato secondario è inviato singolarmente all'ECM; l'ExternalIDviene persistito (DOC_UPDATEATTACHMENTDOC) solo se il save del singolo allegato torna"1". - Tipo: state-transition · Enforcement: mixed · Confidence: VERIFIED · customer_specific: false
- Evidenza:
DocumentPublishControl.ascx.vb:387-404(If SaveExternalSecondaryAttach(...) = "1"→attachment.ExternalID = externalId→docCtrl.UpdateAttachmentDoc(...)); DALDocument_DAL.vb:2859(paramPEXTERNALID); controprova DB:DOC_UPDATEATTACHMENTDOC→UPDATE DOCS_ATTACHMENT_DOCUMENT SET ... EXTERNAL_ID = PEXTERNALID WHERE ID_ATTACHDOC = PIDATTACHDOC(letto daUSER_SOURCEdiINFOCAD_TEST38).
BR-ECM-007 — Persistenza ID esterno in DOCS_DOCUMENT.USER_PROTOCOL
- Regola: l'ID esterno del documento è persistito nella colonna
USER_PROTOCOLdiDOCS_DOCUMENTtramiteDOC_UPDATEDOCUMENT(param INPUSERPROTOCOL). - Tipo: calculation/persistence · Enforcement: DB · Confidence: VERIFIED · customer_specific: false
- Evidenza: DAL
Document_DAL.vb:1438(OracleParameter("PUSERPROTOCOL", ...)),:1500(ExecuteNonQueryStoredProcedure("DOC_UPDATEDOCUMENT")); controprova DB:DOC_UPDATEDOCUMENT→UPDATE DOCS_DOCUMENT SET ... USER_PROTOCOL = PUSERPROTOCOL, USER_VERSION = PUSERVERSION ...(letto daUSER_SOURCE). - Note: la colonna riusa il campo "protocollo utente" per contenere l'ID dell'ECM — accoppiamento semantico non evidente dal nome.
BR-ECM-008 — Pubblicazione = avanzamento workflow DEM
- Regola:
PublishDocument()avanza lo stato del documento nel motore DEM (activity.Run(idElement, WorkFlowID, contactId)) e crea un messaggio elemento (DEM.ElementMessage.Create(...)). Viene eseguito in entrambi i rami (con o senza ECM esterno). - Tipo: state-transition · Enforcement: BL · Confidence: SUPPORTED · customer_specific: false
- Evidenza:
DocumentPublishControl.ascx.vb:214-230(PublishDocument→RunWorkFlow),:405/:410(chiamata nei due rami);DocumentBase.vb:458-493(RunWorkFlow→:473activity.Run,:484ElementMessage.Create). - Note: le tabelle DEM toccate da
activity.Run/ElementMessage.Createnon sono tracciate a livello di colonna in questo flusso (side effect).
BR-ECM-009 — Modalità interna (BLOB in Infocad)
- Regola: con
SaveAttachExtMode = falsenon c'è alcuna chiamata all'ECM esterno; il file resta come BLOB in Infocad e si esegue direttamentePublishDocument(). - Tipo: config-flag · Enforcement: BL · Confidence: VERIFIED · customer_specific: false
- Evidenza:
DocumentPublishControl.ascx.vb:409-411(ramoElse→PublishDocument()).
BR-ECM-010 — Endpoint ECM da .config del provider
- Regola: ogni provider legge l'URL del servizio remoto dalla chiave
URLdell'appSettingsdel proprio file.dll.config, non dal Web.config dell'applicazione. - Tipo: config-flag · Enforcement: BL · Confidence: VERIFIED · customer_specific: false
- Evidenza:
ExternalDocSave.Opentext/DocManager.cs:170-186(LoadService→myDllConfigAppSettings.Settings["URL"].Value,GetConfigSectionviaOpenExeConfiguration); pattern identico Alfresco:97-113e Docs:83-99. - Valori hard-coded per ambiente: OpenText
ExternalDocSave.OpenText.dll.config=http://infocadintegration-openfiber-test.infocad.fm/.../OpenTextService.svc(URL di test OpenFiber); Alfresco/Docs puntano alocalhost/InfocadIntegrationWS_DEV/...(ambiente DEV). - Note: endpoint di test/dev committati nel repo → rischio di puntare all'ambiente sbagliato in PROD.
BR-ECM-011 — Provider Docs: decodifica posizionale del nome file (MondoConv)
- Regola: il provider Docs non tratta il nome file come opaco ma lo decodifica per posizione fissa in metadati:
Sigla= char 0-4,Foglio= char 6-7,Sottovoce= char 9-10,Microvoce= char 12-13,NomeFile= da char 15. Esempio di codifica atteso:MSSV1_23_03_05 Staffe insegna ...pdf. - Tipo: customer-specific · Enforcement: BL · Confidence: VERIFIED · customer_specific: true
- Evidenza:
ExternalDocSave.Docs/DocManager.cs:42-53(docNameWithEstension.Substring(0,5),Substring(6,2),Substring(9,2),Substring(12,2),Substring(15)); endpoint.../WebServices/MondoConv/DocsService.svc. - Note: magic numbers di parsing; un nome file più corto del previsto provoca
ArgumentOutOfRangeExceptione fa fallire il save. Variante specifica del cliente MondoConv.
BR-ECM-012 — Conversione MIME provider-specifica
- Regola: la gestione del MIME type differisce per provider: OpenText converte l'estensione via
MimeTypeMap.GetMimeType(...)prima di inviare; Alfresco non converte (riga commentata); Docs ignora il MIME e invia il body come stringa base64. - Tipo: calculation · Enforcement: BL · Confidence: VERIFIED · customer_specific: false
- Evidenza: OpenText
DocManager.cs:138(mimeType = MimeTypeMap.GetMimeType(mimeType)); AlfrescoDocManager.cs:63(//mimeType = MimeTypeMap.GetMimeType(mimeType);commentato); DocsDocManager.cs:53(data["FileBody"] = Convert.ToBase64String(document, ...)).
BR-ECM-013 — Quote di servizio a Int32.MaxValue
- Regola: tutti i provider aprono il canale WCF con tre quote/buffer impostate al valore massimo
2147483647(Int32.MaxValue). - Tipo: config/magic · Enforcement: BL · Confidence: VERIFIED · customer_specific: false
- Evidenza:
ExternalDocSave.Opentext/DocManager.cs:175(serviceFactory.GetService(serviceUrl, 2147483647, 2147483647, 2147483647)); identico in Alfresco:102e Docs:88. - Note: magic number ripetuto; nessuna limitazione effettiva sulla dimensione del messaggio.
BR-ECM-014 — Provider Docs non restituisce ID esterno
- Regola: il provider Docs imposta esplicitamente
res.Id = ""perché il servizio remoto non ritorna un identificativo del documento creato. Di conseguenza, per il provider Docs,USER_PROTOCOLviene salvato come stringa vuota anche a fronte di un salvataggio riuscito. - Tipo: data-integrity · Enforcement: BL · Confidence: VERIFIED · customer_specific: true
- Evidenza:
ExternalDocSave.Docs/DocManager.cs:56(res.Id = ""; // Questo servizio non torna identificativo). - Note: rischio — l'aggancio logico (BR-ECM-007) è di fatto vuoto per Docs; il documento risulta pubblicato ma senza chiave di ricongiungimento verso l'ECM.
BR-ECM-015 — Atomicità/rollback logico su errore
- Regola: l'intera orchestrazione di
btnSalva_Clickè in unTry/Catch; su qualsiasi eccezione (ECM o DAL) si mostraex.Messagee si registraInfocadTraceWrapper.CreateError(...); il documento non avanza di stato e resta nello stato precedente. - Tipo: error-handling/state · Enforcement: mixed (UI/BL) · Confidence: VERIFIED · customer_specific: false
- Evidenza:
DocumentPublishControl.ascx.vb:367(Try),:418-421(Catch ... ShowMessage(ex.Message)+CreateError). - Note: non esiste transazione distribuita ECM↔DB: se l'ECM salva ma il successivo
docCtrl.Updatefallisce, il file resta orfano sull'ECM senza aggancio (non compensato).
BR-ECM-016 — Categoria documentale obbligatoria (config)
- Regola: se
DocCategoryMandatory = true, la categoria del documento è obbligatoria; in assenza si aggiunge un errore di validazione (CategoryRequiredString) e si blocca il salvataggio. - Tipo: config-flag/validation · Enforcement: UI-only · Confidence: VERIFIED · customer_specific: false
- Evidenza:
DocumentUpdateControlInfo.ascx.vb:351-356(validazione),:725(asterisco su label); defaultWeb.config:362(<DocCategoryMandatory value="true"/>); propertySettings.vb:153. Enforcement analogo inDocumentDetailControl.ascx.vb:513,DocumentEditControl.ascx.vb:538,DocumentInsertControlNew.ascx.vb:345. - Note: regola solo UI — nessun vincolo NOT NULL su
ID_CATEGORY(la DAL passaDBNull.Valuese categoria assente,Document_DAL.vb:1465-1471). Un percorso che salti la validazione UI può inserire documenti senza categoria.
BR-ECM-017 — Categoria: solo nodi foglia
- Regola: non è possibile selezionare una categoria padre; se la categoria selezionata ha figli, si genera errore
alertParentCategoryNoSelected. - Tipo: validation · Enforcement: UI-only · Confidence: VERIFIED · customer_specific: false
- Evidenza:
DocumentUpdateControlInfo.ascx.vb:345-347(If ... SelectedNode IsNot Nothing AndAlso childList.Count() > 0 Then AddValidationError(...)).
BR-ECM-018 — Cambio versione utente obbligato nello stato 24
- Regola: se il documento è nello stato di workflow
24e laUserVersionnon è stata cambiata rispetto al corrente, la validazione fallisce con messaggio "Modifcare la versione utente!". - Tipo: validation/state-transition · Enforcement: UI-only · Confidence: VERIFIED · customer_specific: false
- Evidenza:
DocumentUpdateControlInfo.ascx.vb:357-360(If Me.WorkFlowIDState = 24 AndAlso CurrentDocument.UserVersion = UserVersion Then AddValidationError("Modifcare la versione utente!")). - Note: magic number
24(id di stato workflow hard-coded) + messaggio hard-coded con refuso ("Modifcare"). Regola solo UI.
BR-ECM-019 — Update documento = replace-all dei tag
- Regola: l'aggiornamento di un documento sostituisce integralmente i tag:
DOC_UPDATEDOCUMENTinvocaDOC_REMOVEALLTAGSFROMDOCUMENT(rimozione totale) e poiDOC_ADDTAGSTODOCUMENTcon la listaPIDTAGLISTpassata dal chiamante. - Tipo: state-transition · Enforcement: DB · Confidence: VERIFIED · customer_specific: false
- Evidenza: DAL
Document_DAL.vbparamPIDTAGLIST(OracleCollectionType.PLSQLAssociativeArray); controprova DB (USER_SOURCE,INFOCAD_TEST38):DOC_REMOVEALLTAGSFROMDOCUMENT→DELETE ... DOCS_TAG_DOCUMENT;DOC_ADDTAGSTODOCUMENT→INSERT INTO DOCS_TAG_DOCUMENT; entrambe richiamate daDOC_UPDATEDOCUMENT. - Note: regola solo DB (logica interna alle procedure): un tag non presente nella lista passata dal client viene perso; nessun merge.
BR-ECM-020 — Notifica mail condizionata
- Regola: al termine del salvataggio, la notifica (
ProcessAlertSystem) è eseguita solo seMailingType <> "none". - Tipo: config-flag · Enforcement: BL · Confidence: VERIFIED · customer_specific: false
- Evidenza:
DocumentPublishControl.ascx.vb:414-416(If ...MailingType <> "none" Then ProcessAlertSystem()); propertySettings.vb:135.
BR-ECM-021 — Accoppiamento SaveAttachExtMode ↔ CONTROLURL dell'activity Pubblica
- Regola: per attivare correttamente il salvataggio esterno non basta il flag
SaveAttachExtMode; occorre anche impostareCONTROLURL = ExternalDocs/DocumentPublishExtControl.ascxsull'activity "Pubblica" di ogni workflow documentale. - Tipo: config-flag · Enforcement: BL · Confidence: SUPPORTED · customer_specific: false
- Evidenza: commento di configurazione
Web.config:379-380(immediatamente sopra<SaveAttachExtMode>): "Salva allegato in un repository esterno tramite un'apposita DLL unitamente al flag va impostato la CONTROLURL = ExternalDocs/DocumentPublishExtControl.ascx sull'activity Pubblica di ogni Workflow documentale". - Note: dipendenza di configurazione nascosta documentata solo in un commento; la mancata configurazione dell'activity porta a comportamento incoerente (control di pubblicazione non-ext).
BR-ECM-022 — Connessione DB del Documentale (PROD vs TEST)
- Regola: il Documentale usa la connection string
MainConnection. Nel sample Web.config la variante PROD punta allo schemaINFOCAD_BIM(attualmente commentata) mentre l'ambiente attivo èINFOCAD_TEST38. - Tipo: config · Enforcement: BL · Confidence: VERIFIED · customer_specific: false
- Evidenza:
Web.config:200-206(MainConnectionconUser Id=INFOCAD_BIMin commento;ConnectionStringattiva conUser Id=INFOCAD_TEST38). (Credenziali presenti in chiaro nel file — non riportate qui.) - Note: rischio ambiente — schema di destinazione differente tra config commentata e attiva; password in chiaro nel Web.config.
BR-ECM-023 — Doppia definizione del contratto IDocManager
- Regola: esistono due definizioni del contratto provider: quella VB attiva a runtime
Descor.Documents.DocumentInterface.IDocManager(conResponse.Code/Iddi tipoString,DownloadDocument(String)) e una C# legacyExternalDocSave.Interface.IDocManager(conint), referenziata solo inusingcommentati nei provider. - Tipo: config/tech-debt · Enforcement: BL · Confidence: SUPPORTED · customer_specific: false
- Evidenza: contratto attivo
InfocadServer/DocumentInterface/DAO/IDocManager.vb:3-16; DTODocumentSharedObjects/Objects/Response.vb:7-8(Code/Id As String); provider OpenTextDocManager.cs:5usaDescor.Documents.DocumentInterface,:12//using ExternalDocSave.Interface;commentato. - Note: ambiguità di manutenzione; da confermare quale assembly
IDocManagersia effettivamente compilato in~/bin.
BR-ECM-024 — Svuotamento BLOB locale post-ECM previsto ma disabilitato
- Regola: il codice prevede lo svuotamento fisico del BLOB locale (allegato principale e secondari) dopo l'invio all'ECM esterno, ma i relativi blocchi sono commentati; quindi il file rimane persistito sia sull'ECM sia in
DOCS_ATTACHMENT/DOCS_ATTACHMENT_DOCUMENT(doppia persistenza). - Tipo: data-integrity · Enforcement: BL · Confidence: VERIFIED · customer_specific: false
- Evidenza:
DocumentPublishControl.ascx.vb:379-383(blocco commentato svuotamento allegato principale),:393-394(blocco commentato allegati secondari). - Note: la delega al ECM esterno non libera lo storage Oracle; occupazione doppia dei byte.
Rischi trasversali (sintesi)
- Regole solo-UI (bypassabili da percorsi non-UI o API): BR-ECM-016, BR-ECM-017, BR-ECM-018.
- Regole solo-DB (logica interna alle procedure, non visibile lato codice): BR-ECM-019 (replace-all tag), parte di BR-ECM-007.
- Magic number / stringhe hard-coded:
"1"/"OK"/"Succeded"(BR-ECM-004), substring0/5/6/9/12/15(BR-ECM-011),2147483647(BR-ECM-013), stato workflow24(BR-ECM-018). - Variabili cliente-specifiche: BR-ECM-011 e BR-ECM-014 (provider Docs / MondoConv).
- Feature-flag / dipendenze nascoste: BR-ECM-001, BR-ECM-002, BR-ECM-021 (accoppiamento CONTROLURL).
- Integrità dati: BR-ECM-014 (id vuoto), BR-ECM-015 (nessuna transazione ECM↔DB), BR-ECM-024 (doppia persistenza).
- Ambiente: BR-ECM-010 (endpoint test/dev committati), BR-ECM-022 (schema PROD vs TEST, credenziali in chiaro).
Domande aperte
- Quale assembly
IDocManagerè effettivamente compilato in~/bin(VB vs C# legacy)? (BR-ECM-023) - Schema effettivo di
MainConnectionin PROD (INFOCAD_BIM?) vs TEST (INFOCAD_TEST38). (BR-ECM-022) - Tabelle DEM toccate da
activity.Run/ElementMessage.Createdurante la pubblicazione (BR-ECM-008). - Comportamento reale del provider Docs quando
USER_PROTOCOLresta vuoto: come si ricongiunge il documento all'ECM? (BR-ECM-014)