list_pca_itens
List items in a Brazilian annual procurement plan (PCA) with quantities, values, delivery dates, and CATSER/CATMAT classification. Filter by keyword on description.
Instructions
List the planned items of a specific PCA: descriptions, estimated quantities, unit values, expected delivery dates, and CATSER/CATMAT classification. Optionally filter client-side by keyword on description.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| orgaoCnpj | Yes | ||
| anoPca | Yes | ||
| sequencialPca | Yes | ||
| palavraChave | No | Filter on descricaoItem |
Implementation Reference
- src/adapters/pncp.ts:618-642 (handler)The adapter function listPcaItens that makes the HTTP GET request to /orgaos/{cnpj}/pca/{ano}/{sequencial}/itens, caches the result with a 30-min TTL, and parses using PcaItemSchema.
export async function listPcaItens( orgaoCnpj: string, anoPca: number, sequencialPca: number, ): Promise<PcaItem[]> { const cacheKey = `list:pca-itens:${orgaoCnpj}:${anoPca}:${sequencialPca}`; const cached = cache.get<PcaItem[]>(cacheKey); if (cached) return cached; try { const { data } = await withRetry(() => pncpClient.get(`/orgaos/${orgaoCnpj}/pca/${anoPca}/${sequencialPca}/itens`), ); const arr = asArray(data); const parsed = PcaItemSchema.array().parse(arr); cache.set(cacheKey, parsed, TTL_30_MIN); return parsed; } catch (err) { if (err instanceof AxiosError) { if (err.response?.status === 404) return []; throw new PncpError(describeAxiosError(err), err); } throw err; } } - src/schemas/pncp.ts:328-351 (schema)PcaItemSchema: Zod schema defining each PCA item's fields (description, quantities, unit values, classification, dates, etc.) with passthrough for extra fields.
export const PcaItemSchema = z .object({ orgaoCnpj: z.string().nullable().optional(), anoPca: z.number().nullable().optional(), codigoUnidade: z.string().nullable().optional(), nomeUnidade: z.string().nullable().optional(), numeroItem: z.number().nullable().optional(), codigoItem: z.string().nullable().optional(), descricaoItem: z.string().nullable().optional(), quantidadeEstimada: z.number().nullable().optional(), valorUnitario: z.number().nullable().optional(), valorTotal: z.number().nullable().optional(), valorOrcamentoExercicio: z.number().nullable().optional(), classificacaoCatalogoId: z.number().nullable().optional(), classificacaoSuperiorCodigo: z.string().nullable().optional(), classificacaoSuperiorNome: z.string().nullable().optional(), grupoContratacaoCodigo: z.string().nullable().optional(), grupoContratacaoNome: z.string().nullable().optional(), categoriaItemPcaNome: z.string().nullable().optional(), unidadeRequisitante: z.string().nullable().optional(), unidadeFornecimento: z.string().nullable().optional(), dataDesejada: z.string().nullable().optional(), }) .passthrough();