Autorrelacionamento e Agregação

Pessoal, desejo obter ajuda de vocês com uma situação. Para facilitar o entendimento, abaixo o diagrama de classes:

image

1 - Um item pode ser do tipo servico, mercadoria, produto, insumo ou obrigacao. Se e somente se quando for um servico (tipoItem = 'S') é que se pode agregar o item ao plano. Como o item pode não ser um servico, então a multiplicidade é 0…n. Acham plausível com essa abordagem?

2 - Por outro lado, um plano também é um item. Logo trata-se de um autorrelacionamento. No entanto, assim como nem todo item é um servico, também não um plano. Qual é a opinião de vocês sobre esse fato?

Lembre-se: prefira composição/agregação a herança.
Se for preciso, prefira implementação a herança.
Ou seja, quais são os atributos que abalizam você classificar um plano como um item? E o mesmo para produto, serviço, mercadoria, insumo e obrigação?
Aliás, o que diferencia uma mercadoria de um produto? E um insumo?

1 curtida

Então @darlan_machado
Questões 1 e 2: o item é o nome genérico para indicar algo que possa ser movimentado (comprado, vendido ou pago (salário/INSS, etc.).

Questões 3 e 4
Insumo = comprado para utilizar na produção de um produto ou serviço.
Mercadoria = comprado para revenda.
Produto = produzido pela empresa para a venda.
As diferenças são conceituais/contábeis.

Eu havia feito assim:

image

Mas depois, após perceber que as diferenças eram conceituais, achei que não fazia sentido.

Serviços: a empresa (pet shop) realiza vários serviços, como banho, tosa, etc.;
Planos: um cliente pode comprar um plano que é um conjunto de serviços;
Insumos: shampoos, lâminas de tosa, etc. precisam ser comprados;
Mercadorias: rações e outras mercadorias são compradas e revendidas;
Obrigações: salários e outras obrigações são pagas.

Veja: você pode usar a denominação item para a classe que representa a relação entre um determinado produto (insumo, mercadoria)/serviço (tosa, banho) e uma NF (que pode conter nenhum ou vários produtos e pode conter nenhum ou vários serviços mas sempre terá ao menos um deles.
Então, o item seria um elemento genérico que informaria: quantidade e valor daquela quantidade.
Aí você teria:
Produto
– Insumo
– Mercadoria

Serviço
– Banho
– Tosa

Entendeu?

Então @darlan_machado, nesse caso, insumo e mercadoria não são ‘tipos’ de produto. Como indiquei anteriormente, um produto pode ser vendido, um insumo nunca é vendido, pois é consumido para criar um produto ou oferecer um serviço.
Exemplos: um shampoo é usado para produzir o serviço banho. Uma lâmina de rasqueio é usada para fazer o serviço de tosa.
Já a mercadoria é algo que eles compram para revender (eles não a produzem ou utilizam para gerar um produto ou serviço).
Exemplo: ração, coleira, etc.
Já um produto é feito no pet shop usando insumos.
Exemplo: tiara para cachorrinha é feito com talas de um papel específico (eu acho), brilho, etc. A tiara é o produto (feito para ser vendido) e os itens usados para fazê-la são os insumos. O papel e o brilho não são vendidos por si só, mas fazem parte da tiara.
E quanto à relação ente o serviço e os planos?

Eu havia pensado assim (de forma simplificada):

Você compra esse insumo como mesmo? Para mim, é um produto, porém, indicado no sistema com outro nome.
Enfim, o sistema é teu. Mas, eu acho incoerente você criar várias nomenclaturas distintas para a mesma coisa.

Não, eu pesquisei a respeito, tem diferença. Mas enfim, acho que vou indicar tudo como item indistintamente e colocar um distintivo para denotar do que se trata, pois um plano é sempre de serviços. Não pode ter no meio um pacote de ração ou uma rasqueadeira, por exemplo. Um plano só pode ter um serviço. Por exemplo:
Plano 1
4 banhos;
1 tosa;
1 desembolo
valor do plano: R$ 200,00

Porque eu não tenho outras informações que distingam uma coisa da outra, mas tenho que ter um jeito de saber se o item é um serviço.

Por exemplo:

image

image

Não há diferença ‘concreta’ entre os itens, mas conceitual.