# Tipe Data

Terdapat 4 tipe data FHIR yang digunakan sebagai standar interoperabilitas data kesehatan pada SATUSEHAT:

{% tabs %}
{% tab title="Primitif" %}
Tipe primitif atau sederhana, adalah tipe data yang paling dasar/primitif untuk definisikan sebuah nilai tertentu.

<table><thead><tr><th width="193">Tipe Data</th><th>Penjelasan</th></tr></thead><tbody><tr><td><code>boolean</code></td><td>Nilai untuk tipe data ini hanya salah satu dari dua nilai ini: <code>true</code> atau <code>false</code>.</td></tr><tr><td><code>integer</code></td><td>Bagian dari bilangan rasional yang merepresentasikan bilangan bulat, dengan rentang nilai dari <code>−2.147.483.648</code> hingga <code>2.147.483.647</code> dalam sistem operasi 32-bit. Untuk nilai yang lebih besar disarankan menggunakan tipe data <code>decimal</code>.</td></tr><tr><td><code>string</code></td><td><p>Data yang berisi sekumpulan karakter <a href="https://en.wikipedia.org/wiki/Unicode">unicode</a>, dengan aturan:</p><ul><li>jumlah karakter tidak boleh lebih dari 1.048.576 karakter</li><li>harus karakter unicode dengan poin ≥ 32 (<code>u0032</code>), kecuali untuk <code>u0009</code> (horizontal tab <code>/t</code>), <code>u0010</code> (carriage return <code>/r</code>), dan <code>u0013</code> (line feed <code>/n</code>)</li><li>tidak boleh ada spasi di awal atau akhir data</li><li>tidak boleh kosong atau tidak ada karakter (jumlah karakter nol).</li></ul></td></tr><tr><td><code>decimal</code></td><td>Bagian dari bilangan rasional yang merepresentasikan bilangan desimal. TIpe ini juga bisa menerima tipe <code>integer</code>, bila nilai tersebut melebihi kapasitas dari tipe terkait.</td></tr><tr><td><code>uri</code></td><td><p>Referensi berbentuk string terkait <em>Uniform Resource Identifier</em> (<a href="https://www.rfc-editor.org/info/rfc3986">RFC 3986</a>), dengan catatan:</p><ul><li>bersifat <em>case sensitive</em></li><li>dapat berupa alamat absolut atau relatif, dan bisa ada penanda <em>fragment</em> (<code>#</code>)</li><li>untuk nilai berupa kode <a href="https://en.wikipedia.org/wiki/Universally_unique_identifier">UUID</a> harus menggunakan huruf kecil semuanya, contoh: <code>urn:uuid:53fefa32-fcbb-4ff8-8a92-55ee120877b7</code>.</li></ul></td></tr><tr><td><code>url</code></td><td><p>Referensi berbentuk <code>string</code> terkait <em>Uniform Resource Locator</em> (<a href="https://www.rfc-editor.org/rfc/rfc1738">RFC 1738</a>), dengan catatan:</p><ul><li>URL diakses langsung menggunakan protokol yang sudah ditentukan. Protokol URL umum biasanya adalah <strong>http{s}:</strong>, <strong>ftp:</strong>, <strong>mailto:</strong> and <strong>mllp:</strong></li></ul></td></tr><tr><td><code>canonical</code></td><td><p>URI yang mereferensi ke <em>resource by its canonical URL</em> (<a href="https://hl7.org/fhir/references.html#canonical">canonical URL</a>).</p><ul><li>memiliki perbedaan dengan URI karena pada canonical URL ini biasanya dipisahkan dengan tanda separator.</li></ul></td></tr><tr><td><code>base64binary</code></td><td>Merupakan <em>stream of bytes</em> yang disandikan menggunakan <em>Base64</em> (<a href="https://www.rfc-editor.org/rfc/rfc4648">RFC 4648</a>)</td></tr><tr><td><code>instant</code></td><td><p>Merupakan tipe data yang menampilkan waktu dengan format <code>YYYY-MM-DDThh:mm:ss.sss+zz:zz</code>, contoh: <code>2015-02-07T13:28:17.239+02:00</code>, dengan catatan:</p><ul><li>tipe ini hanya berlaku untuk sistem, bukan untuk waktu yang digunakan oleh manusia</li><li>Waktu yang ditampilkan harus ditentukan setidaknya sampai detik dan harus menyertakan zona waktu.</li></ul></td></tr><tr><td><code>date</code></td><td><p>Nilai tanggal atau potongan tanggal yang digunakan untuk kebutuhan komunikasi (manusia), dengan format:</p><ul><li><code>YYYY</code> contohnya: <code>2022</code></li><li><code>YYYY-MM</code> contohnya: <code>1993-02</code></li><li><code>YYYY-MM-DD</code> contohnya: <code>2023-02-01</code></li></ul></td></tr><tr><td><code>dateTime</code></td><td><p>Nilai untuk tanggal, sebagian dari tanggal (tahun, bulan dan tahun), atau waktu, yang biasa digunakan dalam komunikasi bukan mesin (tidak ada campur tangan manusia). Formatnya bisa berupa:</p><ul><li><code>YYYY</code> contohnya: <code>2018</code>,</li><li><code>YYYY-MM</code> contohnya: <code>1973-06</code>,</li><li><code>YYYY-MM-DD</code> contohnya: <code>1905-08-23</code>, atau</li><li><code>YYYY-MM-DDThh:mm:ss+zz:zz</code> contohnya: <code>2015-02-07T13:28:17-05:00</code> atau bisa juga <code>2017-01-01T00:00:00.000Z</code>.</li></ul><p>Untuk waktu dengan nilai <code>24:00</code> tidak diperbolehkan.</p></td></tr><tr><td><code>time</code></td><td><p>Nilai untuk waktu, dengan format:</p><ul><li><code>hh:mm:ss</code> contohnya: <code>11:07:20</code></li></ul></td></tr><tr><td><code>code</code></td><td>Mengindikasikan nilai referensi yang berbentuk <code>string</code>, di mana nilai tersebut adalah bagian dari data yang didefinisikan di tempat/sistem lainnya.</td></tr><tr><td><code>oid</code></td><td>Merupakan OID yang direpresentasikan sebagai URI (<a href="https://www.ietf.org/rfc/rfc3001.txt">RFC 3001</a>), contoh: <code>urn:oid:1.2.3.4.5</code></td></tr><tr><td><code>id</code></td><td>Berisi kombinasi huruf besar (<code>A..Z</code>) huruf kecil (<code>a..z</code>) angka (<code>0..9</code>) tanda (<code>.</code>) atau (<code>-</code>) dengan panjang maksimal 64 karakter.</td></tr><tr><td><code>markdown</code></td><td>Berisi nilai <code>string</code> FHIR yang mengandung sintaks <code>markdown</code> untuk proses yang menggunakan <code>markdown</code> <em>presentation engine</em>.</td></tr><tr><td><code>unsignedInt</code></td><td>Berisi bilangan negatif <code>integer</code> dengan <em>range</em> angka (<code>0..2</code>,<code>147</code>,<code>483</code>,<code>647</code>)</td></tr><tr><td><code>positiveInt</code></td><td>Berisi bilangan positif <code>integer</code> dengan <em>range</em> angka (<code>1..2</code>,<code>147</code>,<code>483</code>,<code>647</code>)</td></tr><tr><td><code>uuid</code></td><td>Merupakan UUID (GUID) yang direpresentasikan sebagai URI (<a href="https://www.ietf.org/rfc/rfc4122.txt">RFC 4122</a>).</td></tr></tbody></table>
{% endtab %}

{% tab title="Umum" %}
Tipe data umum, yang termasuk juga tipe data yang bersifat kompleks yang didefinisikan seperti `.` dengan sekumpulan properti yang memiliki tipe data masing-masing, yang dapat digunakan berulang kali dalam mendefinisikan sebuah nilai dalam suatu *element* atau *resource*.

<table><thead><tr><th>Tipe Data</th><th width="304">Penjelasan</th><th>Keterangan</th></tr></thead><tbody><tr><td><code>Address</code></td><td><p>Tipe data untuk menyimpan nilai data berupa alamat dari suatu lokasi tertentu.</p><pre class="language-json" data-title="Struktur JSON"><code class="lang-json">{
  *use: code (1)
  *type: code (2)
  text: string (3)
  line: [ string ] (4)
  city: string (5)
  district: string (6)
  state: string (7)
  postalCode: string (8)
  country: string (9)
  period: period (10)
}
</code></pre></td><td><ol><li>Keperluan, nilai code mengacu dari salah satu nilai di (IdentifierUse).</li><li>Jenis alamat, nilai {ftp-code} mengacu dari salah satu nilai di (AddressType).</li><li>Alamat lengkap.</li><li>Nama jalan, nomor rumah, dll.</li><li>Nama kota/kabupaten.</li><li>Nama kecamatan.</li><li>Nama kelurahan.</li><li>Kode pos.</li><li>Nama atau kode negara, bisa menggunakan kode standar ISO dari ISO 3166-2 atau ISO 3166-3.</li><li>Rentang waktu sejak kapan alamat aktif dipakai.</li></ol></td></tr></tbody></table>
{% endtab %}

{% tab title="Metadata" %}
Tipe metadata berisi sekumpulan tipe yang digunakan pada *resource* yang membutuhkan sebuah informasi tambahan berbentuk metadata.

<table><thead><tr><th>Tipe Data</th><th width="291">Penjelasan</th><th>Keterangan</th></tr></thead><tbody><tr><td><mark style="color:red;"><code>ContactDetail</code></mark></td><td><p>Tipe data ini berisi informasi kontak secara detail.</p><p><strong>Struktur JSON:</strong></p><pre class="language-json"><code class="lang-json">{
  name: string (1)
  telecom: [ ContactPoint ] (2)
}
</code></pre></td><td><ol><li>Nama individu untuk dihubungi.</li><li>Kontak detail dari individu atau organisasi.</li></ol></td></tr><tr><td><mark style="color:red;"><code>Contributor</code></mark></td><td><p></p><p><strong>Struktur JSON:</strong></p><pre class="language-ruby"><code class="lang-ruby">{
  *type: code (1)
  *name: string (2)
  contact: [ ContactDetail ] (3)
}
</code></pre></td><td><ol><li>Code dari tipe kontributor yang menjadi acuan (author, editor, reviewer, endorser).</li><li>Siapa yang menyumbangkan konten.</li><li>Kontak detail dari kontributor.</li></ol></td></tr></tbody></table>
{% endtab %}

{% tab title="Khusus" %}
Tipe khusus biasanya didefinisikan dan digunakan untuk penggunaan yang khusus/spesifik.

<table><thead><tr><th>Tipe Data</th><th width="324">Penjelasan</th><th>Keterangan</th></tr></thead><tbody><tr><td><code>CodeableReference</code></td><td><p>Tipe data ini merepresentasikan nilai yang merujuk pada beberapa referensi <em>resource</em> atau konsep elemen lainnya.</p><p><strong>Struktur JSON:</strong></p><pre class="language-json"><code class="lang-json">{
  concept: CodeableConcept (1)
  reference: Reference (2)
}
</code></pre></td><td><ol><li>Mereferensi ke konsep <em>(by class)</em></li><li>Mereferensi ke <em>resource</em> lainnya <em>(by instance)</em></li></ol></td></tr></tbody></table>
{% endtab %}
{% endtabs %}
