import { DollarSign } from 'lucide-react'; import { ContractItemType } from '../../../types/contract-item.types'; import { DELIVERABLE_TYPE_LABELS, DeliverableType } from '../../../constants/deliverable-type'; import type { DeliverableDetail } from '../../../types/deliverable.types'; interface Props { deliverable: DeliverableDetail; } function formatCurrency(value: number): string { return value.toLocaleString('pt-BR', { style: 'currency', currency: 'BRL', }); } function formatNumber(value: number): string { return value.toLocaleString('pt-BR', { minimumFractionDigits: 0, maximumFractionDigits: 2, }); } function resolveTimebox(deliverable: DeliverableDetail): { value: number | null; source: 'CONTRACT_ITEM' | 'DELIVERABLE' | null; } { if (deliverable.type === DeliverableType.MANUTENCAO) { return { value: deliverable.timeboxManutencao ?? null, source: 'DELIVERABLE' }; } const ci = deliverable.contractItem; if (!ci) return { value: null, source: null }; switch (deliverable.type) { case DeliverableType.DESCOBERTA: return { value: ci.timeboxDescoberta, source: 'CONTRACT_ITEM' }; case DeliverableType.DESIGN: return { value: ci.timeboxDesign, source: 'CONTRACT_ITEM' }; case DeliverableType.ARQUITETURA: return { value: ci.timeboxArquitetura, source: 'CONTRACT_ITEM' }; case DeliverableType.CONSTRUCAO: return { value: ci.timeboxConstrucao, source: 'CONTRACT_ITEM' }; default: return { value: null, source: null }; } } export function EntregavelValuationCard({ deliverable }: Props) { const ci = deliverable.contractItem; const isSaas = ci?.itemType === ContractItemType.SAAS_LICENSE; const { value: timebox, source } = resolveTimebox(deliverable); const totalValueNumber = deliverable.totalValue != null ? Number(deliverable.totalValue) : null; if (deliverable.type === DeliverableType.LICENCA) { if (totalValueNumber == null || ci?.ustValue == null) { return ( ); } return (

Valor Total

{formatCurrency(totalValueNumber)}

1 licença × R$ {formatNumber(ci.ustValue)}/unidade

); } if (isSaas) { return (

Valor Total

R$ 0,00

Licença SaaS — faturamento via OS Mãe
); } if (deliverable.type === DeliverableType.MANUTENCAO && deliverable.timeboxManutencao == null) { return ( ); } if (deliverable.type !== DeliverableType.MANUTENCAO && timebox == null) { return ( ); } if (totalValueNumber == null || timebox == null || ci?.ustValue == null) { return (

Valor Total

Não valorado

); } return (

Valor Total

{formatCurrency(totalValueNumber)}

{formatNumber(timebox)}h × {deliverable.numWeeks} sem × R$ {formatNumber(ci.ustValue)} /UST

Time-box{' '} {source === 'DELIVERABLE' ? '(definido no Entregável)' : '(definido no Item de Contrato)'}

); } function ValuationWarning({ title, description }: { title: string; description: string }) { return (

{title}

{description}

); }