Skip to content

feat: contrato fieldMappings definitivo em execute-candidates (issue #141) - #207

Merged
elson-vinicius-lopes merged 6 commits into
developfrom
feat/fieldmappings-execute-candidates-141
Aug 28, 2026
Merged

feat: contrato fieldMappings definitivo em execute-candidates (issue #141)#207
elson-vinicius-lopes merged 6 commits into
developfrom
feat/fieldmappings-execute-candidates-141

Conversation

@elson-vinicius-lopes

Copy link
Copy Markdown
Collaborator

Resumo

  • Campo aditivo fieldMappings por candidato no endpoint execute-candidates, integrado inline reaproveitando ParsingResult/MapperVo já computados no pathway sysmiddle — sem 2ª consulta SQL.
  • tcl-xsl sempre null neste pathway (fora de escopo).
  • Degradação automática por LineInfo herdada de feature: catálogo TargetLayoutGuid→XPath e resolução de granularidade N:1 / grupos repetidos no parser de runtime #140: quando a origem TXT está vazia/degradada, o mapeamento cai para best-effort de forma consistente.
  • Overhead de performance medido em ~0.1ms isolado — cache adiado para o backlog, condicional a medição futura contra o LowCodeRunner real (não há indício hoje de que seja necessário).
  • Testes de contrato completos: null / [] / direct / transformed / concatenated / static / N:1 / 1:N / repetição / XML byte-idêntico.

⚠️ Destaque — validação comportamental pendente

A validação comportamental de 20 execuções reais contra o LowCodeRunner ainda está pendente
(mesmo bloqueio ambiental de #140 — ambiente Windows necessário). O front-end deve tratar
authoritative como "correto pelas regras do mapper", não como "validado contra execução real",
até essa validação ser feita.

Referências

Test plan

  • dotnet build — 0 erros
  • dotnet test — 467 passando, 4 falhas pré-existentes (dependentes de path Windows, ambiente Linux/WSL)
  • Validação comportamental real contra LowCodeRunner (pendente, ambiente Windows)

Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com

elson-vinicius-lopes and others added 6 commits August 28, 2026 08:47
…sysmiddle)

Compõe fieldMappings por candidato sysmiddle bem-sucedido, reaproveitando o
mapper decifrado já produzido por LowCodeAutoTransformationService.RunAsync
(LowCodeCandidateResult.DecryptedMapperContent, sem 2ª consulta SQL) e um
parse posicional compartilhado uma vez por request (ILayoutParserService).
Falha isolada na composição nunca derruba o candidato (TryComposeFieldMappings
try/catch -> null + warning). tcl-xsl mantém fieldMappings sempre null
(mesma decisão categórica de sectionMappings na #138).

Design: docs/architecture/design-contrato-fieldmappings-execute-candidates-issue-141.md
Secao bilingue com exemplo completo (CNPJ do emitente), semantica de
null/[]/preenchido, convencao de XPath namespaced, distincao explicita entre
fieldMappings (campo) e sectionMappings/segmentMappings (linha/secao, #138).
Ressalva de validacao comportamental pendente (LowCodeRunner nao roda em
WSL/Linux, so validacao estrutural sintetica) destacada em bloco de alerta
logo no topo da secao, nao enterrada no meio do texto.
…didates (issue #141)

Adiciona 2 casos exigidos pelo pedido original que a implementação ainda não cobria:
mapper sem nenhum LinkMappingItem/Rule resolve fieldMappings==[] (não null), e
TransformedXml é byte-idêntico com/sem extração de fieldMappings habilitada.
Achado durante o gate: Compose() não filtra por resolução de origem — um
LinkMappingItem cujo InputLayoutGuid não existe no parse ainda gera entrada
BestEffort; [] só ocorre quando o mapper não tem nenhum link/rule.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…andidates-141

Reconcilia PR #207 (issue #141) com develop, que já absorveu as PRs
irmãs #200 (issue #86), #201 (issue #139), #203 (issue #138) e #205
(issue #140) da mesma cadeia de trabalho. Conflitos eram todos overlap
real entre PRs desta cadeia tocando os mesmos arquivos, não clash
semântico:

- LowCodeCandidateResult.cs: DecryptedMapperContent (#141) e
  MapperDecryptedContent (#138) eram o mesmo dado (mapper.DecryptedContent)
  sob nomes diferentes — unificado em DecryptedMapperContent, único campo,
  usado tanto por SysmiddleSectionMappingResolver (#138) quanto por
  TryComposeFieldMappings (#141).
- LowCodeAutoTransformationService.cs: mesma duplicação de atribuição
  nos dois pontos de criação de LowCodeCandidateResult.
- TransformationExecutionController.cs: TransformationCandidate agora
  preenche FieldMappings (#141) E SectionMappings/XmlNamespaces (#138)
  no mesmo objeto — funcionalidades complementares, ambas preservadas.
- README.md: seções de documentação de fieldMappings (#141) e
  sectionMappings (#138) são independentes, mantidas as duas em sequência.
- security-code-scan-baseline.json: entradas de linha para
  LowCodeAutoTransformationService.cs reconciliadas para 371/415 (linhas
  atuais pós-merge) — mesmos 2 achados de sempre (File.WriteAllTextAsync
  em inPath/metaPath), não vulnerabilidades novas. Nota adicionada ao
  _readme documentando o ajuste.

dotnet build: 0 erros. dotnet test: 413/417 passando — as 4 falhas
(SafePathResolverTests, LowCodeRunnerArgsTests) são pré-existentes,
específicas de ambiente (assumem paths Windows, falham sob WSL/Linux),
não relacionadas aos arquivos deste merge.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

Scanned Files

None

@elson-vinicius-lopes
elson-vinicius-lopes merged commit c1f3c1f into develop Aug 28, 2026
4 checks passed
@elson-vinicius-lopes
elson-vinicius-lopes deleted the feat/fieldmappings-execute-candidates-141 branch August 28, 2026 12:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant