Загрузка данных


CREATE OR REPLACE FUNCTION integration.get_available_applications_api(
    id text
)
RETURNS text
LANGUAGE plpgsql
AS $function$
DECLARE
    v_id             integer;
    v_apps           jsonb;
    v_unv_data       jsonb;
    v_unv_available  boolean;
BEGIN
    /* Идентификатор клиента из входного JSON */
    v_id := (id::json ->> 'id')::integer;

    /* Существующий набор доступных заявлений */
    v_apps :=
        ourpension.f_get_available_applications(
            v_id,
            true
        )::jsonb;

    /* Доступные договоры и периоды УНВ */
    v_unv_data :=
        integration.get_unv_available_contracts_api(
            jsonb_build_object(
                'id',
                v_id
            )::text
        )::jsonb;

    /* УНВ доступен, если найден хотя бы один договор */
    v_unv_available :=
        COALESCE(
            jsonb_array_length(
                COALESCE(
                    v_unv_data -> 'contracts',
                    '[]'::jsonb
                )
            ) > 0,
            false
        );

    /* Добавляем УНВ к существующему ответу */
    v_apps :=
        v_apps ||
        jsonb_build_object(
            'unv',
                v_unv_available,
            'unv_comment',
                CASE
                    WHEN v_unv_available
                        THEN ''
                    ELSE
                        'нет доступных договоров и налоговых периодов для упрощённого налогового вычета'
                END
        );

    RETURN v_apps::text;
END;
$function$;