AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Entity

skill-snk-devcenter-addon-studio-entity · by snk-devcenter

Cria, revisa e refatora entidades Java `@JapeEntity` Sankhya — Lombok (`@Data`/`@NoArgsConstructor`/`@AllArgsConstructor`), PK simples/composta com `@Embeddable`, `@Column`, `@Id`, `@JoinColumn`, `@OneToMany`/`@OneToOne`/`@ManyToOne`, `@Relationship`, naming `<PRX><MOD3><CTX>`, mapeamento de tipos (`Integer`/`BigDecimal`/`String`/`Boolean`/`Date`/`Timestamp`). Use ao criar, alterar, revisar, audi…

No reviews yet
0 installs
6 views
0.0% view→install

Install

$ agentstack add skill-snk-devcenter-addon-studio-entity

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-snk-devcenter-addon-studio-entity)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
13d ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Entity? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Entidade Java (@JapeEntity) — Addon Studio 2.0

Entidade Java = representação domínio de tabela banco. Limpa — contém só mapeamento estrutural mínimo. Metadata UI, tipos, descrições, comportamento fica no Dicionário de Dados (XMLs em datadictionary/).

> Referência complementar: consulte data-dictionary para criar XML correspondente à entidade.


1. Regras Fundamentais

| Regra | Detalhe | |:-----------------------------------------------------|:----------------------------------------------------------| | @Column só tem name | @Column(name = "COLUNA") — nenhum outro atributo. | | @JoinColumn só tem name e referencedColumnName | @JoinColumn(name = "...", referencedColumnName = "...") | | @JapeEntity tem entity, table, isNativeTable e isNativeInstance | Addon puro: @JapeEntity(entity = "...", table = "..."). Tabela nativa Sankhya: adicionar isNativeTable = true. Instância também nativa: adicionar isNativeInstance = true. Veja seção 1.2. | | Sem @Expression | Expressões ficam no XML (`). | | Sem @GeneratedValue | Sequência fica no XML (sequenceType/sequenceField) — default "A", PK automática. | | Sem @Option / @Property | Opções ficam no XML (). | | Lombok obrigatório | @Data, @NoArgsConstructor, @AllArgsConstructor. | | Convencao de nomenclatura no entity/table` | Veja secao 1.1. |

1.1 Convencao de nomes (parametrizada por projeto)

Padrao parametrizado por ` (prefixo) + (modulo). Ver database` secao "Descobrir convencao do projeto" antes de criar.

| Atributo | Padrao | Exemplo (PRX=TDC, MOD3=XYZ) | |:----------|:------------------------------------|:-----------------------------| | entity | ` (PascalCase) | TdcXyzCabecalho | | table | (UPPER) | TDCXYZCAB` |

Componentes:

  • ` / : prefixo fixo do projeto, **3-4 chars** (ex.: Tdc/TDC, App/APP, Cst/CST`)
  • ` / : sigla do modulo, **3 caracteres** (ex.: Xyz/XYZ, Fin/FIN, Fat/FAT`)
  • ` / : contexto/entidade (ex.: Cabecalho/CAB, Item/ITE, Configuracao/CFG`)

entity usa PascalCase legivel (Xyz, nao XYZ). table usa UPPER concatenado.

Exemplo coerente (`=TDC, =XYZ`):

@JapeEntity(entity = "TdcXyzCabecalho", table = "TDCXYZCAB")

> Antes criar entidade nova: (1) inspecionar projeto pra detectar ` existente; (2) se ausente, perguntar dev + + ; (3) confirmar entity + table` final.

> NOTA: exemplos seguintes usam TDC como prefixo ilustrativo. Substituir pelo `` real do projeto.

1.2 Tabelas e Instâncias Nativas Sankhya (isNativeTable / isNativeInstance)

@JapeEntity aceita dois flags para sinalizar quando a tabela e/ou a instância já existem no Sankhya nativo. Os dois flags são independentes e cobrem 3 cenários:

| Cenário | isNativeTable | isNativeInstance | Tag XML correspondente | |:--------------------------------------|:----------------|:-------------------|:----------------------------------------| | Tabela addon + Instância addon | omitir | omitir | ` + | | Tabela nativa + Instância **nova** do addon | true | omitir | + | | Tabela nativa + Instância nativa | true | true | + ` |

> Por que isso importa: sem isNativeTable, o KSP rejeita a compilação com erro de entidade duplicada ao detectar que a tabela já existe. Sem isNativeInstance em uma instância nativa, a instância é regravada no metadata.xml gerado e, durante o deploy do addon, o dicionário a re-mapeia para o owner do addon — quebrando todas as regras, validações e telas nativas que dependem dessa instância.

Tabelas nativas mais comuns: TGFCAB, TGFFIN, TGFORD, TGFVEI, TGFEMP, TGFPAR, TGFPRO, TGFITE. Instâncias nativas mais comuns associadas: CabecalhoNota (TGFCAB), ItemNota (TGFITE), Parceiro (TGFPAR), Produto (TGFPRO), TipoOperacao (TGFTOP), Financeiro (TGFFIN).

// 1) Tabela e instância do addon — sem flags
@JapeEntity(entity = "TdcXyzCabecalho", table = "TDCXYZCAB")
public class TdcXyzCabecalho { ... }

// 2) Tabela nativa, instância NOVA do addon — só isNativeTable
@JapeEntity(entity = "TdcXyzDefensivos", table = "TGFDFAGR", isNativeTable = true)
public class TdcXyzDefensivos { ... }

// 3) Tabela e instância nativas — os dois flags
@JapeEntity(entity = "CabecalhoNota", table = "TGFCAB",
            isNativeTable = true, isNativeInstance = true)
public class CabecalhoNota { ... }

> Regra prática: se o entity for um nome usado pelo Sankhya nativo (CabecalhoNota, ItemNota, Parceiro, Produto, etc.), use isNativeInstance = true. Se o entity segue a convenção Tdc do addon, é instância nova — não use isNativeInstance.


2. Organizacao

> Skill nao opina sobre estrutura de pacotes. Organize entidades, Enums, PKs compostas, classes de dominio puro conforme arquitetura do seu projeto.

Tipos de classe que aparecem aqui:

| Tipo | Caracteristica | |:-------------------------------------------|:------------------------------------------------------------------------| | Entidade persistida (@JapeEntity) | Mapeia tabela do banco | | PK composta (@Embeddable) | Classe que agrupa colunas-chave de uma PK composta | | Enum (Value Object) | Valores finitos persistidos como texto curto | | Classe sem persistencia | Conceito de negocio, sem @JapeEntity (@Data + factory methods) |


3. Tipos de Classe no Domínio

3.1 Entidade Persistida (@JapeEntity)

Representa tabela no banco. Tem @JapeEntity, @Id, @Column, opcionalmente relacionamentos.


@JapeEntity(entity = "TdcXyzAlvo", table = "TDCXYZALV")
public class TdcXyzAlvo { ...
}

3.2 PK Composta (@Embeddable)

Tabela com PK composta — classe separada anotada com @Embeddable.


@Embeddable
public class TdcXyzEntidadeId { ...
}

3.3 Enum (Value Object)

Valores finitos de domínio (listas opções). Usados como tipo campo em entidades. Têm value = valor armazenado no banco.

Regras obrigatórias:

| Regra | Detalhe | |:-----------------------------------|:-----------------------------------------------------------------| | @Getter (Lombok) | Gera o getter de value automaticamente. | | @AllArgsConstructor (Lombok) | Gera o construtor que recebe value. | | Campo private final String value | Valor persistido no banco (código curto). | | Sufixo Enum | Nome da classe sempre termina com Enum (ex: TipoStatusEnum). |

Anatomia completa:

import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor
public enum TipoEnum {
    OPCAO_A("A"),
    OPCAO_B("B");

    private final String value;
}

3.4 Classe de Domínio Puro

Classes representando conceitos domínio sem persistência direta. Sem @JapeEntity. Contêm lógica negócio, validações, factory methods.

public class ResultadoCalculo { ...
}

public class DadosConsolidados { ...
}

4. Anatomia de uma Entidade

import br.com.sankhya.studio.persistence.*;                    // 1. Imports de persistência
import lombok.*;                                                // 2. Imports Lombok

@Data                                                           // 3. Lombok obrigatório
@NoArgsConstructor
@AllArgsConstructor
@JapeEntity(                                                    // 4. Mapeamento: somente entity + table
    entity = "NomeDaEntidade",
    table = "NOME_TABELA"
)
public class NomeDaEntidade {                                   // 5. Classe plana (sem herança de metadata)

    @Id                                                         // 6. Chave primária
    @Column(name = "COLUNA_PK")
    private Integer id;

    @Column(name = "COLUNA_1")                                  // 7. Campos: somente name
    private String campo1;

    @OneToMany(...)                                             // 9. Relacionamentos (se houver)
    private List filhos;

    public void metodoDeNegocio() { ...}                      // 10. Métodos de domínio (se houver)
}

5. Anotações Permitidas

Anotações que DEVEM ser usadas

| Anotação | Uso | Pacote | |:-----------------------------|:------------------------------------------------|:------------------------------------| | @JapeEntity(entity, table) | Toda entidade persistida | br.com.sankhya.studio.persistence | | @Id | Campo(s) de chave primária | br.com.sankhya.studio.persistence | | @Column(name) | Todo campo persistido | br.com.sankhya.studio.persistence | | @Embeddable | Classe de PK composta | br.com.sankhya.studio.persistence | | @Data | Getter/Setter/ToString/Equals/Hash | lombok | | @NoArgsConstructor | Construtor vazio (obrigatório para o framework) | lombok | | @AllArgsConstructor | Construtor com todos os campos | lombok |

Anotações opcionais (usar quando necessário)

| Anotação | Quando usar | Pacote | |:------------------------------------------|:-----------------------------------------------------------------------------|:------------------------------------| | @Builder | Quando a entidade é construída programaticamente no domínio | lombok | | @OneToMany | Relacionamento pai -> filhos | br.com.sankhya.studio.persistence | | @OneToOne | Navegação para entidade referenciada | br.com.sankhya.studio.persistence | | @ManyToOne | Navegação inversa filho -> pai | br.com.sankhya.studio.persistence | | @JoinColumn(name, referencedColumnName) | Junto com @OneToOne / @ManyToOne | br.com.sankhya.studio.persistence | | @JoinColumns | Múltiplos @JoinColumn (FK composta) | br.com.sankhya.studio.persistence | | @Cascade | Dentro de @OneToMany para cascatear operações | br.com.sankhya.studio.persistence | | @Relationship | Dentro de @OneToMany para definir campos do vínculo | br.com.sankhya.studio.persistence | | @SuperBuilder | Quando a entidade herda de classe base de domínio (ex: VO com campos comuns) | lombok.experimental | | @EqualsAndHashCode(callSuper = true) | Junto com herança + @SuperBuilder | lombok |

Anotações PROIBIDAS na entidade

| Anotação | Onde fica | Motivo | |:------------------|:-----------------------------------|:----------------------| | @Expression | XML ` | Metadata do framework | | @GeneratedValue | XML sequenceType/sequenceField | Metadata do framework | | @Option | XML | Metadata de UI | | @Property` | XML | Metadata do framework |


6. Chave Primária (PK)

Padrões de chave primária — @Id em PK simples (Integer ou BigDecimal conforme tabela addon vs nativa) e PK composta via @Embeddable com convenções e métodos auxiliares — em [references/primary-key.md](references/primary-key.md).


7. Campos (@Column)

Regra única


@Column(name = "NOME_COLUNA")
private TipoJava nomeCampo;

Nenhum outro atributo. Ponto.

Mapeamento de tipos

| Tipo no banco / XML | Tipo Java sugerido | |:---------------------------------|:---------------------------------------| | INTEIRO | Integer ou BigDecimal | | TEXTO | String | | DECIMAL | BigDecimal | | DATA_HORA | Timestamp (java.sql.Timestamp) | | CHECKBOX | Boolean | | PESQUISA (FK) | BigDecimal ou Integer (tipo da FK) | | Campo com opções (enum no banco) | Enum Java (veja seção 9) | | Demais dataTypes (CAIXA_TEXTO, HORA, LISTA, HTML, ARQUIVO, ...) | Ver tabela completa em data-dictionary/references/xml-to-java.md |

Quando usar Integer vs BigDecimal

| Contexto | Tipo | Motivo | |:-----------------------------------------------|:--------------------------|:---------------------------------| | PKs de tabelas do add-on (COD*/NU*) | Integer | Sequenciais do add-on sao inteiros simples | | PKs de tabelas nativas (NUNOTA, CODPARC, etc.) | BigDecimal | Padrão do Sankhya Om | | Quantidades, valores monetários | BigDecimal | Precisão decimal | | Campos numéricos simples | BigDecimal ou Integer | Conforme necessidade |


8. Relacionamentos

Padrões de relacionamento — @OneToMany (pai → filhos), @OneToOne + @JoinColumn (navegação para entidade referenciada), @OneToOne/@ManyToOne + @JoinColumns (FK composta), @ManyToOne + @JoinColumn (filho → pai), e quando usar cada — em [references/relationships.md](references/relationships.md).


9. Enums (Value Objects)

Enums = valores finitos armazenados no banco como texto curto (geralmente 1 caractere).

Estrutura padrão

import lombok.AllArgsConstructor;
import lombok.Getter;

@AllArgsConstructor
@Getter
public enum NomeEnum {
    OPCAO_UM("V"),
    OPCAO_DOIS("P");

    private final String value;
}

Convenções

| Regra | Detalhe | |:---------------------|:---------------------------------------------------------| | Anotações | @AllArgsConstructor, @Getter | | Campo value | private final String value — valor armazenado no banco | | Nomes das constantes | UPPER_SNAKE_CASE descritivo | | Valores | Strings curtas (1-2 caracteres, geralmente) |

Uso na entidade

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.