import { Head, router, useForm, usePage } from '@inertiajs/react'; import { Panel, PageTitle, FormErrors, controlClass, } from '@/components/procurement'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { money } from '@/types/procurement'; import { ReinforcementProposal, ReinforcementReview, } from '@/components/budget-reinforcements'; import { InventoryPagination } from '@/components/inventory'; import type { Page } from '@/types/inventory'; type Budget = { id: number; cost_center_id: number; year: number; amount_minor: number; reserved_minor: number; committed_minor: number; consumed_minor: number; available_minor: number; created_by: number; approved_by: number | null; reason: string; includes_tax: boolean; reinforced_minor: number; approved_total_minor: number; kind: string; }; export default function Budgets({ centers, budgets, reinforcements, }: { centers: { id: number; code: string; name: string }[]; budgets: Budget[]; reinforcements: Page<{ id: number; budget_id: number; reference: string; amount_minor: number; reason: string; status: string; created_by: number; reviewed_by: number | null; review_reason: string | null; }>; }) { const { auth } = usePage().props; const form = useForm({ cost_center_id: '', year: new Date().getFullYear(), amount: '', reason: '', includes_tax: '', kind: '', }); return ( <>

Desenvolvimento. O orçamento continua sem validação operacional. Centros sem dotação continuam no circuito anterior, sem controlo orçamental. Facturas validadas convertem compromisso em consumo. Pagamentos externos têm registo e conferência próprios; o SGC não executa transferências.

{ e.preventDefault(); form.transform((data) => ({ ...data, includes_tax: data.includes_tax === '1', })); form.post('/orcamentos'); }} >

Cada centro/exercício admite uma dotação. Para separar despesa corrente de investimento no mesmo exercício, use centros distintos.