import { createOperationKey } from '@/lib/operation-key'; import { Field, control, button } from '@/pages/management/shared'; import { ProactiveSupplyBrowser } from './proactive-supply'; export type ProactiveEvidence = { id: string; observation_id?: string; category: string; purpose: 'local' | 'methodology'; statement: string; interpretation: string; source: string; locator: string; period: string; scope: string; coverage: string; verified_on: string; access: 'internal' | 'public'; document_id: string; }; export type ProactiveAnalysis = { version: 1; kind: 'exists' | 'needs' | 'ideas'; evidence: ProactiveEvidence[]; need: { state: 'hypothesis' | 'confirmed'; problem: string; observed_supply: string; observed_demand: string; type: string; clients: string; evidence_ids: string[]; limitations: string; missing: string; confirmation: string; }; idea: { solution: string; activity: string; chain_id: string; stage: string; coverage: string; mode: string; resources: string; assumptions: string; conditions: string; pending: string; next_action: string; }; relations: { id: string; kind: string; target_id: string; relation: string; reference: string; evidence_ids: string[]; }[]; supply_comparisons?: { observation_id: string; relationship: | 'competition' | 'complementarity' | 'partner' | 'uncertain'; rationale: string; limitations: string; }[]; }; export type ProactiveOptions = { documents?: { id: string; title: string }[]; groups: Record; references: Record; }; export type ProactivePublic = { version?: number; group: string; state: string; need: string; proposal: string; basis: string; limitations: string; next_action: string; evidence_ids: string[]; chain_id?: string | null; stage?: string | null; notice?: string; resources?: string; assumptions?: string; conditions?: string; relation_ids?: string[]; relations?: { kind: string; target_id: string; label: string; relationship: string; basis: string; }[]; evidence?: Partial[]; internal_comparisons?: { relationship: string; rationale: string; limitations: string; statement?: string; source?: string; locator?: string; period?: string; }[]; }; export const proactiveNotice = 'Ausência de registo não comprova ausência de oferta. Proximidade não comprova contrato, participação, energia acessível, terra disponível ou benefício fiscal. Necessidade confirmada não comprova viabilidade comercial; hipótese de fornecimento não é encomenda.'; export const newProactive = (): ProactiveAnalysis => ({ version: 1, kind: 'ideas', evidence: [], need: { state: 'hypothesis', problem: '', observed_supply: '', observed_demand: '', type: '', clients: '', evidence_ids: [], limitations: '', missing: '', confirmation: '', }, idea: { solution: '', activity: '', chain_id: '', stage: '', coverage: '', mode: '', resources: '', assumptions: '', conditions: '', pending: '', next_action: '', }, relations: [], }); export const newPublicProactive = (): ProactivePublic => ({ group: 'ideas', state: 'hypothesis', need: '', proposal: '', basis: '', limitations: '', next_action: '', evidence_ids: [], chain_id: '', stage: '', resources: '', assumptions: '', conditions: '', relation_ids: [], }); export function ProactiveInvestmentEditor({ value, onChange, options, history = [], territoryId, recordId, }: { value?: ProactiveAnalysis; onChange: (value: ProactiveAnalysis) => void; options?: ProactiveOptions; history?: { version: number; at: string; state: string; problem: string; confirmation: string; }[]; territoryId?: string; recordId?: number; }) { if (!value) return (

Análise territorial e preparação de ideias

Comece pelo território e sector existentes, mesmo sem oportunidade publicada, promotor, montante ou coordenadas. O rascunho e a publicação são independentes.

); const patch = (p: Partial) => onChange({ ...value, ...p }); const removeEvidence = (id: string) => { const proof = value.evidence.find((e) => e.id === id); patch({ evidence: value.evidence.filter((e) => e.id !== id), need: { ...value.need, evidence_ids: value.need.evidence_ids.filter((x) => x !== id), }, relations: value.relations.map((r) => ({ ...r, evidence_ids: r.evidence_ids.filter((x) => x !== id), })), ...(proof?.observation_id ? { supply_comparisons: ( value.supply_comparisons ?? [] ).filter( (c) => c.observation_id !== proof.observation_id, ), } : {}), }); }; const text = (label: string, v: string, change: (v: string) => void) => (