import {z} from 'zod' export type ArchiefnominatieEnum = 'blijvend_bewaren' | 'vernietigen'; export type BlankEnum = ''; export type AfleidingswijzeEnum = 'afgehandeld' | 'ander_datumkenmerk' | 'eigenschap' | 'gerelateerde_zaak' | 'hoofdzaak' | 'ingangsdatum_besluit' | 'termijn' | 'vervaldatum_besluit' | 'zaakobject'; export type ObjecttypeEnum = 'adres' | 'besluit' | 'buurt' | 'enkelvoudig_document' | 'gemeente' | 'gemeentelijke_openbare_ruimte' | 'huishouden' | 'inrichtingselement' | 'kadastrale_onroerende_zaak' | 'kunstwerkdeel' | 'maatschappelijke_activiteit' | 'medewerker' | 'natuurlijk_persoon' | 'niet_natuurlijk_persoon' | 'openbare_ruimte' | 'organisatorische_eenheid' | 'pand' | 'spoorbaandeel' | 'status' | 'terreindeel' | 'terrein_gebouwd_object' | 'vestiging' | 'waterdeel' | 'wegdeel' | 'wijk' | 'woonplaats' | 'woz_deelobject' | 'woz_object' | 'woz_waarde' | 'zakelijk_recht' | 'overige'; export type BrondatumArchiefprocedure = {afleidingswijze: AfleidingswijzeEnum, datumkenmerk?: string | undefined, einddatumBekend?: boolean | undefined, objecttype?: (ObjecttypeEnum | BlankEnum) | undefined, registratie?: string | undefined, procestermijn?: (unknown | null) | undefined} | null; export type ResultaatTypeCreate = {url: string, zaaktype: string, zaaktypeIdentificatie: string, omschrijving: string, resultaattypeomschrijving: string, omschrijvingGeneriek: string, selectielijstklasse: string, toelichting?: string | undefined, archiefnominatie?: (ArchiefnominatieEnum | BlankEnum) | undefined, archiefactietermijn?: (unknown | null) | undefined, brondatumArchiefprocedure?: (BrondatumArchiefprocedure | null) | undefined, procesobjectaard?: (string | null) | undefined, catalogus?: (string | null) | undefined, beginGeldigheid?: (string | null) | undefined, eindeGeldigheid?: (string | null) | undefined, beginObject?: (string | null) | undefined, eindeObject?: (string | null) | undefined, indicatieSpecifiek?: (boolean | null) | undefined, procestermijn?: (unknown | null) | undefined, besluittypen?: Array | undefined, besluittypeOmschrijving: Array, informatieobjecttypen?: (Array) | undefined, informatieobjecttypeOmschrijving: Array}; export type CreateApiResultaattypenArgs = {'Content-Type': 'application/json', body: ResultaatTypeCreate}; export type CreateApiResultaattypenOptions = {baseUrl?: string | undefined, JWTClaims?: string | undefined, fetch?: typeof fetch | undefined}; export const archiefnominatieEnum = z.enum(["blijvend_bewaren", "vernietigen"]); export const blankEnum = z.literal(""); export const afleidingswijzeEnum = z.enum(["afgehandeld", "ander_datumkenmerk", "eigenschap", "gerelateerde_zaak", "hoofdzaak", "ingangsdatum_besluit", "termijn", "vervaldatum_besluit", "zaakobject"]); export const objecttypeEnum = z.enum(["adres", "besluit", "buurt", "enkelvoudig_document", "gemeente", "gemeentelijke_openbare_ruimte", "huishouden", "inrichtingselement", "kadastrale_onroerende_zaak", "kunstwerkdeel", "maatschappelijke_activiteit", "medewerker", "natuurlijk_persoon", "niet_natuurlijk_persoon", "openbare_ruimte", "organisatorische_eenheid", "pand", "spoorbaandeel", "status", "terreindeel", "terrein_gebouwd_object", "vestiging", "waterdeel", "wegdeel", "wijk", "woonplaats", "woz_deelobject", "woz_object", "woz_waarde", "zakelijk_recht", "overige"]); export const brondatumArchiefprocedure = z.object({afleidingswijze: afleidingswijzeEnum, datumkenmerk: z.string().max(80).optional(), einddatumBekend: z.boolean().optional(), objecttype: z.union([objecttypeEnum, blankEnum]).optional(), registratie: z.string().max(80).optional(), procestermijn: z.string().nullable().optional()}).nullable(); export const resultaatType = z.object({url: z.string().min(1).max(1000), zaaktype: z.string(), zaaktypeIdentificatie: z.string(), omschrijving: z.string().max(30), resultaattypeomschrijving: z.string().max(1000), omschrijvingGeneriek: z.string(), selectielijstklasse: z.string().max(1000), toelichting: z.string().optional(), archiefnominatie: z.union([archiefnominatieEnum, blankEnum]).optional(), archiefactietermijn: z.string().nullable().optional(), brondatumArchiefprocedure: brondatumArchiefprocedure.nullable().optional(), procesobjectaard: z.string().max(200).nullable().optional(), catalogus: z.string().nullable().optional(), beginGeldigheid: z.string().nullable().optional(), eindeGeldigheid: z.string().nullable().optional(), beginObject: z.string().nullable().optional(), eindeObject: z.string().nullable().optional(), indicatieSpecifiek: z.boolean().nullable().optional(), procestermijn: z.string().nullable().optional(), besluittypen: z.array(z.string().nullable()).optional(), besluittypeOmschrijving: z.array(z.string()), informatieobjecttypen: z.array(z.string().nullable()).optional(), informatieobjecttypeOmschrijving: z.array(z.string())}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Maak een RESULTAATTYPE aan. * * POST /resultaattypen */ export const createApiResultaattypen = async (args: CreateApiResultaattypenArgs, options?: CreateApiResultaattypenOptions) => { const {baseUrl = "https://virtserver.swaggerhub.com/michielverhoef/Catalogussen_API/1.3.0", fetch: fetchFn = fetch, JWTClaims} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (args['Content-Type'] != null) headers.set("Content-Type", String(args['Content-Type'])) if (JWTClaims !== undefined) headers.set('authorization', `Bearer ${JWTClaims}`) const url = `${baseUrl.replace(/\/+$/, '')}/resultaattypen${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "POST", headers, body: JSON.stringify(args.body)}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(resultaatType, await res.json()) };