basePath: /api/v1 definitions: api-service_internal_models.AggregateData: properties: by_dinas: additionalProperties: type: integer type: object by_jenis: additionalProperties: type: integer type: object by_status: additionalProperties: type: integer type: object created_today: type: integer last_updated: type: string total_active: type: integer total_draft: type: integer total_inactive: type: integer updated_today: type: integer type: object api-service_internal_models.ErrorResponse: properties: code: type: integer error: type: string message: type: string timestamp: type: string type: object api-service_internal_models.MetaResponse: properties: current_page: type: integer has_next: type: boolean has_prev: type: boolean limit: type: integer offset: type: integer total: type: integer total_pages: type: integer type: object api-service_internal_models.NullableInt32: properties: int32: type: integer valid: type: boolean type: object api-service_internal_models_auth.LoginRequest: properties: password: type: string username: type: string required: - password - username type: object api-service_internal_models_auth.TokenResponse: properties: access_token: type: string expires_in: type: integer token_type: type: string type: object api-service_internal_models_auth.User: properties: email: type: string id: type: string role: type: string username: type: string type: object api-service_internal_models_retribusi.Retribusi: properties: date_created: $ref: '#/definitions/sql.NullTime' date_updated: $ref: '#/definitions/sql.NullTime' dinas: $ref: '#/definitions/sql.NullString' id: type: string jenis: $ref: '#/definitions/sql.NullString' kelompok_obyek: $ref: '#/definitions/sql.NullString' kode_tarif: $ref: '#/definitions/sql.NullString' pelayanan: $ref: '#/definitions/sql.NullString' rekening_denda: $ref: '#/definitions/sql.NullString' rekening_pokok: $ref: '#/definitions/sql.NullString' satuan: $ref: '#/definitions/sql.NullString' satuan_overtime: $ref: '#/definitions/sql.NullString' sort: $ref: '#/definitions/api-service_internal_models.NullableInt32' status: type: string tarif: $ref: '#/definitions/sql.NullString' tarif_overtime: $ref: '#/definitions/sql.NullString' uraian_1: $ref: '#/definitions/sql.NullString' uraian_2: $ref: '#/definitions/sql.NullString' uraian_3: $ref: '#/definitions/sql.NullString' user_created: $ref: '#/definitions/sql.NullString' user_updated: $ref: '#/definitions/sql.NullString' type: object api-service_internal_models_retribusi.RetribusiCreateRequest: properties: dinas: maxLength: 255 minLength: 1 type: string jenis: maxLength: 255 minLength: 1 type: string kelompok_obyek: maxLength: 255 minLength: 1 type: string kode_tarif: maxLength: 255 minLength: 1 type: string pelayanan: maxLength: 255 minLength: 1 type: string rekening_denda: maxLength: 255 minLength: 1 type: string rekening_pokok: maxLength: 255 minLength: 1 type: string satuan: maxLength: 255 minLength: 1 type: string satuan_overtime: maxLength: 255 minLength: 1 type: string status: enum: - draft - active - inactive type: string tarif: type: string tarif_overtime: type: string uraian_1: type: string uraian_2: type: string uraian_3: type: string required: - status type: object api-service_internal_models_retribusi.RetribusiCreateResponse: properties: data: $ref: '#/definitions/api-service_internal_models_retribusi.Retribusi' message: type: string type: object api-service_internal_models_retribusi.RetribusiDeleteResponse: properties: id: type: string message: type: string type: object api-service_internal_models_retribusi.RetribusiGetByIDResponse: properties: data: $ref: '#/definitions/api-service_internal_models_retribusi.Retribusi' message: type: string type: object api-service_internal_models_retribusi.RetribusiGetResponse: properties: data: items: $ref: '#/definitions/api-service_internal_models_retribusi.Retribusi' type: array message: type: string meta: $ref: '#/definitions/api-service_internal_models.MetaResponse' summary: $ref: '#/definitions/api-service_internal_models.AggregateData' type: object api-service_internal_models_retribusi.RetribusiUpdateRequest: properties: dinas: maxLength: 255 minLength: 1 type: string jenis: maxLength: 255 minLength: 1 type: string kelompok_obyek: maxLength: 255 minLength: 1 type: string kode_tarif: maxLength: 255 minLength: 1 type: string pelayanan: maxLength: 255 minLength: 1 type: string rekening_denda: maxLength: 255 minLength: 1 type: string rekening_pokok: maxLength: 255 minLength: 1 type: string satuan: maxLength: 255 minLength: 1 type: string satuan_overtime: maxLength: 255 minLength: 1 type: string status: enum: - draft - active - inactive type: string tarif: type: string tarif_overtime: type: string uraian_1: type: string uraian_2: type: string uraian_3: type: string required: - status type: object api-service_internal_models_retribusi.RetribusiUpdateResponse: properties: data: $ref: '#/definitions/api-service_internal_models_retribusi.Retribusi' message: type: string type: object gin.H: additionalProperties: {} type: object models.DiagnosaResponse: properties: data: additionalProperties: true type: object message: type: string type: object models.Flag: properties: cob: type: string required: - cob type: object models.Jaminan: properties: lakaLantas: type: string noLP: type: string penjamin: $ref: '#/definitions/models.Penjamin' required: - lakaLantas type: object models.KlsRawatPost: properties: klsRawatHak: type: string klsRawatNaik: type: string pembiayaan: type: string penanggungJawab: type: string required: - klsRawatHak type: object models.KlsRawatPut: properties: klsRawatHak: type: string klsRawatNaik: type: string pembiayaan: type: string penanggungJawab: type: string type: object models.LokasiLaka: properties: kdKabupaten: type: string kdKecamatan: type: string kdPropinsi: type: string type: object models.Penjamin: properties: keterangan: type: string suplesi: $ref: '#/definitions/models.Suplesi' tglKejadian: type: string type: object models.Poli: properties: eksekutif: type: string tujuan: type: string required: - eksekutif type: object models.Rujukan: properties: asalRujukan: type: string noRujukan: type: string ppkRujukan: type: string tglRujukan: type: string required: - asalRujukan - noRujukan - ppkRujukan - tglRujukan type: object models.SepPostRequest: properties: t_sep: $ref: '#/definitions/models.TSepPost' required: - t_sep type: object models.SepPutRequest: properties: t_sep: $ref: '#/definitions/models.TSepPut' required: - t_sep type: object models.SepResponse: properties: data: additionalProperties: true type: object message: type: string type: object models.Skdp: properties: kodeDPJP: type: string noSurat: type: string required: - kodeDPJP - noSurat type: object models.Suplesi: properties: lokasiLaka: $ref: '#/definitions/models.LokasiLaka' noSepSuplesi: type: string suplesi: type: string type: object models.TSepPost: properties: assesmentPel: type: string catatan: type: string cob: $ref: '#/definitions/models.Flag' diagAwal: type: string dpjpLayan: type: string flagProcedure: type: string jaminan: $ref: '#/definitions/models.Jaminan' jnsPelayanan: type: string katarak: $ref: '#/definitions/models.Flag' kdPenunjang: type: string klsRawat: $ref: '#/definitions/models.KlsRawatPost' noKartu: type: string noMR: type: string noTelp: type: string poli: $ref: '#/definitions/models.Poli' ppkPelayanan: type: string rujukan: $ref: '#/definitions/models.Rujukan' skdp: $ref: '#/definitions/models.Skdp' tglSep: description: yyyy-MM-dd type: string tujuanKunj: type: string user: type: string required: - cob - diagAwal - jaminan - jnsPelayanan - katarak - klsRawat - noKartu - noMR - poli - ppkPelayanan - rujukan - skdp - tglSep - user type: object models.TSepPut: properties: catatan: type: string cob: $ref: '#/definitions/models.Flag' diagAwal: type: string dpjpLayan: type: string jaminan: $ref: '#/definitions/models.Jaminan' katarak: $ref: '#/definitions/models.Flag' klsRawat: $ref: '#/definitions/models.KlsRawatPut' noMR: type: string noSep: type: string noTelp: type: string poli: $ref: '#/definitions/models.Poli' user: type: string required: - noSep - user type: object sql.NullString: properties: string: type: string valid: description: Valid is true if String is not NULL type: boolean type: object sql.NullTime: properties: time: type: string valid: description: Valid is true if Time is not NULL type: boolean type: object host: localhost:8080 info: contact: email: support@swagger.io name: API Support url: http://www.swagger.io/support description: A comprehensive Go API service with Swagger documentation license: name: Apache 2.0 url: http://www.apache.org/licenses/LICENSE-2.0.html termsOfService: http://swagger.io/terms/ title: API Service version: 1.0.0 paths: /api/v1/auth/login: post: consumes: - application/json description: Authenticate user with username and password to receive JWT token parameters: - description: Login credentials in: body name: login required: true schema: $ref: '#/definitions/api-service_internal_models_auth.LoginRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/api-service_internal_models_auth.TokenResponse' "400": description: Bad request schema: additionalProperties: type: string type: object "401": description: Unauthorized schema: additionalProperties: type: string type: object summary: Login user and get JWT token tags: - Authentication /api/v1/auth/me: get: description: Get information about the currently authenticated user produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/api-service_internal_models_auth.User' "401": description: Unauthorized schema: additionalProperties: type: string type: object security: - Bearer: [] summary: Get current user info tags: - Authentication /api/v1/auth/refresh: post: consumes: - application/json description: Refresh the JWT token using a valid refresh token parameters: - description: Refresh token in: body name: refresh required: true schema: additionalProperties: type: string type: object produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/api-service_internal_models_auth.TokenResponse' "400": description: Bad request schema: additionalProperties: type: string type: object "401": description: Unauthorized schema: additionalProperties: type: string type: object summary: Refresh JWT token tags: - Authentication /api/v1/auth/register: post: consumes: - application/json description: Register a new user account parameters: - description: Registration data in: body name: register required: true schema: additionalProperties: type: string type: object produces: - application/json responses: "201": description: Created schema: additionalProperties: type: string type: object "400": description: Bad request schema: additionalProperties: type: string type: object summary: Register new user tags: - Authentication /api/v1/bpjs/Peserta/nik/{nik}/tglSEP/{tglSEP}: get: consumes: - application/json description: Search participant data based on Population NIK and service date parameters: - description: NIK KTP in: path name: nik required: true type: string - description: 'Service date/SEP date (format: yyyy-MM-dd)' in: path name: tglSEP required: true type: string produces: - application/json responses: "200": description: Participant data schema: additionalProperties: true type: object "400": description: Bad request schema: additionalProperties: true type: object "404": description: Participant not found schema: additionalProperties: true type: object "500": description: Internal server error schema: additionalProperties: true type: object summary: Get participant data by NIK tags: - bpjs /api/v1/bpjs/reference/referensi/diagnosa: get: consumes: - application/json description: Get all diagnosa reference data produces: - application/json responses: "200": description: Success response schema: $ref: '#/definitions/models.DiagnosaResponse' "400": description: Bad request schema: additionalProperties: true type: object "404": description: Data not found schema: additionalProperties: true type: object "500": description: Internal server error schema: additionalProperties: true type: object summary: Get all diagnosa reference data tags: - bpjs/reference /api/v1/retribusi/{id}: delete: consumes: - application/json description: Soft deletes a retribusi by setting status to 'deleted' parameters: - description: Retribusi ID (UUID) in: path name: id required: true type: string produces: - application/json responses: "200": description: Retribusi deleted successfully schema: $ref: '#/definitions/api-service_internal_models_retribusi.RetribusiDeleteResponse' "400": description: Invalid ID format schema: $ref: '#/definitions/api-service_internal_models.ErrorResponse' "404": description: Retribusi not found schema: $ref: '#/definitions/api-service_internal_models.ErrorResponse' "500": description: Internal server error schema: $ref: '#/definitions/api-service_internal_models.ErrorResponse' summary: Delete retribusi tags: - retribusi get: consumes: - application/json description: Returns a single retribusi by ID parameters: - description: Retribusi ID (UUID) in: path name: id required: true type: string produces: - application/json responses: "200": description: Success response schema: $ref: '#/definitions/api-service_internal_models_retribusi.RetribusiGetByIDResponse' "400": description: Invalid ID format schema: $ref: '#/definitions/api-service_internal_models.ErrorResponse' "404": description: Retribusi not found schema: $ref: '#/definitions/api-service_internal_models.ErrorResponse' "500": description: Internal server error schema: $ref: '#/definitions/api-service_internal_models.ErrorResponse' summary: Get Retribusi by ID tags: - retribusi put: consumes: - application/json description: Updates an existing retribusi record parameters: - description: Retribusi ID (UUID) in: path name: id required: true type: string - description: Retribusi update request in: body name: request required: true schema: $ref: '#/definitions/api-service_internal_models_retribusi.RetribusiUpdateRequest' produces: - application/json responses: "200": description: Retribusi updated successfully schema: $ref: '#/definitions/api-service_internal_models_retribusi.RetribusiUpdateResponse' "400": description: Bad request or validation error schema: $ref: '#/definitions/api-service_internal_models.ErrorResponse' "404": description: Retribusi not found schema: $ref: '#/definitions/api-service_internal_models.ErrorResponse' "500": description: Internal server error schema: $ref: '#/definitions/api-service_internal_models.ErrorResponse' summary: Update retribusi tags: - retribusi /api/v1/retribusis: get: consumes: - application/json description: Returns a paginated list of retribusis with optional summary statistics parameters: - default: 10 description: Limit (max 100) in: query name: limit type: integer - default: 0 description: Offset in: query name: offset type: integer - default: false description: Include aggregation summary in: query name: include_summary type: boolean - description: Filter by status in: query name: status type: string - description: Filter by jenis in: query name: jenis type: string - description: Filter by dinas in: query name: dinas type: string - description: Search in multiple fields in: query name: search type: string produces: - application/json responses: "200": description: Success response schema: $ref: '#/definitions/api-service_internal_models_retribusi.RetribusiGetResponse' "400": description: Bad request schema: $ref: '#/definitions/api-service_internal_models.ErrorResponse' "500": description: Internal server error schema: $ref: '#/definitions/api-service_internal_models.ErrorResponse' summary: Get retribusi with pagination and optional aggregation tags: - retribusi post: consumes: - application/json description: Creates a new retribusi record parameters: - description: Retribusi creation request in: body name: request required: true schema: $ref: '#/definitions/api-service_internal_models_retribusi.RetribusiCreateRequest' produces: - application/json responses: "201": description: Retribusi created successfully schema: $ref: '#/definitions/api-service_internal_models_retribusi.RetribusiCreateResponse' "400": description: Bad request or validation error schema: $ref: '#/definitions/api-service_internal_models.ErrorResponse' "500": description: Internal server error schema: $ref: '#/definitions/api-service_internal_models.ErrorResponse' summary: Create retribusi tags: - retribusi /api/v1/retribusis/dynamic: get: consumes: - application/json description: Returns retribusis with advanced dynamic filtering like Directus parameters: - description: Fields to select (e.g., fields=*.*) in: query name: fields type: string - description: Dynamic filters (e.g., filter[Jenis][_eq]=value) in: query name: filter[column][operator] type: string - description: Sort fields (e.g., sort=date_created,-Jenis) in: query name: sort type: string - default: 10 description: Limit in: query name: limit type: integer - default: 0 description: Offset in: query name: offset type: integer produces: - application/json responses: "200": description: Success response schema: $ref: '#/definitions/api-service_internal_models_retribusi.RetribusiGetResponse' "400": description: Bad request schema: $ref: '#/definitions/api-service_internal_models.ErrorResponse' "500": description: Internal server error schema: $ref: '#/definitions/api-service_internal_models.ErrorResponse' summary: Get retribusi with dynamic filtering tags: - retribusi /api/v1/retribusis/stats: get: consumes: - application/json description: Returns comprehensive statistics about retribusi data parameters: - description: Filter statistics by status in: query name: status type: string produces: - application/json responses: "200": description: Statistics data schema: $ref: '#/definitions/api-service_internal_models.AggregateData' "500": description: Internal server error schema: $ref: '#/definitions/api-service_internal_models.ErrorResponse' summary: Get retribusi statistics tags: - retribusi /api/v1/token/generate: post: consumes: - application/json description: Generate a JWT token for a user parameters: - description: User credentials in: body name: token required: true schema: $ref: '#/definitions/api-service_internal_models_auth.LoginRequest' produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/api-service_internal_models_auth.TokenResponse' "400": description: Bad request schema: additionalProperties: type: string type: object "401": description: Unauthorized schema: additionalProperties: type: string type: object summary: Generate JWT token tags: - Token /api/v1/token/generate-direct: post: consumes: - application/json description: Generate a JWT token directly without password verification (for testing) parameters: - description: User info in: body name: user required: true schema: additionalProperties: type: string type: object produces: - application/json responses: "200": description: OK schema: $ref: '#/definitions/api-service_internal_models_auth.TokenResponse' "400": description: Bad request schema: additionalProperties: type: string type: object summary: Generate token directly tags: - Token /sep: post: consumes: - application/json description: Create a new Surat Eligibilitas Peserta parameters: - description: SEP creation request in: body name: request required: true schema: $ref: '#/definitions/models.SepPostRequest' produces: - application/json responses: "200": description: SEP created successfully schema: $ref: '#/definitions/models.SepResponse' "400": description: Invalid request schema: $ref: '#/definitions/gin.H' "500": description: Internal server error schema: $ref: '#/definitions/gin.H' summary: Create a new SEP tags: - bpjs put: consumes: - application/json description: Update an existing Surat Eligibilitas Peserta parameters: - description: SEP update request in: body name: request required: true schema: $ref: '#/definitions/models.SepPutRequest' produces: - application/json responses: "200": description: SEP updated successfully schema: $ref: '#/definitions/models.SepResponse' "400": description: Invalid request schema: $ref: '#/definitions/gin.H' "500": description: Internal server error schema: $ref: '#/definitions/gin.H' summary: Update an existing SEP tags: - bpjs /sep/{noSep}: delete: consumes: - application/json description: Delete a Surat Eligibilitas Peserta by noSep parameters: - description: No SEP in: path name: noSep required: true type: string - description: User in: query name: user required: true type: string produces: - application/json responses: "200": description: SEP deleted successfully schema: $ref: '#/definitions/models.SepResponse' "400": description: Invalid request schema: $ref: '#/definitions/gin.H' "500": description: Internal server error schema: $ref: '#/definitions/gin.H' summary: Delete an existing SEP tags: - bpjs get: consumes: - application/json description: Retrieve a Surat Eligibilitas Peserta by noSep parameters: - description: No SEP in: path name: noSep required: true type: string produces: - application/json responses: "200": description: Data SEP retrieved successfully schema: $ref: '#/definitions/models.SepResponse' "400": description: Invalid request schema: $ref: '#/definitions/gin.H' "500": description: Internal server error schema: $ref: '#/definitions/gin.H' summary: Get an existing SEP tags: - bpjs schemes: - http - https swagger: "2.0"