Contexto
O dono forneceu um corpus novo: 19 mapeadores Sysmiddle reais (NF-e/CT-e/MDF-e/NFS-e, clientes CNHI/IVECCO/MARELLI/COMAU/ECOMEX) + corpus de referência real Neogrid→SEFAZ (159 pares TCL/XSL de produção, por DocType/Versão). Objetivo: gerar TCL/XSL/XSLT reais a partir dos mapeadores Sysmiddle via o loop RAG→gerar→validar→corrigir já existente (ai/XslSynth), usando o corpus Neogrid como referência/oráculo.
Entregue nesta sessão (3 PRs, todos mergeados em develop)
1. Fix do bug de parsing MQSeries (PR #434)
13 dos 19 mapeadores Sysmiddle tinham TotalFields: 0 no aprendizado de layout — bug duplo: (a) split de linha ingênuo (\r\n) num stream contínuo de largura fixa sem terminador, tratando o arquivo inteiro como 1 linha; (b) detecção de padrão por prefixo textual repetido, que MQSeries não tem (contador sequencial único por linha). Corrigido nos dois pontos, validado contra 4 clientes reais (0 → 8-10 campos aprendidos cada). 982/982 testes passando.
2. Primeiro experimento real do loop RAG→XSLT (PR #435)
Caso NFe006c_InutNFe (Inutilização, cenário mais simples do domínio fiscal): rodado de ponta a ponta contra Ollama fine-tuned real (172.25.32.5:11434, modelo layoutparser-sysmiddle-dsl:1.5b). 10 de 11 campos saíram byte-a-byte idênticos ao XSLT de produção real. 1 campo (xJust) divergiu por uma regra de negócio não inferível do TCL isolado (prefixo + truncamento). Faltou a casca do documento (xsl:template/namespace raiz) — próximo passo natural.
Persistência validada de ponta a ponta contra o IdentityDatabase real (não simulada): release 1d612a3c-8b30-4fcb-9fdf-dad1b085608b, confirmado por releitura via caminho diferente do de escrita. Marcado como experimento via CorrelationId (não via ArtifactSource novo — decisão de arquitetura sobre estender esse enum fica pendente para @lp-architect).
3. Catálogo de exemplos de referência Neogrid (PR #437)
Novo endpoint GET /api/reference-examples (+ /{id} pra conteúdo) — expõe os exemplos reais Neogrid (TCL+XSL) separados do domínio de governança real (MappingDraft/MappingRelease), pra não confundir referência com release de cliente. Path do corpus configurável via ReferenceExamples:BasePath (vazio por padrão, degrada gracioso).
Pendências conhecidas (não resolvidas nesta sessão, registradas para não perder)
- Decisão de arquitetura: estender
MappingReleaseArtifactSource com um valor Experimental (hoje contornado via CorrelationId) — @lp-architect.
- Corrigir a divergência do campo
xJust (regra de negócio de prefixo+truncamento) e a casca do documento (xsl:template/namespace) no gerador — @lp-parser-llm.
- Expandir o experimento pra CTe/MDFe/NFSe, e só depois pros 19 mapeadores Sysmiddle reais (agora desbloqueados pelo fix de MQSeries).
- RAG/XSD locais (
appsettings.Development.json) apontam pro corpus desta sessão (.claude/temp/servidor/layoutparser/Examples) — path é local, não existe em CI/produção; decidir onde esse corpus deve viver permanentemente.
Evidência
PRs #434, #435, #437 — todos mergeados em develop, CI verde.
Contexto
O dono forneceu um corpus novo: 19 mapeadores Sysmiddle reais (NF-e/CT-e/MDF-e/NFS-e, clientes CNHI/IVECCO/MARELLI/COMAU/ECOMEX) + corpus de referência real Neogrid→SEFAZ (159 pares TCL/XSL de produção, por DocType/Versão). Objetivo: gerar TCL/XSL/XSLT reais a partir dos mapeadores Sysmiddle via o loop RAG→gerar→validar→corrigir já existente (
ai/XslSynth), usando o corpus Neogrid como referência/oráculo.Entregue nesta sessão (3 PRs, todos mergeados em
develop)1. Fix do bug de parsing MQSeries (PR #434)
13 dos 19 mapeadores Sysmiddle tinham
TotalFields: 0no aprendizado de layout — bug duplo: (a) split de linha ingênuo (\r\n) num stream contínuo de largura fixa sem terminador, tratando o arquivo inteiro como 1 linha; (b) detecção de padrão por prefixo textual repetido, que MQSeries não tem (contador sequencial único por linha). Corrigido nos dois pontos, validado contra 4 clientes reais (0 → 8-10 campos aprendidos cada). 982/982 testes passando.2. Primeiro experimento real do loop RAG→XSLT (PR #435)
Caso
NFe006c_InutNFe(Inutilização, cenário mais simples do domínio fiscal): rodado de ponta a ponta contra Ollama fine-tuned real (172.25.32.5:11434, modelolayoutparser-sysmiddle-dsl:1.5b). 10 de 11 campos saíram byte-a-byte idênticos ao XSLT de produção real. 1 campo (xJust) divergiu por uma regra de negócio não inferível do TCL isolado (prefixo + truncamento). Faltou a casca do documento (xsl:template/namespace raiz) — próximo passo natural.Persistência validada de ponta a ponta contra o
IdentityDatabasereal (não simulada): release1d612a3c-8b30-4fcb-9fdf-dad1b085608b, confirmado por releitura via caminho diferente do de escrita. Marcado como experimento viaCorrelationId(não viaArtifactSourcenovo — decisão de arquitetura sobre estender esse enum fica pendente para@lp-architect).3. Catálogo de exemplos de referência Neogrid (PR #437)
Novo endpoint
GET /api/reference-examples(+/{id}pra conteúdo) — expõe os exemplos reais Neogrid (TCL+XSL) separados do domínio de governança real (MappingDraft/MappingRelease), pra não confundir referência com release de cliente. Path do corpus configurável viaReferenceExamples:BasePath(vazio por padrão, degrada gracioso).Pendências conhecidas (não resolvidas nesta sessão, registradas para não perder)
MappingReleaseArtifactSourcecom um valorExperimental(hoje contornado viaCorrelationId) —@lp-architect.xJust(regra de negócio de prefixo+truncamento) e a casca do documento (xsl:template/namespace) no gerador —@lp-parser-llm.appsettings.Development.json) apontam pro corpus desta sessão (.claude/temp/servidor/layoutparser/Examples) — path é local, não existe em CI/produção; decidir onde esse corpus deve viver permanentemente.Evidência
PRs #434, #435, #437 — todos mergeados em
develop, CI verde.